C 函式呼叫原理理解

2021-08-22 16:48:58 字數 1543 閱讀 9152

空程式:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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,依賴注入。在系統執行中,動態的向某個物件提供它所需要的其他物件...