PUSHAD 和 PUSHFD
来自:“http://blog.sina.com.cn/s/blog_af95b18b0101hmx0.html”
pushad: 将所有的32位通用寄存器压入堆栈
pusha:将所有的16位通用寄存器压入堆栈
pushfd:然后将32位标志寄存器EFLAGS压入堆栈
pushf::将的16位标志寄存器EFLAGS压入堆栈
popad:将所有的32位通用寄存器取出堆栈
popa:将所有的16位通用寄存器取出堆栈
popfd:将32位标志寄存器EFLAGS取出堆栈
popf:将16位标志寄存器EFLAGS取出堆栈
_asm pushad
_asm pushfd
// 处理代码
_asm popfd
_asm popad
ZC: 观察OD中,pushad 是将 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 这8个32位寄存器压入栈中
ZC: 观察OD中,是将8个32位寄存器在执行pushad前的值 压入栈中,压入的顺序依次为 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
ZC: popad 出站的顺序,和上面正好相反,但有一点: 不管ESP对应位置的值是什么 ESP的值都不会设置成这个值,ESP的值还是按照弹栈的方式来就按。(EDP的值是会被设置成对应位置的值的)
X