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. |