C语言反汇编入门实例

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

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


原创文章,转载请注明:
本文出自程序人生 >> C语言反汇编入门实例
作者:代码疯子您可能对下面的文章也感兴趣:

  1. [转]汇编基础知识 (10.9)
  2. strlen反汇编代码 (5.8)
  3. 用OllyDbg对Win32汇编进行源码级调试 (5.8)
转自:http://blog.youkuaiyun.com/msbsod/article/details/6875233
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值