彻底弄清一些计算机的指令可以帮助你更好地读懂汇编代码,在逆向的时候可以减少错误!
(1)CALL指令
①ESP=ESP-4
②CALL指令的下一条指令地址入[ESP]
③EIP<—调用函数的地址
(2)RETN
①EIP = [ESP]
②ESP = ESP+4
(3)LEAVE
①ESP = EBP
②POP EBP
①首先检查ECX寄存器,若ECX=0,则退出串处理循环,执行下一条指令
②执行一次字符串基本操作
③根据DF标志修改地址指针
④循环至①
(5)REPE/REPZ 串操作指令
①首先检查ECX寄存器,若ECX=0或者ZF=0(不相等)则退出串处理循环,执行下一条指令
②执行一次字符串基本操作
③根据DF标志修改地址指针
④循环至①
(6)REPNE/REPNZ 串操作指令
①首先检查ECX寄存器,若ECX=0或者ZF=1(相等)则退出串处理循环,执行下一条指令
②执行一次字符串基本操作
③根据DF标志修改地址指针
④循环至①
(7)SETcc(cc:condition code)字节置位指令
根据条件置位相应的字节寄存器,条件满足则置1,不满足则置0;
Example:SETE DL
if(ZF=1)
{
DL=1;
}
esle
{
DL=0;
}
(8)AND 指令
位与位相与运算。这条指令在应用中有个技巧:若判段某一位数据则可以用AND运算。
Example:MOV AL, 0xA3 (1010 0011B)
AND AL, 0x02 AL=0x02
CMP AL, 0x02 AL和0x02比较
SETE DL 相等则置DL为1
JMP 指令:
1. 长跳转E9
一般格式为E9+DWORD,跳转的目的地址为当前指令的下一条指令的起始地址+DWORD.
不定期更新~