发布网友
共1个回答
热心网友
Portable 是指对于不同的Windows版本和不同的CPU类型上PE文件的格式是一样的,当然CPU不一样了,CPU指令的二进制编码是不一样的。只是文件中各种东西的布局是一样的。
PE文件使用的是一个平面地址空间,所有代码和数据都合并在一起,组成一个很大的结构。主要有:
下面是一个简化的PE文件格式 简化PE文件格式DOS MZ Header PE Header Section Table Section 1 Section 2 ... Section n Dos Mz head 和Dos stub和称Dos文件头,PE文件的第一个字节起始于于MS-DOS头部,被称作IMAGE_DOS_HEADER.紧随Dos stub的是PE文件头(PE Header),PE Header的PE相关结构NT映像头(IMAGE_NT_HEADERS)的简称,其中包含许多PE装载器用到的重要字段。
1、入口点 Entry Point
2、文件偏移地址 File Offset
3、虚拟地址 Virtual Address 简称:VA
4、基地址 ImageBase
5、相对虚拟地址 Relative Virual Address 简称:RVA
公式: RVA (相对虚拟地址) =VA (虚拟地址) - ImageBase (基地址)
文件偏移地址和虚拟地址转换
在X86系统中,每个内存页的大小是4KB,即0X1000个字节。
文件偏移地址 File Offset = RVA (相对虚拟地址) - ΔK
文件偏移地址 File Offset = VA (虚拟地址) - ImageBase (基地址) - ΔK
pe具体结构图:
pe格式的结构体定义可以在编译器的include文件夹里的winnt.h找到。