常用汇编指令及堆栈图

常用汇编指令及堆栈图

  • 第一部分、汇编指令
    • 一、常用汇编指令
      • 1通用数据传送指令.
      • 2. 输入输出端口传送指令.
      • 3. 目的地址传送指令.
      • 4. 标志传送指令.
    • 二、EFLAGS寄存器
    • 三、JCC
  • 第二部分 堆栈图
    • 一、一个简单C语言程序的堆栈图
    • 二、汇编中的函数
      • 1、汇编中的函数
      • 2、函数的入口
      • 3、函数的出口
    • 三、Windows堆栈
      • 1、Windows堆栈的特点:
      • 2、什么是堆栈平衡:

第一部分、汇编指令

一、常用汇编指令

1通用数据传送指令.

MOV     传送字或字节.  
MOVSX   先符号扩展,再传送.  
MOVZX   先零扩展,再传送.  
PUSH    把字压入堆栈.  
POP     把字弹出堆栈.  
PUSHA   把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.  
POPA    把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.  
PUSHAD  把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.  
POPAD   把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.  
BSWAP   交换32位寄存器里字节的顺序  
XCHG    交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数)  
CMPXCHG 比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX)  
XADD    先交换再累加.(结果在第一个操作数里)  
XLAT    字节查表转换.----BX指向一张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL)  

2. 输入输出端口传送指令.

IN      I/O端口输入. ( 语法: IN   累加器,    {端口号│DX} )  
OUT     I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )输入输出端口由立即方式指定时,    其范围是 0-255; 由寄存器 DX 指定时,其范围是    0-65535.  

3. 目的地址传送指令.

LEA     装入有效地址.例: LEA DX,string ;把偏移地址存到DX.  
LDS     传送目标指针,把指针内容装入DS.例: LDS SI,string   ;把段地址:偏移地址存到DS:SI.  
LES     传送目标指针,把指针内容装入ES.例: LES DI,string   ;把段地址:偏移地址存到ES:DI.  
LFS     传送目标指针,把指针内容装入FS.例: LFS DI,string   ;把段地址:偏移地址存到FS:DI.  
LGS     传送目标指针,把指针内容装入GS.例: LGS DI,string   ;把段地址:偏移地址存到GS:DI.  
LSS     传送目标指针,把指针内容装入SS.例: LSS DI,string   ;把段地址:偏移地址存到SS:DI.  

4. 标志传送指令.

LAHF    标志寄存器传送,把标志装入AH.  
SAHF    标志寄存器传送,把AH内容装入标志寄存器.  
PUSHF   标志入栈.  
POPF    标志出栈.  
PUSHD   32位标志入栈.  
POPD    32位标志出栈.  

二、EFLAGS寄存器

常用汇编指令及堆栈图_第1张图片
CF:进位位。

如果运算结果的最高位产生一个进位或错位,则CF置1,否则CF清零。

PF:奇偶位。

如果运算结果低8位中“1”的个数为偶数时,则PF置1。否则PF清0。

AF:辅助进位位。

反应运算结果低四位产生进位或错位的情况。

ZF:零值位。

如果运算结果为零则ZF置1。否则清零。

SF:符号位。

如果运算结果为负,即一个数的最高位为1,则SF置1,否则SF清零。

OF:溢出位。
如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

三、JCC

常用汇编指令及堆栈图_第2张图片

第二部分 堆栈图

一、一个简单C语言程序的堆栈图

#include
int function(int x ,int y,int z) 
{
    return x+y-z;
}

int main()
{
function(2,3,4);  //仅仅调用此函数而已

}

堆栈图如下(过程)

常用汇编指令及堆栈图_第3张图片
常用汇编指令及堆栈图_第4张图片
常用汇编指令及堆栈图_第5张图片

不同的编译器生成的堆栈图可能不同,要视情况而定

二、汇编中的函数

1、汇编中的函数

常用汇编指令及堆栈图_第6张图片

2、函数的入口

常用汇编指令及堆栈图_第7张图片

3、函数的出口

常用汇编指令及堆栈图_第8张图片

三、Windows堆栈

1、Windows堆栈的特点:

1、先进后出
2、向低地址扩展

2、什么是堆栈平衡:

Windows中的堆栈,是一块普通的内存,主要用来存储一些临时的数据和参数等,可以把Windows中的堆栈想象成是一个公用的书箱,函数就像是使用箱子的人,函数在执行的时候,会用到这个书箱,把一些数据存到里面,但用完的时候一定要记得把书拿走,否则会乱的,也就是说,你放进去几本书,走的时候也要拿走几本书,这个就是堆栈平衡

你可能感兴趣的:(reverse,的入门)