看《天书夜读》第一章,感觉很亲切,于是自己动手操起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

http://www.programlife.net/c-reverse-to-asm-demo.html

最新文章

  1. CSS多列布局
  2. 数据可视化(8)--D3数据的更新及动画
  3. 【转】MyEclipse快捷键大全
  4. 关键字static和this
  5. VSync Count 垂直同步
  6. Android实现自定义字体
  7. DelphiXE7操作sqlite数据库
  8. Change the ball--hdu2277
  9. 导入sass文件
  10. C# 曲线上的点(二) 获取距离最近的点
  11. python之路(7)装饰器
  12. jasperreports+IReport 5.56,集成到Spring MVC4.0案例
  13. python Rpyc简单使用
  14. chromedriver 全屏 翻页 错误
  15. [Z]Spring Data JPA 之 一对一,一对多,多对多 关系映射
  16. xheditor-文件上传-java-支持html5-application/octet-stream
  17. Java的工厂模式(三)
  18. 创建和修改 ExpressRoute 线路
  19. 手动制作CA证书
  20. 【excle基础】如何去掉excel某一列中的字段的空格

热门文章

  1. 【39.29%】【codeforces 552E】Vanya and Brackets
  2. php定时任务(自己)
  3. kali 系统的源
  4. [React Router v4] Use URL Parameters
  5. BZOJ1010玩具装箱 - 斜率优化dp
  6. 【t014】拯数
  7. Web静态服务器
  8. Swift API设计原则
  9. iOS RunLoop了解和使用
  10. GridLayout网格布局