首页 > 逆向调试 > C语言反汇编入门实例

C语言反汇编入门实例

看《天书夜读》第一章,感觉很亲切,于是自己动手操起VS,建立一个默认的Win32 Console Application,在一个空空的main函数里面F9下一个断点之后,按下F5进入调试,然后Alt+8进入反汇编查看窗口,代码如下,自己给他加了点注释,还是很浅显的东西。这里的是Debug模式的反汇编代码:(博客对ASM代码注释的显示颜色不好看,大家将就一下)陌生的指令可能是stos,大家可以自己去Google查一下加深了解;通过仔细阅读这个例子,相信读者们当初学习汇编的场景已经跃然眼前了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
--- d:\my documents\visual studio 2008\projects\first\first\first.cpp ----------
// First.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
;将ebp入栈,保存ebp
00411370  push        ebp  
;将esp传送给ebp
00411371  mov         ebp,esp 
;esp减去0C0h,开辟栈空间存放局部变量
;注意汇编语言中数字常量如果是字母开头必须加上0
00411373  sub         esp,0C0h 
;保存常用的寄存器ebx,esi,edi
00411379  push        ebx  
0041137A  push        esi  
0041137B  push        edi  
;将edi赋值为ebp-0C0h(lea取得偏移地址)
0041137C  lea         edi,[ebp-0C0h] 
;30h放入ecx,为rep执行次数
;注意到30h * 4 = 0C0h
00411382  mov         ecx,30h
;0CCCCCCCCh为系统中断int 3h
00411387  mov         eax,0CCCCCCCCh 
;用int 3h填充开辟的栈空间
0041138C  rep stos    dword ptr es:[edi] 
 
	return 1;
;返回1,是通过eax寄存器返回的
0041138E  mov         eax,1 
}
;恢复寄存器ebx,esi,edi
00411393  pop         edi  
00411394  pop         esi  
00411395  pop         ebx 
;用ebp恢复函数调用前的栈指针esp 
00411396  mov         esp,ebp 
;恢复ebp
00411398  pop         ebp 
;返回 
00411399  ret

觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> C语言反汇编入门实例
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 2011年1月7日00:56 | #1

    天书夜读呀,不错不错

    [回复]

  2. 2011年1月7日12:32 | #2

    @the5fire
    呵呵,全称《天书夜读*从汇编语言到Windows内核编程》,感觉挺不错的。

    [回复]

  3. 2011年1月16日14:04 | #3

    老大,你到底是什么人?居然研究Windows内核!老实交待,你研究生几年级了?

    [回复]

  4. 2011年2月1日13:45 | #4

    @C瓜哥
    我大学滴 看看书 想搞信息安全而已

    [回复]

  5. 2011年2月1日13:45 | #5

    @C瓜哥
    这个和驱动编程差不多咯 有点驱动的基础和汇编就可以入手

    [回复]