汇编
happylife1527
这个作者很懒,什么都没留下…
展开
-
VS2008反汇编小解 .
原文地址:http://lwc541117.blog.163.com/blog/static/15358278820111207539514/VS2008反汇编小解 2011-02-20 19:58:27| 分类:程序员之路 | 标签:|字号大中小 订阅了解反汇编的一些小知识对于我们在开发软件时进行编程与调试大有好处,下面以VS2008环境下的VC++转载 2012-10-12 16:01:55 · 425 阅读 · 0 评论 -
探讨STOS指令
http://www.cnblogs.com/goodhacker/archive/2011/10/06/2199770.html转载 2012-10-12 16:10:07 · 764 阅读 · 0 评论 -
详解LEA指令
初学汇编,可能对LEA指令很迷惑。关于LEA指令,下面的文章写的很好。 比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子:push ebp mov esp, ebp sub esp, 4 现在栈上就有了4各字节的空间,这就是你的局部变量。 接下来,你执行mov转载 2012-10-12 16:44:41 · 1905 阅读 · 0 评论 -
c++反汇编代码分析--循环结构
在此主要讨论或者验证三点:1、循环结构的反汇编代码分析2、函数中,局部变量的保存位置3、方法的返回值保存位置验证一个没有找到答案的疑问:00401029 lea edi,[ebp-48h]0040102C mov ecx,12h00401031 mov eax,0CCCCCCCCh;这段代码是在栈中开辟一个转载 2012-10-13 19:05:43 · 403 阅读 · 0 评论 -
C++反汇编代码分析--函数调用
代码如下: #include "stdlib.h" int sum(int a,int b,int m,int n) { return a+b; } void main() { int result = sum(1,2,3,4); system("pause"); }转载 2012-10-13 19:05:32 · 319 阅读 · 0 评论 -
用汇编的眼光看C++ (之x86汇编)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 说到用汇编的眼光看C++语言,那么怎么阅读汇编代码就成了我们需要解决的一个问题。其实,实话说,汇编其实不难。只是我们需要明白这样几个问题: (1)汇编是什么语言? (2)汇编中的主要内容有哪些? (3)汇编语言是怎么和实际C/C++语言代码一一对转载 2012-10-13 19:39:54 · 254 阅读 · 0 评论 -
用汇编的眼光看C++(之类静态变量、静态函数), (之算术符重载)
用汇编的眼光看C++(之类静态变量、静态函数)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 看过设计模式的朋友都知道,我们在设计单件模式的时候离不开类的静态函数。和类的成员变量不同,类的静态变量属于全部类对象数据;同样和类的成员函数不同,类的静态函数属于全部类函数共有。这句话读来想来有一些拗口,不过没有关系,转载 2012-10-14 21:23:57 · 526 阅读 · 0 评论 -
用汇编的眼光看C++(之判断流程)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在我们平常的编程当中,用于判断的地方很多,但主要有下面三种方式:if-else;switch;?:。其中最后一种方式在本质上和if-else是一样的。switch和if-else其实也一样,如果我们把switch改成if(...) {} else if(...) {} els转载 2012-10-14 21:14:59 · 316 阅读 · 0 评论 -
关于dword ptr 指令
8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言中用一下方法处理。(1)通过寄存器名指明要处理的数据的尺寸。例如:下面的指令中,寄存器指明了指令进行的是字操作:mov ax,1mov bx,ds:[0]mov ds,axmov ds:[0],axinc axadd a转载 2012-10-12 15:06:07 · 779 阅读 · 0 评论 -
c++反汇编代码分析--偷调函数
注:不知道说“偷调函数”说法合不合适,在此也就这样一说了~主要有两点:一、再说C++反汇编函数调用,重点是怎样通过堆栈实现由被调用函数转到调用者二、在 1 的基础上,在WinDbg下通过修改EIP实现如下一个功能: 有两个函数foo()和hack(),在main函数中调用foo,但是在foo执行过程中,通过修改EIP来调用hack函数,最后再回到main中foo函数的下一条语句转载 2012-10-11 22:15:48 · 482 阅读 · 0 评论 -
call和ret指令
1、call和ret指令都是转移指令,他们都修改ip或同时修改cs和ip。2、ret指令用栈中的数据,修改ip的内容,从而实现近转移。操作:1.(ip)=((ss*16)+(sp));2.(sp)=(sp)+2。retf指令用栈中的内容同时修改cs和ip3、call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作:1.将当前的ip或cs和ip压入栈中;2.转移(jmp转载 2012-09-19 15:19:37 · 897 阅读 · 0 评论 -
[bx]和loop指令
1、用debug写命令和编译器写命令是不一样的。2、完整的描述一个内存单元需要两种信息:1.内存单元的地址;2.内存单元的长度(类型)。我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出,如前边的AX,AL。3、[bx]同样也表示一个内存单元,它的偏移地址在bx。4、描述性符号“()”表示取内容转载 2012-09-19 15:23:25 · 423 阅读 · 0 评论 -
更灵活定位内存地址
1、and指令:逻辑与指令,按位进行运算,通过and指令可将操作对象的相应位设为0,其他位不变,例:and al 10111111B。or指令:逻辑或指令,按位进行运算,通过or指令可将操作对象的相应位设为1,其他位不变,例:or al 01000000B。2、用字母表示数据,例:‘a’。3、小写转大写and al 11011111b。大写转小写or al 00100000b。4、[b转载 2012-09-19 15:25:23 · 434 阅读 · 0 评论 -
数据处理的两个基本问题
1、计算机是进行数据处理、运算的机器,那么有两个最基本的问题:1.处理的数据在什么地方?2.要处理的数据有多长?2、定义描述性符号:reg(register 寄存器)和sreg(segment register 段寄存器)。Reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di。sreg集合包括:ds、ss、cs、es(扩展段)。3转载 2012-09-19 15:30:54 · 650 阅读 · 0 评论 -
转移指令的原理
1、8086CPU转移指令分类:1.无条件转移指令(如jmp);2.条件转移指令;3.循环指令(如:loop);4.过程;5.中断。2、offse,伪指令,功能是取得标号的偏移地址。3、nop的机器码占一个字节,不产生任何结构,仅消耗几个时钟周期,接着执行后续指令,常用于程序的延时等。4、jmp指令要给出两种信息:1.转移的目的地址;2.转移的距离(段间转移、段内短转移、段内近转移)。转载 2012-09-19 15:32:47 · 593 阅读 · 0 评论 -
端口
1、CPU可以直接读写3个地方的数据:CPU内部的寄存器、内存单元、端口。2、端口的读写指令只有两条:in和out,读取和写入。(1)访问端口 3、网页访问的是80端口,ftp访问的是21号端口。4、CMOS RAM芯片:①包含一个实时钟和一个有128个存储单元的RAM存储器。②该芯片靠电池供电。因此关机后其内部的实时钟仍可正常工作,RAM中的信息部丢失;③128个字节的R转载 2012-09-19 15:35:37 · 745 阅读 · 0 评论 -
外中断
1、在PC系统的接口卡和主板上,装有各种借口芯片。这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当做端口来访问。外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入段口中,再由相关的芯片送到外设。也就是说CPU通过端口和外部设备进行联系。2、可屏蔽中断的引发的中断信息来自于CPU外部,中断类型码是通过数据总线送入CPU的。I转载 2012-09-19 15:36:10 · 523 阅读 · 0 评论 -
用汇编的眼光看C++(之循环流程)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 循环是我们编程中遇到的另外一项重要技术。通过反复的迭代运算,我们可以获取想要的任何结果。当然这种迭代是有基本条件的,或是以时间为条件的,或是以空间为条件的,或者是某一种外来交互作为条件的。循环的方式有很多种,但是常用的还是:while、for、do-while、goto这几种转载 2012-10-14 21:15:48 · 297 阅读 · 0 评论 -
用汇编的眼光看C++(之嵌入汇编) ,(之特殊函数)
用汇编的眼光看C++(之嵌入汇编)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 嵌入式汇编是对纯汇编文件的一种有益补充。通常会有下面几种情况使用到汇编:(1)提高代码的工作效率 ,使用到cpu的一些特殊指令,比如说mmx指令;(2)对硬件进行某种特殊的操作,比如说关中断等,这在内核级的代码中是比较常见的。但转载 2012-10-14 21:18:21 · 506 阅读 · 0 评论 -
VC调试——看汇编看内存,从本质上理解C指针 .
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。从汇编的角度理解和学习C语言的指针,转载 2012-10-15 12:07:52 · 724 阅读 · 0 评论 -
rep stos dword ptr [edi] .
引用一篇http://apps.hi.baidu.com/share/detail/11140897rep 为repeat 重复之意stos 为sotre string 保存字符串之意ptr 为pointer 指针之意00401060 push ebp00401061 mov ebp,esp00401063 sub转载 2012-10-15 12:08:42 · 593 阅读 · 0 评论 -
[学习小记] 从汇编角度看局部变量的分配及数组名与指针的关系 .
ps:个人理解,如有错误请指出,本人菜鸟一只 在应聘的笔试中,这个考的似乎很多,以前只知道sizeof()的结论,但是也不清楚数组名到底是怎么回事,只知道可以隐式退化成指针。于是闲着没事干看了下编译器的实现方式。 下面从汇编代码下观察两者的区别。 首先可以先理解一下函数体内的局部变量的分配。进入函数体,会将参数和局部变量都压入堆栈段,在函数体内对局部变量和参数的寻址基本都是转载 2012-10-15 15:36:11 · 483 阅读 · 0 评论 -
从简单的算法初探过程汇编 栈帧指针 .
http://blog.csdn.net/zcabcd123/article/details/7693971转载 2012-10-15 15:39:00 · 334 阅读 · 0 评论 -
通过反汇编代码解读指针和引用的内在机理 .
试图用中文、英文等自然语言将 C++ 的指针和引用的异同描述得简练、通透是一件困难的事情,而阅读包含指针和引用的反汇编代码是一个好办法:这绝对是一种无二义性和尽可能简练的陈述。 比如下述代码 void main(void) { int x1=0,*ptrx1=&x1; int x2=0,&refx2=x2; (*ptrx转载 2012-10-15 15:45:28 · 573 阅读 · 0 评论 -
从汇编、内存的角度看类中的this指针 .
http://blog.csdn.net/foshanzhuifeng/article/details/7191541前几天无聊之际,在网上看到一篇关于this指针问题的文章,介绍得有点不详细,遂写下一些关于我个人的见解。问题大概如下:[cpp] view plaincopyprint?class MYCLASS { int a;转载 2012-10-15 12:15:00 · 445 阅读 · 0 评论 -
浮点数反汇编的学习
今天来学学浮点数的反汇编吧.因为这几天电信宽带到期了, 暂时不想联网, 所以对于浮点数这里, 我没有查什么资料, 关于浮点数原理方面的,我也没做过多的阐述, 有兴趣的可以去看看特定的CPU手册,应该都差不多了,80X86模式的. 或者也可以看看汇编的书籍,都会有介绍的, 今次我们的目的是为了在反汇编一个用到了浮点数的程序时不至于理解不了其中的指令.浮点数分为单精度和双精度, 单精度的C转载 2012-10-16 20:54:37 · 1159 阅读 · 0 评论 -
汇编中的test和cmp指令 .
看过破解教程,都知道test,cmp是比较关键,可是我一直不清楚它们究竟是怎么比较的,最后下决心找了很多资料,和大家一起把它们弄清楚.首先看看:状态寄存器(即标志寄存器) PSW(Program Flag)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示: 15 14 13 12 11 10 9 8 7 6 5 4 3转载 2012-11-08 09:09:02 · 773 阅读 · 0 评论 -
用汇编的眼光看C++(之算术符重载陷阱) .
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在算术符重载里面,“=”重载可能是最经常使用的一种。但是好多人就误以为在函数中,凡是类出现“=”的地方,那就是调用算术符重载,其实不然。为什么呢?我们可以看看下面的代码。首先,我们定义一个基本类:[cpp] view plaincopyprint?转载 2012-10-14 21:30:11 · 373 阅读 · 0 评论 -
从汇编的眼光看C++(之delete内存泄露) .(之指针拷贝) .
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 有过C语言编程的朋友大多知道,如果在malloc内存之后不及时free掉内存,那么很有可能会造成内存泄露的。那么在C++上面,是不是也存在这样的问题呢?结果是C++上面同样也存在内存泄露的危险。这个危险就是如果new后面不能delete的话,也会造成内存的泄露。还有不清楚的朋转载 2012-10-14 21:29:31 · 456 阅读 · 0 评论 -
用汇编的眼光看C++(之const属性) .(之模板类) .
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 const是C/C++语言中的关键字,但是如果用的好,可以极大地提高代码的健壮性。一般来说const使用的地方还是蛮多的,但是主要还是下面几个地方:(1)普通变量的保护;(2)地址空间的保护;(3)类初始变量的声明和保护;(4)类变量在函数中的保护。const的保护主要来自于转载 2012-10-14 21:25:17 · 595 阅读 · 0 评论 -
用汇编的眼光看C++(之类继承) ,(之虚函数) .
用汇编的眼光看C++(之类继承)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 继承是类的一个基本属性,可是在类的继承过程中,函数是怎么初始化?怎么析构的呢?我们不妨看看下面这样的一段代码? [cpp] view plaincopyprint?class employee {转载 2012-10-14 21:21:34 · 471 阅读 · 0 评论 -
用汇编的眼光看c++(之模板函数) ,(之缺省模板、特化模板) .
用汇编的眼光看c++(之模板函数)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 如果说模板类定义的是一种数据类型,那么模板函数定义的就是一种函数。既然是函数,那么就有输入数据和输出数据。和模板类的概念差不多,模板函数的初衷也是为了在函数操作上抽取共同的特性,屏蔽的是类型的不同和差异。我们可以通过下面一个简单的代转载 2012-10-14 21:26:34 · 514 阅读 · 0 评论 -
从汇编的眼光看C++(之递归函数与模板类) ,(之泛型编程) .
从汇编的眼光看C++(之递归函数与模板类)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 递归,相信有过基本C语言经验的朋友都明白,就是函数自己调用自己。所以,本质上说,它和普通的函数调用没有什么区别。今天之所以会把模板类和递归联系在一起,是因为我们可以用递归的方法实现模板的递归。闲话不多说,我们先从一个统计函转载 2012-10-14 21:28:30 · 581 阅读 · 0 评论 -
《Windows内核编程》の基本汇编指令 .
1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下:#include"stdafx.h"int _tmain(int argc, _TCHAR* argv[]){return 0;} 2)用VS2010查看汇编代码的方法:1. VC必须处于debug状态才能看到转载 2012-10-14 21:44:25 · 525 阅读 · 0 评论 -
用汇编的眼光看C++(开篇)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 很多朋友,包括我自己在内,对C++语言的很多特性不是很明白。特别是几年前找工作的时候,为了应付来自工作单位的考试,我经常逼着自己的去记住一些复杂的试题和答案。可是常常时间已过,一切又回到了原点。原来没有弄清楚的问题还是没有弄明白,一切都没有发生改变。直到若干年后转载 2012-10-14 20:53:23 · 302 阅读 · 0 评论 -
用汇编的眼光看C++(之指针)
http://blog.csdn.net/feixiaoxing/article/details/6757851【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 指针是我们在C/C++中经常遇到的一种数据类型。指针用的好,可以提高代码的可读性;但是如果使用不恰当,反而会造成很大的麻烦。指针,也就是指向某一种数据类型的地址。转载 2012-10-14 21:13:07 · 322 阅读 · 0 评论 -
用汇编的眼光看C++(之退出流程)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 无论是在判断还是在循环的过程中,通常在遇到合适的条件的时候就会退出相应的模块。跳出模块运行的方式很多,break,continue,return都可以。下面我们就可以分别对他们进行将介绍。 (1)continue只能用于循环,而break循环、判断都可以应用。两者有转载 2012-10-14 21:16:34 · 350 阅读 · 0 评论 -
用汇编的眼光看C++(之class构造、析构) ,(之拷贝、赋值函数)
用汇编的眼光看C++(之class构造、析构)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们讨论基本上都是C语言的内容,还没有真正触及到C++的相关知识。从这篇博客之后,我们将会更多触及类的内容。类的属性很多,今天我们讨论主要就是构造函数、析构函数。 (1)如果没有构造函数、析构转载 2012-10-14 21:20:09 · 421 阅读 · 0 评论 -
汇编指令
http://www.cnblogs.com/lxgeek/archive/2011/01/01/1923738.htmlGAS中每个操作都是有一个字符的后缀,表明操作数的大小。C声明GAS后缀大小(字节)charb1shortw转载 2012-12-01 11:37:02 · 391 阅读 · 0 评论 -
main反汇编解析
http://blog.csdn.net/kingofbirdzjy/article/details/1624503int main(){00411A00 push ebp //在堆栈上保存EBP00411A01 mov ebp,esp //将堆栈当前位置给EBP,以在堆栈结构中存储转载 2012-09-19 15:00:49 · 544 阅读 · 1 评论