VS2012 反汇编

在调试没有源码的文件时,我们可能要用到反汇编设计。

一、VS反汇编方法

1、调出反汇编窗口。

2、调用寄存器窗口(只有在反汇编下才可见)

如果在调试状态还是没有此菜单项,可试着以下操作:

在VS中点击“工具”->“导入和导出设置”,选择“重置所有设置”,下一步,这时你可以保存当前设置或不保存,我觉得无所谓,下一步,选择“Visual C#开发设置”,“完成”。这样,“调试”->“窗口”->“寄存器”菜单项应该用显示出来了,记得要确保你的程序是在调试的过程中。

3、查看内存

点击“调试”->“窗口”->“内存”->“内存1”...“内存4”(选一个就可以了。)。在内存窗口中的“地址”栏输入地址,按回车即可看到该地地址处的内存信息。

 二、常用汇编指令介绍

1、常用指令

为了照顾到没学过汇编程序的同志们,这里简单介绍一下常见的几种汇编指令。

A、add:加法指令,第一个是目标操作数,第二个是源操作数,格式为:目标操作数 = 目标操作数 + 源操作数;

B、sub:减法指令,格式同 add;

C、call:调用函数,一般函数的参数放在寄存器中;

D、ret:跳转会调用函数的地方。对应于call,返回到对应的call调用的下一条指令,若有返回值,则放入eax中;

E、push:把一个32位的操作数压入堆栈中,这个操作在32位机中会使得esp被减4(字节),esp通常是指向栈顶的(这里要指出的是:学过单片机的同学请注意单片机种的堆栈与Windows下的堆栈是不同的,请参考相应资料),这里顶部是地址小的区域,那么,压入堆栈的数据越多,esp也就越来越小;

F、pop:与push相反,esp每次加4(字节),一个数据出栈。pop的参数一般是一个寄存器,栈顶的数据被弹出到这个寄存器中;

一般不会把sub、add这样的算术指令,以及call、ret这样的跳转指令归入堆栈相关指令中。但是实际上在函数参数传递过程中,sub和add最常用来操作堆栈;call和ret对堆栈也有影响。

 

G、mov:数据传送。第一个参数是目的操作数,第二个参数是源操作数,就是把源操作数拷贝到目的一份。

H、xor:异或指令,这本身是一个逻辑运算指令,但在汇编指令中通常会见到它被用来实现清零功能。

              用 xor eax,eax这种操作来实现 mov eax,0,可以使速度更快,占用字节数更少。

I、lea:取得第二个参数地址后放入到前面的寄存器(第一个参数)中。

               然而lea也同样可以实现mov的操作,例如:

                                  lea edi,[ebx-0ch]

方括号表示存储单元,也就是提取方括号中的数据所指向的内容,然而lea提取内容的地址,这样就实现了把(ebx-0ch)放入到了edi中,但是mov指令是不支持第二个操作数是一个寄存器减去一个数值的。

 

J、stos:串行存储指令,它实现把eax中的数据放入到edi所指的地址中,同时edi后移4个字节,这里的stos实际上对应的是stosd,其他的还有stosb,stosw分别对应1,2个字节。

K、jmp:无条件跳转指令,对应于大量的条件跳转指令。

L、jg:条件跳转,大于时成立,进行跳转,通常条件跳转之前会有一条比较指令(用于设置标志位)。

M、jl:小于时跳转。

N、jge:大于等于时跳转。

O、cmp:比较大小指令,结果用来设置标志位。

2  、函数参数传递方式

函数调用规则指的是调用者和被调用函数间传递参数及返回参数的方法,在Windows上,常用的有Pascal方式、WINAPI方式(_stdcall)、C方式(_cdecl)。

A、_cdecl C调用规则:

(a)参数从右到左进入堆栈;

(b)在函数返回后,调用者要负责清除堆栈,这种调用方式通常会生成较大的可执行程序。

B、_stdcall又称为WINAPI,调用规则如下:

(a)参数从右到左进入堆栈;

(b)被调用的函数在返回前自行清理堆栈,这种方式生成的代码比cdecl小。

C、Pascal调用规则(主要用于Win16函数库中,现在基本不用):

(a)参数从左到右进入堆栈;

(b)被调用的函数在返回前自行清理堆栈。

(c)不支持可变参数的函数调用。

时间: 2025-01-26 23:33:48

VS2012 反汇编的相关文章

VS2012中的全部预定义键盘快捷键列表

原文 http://www.elanblog.com/2013/05/14/vs2012-key-list/#sectionToggle7 Visual Studio 集成开发环境 (IDE) 包括若干预定义的键盘快捷键方案. 当您首次启动 Visual Studio 并选择设置时,将会自动设置关联的方案. 之后,通过使用"选项"对话框中的键盘选项页,您可以从其他方案中进行选择,也可以创建您自己的键盘快捷键. 本主题显示与 .NET Framework 开发和 Web 开发相关的键盘快

win32-vc程序搬运vs2012出现问题

问题描述 vc程序搬运vs2012出现问题 void playSound(int s_sort){ char ss_sort[20]={0}; ::sprintf_s(ss_sort./music/clear%d.wav""s_sort); PlaySound(ss_sortNULLSND_ASYNC); }error C2664: "PlaySoundW": 不能将参数 1 从"char [20]"转换为"LPCWSTR"应

C# VS2012操作word文档 (一).创建文档

该文章主要是讲述如何使用VS2012创建word文档,因为在项目中我们可能需要点击一个按钮把数据库中的项目表单或图片显示到word文档中,因此该文章主要分析如何使用VS2012创建word文档并填写相应的内容.主要通过C#引用Miscrosoft Word 14.0 Object Library实现的. 一.创建工程 首先是使用VS2012创建一个windows窗体程序,并添加如下图所示的界面. 二.添加引用 然后需要引用COM中的Miscrosoft Word 14.0 Object Libr

MFC VS2012对话框背景填图

这是使用VS 2012编写MFC对话框程序的教程,主要是关于图片处理方面的操作,这些在MFC游戏.图片处理.软件编写中是经常要用到的知识. 一.创建项目 文件-新建项目-MFC应用程序-该页面使用"基于对话框"-完成即可. 注意:取消"使用Unicode库",否则在使用AfxMessageBox会报错,没有一个可以转换的参数类型,要加AfxMessageBox(_T("..")).运行结果: 二.添加背景Bitmap资源 在"资源视图&

VS2012无法附加进程,求大神帮解决

问题描述 VS2012无法附加进程,求大神帮解决 解决方案 直接在vs里调试你的asp.net程序

vs2012-VC++6.0的MFC与VS2012的区别

问题描述 VC++6.0的MFC与VS2012的区别 VC++6.0绘图的时候的WM LBUTTONDOWN在VS2012中怎么找不到?或者说用VC++6.0绘图的操作方法,应该在VS2012怎么转变?本人菜鸟一枚,VS2012太大了,完全不懂--求帮助-- 解决方案 就你说的这个消息,MFC 11.0(VS2012带的)当然也是支持的.只是VS新的IDE,相比较VC6的Developer Studio有很多操作上的变化,需要适应. MFC11主要的变化是新增了一些从BCG买来的控件,它们可以使

vs2012解析不出using,只解析出System.IO.File这种形式,有什么解决方法没?

问题描述 vs2012解析不出using,只解析出System.IO.File这种形式,有什么解决方法没? vs2012解析不出using,只解析出System.IO.File这种形式,有什么解决方法没? 解决方案 检查下程序集有没有引用,程序集有没有冲突. 什么类型解析不了. 忽略IDE的提示,编译本身有没有问题? 解决方案二: 可以在代码段最前面加using System; 解决方案三: 例如这个,我添加引用之后就变成了 而不是using的形式

解决VS2012【加载......符号缓慢】的问题

最近在用VS2012调试时,经常出现"加载......符号缓慢的问题",快的时候5分钟能出来,慢的时候就直接死掉了.(超级郁闷) 我的solution里有100多个项目文件,一直以为是项目文件太多导致的,后来找度娘问了一下,才发现不只我一个人遇到这个问题. 而且出现 VS2005.VS2008.VS2010.VS2012.VS2013 均有可能出现这个问题,可能导致的原因是加载符号是需要联网下载,耗费了大量的时间. 具体解决方法如下: 打开VS的[工具]-[选项]-[调试]-[符号],

android-汇编和反汇编相关的问题

问题描述 汇编和反汇编相关的问题 最近学习android原生逆向分析,需要掌握看懂c语言反汇编的知识,请问我需要按照顺序学习那些东西,谢谢! 解决方案 需要学习的是根据反汇编代码模式匹配还原成高级语言的能力.这要你对编译器是如何将高级语言的代码编译和展开成汇编程序的有很深的功底. 看反汇编代码的能力不在于一行一行去读它是什么意思,而是看到某几行代码,马上能想出对应的高级语言代码怎么写--特别是在变量名缺失,并且编译器对上下文优化的情况下.如果你能通过它更进一步看出算法层面的思路,那就更好了.当然