感觉学习反汇编应该一点一点,脚踏实地去学。于是我就采用积木式学习方法。内容一点一点往里面加,从而更易于比较。
C++代码:
#include<iostream>
using namespace std;
int main()
{
return 0;
}
反汇编结果:
; +-------------------------------------------------------------------------+
; | This file is generated by The Interactive Disassembler (IDA) //这是版本信息,以后省略。
; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> |
; | Licensed to: Mach EDV Dienstleistungen, Jan Mach, 1 user, adv, 11/2007 |
; +-------------------------------------------------------------------------+
;
; Input MD5 : 17178FC90D2A31A0E7D285EDE9FFD2D6 //MD5值就是软件的指纹,用户可以通过软件提供的原始MD5值和已经获得的软件的MD5 值进行对比,如果相符的话就说明你下载的软件是“原厂”的,如果比较结果不相同的话则说明你下载的软件有可能被其他人动过手脚(例如添加了恶意程序、修改了源代码等),使用时要小心或是重新下载。这部分以后省略。
; File Name : G:/software/empty/empty.exe//文件的路径,以后省略。
; Format : Portable executable for 80386 (PE)//文件的格式,以后省略。
; Imagebase : 400000 //物理内存中的位置
; Section 1. (virtual address 00001000)
; Virtual size : 000060D4 ( 24788.)//内存中的文件大小
; Section size in file : 00007000 ( 28672.)//硬盘上的文件大小
; Offset to raw data for section: 00001000//块数据的偏移量
; Flags 60000020: Text Executable Readable
; Alignment : default
; OS type : MS Windows//运行的操作系统,以后省略。
; Application type: Executable 32bit//应用的类型,以后省略。
include uni.inc ; see unicode subdir of ida for info on unicode //哪位大侠能把这段解释一下啊?
.686p
.mmx
.model flat
; Segment type: Pure code
; Segment permissions: Read/Execute
_text segment para public 'CODE' use32
assume cs:_text
;org 401000h
assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
; Attributes: bp-based frame
//argc:整数,为传给main()的命令行参数个数。
; int __cdecl main(int argc, const char **argv, const char *envp)//argv: 字符串数组。
_main proc near//在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
//对DOS 3.0 以下的版本,argv[0]为空串("") 。
//argv[1]为在DOS 命令行中执行程序名后的第一个字符串;
//argv[2]为执行程序名后的第二个字符串;
//argv[argc]为NULL
//*env: 字符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value为ENVVAR的对应值如C:/DOS,C:/TURBOC(对于PATH) 或YES(对于87)。
argc= dword ptr 8
argv= dword ptr 0Ch
envp= dword ptr 10h
push ebp//这两行为标准的开始标志。因为程序是运行在系统中的,在它运行后会有其他的程序运行。而ESP是维护整个系统的堆栈的,因此这个程序运行前先要保护ESP。
mov ebp, esp
xor eax, eax//这两行为标准的结束标志。注意这儿的xor eaxeax。这个的作用是让eax=0。因为eax一般为程序的返回值。而在C++中主程序返回0让Debug程序认为这个程序没有发生问题,而如果返回非0值就会认为程序发生了问题。即这句针对return 0。如果我改为return 1。则这句变为mov eax,1。
pop ebp
retn//ret xx的结果是在ESP上+xx。在这个程序执行之前执行这段代码的程序将这个程序结束之后应该执行的语句的地址push入了堆栈,而retn就是只读出堆栈顶的内容。程序将从这个地址继续执行。
_main endp
反思: 程序主体是清晰的,但是有#include<iostream> using namespace std;是否对代码主体有影响?
下步: 删去可能有影响的部分
分享到:
相关推荐
1. 汇编语言简介:汇编语言是用助记符表示机器指令的编程语言,每个指令对应一个特定的机器码。相比于高级语言,汇编更贴近硬件,执行效率高,但编写复杂度较高。 2. 基本语法:汇编语言的语句通常由操作码(Opcode...
【标题】:“菜鸟的汇编汇编汇编汇编”是一个专门为初学者设计的汇编语言学习资源,旨在帮助新手快速理解和掌握汇编语言的基本概念和应用。通过这个课件,即使是没有任何编程背景的菜鸟也能逐步踏入汇编的世界。 ...
菜鸟学英语(值得学习的好资料)菜鸟学英语(值得学习的好资料)
汇编语言经典,由浅入深,通俗易懂,菜鸟也可以学得很轻松
《菜鸟也疯狂 For 汇编》.torrent
【VFP初学者教程——《菜鸟学习VFP》】 Visual FoxPro(VFP)是由Microsoft公司开发的一款数据库管理系统,简称DBMS。在本教程中,主要针对计算机二级VFP考试的初学者,尤其是那些希望通过学习VFP来充实假期生活的...
计算机菜鸟学飞文章是专门为研究系统、电脑故障、计算机技巧等的菜鸟搜集的文章。
( 菜鸟学习Foxtable开发.pptx )
菜鸟学习Foxtable开发1.pptx
菜鸟要学的数据库基础知识 菜鸟要学的数据库基础知识 ppt
3-1 反汇编引擎XDE32 之熟悉指令31 3-2 反汇编引擎XDE32 之具体实现34 3-3 XP 下HOOK 系统调用IoCallDriver37 3-4 Vista 下IofCallDriver 的跟踪39 3-5 Vista 下实现Hook IofCallDriver41 3-6 总结...
《菜鸟学架服务器》从低到高全部图解.rar
菜鸟学标日修订 是最好的菜鸟学习日本语的教程,值得下载
1. "菜鸟学架各类服务器-E书.exe":这可能是一个电子书(E书)的执行文件,包含了详细的教学内容,涵盖了从选择服务器硬件、操作系统的选择与安装,到各种服务的配置和优化。用户运行这个.exe文件,就可以在计算机...
菜鸟学习JAVA简单入门到精通,可以帮助刚入门的程序猿快速学习进入公司需要的技能
Oracle 11g 菜鸟学习安装手册
菜鸟学习计算机,exe电子书, 计算机学学习
这篇“Android菜鸟日记25-android反编译”将带你走进Android反编译的世界,揭示APK背后的秘密。 首先,让我们了解什么是Android反编译。Android应用主要由Java语言编写,经过编译后生成Dalvik字节码(.dex文件),...
很老的一本《,菜鸟破解从头学。》破解书。怕以后找不到,先放到这里。