格式
可移植的执行体PE(Portable Executable)是Win32 平台下可执行文件格式,常见的exe、dll、ocx、sys、com 都是PE文件,其可移植可执行体现在跨Win32 平台。
PE 文件格式规定了代码、菜单、图标、位图、字符串等信息在可执行
文件中如何组织
- PE 文件格式将可执行文件分成若干节(section),一个WinNT 应用程序典型地拥有9 个预定义节:.text、.bss、.rdata、.data、.pdata、.rsrc、.edata, .idata 和.debug;
- .text 由编译器产生,存放二进制的机器代码;
- .data 初始化的数据块,如全局变量、静态变量等;
- .idata 可执行文件所使用的动态链接库等外来函数与文件信息;
- .rsrc 存放程序的资源,如图标、菜单等;
- .rdata 表示只读数据区;
- 在VC 中可用#pragma data_seg() 将代码中的任意部分编译到PE的任意节,且节名可以自定义。
组织形式
-
整个格式的组成:一个MS-DOS 的MZ 头部,之后是一个实模式的残余程序、PE文件标志、PE文件头部、PE可选头部、所有的节头部,最后是所有的节实体
-
可选头部的末尾是数据目录入口的数组,这些相对虚拟地址指向节实体之中的数据目录。每个数据目录都表示了一个特定的段实体数据是如何组织的。
-
PE 文件格式有9 个预定义节,这对所有的WinNT应用程序通用的,但是每个应用程序可以为它自己的代码以及数据定义它自己独特的节。
-
.debug 预定义节也可以分离为一个单独的调试文件。如果这样的话,就会有一个特定的调试头部来用于解析这个调试文件,PE 文件中也会有一个标志来表示调试数据被分离了出去。