2.md

二、

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

1568108527498

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

1568109821990

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
原文地址:https://www.cnblogs.com/nsfoxer/p/14348050.html