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

 

posted @ 2016-06-13 08:14  AssemblySkill  阅读(9980)  评论(0编辑  收藏  举报