酒鬼z

我自将心向明月,独卧沙场醉圆缺

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

文章分类 -  ASM

摘要:技术交流,DH讲解.正式之前,我们看看寄存器和CPU的标志位: OD中的截图,下方的CPAZSTDO就是标志位. Delphi的FPU窗口,右边一列就是标志位.为什么要给大家看标志位呢?因为ASM中的跳转语句都是由相应的标志位控制的.而标志位又是由于以下的情况影响的:1.运算结果为0,Zero Fl... 阅读全文
posted @ 2014-05-29 17:09 酒鬼z 阅读(217) 评论(0) 推荐(0)

摘要:原 子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断。在单处理器系统(UniProcessor)中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。这也是某些CPU指令系统中引入了test_and_set、test_and_clear等指令用于临界资源 ... 阅读全文
posted @ 2014-05-29 15:01 酒鬼z 阅读(622) 评论(0) 推荐(0)

摘要:转自:http://blog.csdn.net/atfield/article/details/1382694如果想要了解C++内部的实现原理,没有什么比观察C++代码对应的汇编代码来的更直接了。本系列主要从汇编角度研究C++代码和汇编的对应关系,揭示C++内部的机制和原理。在第一篇文章中我将从一个简单的C++程序着手快速解释一下C++反汇编代码的基本的结构和内容,相当于一个简单的Preview。而在后续的文章中,我将根据不同的Topic,详细解释C++代码对应的反汇编代码。一个简单的C++程序示例如下:class my_class{public : my_class() { m_member 阅读全文
posted @ 2014-03-26 09:32 酒鬼z 阅读(222) 评论(0) 推荐(0)

摘要:1.down vote acceptedDB - Define Byte. 8 bitsDW - Define Word. Generally 2 bytes on a typical x86 32-bit systemDD - Define double word. Generally 4 bytes on a typical x86 32-bit systemFrom x86 assembly tutorial,The pop instruction removes the 4-byte data element from the top of the hardware-supported 阅读全文
posted @ 2013-08-26 09:37 酒鬼z 阅读(93) 评论(0) 推荐(0)

摘要:先通过一个小程序来看一看:#includevoid foo(int x, int y, int z){printf("x = %d at [%X]n", x, &x);printf("y = %d at [%X]n", y, &y);printf("z = %d at [%X]n", z, &z);}int main(int argc, char *argv[]){foo(100, 200, 300);return 0;}运行结果:x = 100 at [BFE28760]y = 200 at [BFE2876 阅读全文
posted @ 2013-06-27 20:09 酒鬼z 阅读(183) 评论(0) 推荐(0)

摘要:理解调用栈最重要的两点是:栈的结构,EBP寄存器的作用。首先要认识到这样两个事实:1、一个函数调用动作可分解为:零到多个PUSH指令(用于参数入栈),一个CALL指令。CALL指令内部其实还暗含了一个将返回地址(即CALL指令下一条指令的地址)压栈的动作。2、几乎所有本地编译器都会在每个函数体之前插入类似如下指令:PUSH EBP; MOV EBP ESP;即,在程序执行到一个函数的真正函数体时,已经有以下数据顺序入栈:参数,返回地址,EBP。由此得到类似如下的栈结构(参数入栈顺序跟调用方式有关,这里以C语言默认的CDECL为例):+| (栈底方向,高位地址) | | ............ 阅读全文
posted @ 2013-06-27 20:06 酒鬼z 阅读(151) 评论(0) 推荐(0)

摘要:AH&AL=AX(accumulator):累加寄存器BH&BL=BX(base):基址寄存器CH&CL=CX(count):计数寄存器DH&DL=DX(data):数据寄存器SP(Stack Pointer):堆栈指针寄存器BP(Base Pointer):基址指针寄存器SI(Source Index):源变址寄存器DI(Destination Index):目的变址寄存器IP(Instruction Pointer):指令指针寄存器CS(Code Segment)代码段寄存器DS(Data Segment):数据段寄存器SS(Stack Segment):堆 阅读全文
posted @ 2013-06-27 16:58 酒鬼z 阅读(341) 评论(0) 推荐(0)