從彙編看,vc呼叫API函式和自定義函式的區別

2021-04-17 00:18:10 字數 462 閱讀 4416

api函式呼叫:是先得到api函式**位址的匯入位址,再得到api函式**位址,再執行**

內部實現函式呼叫:是先調"內部實現函式"的"函式入口的靜態表(@ilt)"的對應函式,再執行真正函式**。

比如:調messageboxa(null, "test", "test", mb_ok);執行彙編**為:dword ptr [__imp__messageboxa@16 (0042b2cc)],0042b2cc實際上是messageboxa在匯入函式的(unsigned *) rva2ptr(pimage_import_descriptor->firstthunk)+i,實際上是api函式**位址的匯入位址

調自定義函式mymessageboxa(null, "test", "test", mb_ok);執行彙編**為:

call        @ilt+25(mymessageboxa) (0040101e),@ilt實際上是函式入口的靜態表

從彙編看函式呼叫

首先介紹幾個名詞 棧幀 也叫過程活動記錄,是編譯器用來實現過程 函式呼叫的一種資料結構。棧幀中儲存了該函式的返回位址和區域性變數。暫存器 cpu內部用來存放資料的一些小型儲存區域,用來暫時存放參與運算的資料和運算結果。常用的暫存器有 esp 棧指標暫存器 extended stack pointer...

彙編看函式呼叫過程

分析下列原始碼 include dword stdcall function dword dwp1,pvoid p2 int main 轉彙編 vs2012 include dword stdcall function dword dwp1,pvoid p2 00fe1401 pop edi edi...

通過VC學習反彙編 函式呼叫 呼叫約定

呼叫約定決定了以下內容 函式引數的壓棧順序 由呼叫者還是被呼叫者平衡堆疊。3.1 cdecl cdecl是c和c 程式的預設呼叫約定 引數通過堆疊來傳遞,從右向左依次入棧,由呼叫者平衡堆疊。同樣的 我們在addint函式前面加上 cdecl呼叫約定 int cdecl addint int a,in...