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