综上所述,"DOS信息部分"对应框架的代码为:
可以看到最后的4个字节"40000000"也就是00000040H(下面如果直接在数值后加"H"的即表示为16进制)是指向他末尾的指针,也就是说明,我们把"DOS块"的部分给去掉了.
接下来是"PE信息部分",他的结构可以用下面的图来表示:
整个"PE信息部分"结构是这样的:
代码 |
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000000 4D 5A 00 5B D5 E2 C0 EF B6 BC C3 BB D3 C3 2C 2C MZ.[这里都没用,, 00000010 B1 C8 C8 E7 CE D2 D0 B4 3A CE D2 D2 B2 D6 BB 2C 比如我写:我也只, 00000020 CA C7 D2 BB B0 E3 CB A7 2C B2 BB CA C7 CC D8 2C 是一般帅,不是特,8 00000030 B1 F0 CB A7 B5 C4 C0 B2 5D 00 00 00 40 00 00 00 别帅的啦]...@... |
可以看到最后的4个字节"40000000"也就是00000040H(下面如果直接在数值后加"H"的即表示为16进制)是指向他末尾的指针,也就是说明,我们把"DOS块"的部分给去掉了.
接下来是"PE信息部分",他的结构可以用下面的图来表示:
引用 |
+++++++++++++++++++++++++++++++++++++++++++++ + +++++++++++++++++++++++++++++++++++++++ + + +[PE标志][0x04] + + + +++++++++++++++++++++++++++++++++++++++ + + + <==PE信息部分 + +++++++++++++++++++++++++++++++++++++++ + + +[PE文件头][0x18] + + + +++++++++++++++++++++++++++++++++++++++ + + + + +++++++++++++++++++++++++++++++++++++++ + + +[自定义数据结构][0x0e] + + + +++++++++++++++++++++++++++++++++++++++ + +++++++++++++++++++++++++++++++++++++++++++++ |
整个"PE信息部分"结构是这样的:
代码 |
typedef struct _IMAGE_NT_HEADERS { DWORD Signature; //"PE标志"段,总是"PE00" IMAGE_FILE_HEADER FileHeader; //"PE文件头"段,指向IMAGE_FILE_HEADER结构 IMAGE_OPTIONAL_HEADER OptionalHeader; //"自定义数据"段,指向IMAGE_OPTIONAL_HEADER结构< |