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

C语言反汇编入门实例的更多相关文章

  1. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  2. Omnet++ 4.0 入门实例教程

    http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...

  3. [SQL]SQL语言入门级教材_SQL语言快速入门(五)

    SQL语言快速入门(一) SQL是英文Structured Query Language的缩写,意思为结构化查询语言. SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标 ...

  4. WebService入门实例教程

    什么是WebService 通过使用WebService,您的应用程序可以向全世界发布信息,或提供某项功能,它是基于Web的服务,通过Web进行发布.查找和使用. WebService脚本平台需支持X ...

  5. 【React】入门实例

    React 可以灵活的应用在各种各样的项目中.你可以用它来创建新的应用程序,你也可以逐步引用而不改变现有的代码库. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaS ...

  6. React 入门实例

    React 入门实例教程 一.安装 React 的安装包,可以到官网下载. $ git clone git@github.com:ruanyf/react-demos.git 如果你没安装 git, ...

  7. log4j 2 入门实例(1)

    本文介绍log4j的基本概念和将日志输出到控制台的例子. 参考文章: http://www.jianshu.com/p/464058bdbc76 http://www.hankcs.com/progr ...

  8. Swift语言高速入门

    Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  9. TypeScript入门实例

    前言 TypeScript是JavaScript的超集,微软公司开发,利用es6语法,实现对js的面向对象编程思想,写代码的时候会像强类型语言一样,指定参数类型.返回值类型,类型不对会报错,但编译后还 ...

随机推荐

  1. gitlab+jenkins+pm2+rsync实现node的自动化部署

    环境配置 jenkins java环境 yum install -y java 安装jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.j ...

  2. poj1066--Treasure Hunt(规范相交)

    题目链接:点击打开链接 题目大意:一个正方形的墓葬内有n堵墙,每堵墙的两个顶点都在正方形的边界上,如今这些墙将墓葬切割成了非常多小空间,已知正方形内的一个点上存在宝藏,如今我们要在正方形的外面去得到宝 ...

  3. Java序列化机制中的类版本号问题

    原文地址:http://yanwushu.sinaapp.com/java_serialversionuid/ 内容简单介绍 某些实现了serializable接口的java类中会看到名称为seria ...

  4. 【codeforces 752F】Santa Clauses and a Soccer Championship

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. Redis学习笔记4-Redis配置具体解释

    在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server   xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redi ...

  6. js进阶 10-2 JQuery基础语法是什么

    js进阶 10-2 JQuery基础语法是什么 一.总结 一句话总结: 1.jquery语法超级简单:基础语法是:$(selector).action() 2.jquery选择的时候是带了引号的,肯定 ...

  7. 新技能 get —— Python 断点续传下载文件

    from urllib.request import urlretrieve import sys import os prev_reported_download_percent = None # ...

  8. Hibernate的数据操作(4.*以上版本)

    Hibernate的基本数据操作 适用于4.* ..sessionFactory的创建区别 public class NewsTest { private Session session = null ...

  9. 百度UEditor上传图片-再再总结一次

    本周,CSDN有个网友遇到了百度UEditor上传问题,最后商定付50元钱,我帮他解决这个问题.    他最初想自己搞定这个问题,结果搞了好多次,好几天,还是没能解决.    2015年1月17日8: ...

  10. Canvas范围裁切和几何变换

    范围裁切 clipRect() canvas.save(); canvas.clipRect(left, top, right, bottom); canvas.drawBitmap(bitmap, ...