对esp和ebp分析来了解函数的调用过程
esp:擴(kuò)展棧指針寄存器,是指針寄存器的一種,用于存放函數(shù)棧頂指針(棧頂指針)
ebp:擴(kuò)展基址指針寄存器,也被稱為幀指針寄存器,用于存放函數(shù)棧底指針(棧底指針)。
esp和ebp有什么關(guān)系呢?
ebp只是存取某時(shí)刻的esp,這個(gè)時(shí)刻就是進(jìn)入一個(gè)函數(shù)內(nèi)后,cpu會(huì)將esp的值賦給ebp,此時(shí)就可以通過(guò)ebp對(duì)棧進(jìn)行操作,比如獲取函數(shù)參數(shù),局部變量等,實(shí)際上使用esp也可以,只是esp可能會(huì)變化,去數(shù)據(jù)的時(shí)候很不方便
下面我們通過(guò)一個(gè)例子來(lái)說(shuō)明:
#include "stdio.h"int function_add(int a,int b); int main() {int a=1,b=1,sum=0;sum=function_add(a,b);printf("sum=%d",sum);return 0; } int function_add(int a,int b) {return a+b;}這段程序的功能是定義一個(gè)函數(shù),實(shí)現(xiàn)兩個(gè)參數(shù)相加,然后打印出來(lái),下面來(lái)分析,
int a=1,b=1,sum=0;sum=function_add(a,b);這兩句反匯編如下:
7: int a=1,b=1,sum=0; 00401038 C7 45 FC 01 00 00 00 mov dword ptr [ebp-4],1 ;偏移地址為[ebp-4]存放1 0040103F C7 45 F8 01 00 00 00 mov dword ptr [ebp-8],1 ;偏移地址為[ebp-8]存放1 00401046 C7 45 F4 00 00 00 00 mov dword ptr [ebp-0Ch],0 ;偏移地址為[ebp-0ch]存放0 8: sum=function_add(a,b); 0040104D 8B 45 F8 mov eax,dword ptr [ebp-8] ;eax的值設(shè)置為1 00401050 50 push eax ;壓入棧 00401051 8B 4D FC mov ecx,dword ptr [ebp-4] ;ecx的值設(shè)置為1 00401054 51 push ecx ;入棧 00401055 E8 AB FF FF FF call @ILT+0(function_add) (00401005) 0040105A 83 C4 08 add esp,8 0040105D 89 45 F4 mov dword ptr [ebp-0Ch],eax當(dāng)執(zhí)行到這段代碼會(huì)調(diào)到function_add函數(shù)執(zhí)行
call @ILT+0(function_add) (00401005)這段一共push兩次,假設(shè)在沒(méi)有這兩次push前,設(shè)esp=M,push兩次后,esp=M-8
執(zhí)行call語(yǔ)句 esp=M-12
function_add反匯編的代碼為:
我們可以看到在函數(shù)前面,首先將ebp壓入棧,然后將esp的值賦值給ebp,此時(shí)
esp=M-16,ebp的值和esp相同
此時(shí)棧里情況為:
在函數(shù)里,都是通過(guò)ebp對(duì)棧的數(shù)據(jù)進(jìn)行操作的,比如獲取參數(shù)的值,
004010B8 8B 45 08 mov eax,dword ptr [ebp+8] 004010BB 03 45 0C add eax,dword ptr [ebp+0Ch]因?yàn)樵诤瘮?shù)里,esp的值可能是變化的,ebp的值不變,通過(guò)ebp來(lái)操作數(shù)據(jù)很方便
在最后:
將esp,ebp的值變成調(diào)用function_add之前的值,這樣看起來(lái)只是實(shí)現(xiàn)函數(shù)的功能,其他并沒(méi)有啥變化,再使用ret語(yǔ)句,返回去,然后繼續(xù)往下執(zhí)行語(yǔ)句
0040105A 83 C4 08 add esp,8總結(jié):
總結(jié)
以上是生活随笔為你收集整理的对esp和ebp分析来了解函数的调用过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 三亚旅游团多少钱啊?
- 下一篇: 猎金行动剧情介绍