反彙編之簡單函式呼叫

2021-05-08 03:10:18 字數 2245 閱讀 3029

簡單的函式呼叫,通過反彙編可以清楚了解

舉例:

#include int add(int a,int b)

int main(void)

這是乙個簡單的通過呼叫函式計算兩數之和的程式

vc6.0生成的彙編**如下:

ebp:棧低(高位址),esp:棧頂(低位址)

add函式

push ebp //ebp=1000 esp=896

mov ebp,esp //ebp=896 esp=896 至此add棧往上依次是 main棧ebp,返回位址,引數

sub esp,44h //ebp=896 esp=828

push ebx

push esi

push edi //ebp=896 esp=816

lea edi,[ebp-44h]

mov ecx,11h

mov eax,0cccccccch

rep stos dword ptr [edi]

int c=0;

mov dword ptr [ebp-4],0

c=a+b;

mov eax,dword ptr [ebp+8]

add eax,dword ptr [ebp+0ch]

mov dword ptr [ebp-4],eax

return c;

mov eax,dword ptr [ebp-4] //在add函式返回以前,都是在操作自己的區域性變數的棧空間

pop edi

pop esi

pop ebx //ebp=896 esp=828 在add函式返回以前恢復暫存器的值

mov esp,ebp//ebp=896 esp=896

pop ebp //ebp=1000 esp=900

ret //ebp=1000 esp=904 把返回位址從main棧中彈出到指令暫存器 esp+4

main函式

push ebp

mov ebp,esp //得到main棧的棧頂位址,為了敘述方便假設此時的棧基址 ebp=1000 esp=1000

sub esp,4ch //為main棧開闢76個位元組的區域用於區域性變數使用 ebp=1000 esp=924

push ebx

push esi

push edi //需要保護的暫存器值壓棧 ebp=1000 esp=912

lea edi,[ebp-4ch]

mov ecx,13h

mov eax,0cccccccch

rep stos dword ptr [edi] //區域性變數初始化,debug模式下是此值,release模式區域性變數為不定值

int x=0;

mov dword ptr [ebp-4],0

int y=3;

mov dword ptr [ebp-8],3

int z=4;

mov dword ptr [ebp-0ch],4 //區域性變數按照定義的順序儲存在main棧中

x=add(y,z);

mov eax,dword ptr [ebp-0ch]

push eax

mov ecx,dword ptr [ebp-8]

push ecx //把引數按照stdcall方式從右到左壓棧 ebp=1000 esp=904

call @ilt+15(_add) (00401014)//把返回位址壓棧並跳轉至add函式 ebp=1000 esp=900

add esp,8 //引數部分的出棧工作由呼叫函式來完成 ebp=1000 esp=912

mov dword ptr [ebp-4],eax //返回的變數放到x中

return 0;

反彙編 函式巢狀呼叫

實現的功能 兩層函式呼叫,外層函式的傳入的兩個引數再傳到子函式中相加,實現四個數相加返回 004010e8 6a 03 push 3 壓入3 004010ea 6a 02 push 2 壓入2 004010ec 6a 01 push 1 壓入1 004010ee e8 12ffffff call s...

簡單反彙編之if判斷

什麼都是從簡單開始發展的,反彙編也不例外,最近學習了如何在vc中檢視及反彙編 反彙編在新手看來都是很神秘的東西 也包括我 感覺很牛,不過也倒是,反彙編猶如武俠中的 吸星 這個比喻一點都不過分,會了 吸星 的人想要誰的功夫只要一伸手就可以得來,不過能練成 吸星 的牛人也不多,因為在練習的時候要堅受苦練...

反彙編深入分析函式呼叫

函式 int fun inta,intb int main f11 跟蹤到fun,alt 8 看反彙編 00401078push1100h 引數壓棧,這裡遵循 cdecl 呼叫規範,引數由右向左 0040107d push8899h 壓棧 00401082call ilt 0 fun 0040100...