PE 繫結匯入表

2022-03-13 21:51:34 字數 2313 閱讀 4296

pe在載入前 int表和iat表都指向乙個名稱表

但是有些程式,如果你列印該程式的iat表的時候會指向位址中發現裡面是位址?

如果我們事先先把iat表中的所需要用到的dll函式位址都填好的話,是不是能夠節省程式啟動的時間?

那麼如何判斷該程式是否進行了繫結匯入的操作呢?

在檔案中iat表是否填寫位址,依據的地方 就是 匯入表中的 timedatestamp (時間戳)成員, 如果為0 則是這個dll沒有繫結, 如果為-1 則是這個dll進行了繫結匯入

如下圖:這個是進行了繫結匯入的操作,所以列印pimport_descriptor的timedatestamp為ffffffff,有符號也就是-1

怎麼判斷匯入表中的 iat表函式位址是否繫結 根據 timedatastamp進行判斷. 0未繫結 -1繫結

真正的繫結時間存放在繫結匯入表image_bound_import_descriptor的timedatestamp的屬性中

timedatestamp == 0 未繫結

timedatestamp == -1 已繫結

定位方法:

在pe可選頭結構中的資料目錄的第12項

typedef struct _image_bound_import_descriptor  image_bound_import_descriptor,  *pimage_bound_import_descriptor;
我們的乙個dll可能依賴其他的dll, 所以匯入表的最後乙個成員是依賴的dll有幾個,如果有兩個,那麼緊跟著下面就是依賴的dll的繫結匯入表結構

關於依賴dll的結構體如下:

typedef struct _image_bound_forwarder_ref  image_bound_forwarder_ref, *pimage_bound_forwarder_ref;
列印繫結匯入表的**:

void printbindimporttable(pvoid pfilebuffer);

dword boung_import_descriptor_temp = null;

int i = 0;

dword rva = 0;

dword foa = 0;

pdosheader = (pimage_dos_header)pfilebuffer;

pntheader = (pimage_nt_headers)((dword)pfilebuffer+pdosheader->e_lfanew);

ppeheader = (pimage_file_header)(((dword)pntheader) + 4);

poptionheader = (pimage_optional_header32)((dword)ppeheader+image_sizeof_file_header);

psectionheader = (pimage_section_header)((dword)poptionheader + image_sizeof_nt_optional_header);

rva_to_foa(pfilebuffer, poptionheader->datadirectory[11].virtualaddress,&foa);

//儲存第乙個descriptor的位址 後面加offsetmodulename來進行使用

boung_import_descriptor_temp = (dword)pfilebuffer+(dword)foa;

//開始進行列印操作

PE檔案 匯入表,匯出表

typedef struct image import descriptor dword timedatestamp dword forwarderchain dword name 庫名稱字串位址 dword firstthunk iat的位址 typedef struct image data d...

PE檔案結構詳解(四)PE匯入表

pe檔案結構詳解 二 可執行檔案頭的最後展示了乙個陣列,pe檔案結構詳解 三 pe匯出表中解釋了其中第一項的格式,本篇文章來揭示這個陣列中的第二項 image directory entry import,即匯入表。也許大家注意到過,在image data directory中,有幾項的名字都和匯入...

PE檔案結構詳解(四)PE匯入表

pe檔案結構詳解 二 可執行檔案頭的最後展示了乙個陣列,pe檔案結構詳解 三 pe匯出表中解釋了其中第一項的格式,本篇文章來揭示這個陣列中的第二項 image directory entry import,即匯入表。也許大家注意到過,在image data directory中,有幾項的名字都和匯入...