二、
MS-DOS头部
PE文件头部第一个字节起始于一个传统的MS-DOS头部,IMAGE-DOS-IHEADER
struct _IMAGE_DOS_IHEADER{
0X00 WORD e_magic; // MAGIC DOS sigture MZ(4Dh 5Ah) dos可执行文件
//......
//......
0X3C DWORD e_lfanew; //指向pe头
}iMAGE_DOS_IHEASER;
PE-文件头
PE 文件头紧跟DOS stub
IMAGE_NT_HEADERS struct{
+0h DWORD Signature;
+4h IMAGE_FILE_HEADER FileHeader;
+18h IMAGE_OPTIONAL_HEADER32 OptionHeader;
}IMAGE_NT_HEADERS_ENDS;
一个有效的pe文件,Signature == 00004550h
,ASCII码为PE00
。DOS头部e_lfanew
指向这里。
IMAGE_FILE_HEADER
IMAGE_OPTIONAL_HEADER32
https://www.cnblogs.com/kuangke/p/5393514.html
typedef struct _IMAGE_OPTIONAL_HEADER {
+18h WORD Magic; // 标志字, ROM 映像(0107h),普通可执行文件(010Bh)
//...
+28h DWORD AddressOfEntryPoint; // 程序执行入口RVA
//...
+34h DWORD ImageBase; // 程序的首选装载地址
+38h DWORD SectionAlignment; // 内存中的区块的对齐大小 默认1000h,4k
+3Ch DWORD FileAlignment; // 文件中的区块的对齐大小 默认为200h
//...
+78h IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
// 数据目录表
}
IMAGE_DATA_DIRECTORY
IMAGE_DATA_DIRECTORY struct{
VirtualAddress DWORD ??? // ;数据的起始RVA
isize DWORD ??? // ;数据块的长度
} IMAGE_DATA_DIRECTORY ENDS