程式呼叫匯入函式過程詳解

2021-09-27 07:53:32 字數 757 閱讀 3096

在日常的程式開發中共享庫的使用非常普遍,是**重用非常重要的技術。那麼程式是如何呼叫共享庫中的**段的呢?首先看一段彙編**如下圖,其中呼叫了兩個匯入函式messageboxa(user32.dll)和exitprocess(kernel32.dll),以第乙個函式為例進行分析,其中非常關鍵的一行**是:jmp near dword ptr ds:[bd2008],無條件轉移指令跳轉到0xbd2008所存放位址的位置,那麼問題是0xbd2008處的值是多少呢?

通過od的memory map視窗可以找到此位置,具體值如下圖所示,可以看到我們其實jmp指令最終會跳轉到0x76d6ff46處。

那麼這裡的問題是之前的位址0xbd2008是什麼呢?其實是iat中被呼叫函式位址所對應的項的位址。windows載入器在將pe檔案載入到記憶體中時其首先會解析匯入表,首先解析每乙個image_import_descriptor結構根據name1指向的dll的名稱將對應的共享庫載入進入記憶體,接著由橋1指向的int對應共享庫中的函式名稱得到記憶體中實際函式**的va並填充到對應iat的相應項(注意:匯入函式位址表地和匯入函式名稱表是一一對應的)。

方法 函式 過程

封裝了一段邏輯 或者實現特定的功能 方法可以重複被呼叫 增加了 的復用 提公升開發效率 方法五要素 修飾詞 返回值型別 方法名 引數列表 main函式 public static void main string args 修飾詞 public static 返回值型別 void 表示該函式沒有返回...

MySQL 定時函式 過程demo

函式 設定好時區 set time zone 8 00 開啟事件排程器 set global event scheduler 1 drop event if exists commission zjdj a every hours 設定分隔符為 delimiter create event comm...

快速排序分治函式過程總結

假設我們已經知道快速排序的演算法框架時,我們已經可以從巨集觀地去掌握快速排序演算法的思想。但是快速排序演算法的關鍵還是在於劃分操縱,同時快速排序的效能主要取決於劃分操作的好壞。快速排序分治partition過程有兩種方法 1 兩個下標分別從首 尾向中間掃瞄的方法 2 兩個指標索引一前一後逐步向後掃瞄...