X86反汇编速成班(条件指令,分支指令、重复指令、寄存器等)
2017-04-16 10:17
323 查看
4.3.3大端字节序和小端字节序
4.3.4立即数操作数是一个固定的值,如0x42
寄存器操作数指向寄存器,如ecx
内存地址操作数指向感兴趣的值所在的内存地址,一把由[]内包含值、寄存器或方程式组成,如[eax]
4.3.5通用寄存器一般用于存储数据或内存地址,而且经常交换这使用以完成程序
一些X86指令只能使用特定的寄存器,例如,乘法和除法指令就只能使用EAX和EDX
EAX通常存储了一个函数调用的返回值
EIP指令指针,保存了程序将要执行的下一跳指令在内存中的地址,它的唯一的作用就是告诉处理器接下来要做什么
lea eax,[ebx+8]将EBX+8的值给EAX,,,,,,和mov eax,ebx+8等价
mov eax,[ebx+8]加载内存中地址为EBX+8处的数据
sub eax,0x10 EAX寄存器值减去0X10
4.3.7栈是后入先出
EBP是栈基址寄存器,在函数中会保持不变,因此程序把它当作定位器,来确定局部变量和参数的位置
不用push和pop也可以从栈中读取数据,例如mov eax,ss :[esp]就可以直接访问栈顶
这和pop eax一样,
4.3.8条件指令
最常见的是test和cmp
cmp dst,src ZF CF
dst = src 1 0
dst < src 0 1
dst > sec 0 0
4.3.9分支指令
最常见的分支指令是跳转指令
jz loc 如果ZF=1,则跳转
jnz loc 如果ZF=0,则跳转
je loc 和jz类似,通常在cmp指令后使用。如果源操作数与目的操作数相等,则调准
jne loc。。。。。。。。。。。。。。。。。。。。
jg loc 在一条cmp指令做有符号比较之后,如果目的操作数大于源操作数,跳转
jge loc .............................................小于等于
ja loc 与jg类似,但使用无符号比较
jae loc 与jge类似,但使用无符号比较
jl loc 在一条cmp指令做有符号比较之后,如果目的操作数小于源操作数,跳转
jle loc .........................................小于或等于
jb loc 与jl类似,但使用无符号比较
jbe loc 与jle类似,但使用无符号比较
jo loc 如果前一条指令置位了溢出标志位(OF=1),则跳转
js loc 如果符号标志位被置位(SF=1),则跳转
jecxz 如果ECX=0,则跳转
4.3.10重复指令
最常见的数据缓冲区操作指令是movsx\cmpsx\stosx\scasx,其中的x可以是b,w,d(单字节,字,双字节)
ESI源索引寄存器,EDI目的索引寄存器
rep 循环终止条件ECX=0
repe repz 循环终止条件ECX=0 or ZF=0
repne repnz 循环终止条件ECX=0 or ZF=1
4.3.4立即数操作数是一个固定的值,如0x42
寄存器操作数指向寄存器,如ecx
内存地址操作数指向感兴趣的值所在的内存地址,一把由[]内包含值、寄存器或方程式组成,如[eax]
4.3.5通用寄存器一般用于存储数据或内存地址,而且经常交换这使用以完成程序
一些X86指令只能使用特定的寄存器,例如,乘法和除法指令就只能使用EAX和EDX
EAX通常存储了一个函数调用的返回值
EIP指令指针,保存了程序将要执行的下一跳指令在内存中的地址,它的唯一的作用就是告诉处理器接下来要做什么
lea eax,[ebx+8]将EBX+8的值给EAX,,,,,,和mov eax,ebx+8等价
mov eax,[ebx+8]加载内存中地址为EBX+8处的数据
sub eax,0x10 EAX寄存器值减去0X10
4.3.7栈是后入先出
EBP是栈基址寄存器,在函数中会保持不变,因此程序把它当作定位器,来确定局部变量和参数的位置
不用push和pop也可以从栈中读取数据,例如mov eax,ss :[esp]就可以直接访问栈顶
这和pop eax一样,
4.3.8条件指令
最常见的是test和cmp
cmp dst,src ZF CF
dst = src 1 0
dst < src 0 1
dst > sec 0 0
4.3.9分支指令
最常见的分支指令是跳转指令
jz loc 如果ZF=1,则跳转
jnz loc 如果ZF=0,则跳转
je loc 和jz类似,通常在cmp指令后使用。如果源操作数与目的操作数相等,则调准
jne loc。。。。。。。。。。。。。。。。。。。。
jg loc 在一条cmp指令做有符号比较之后,如果目的操作数大于源操作数,跳转
jge loc .............................................小于等于
ja loc 与jg类似,但使用无符号比较
jae loc 与jge类似,但使用无符号比较
jl loc 在一条cmp指令做有符号比较之后,如果目的操作数小于源操作数,跳转
jle loc .........................................小于或等于
jb loc 与jl类似,但使用无符号比较
jbe loc 与jle类似,但使用无符号比较
jo loc 如果前一条指令置位了溢出标志位(OF=1),则跳转
js loc 如果符号标志位被置位(SF=1),则跳转
jecxz 如果ECX=0,则跳转
4.3.10重复指令
最常见的数据缓冲区操作指令是movsx\cmpsx\stosx\scasx,其中的x可以是b,w,d(单字节,字,双字节)
ESI源索引寄存器,EDI目的索引寄存器
rep 循环终止条件ECX=0
repe repz 循环终止条件ECX=0 or ZF=0
repne repnz 循环终止条件ECX=0 or ZF=1
相关文章推荐
- 汇编-条件跳转与重复指令
- 汇编语言-条件跳转指令
- x86 汇编 寄存器
- 关于汇编语言寄存器和指令操作的整理
- 初学 Delphi 嵌入汇编[27] - XCHG 指令: 交换寄存器的内容
- 汇编基础教程(二)——常用汇编指令之条件指令
- x86 汇编语言标志寄存器
- [汇编语言]-第九章 根据位移进行转移的jmp指令 段内短转移 段内近转移 段间转移(远转移) 转移的目的地址在指令中,在寄存器中,在内存中的jmp指令
- 汇编基础教程(二)——常用汇编指令之条件指令
- 关于汇编语言寄存器和指令操作的整理 2010-05-16 15:22 by Create Chen
- 汇编条件跳转指令及标志位
- 常见寄存器以及常见汇编指令,常见爆破指令 good
- 32位汇编语言学习笔记(11)--条件传送指令
- 170316 汇编-Debug指令、寄存器和内存
- X86-64寄存器和栈帧--牛掰降解汇编函数寄存器相关操作
- x86 汇编 之 指令基础 (AT&T格式 / Linux)
- 关于汇编语言寄存器和指令操作的整理
- 关于汇编语言寄存器和指令操作的整理
- 51 单片机汇编语言:利用 RET 指令实现多路分支
- 关于汇编语言寄存器和指令操作的整理