可移植可执行

维基百科,自由的百科全书
跳转至: 导航搜索
可移植性可执行文件
扩展名 .acm, .ax, .cpl, .dll, .drv, .efi, .exe, .mui, .ocx, .scr, .sys, .tsp
互联网媒体类型 application/vnd.microsoft.portable-executable
开发者 Microsoft
格式类型 二进制可执行文件目标代码函式庫
延伸自 DOS MZ可执行文件
COFF

可移植性可执行文件英语:Portable Executable,缩写为PE)是一种用于可执行文件目标文件动态链接库文件格式,主要使用在32位和64位的Windows操作系统上。“可移植的”是指该文件格式的通用性,可用于许多种不同的操作系统和体系结构中。PE文件格式封装了Windows操作系统加载可执行程序代码时所必需的一些信息。这些信息包括动态链接库API导入和导出表、资源管理数据和线程局部存储数据。在Windows NT操作系统中,PE文件格式主要用于EXE文件、DLL文件、.sys(驱动程序)和其他文件类型。可扩展固件接口(EFI)技术规范书中说明PE格式是EFI环境中的标准可执行文件格式。开头为DOS头部

PE格式是由Unix中的COFF格式修改而来的。在Windows开发环境中,PE格式也称为PE/COFF格式。

在Windows NT操作系统中,PE格式目前支持IA-32IA-64x86-64(AMD64/Intel64)的指令系统。在Windows 2000之前,Windows NT还支持MIPSAlphaPowerPC的指令系统。由于Windows CE也在使用PE文件格式,因此PE仍然支持几种不同型号的MIPS、ARM(包括Thumb)和SuperH指令系统。

PE文件格式的主要竞争对手是可执行与可链接格式(ELF)(使用于Linux和大多数Unix版本中)和Mach-O(使用于Mac OS X中)。

[编辑]

节(section)是PE文件中存储数据的划分。通常,加载到内存后,同一节的数据具有相同的内存访问属性(可读/可写/可执行等)。

常见的特殊的节:

  • .bss(Block Start with Symbol):未初始化全局变量
  • .textbss:未初始化的可执行代码节。也即这个节具有可执行属性,在PE文件中未实际占用硬盘文件空间,在加载到内存时未填充数据。这用于支持Visual Studio在Debug模式下动态编译代码功能,也即“Edit and Continue”功能。例如,一个函数在Visual Studio中设断点或单步调试,这时该函数在.text节中;修改源代码后继续执行这个函数,Visual Studio会重新编译这个函数并把它加载到.textbss节中的未利用地址空间(原为padding的部分),并修改对这个函数调用的跳转(jmp)表条目以及当前EIP寄存器值。

参见[编辑]

外部链接[编辑]