PUSHAD
PUSHAD也叫保護現場,就是把我們的寄存器壓入棧中
pushad是把eax,ecx,edx,ebx,esp、ebp,esi,edi依次壓入棧中,ESP會減少32,相當于:
push eax
push ecx
push edx
push ebx
push esp
push ebp
push esi
push edi
就是我們在OD的寄存器窗口,看到的寄存器順序,按照由上往下的順序,依次壓入棧,我們觀察一下EDI的值,
此時棧頂值為:
執行pushad這條語句,棧頂值變成EDI的值了
POPAD
POPAD也叫還原現場,將棧中存儲的寄存器值返還給寄存器
與PUSHAD順序相反,將棧中數據彈出,依次傳給EDI、ESI、EBP、ESP、EBX、EDX、ECX、EAX
相當于依次執行:
pop edi
pop esi
pop ebp
pop esp
pop ebx
pop edx
pop ecx
pop eax
PUSHA和POPA
PUSHA和POPA是操作16位寄存器的,功能與PUSHAD和POPAD相同
PUSHA相當于
push ax
push cx
push dx
push bx
push sp
push bp
push si
push di
POPA相當于依次執行:
pop di
pop si
pop bp
pop sp
pop bx
pop dx
pop cx
pop ax