1. 程式人生 > >【逆向知識】堆棧圖-匯編中的函數

【逆向知識】堆棧圖-匯編中的函數

ring %d 保留 you all this 返回 執行 寄存器

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

【逆向知識】堆棧圖-匯編中的函數