typedef struct _IMAGE_FILE_HEADER
{
+04h WORD Machine; // 運行平臺
+06h WORD NumberOfSections; // 文件的區塊數目
+08h DWORD TimeDateStamp; // 文件建立日期和時間
+0Ch DWORD PointerToSymbolTable; // 指向符號表(主要用於調試)
+10h DWORD NumberOfSymbols; // 符號表中符號個數(同上)
+14h WORD SizeOfOptionalHeader; // IMAGE_OPTIONAL_HEADER32 結構大小
+16h WORD Characteristics; // 文件屬性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
該結構以下圖所示:
下邊,小甲魚童鞋爲你們詳細解釋各個成員的含義和用法:
(1)Machine:可執行文件的目標CPU類型。
Value |
Meaning |
-
IMAGE_FILE_MACHINE_I386
-
0x014c
|
x86數據結構 |
-
IMAGE_FILE_MACHINE_IA64
-
0x0200
|
Intel Itaniumapp |
-
IMAGE_FILE_MACHINE_AMD64
-
0x8664
|
x64函數 |
(2)NumberOfSection: 區塊的數目。(注:區塊表是緊跟在 IMAGE_NT_HEADERS 後邊的)
(3)TimeDataStamp: 代表文件是什麼時候被建立的。
提示:VC的話能夠用_ctime 函數或者 gmtime 函數。
(4)PointerToSymbolTable: COFF 符號表的文件偏移位置,如今基本沒用了。
(5)NumberOfSymbols: 若是有COFF 符號表,它表明其中的符號數目,COFF符號是一個大小固定的結構,若是想找到COFF 符號表的結束位置,則須要這個變量。
(6)SizeOfOptionalHeader: 緊跟着IMAGE_FILE_HEADER 後邊的數據結構(IMAGE_OPTIONAL_HEADER)的大小。(對於32位PE文件,這個值一般是00E0h;對於64位PE32+文件,這個值是00F0h )。
(7)Characteristics: 文件屬性,有選擇的經過幾個值能夠運算獲得。( 這些標誌的有效值是定義於 winnt.h 內的 IMAGE_FILE_** 的值,具體含義見下表。普通的EXE文件這個字段的值通常是 0100h,DLL文件這個字段的值通常是 210Eh。)小甲魚舒適提示:多種屬性能夠經過 「或運算」 使得同時擁有!
Value |
Meaning |
-
IMAGE_FILE_RELOCS_STRIPPED
-
0x0001
|
Relocation information was stripped from the 學習 file. The file must be loaded at its preferredui base address. If the base address is not spa available, the loader reports an error.翻譯 |
-
IMAGE_FILE_EXECUTABLE_IMAGE
-
0x0002
|
The file is executable (there are no unresolved 調試 external references).orm |
-
IMAGE_FILE_LINE_NUMS_STRIPPED
-
0x0004
|
COFF line numbers were stripped from the file. |
-
IMAGE_FILE_LOCAL_SYMS_STRIPPED
-
0x0008
|
COFF symbol table entries were stripped from file. |
-
IMAGE_FILE_AGGRESIVE_WS_TRIM
-
0x0010
|
Aggressively trim the working set. This value is obsolete as of Windows 2000. |
-
IMAGE_FILE_LARGE_ADDRESS_AWARE
-
0x0020
|
The application can handle addresses larger than 2 GB. |
-
IMAGE_FILE_BYTES_REVERSED_LO
-
0x0080
|
The bytes of the word are reversed. This flag is obsolete. |
-
IMAGE_FILE_32BIT_MACHINE
-
0x0100
|
The computer supports 32-bit words. |
-
IMAGE_FILE_DEBUG_STRIPPED
-
0x0200
|
Debugging information was removed and stored separately in another file. |
-
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
-
0x0400
|
If the image is on removable media, copy it to and run it from the swap file. |
-
IMAGE_FILE_NET_RUN_FROM_SWAP
-
0x0800
|
If the image is on the network, copy it to and run it from the swap file. |
-
IMAGE_FILE_SYSTEM
-
0x1000
|
The image is a system file. |
-
IMAGE_FILE_DLL
-
0x2000
|
The image is a DLL file. While it is an executable file, it cannot be run directly. |
-
IMAGE_FILE_UP_SYSTEM_ONLY
-
0x4000
|
The file should be run only on a uniprocessor computer. |
-
IMAGE_FILE_BYTES_REVERSED_HI
-
0x8000
|
The bytes of the word are reversed. This flag is obsolete. |