【逆向知识】堆栈图-汇编中的函数

push        ebp                 ; 提升堆栈
mov         ebp,esp   
sub         esp,0CCh  
------------------------------------------
push        ebx                 ; 保留现场,函数在执行的时候会用到一些寄存器,但这些寄存器中
push        esi                 ; 值很可能会被程序用到,所以要先存储到内存中
push        edi  
push        ecx  
------------------------------------------
lea         edi,[ebp-0CCh]      ; 向分配的空间填充数据
mov         ecx,33h  
mov         eax,0CCCCCCCCh  
rep stos    dword ptr es:[edi]  
----------------------------------
pop         ecx                 ; 函数实际实现的功能
mov         dword ptr [this],ecx  

mov         eax,dword ptr [this]  
mov         dword ptr [eax+4],1  

mov         eax,dword ptr [nID]  
push        eax  
push        offset string "\r\nID:%d Who is your God? I am!\r\n"... (0EC6E94h)  
call        _printf (0E33D73h)  
add         esp,8  
----------------------------------------
pop         edi                 ; 恢复现场,将之前保留的寄存器的值恢复
pop         esi  
pop         ebx  
-----------------------------------------
add         esp,0CCh            ; 堆栈平衡
cmp         ebp,esp  
call        __RTC_CheckEsp (0E32356h)  
mov         esp,ebp             ; 降低堆栈 
pop         ebp                 ; 恢复栈底
ret         4                   ; 函数执行完毕,返回到调用处,等同于pop eip

相关推荐