談談PE和ELF結構中的那些小事

2021-07-14 20:23:55 字數 1353 閱讀 6173

image_file_header->machine

可執行檔案的目標cpu。通常的值是:

image_file_machine_i386 0x014c // intel 386

image_file_machine_ia64 0x020b // intel 64

image_file_machine_ia64 0x8664 // intel 64

……image_optional_header->dllflags

dllflags[6]決定。

dll characteristics:

value

含義8000

terminal server aware

2000

wdm driver

0800

no bind

0400

no seh

0200

no isolation

0100

nx compatible

0080

force integrity

0040

dynamic base動態基址

image_file_header->characteristics

characteristics[13]決定。

hi高位資料

含義8000

bytes reversed hi

4000

uniprocessor only

2000

是dll

0800

patch on net

0400

patch on removable

0200

debug stripped

0100

32 bit machine

lo低位資料

含義0080

bytes reversed lo

0040

???0020

handle >2gb address

0010

agressively trim set

0008

symbols stripped

0004

line numbers stripped

0002

executable

0001

relocations stripped

它似乎保持指向dos頭後面,但確實沒有規定e_lfanew必須指向後面,所以你可以通過將e_lfanew指向到dos頭來完成一段「壓縮」。

同樣的elf頭部起+2,+3位置沒有被使用,也可以用做儲存一些隱蔽資料。

以上資料部分從exeinfope中找出來的。

PE檔案中的IAT和IET

iat中文名叫匯入位址表 在iat中存放的是匯入的函式的rva陣列,每個元素對應乙個函式的位址 rva 通過這個rva即可找到匯入函式的位置 所以說我們必須先知道iat在哪 可選頭結構體的最後乙個成員是datadirectory 它是乙個結構體陣列 typedef struct image opti...

PE檔案載入時Section結構中的變化

pe檔案section的名稱儲存在name陣列中。當pe檔案被從磁碟載入到記憶體的過程中,本地長度為virtualsize的資料所獲得的記憶體大小為sizeofrawdata 這段資料在磁碟中相對檔案頭的偏移pointertorawdata,在記憶體中表現為這些資料的位置距離記憶體中pe起點為vir...

PE檔案解析 資源中的版本資訊結構

想要獲取乙個可執行檔案 pe檔案 裡包含的資源檔案,首先要解析可執行檔案,得到資源儲存的位址及大小,可參考 然後,根據資源儲存方式,得到各資源的資料內容及其大小,可參考 pe檔案的資源中,版本資訊的資源型別id 16。在rc檔案中,版本資訊的定義方式如下 vs version info versio...