函式呼叫詳解

2021-10-17 12:26:30 字數 907 閱讀 3293

1.push ebp將基址指標暫存器入棧,即主調函式的基址

2.mov ebp esp 將當前棧頂的值 賦給ebp 成為被調函式的ebp(記錄被調函式的基址)

3.sub esp 48h留出48h大小的空間留給棧(區域性變數 棧的緩衝空間 先給區域性變數分配空間 都是全c 為什麼都是全c呢?看第六步)

4.push ebx esi edi(將這三個暫存器的值壓入棧中)

5.lea edi [ebp-48h] (將ebp-48h的值轉化成位址賦給edi)

6.mov ecx 12h

mov eax 0ccccccch

rep stos dword ptr[edi]

rep指令的目的是重複其上面的指令.ecx的值是重複的次數.

stos指令的作用是將eax中的值拷貝到es:edi指向的位址.

7 兩個賦值 注意他們兩個變數與ebp的關係

nnum1 是ebp-4 | nnum2 是ebp-8

8函式壓棧 注意是從右到左 先壓ebp-8 然後壓ebp-4

9執行call指令 儲存主調函式的eip(就是執行到哪條語句了),修改eip為被調函式的入口,進行跳轉

先壓入引數 在壓入eip 注意下面add函式中nnum1和nnum2與ebp關係 eip也佔四個位元組

10進入add函式與這個過程一致 大家自己試著分析一下

11.add函式返回時恢復現場

11.add esp 8(兩個引數 八個位元組)直接出棧

stdcall函式呼叫約定詳解

對 stdcall 的理解 在c語言中,假設我們有這樣的乙個函式 int function int a,int b 呼叫時只要用result function 1,2 這樣的方式就可以使用這個函式。但是,當高階語言被編譯成計算機可以識別的機器碼時,有乙個問題就凸現出來 在cpu中,計算機沒有辦法知道...

Linux系統呼叫 access函式詳解

linux系統呼叫 access函式詳解 2007 07 30 23 10 access系統呼叫 功能描述 檢查呼叫程序是否可以對指定的檔案執行某種操作。用法 include include int access const char pathname,int mode 引數 pathname 需要...

Linux系統呼叫 semop函式詳解

功能描述 操作乙個或一組訊號。用法 include include include int semop int semid,struct sembuf sops,unsigned nsops int semtimedop int semid,struct sembuf sops,unsigned n...