C 函式呼叫原理理解

2021-04-27 05:50:11 字數 1818 閱讀 9441

空程式:

int main()

;各指標出棧

00411380  pop         edi          ;

彈出edi

00411381  pop         esi          ;

彈出esi

00411382  pop         ebx          ;

彈出ebx

00411383  mov         esp,ebp      ;esp

復原00411385  pop         ebp          ;

彈出ebp,也復原

00411386  ret                      ;返回

函式呼叫:

int _tmain(int argc, _tchar* argv)

恢復現場

0041141c

pop         edi 

0041141d  pop         esi 

0041141e  pop         ebx 

以下全為執行時esp檢查:

先恢復因為為main預留空間而改變的棧指標

0041141f

add         esp,0f0h

00411425  cmp         ebp,esp

00411427  call        @ilt+320(__rtc_checkesp) (411145h)

正常時只需要以下兩句就可以正常恢復esp,再出棧,又可以恢復ebp.

0041142c

mov         esp,ebp

0041142e  pop         ebp 

0041142f

ret     ;main返回

int fun1(int a, int b, int c)

恢復現場

00411abe  pop         edi 

00411abf  pop         esi 

00411ac

0  pop         ebx 

以下全為執行時esp檢查:

先恢復因為預留函式儲存控制項而改變的棧指標,

00411ac

1  add         esp,0e4h

再比較ebp,esp,假如程式執行正確,兩個值應該相等.

00411ac

7  cmp         ebp,esp

00411ac

9  call        @ilt+320(__rtc_checkesp) (411145h)

正常時只需要以下兩句就可以正常恢復esp,再出棧,又可以恢復ebp.

00411ace  mov         esp,ebp

00411ad0  pop         ebp 

返回main

從pop堆疊中的eip開始執行

00411ad1  ret   

int fun2(int a, int b, int c, int d, int e)

恢復現場

00412097  pop         edi 

00412098  pop         esi 

00412099  pop         ebx 

0041209a

mov         esp,ebp

0041209c

pop         ebp 

0041209d  ret ;返回fun1

,從pop堆疊中的eip開始執行

C 函式呼叫原理理解

空程式 int main 各指標出棧 00411380 pop edi 彈出edi 00411381 pop esi 彈出esi 00411382 pop ebx 彈出ebx 00411383 mov esp,ebp esp復原 00411385 pop ebp 彈出ebp,也復原 00411386...

CSS 原理理解

網頁製作最初,html規定了 normal document stream 標準文件流 來規範元素在網頁中的顯示法則 標準文件流中元素分兩種 塊內元素,行內元素。行內元素的特點 span標籤 豎直margin中的塌陷現象,上下緊密排列的元素的外邊距並不是兩個元素外邊距之和,而是選取那個最大的外邊距作...

Spring IOC原理理解

ioc,inversion of control,控制倒轉。這是spring的核心,貫穿始終。所謂ioc,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係。di,dependency injection,依賴注入。在系統執行中,動態的向某個物件提供它所需要的其他物件...