什么是Windows可移植可执行文件格式?

Windows 可移植可执行文件 (PE) 是可执行文件和其他二进制文件类型的 Windows 本机文件格式 。PE 文件格式被设计为独立于平台,因此它可以在任何运行相同操作系统版本和处理器体系结构的 Windows 机器上使用,该文件是为该文件编译的 。
因此,让我们剖析 Windows PE 文件格式,并了解其结构和组成部分 。
什么是 Windows 可移植可执行文件?

什么是Windows可移植可执行文件格式?

文章插图
在探索 Windows 可移植可执行文件格式之前,了解基础知识很重要 。让我们退后一步,了解一下 Windows PE 的底层概念——COFF 。
当您将源代码编译为程序时,编译器会生成一个目标文件 (.obj) 。该目标文件包含二进制格式的计算机指令 。
COFF 或通用对象文件格式是一组用于表示二进制指令的标准化约定 。COFF 有助于保持跨平台兼容性,因为所有 COFF 文件格式都遵循相同的一组规则和约定来组织代码和数据 。尽管 COFF 最初是为在 *NIX 系统上使用而开发的,但它现在在所有平台上无处不在 。
Windows 可移植可执行 (PE) 文件格式是 COFF 的修改版,已开发为专门用于32 位和 64 位 Windows 系统 。与为目标文件提供标准化格式的 COFF 不同,Windows PE 为可执行文件和库文件提供标准化格式 。
它包含部分和标题,提供有关可执行文件的信息,并帮助系统加载程序管理与可执行文件相关的数据 。PE 文件中的标头帮助系统加载程序将文件映射到内存、解决 API 导出/导入等依赖关系、管理资源并准备文件以供执行 。
Linux 也有自己的 COFF 迭代;它称为可执行链接文件或简称为 ELF 二进制文件 。您可以通过在 Linux 上以文件名作为第一个参数运行文件命令来检查文件是否为 ELF。
Windows 可移植可执行文件的结构
什么是Windows可移植可执行文件格式?

文章插图
可移植可执行文件格式由几个组件组成,每个组件都有特定的用途 。这些组件包括:
  • 节头,描述文件每个节的布局和特征 节本身,包含可执行代码、数据和资源 。
  • PE 标头,它提供有关文件的整体结构和要求的信息 。
  • DOS 标头,其中包含一个小程序,该小程序在文件在 DOS 系统上执行时运行 。
  • 最后是 PE 部分标题,它描述了每个部分在文件中的位置和属性 。
总的来说,这些组件协同工作以创建一种结构化格式,允许操作系统正确加载、执行和管理文件中包含的可执行代码 。让我们确切了解每个组件的作用 。
DOS 标头
PE 文件的第一部分称为 DOS 标头 。少量可执行代码存储在 DOS 头文件中,这些代码也可以在 DOS 机器上运行 。
此代码也称为 MS-DOS 存根,用于在不支持 PE 文件的系统上抛出错误消息 。
文件头
Portable Executable 标头提供有关可执行文件的信息,例如文件有多大、不同部分所在的位置以及可执行文件需要哪些资源 。PE 标头还包含有关可执行文件类型的信息,无论它是Windows .DLL 文件还是 .EXE 。
章节标题
实现部分是为了组织可执行文件的许多组件,例如代码、数据和资源(如文本字符串、图像等) 。部分标题包括有关每个部分的大小和位置的信息,以及任何关联的标志 。
与每个节头关联的标志可以指示该节的各种属性,例如它是可执行的、可写的还是可读的 。这些标志有助于操作系统在程序执行期间正确加载和管理每个部分的内容 。
部分
这些部分本身包含可执行文件的真实代码、数据和资源 。每个段都与特定的内存边界对齐,并具有自己的一组属性,这些属性会影响操作系统如何处理它 。
现在您对 Windows 可移植可执行文件格式了如指掌
Windows 可移植可执行文件是一种强大且通用的文件格式,用于生成各种 Windows 应用程序和系统组件 。通过了解 PE 文件格式的结构,开发人员可以构建利用 Windows 独特特性的高效应用程序 。
【什么是Windows可移植可执行文件格式?】除了深入了解您的应用程序将运行的平台之外,通过遵循一些标准的良好编码实践,您将能够最大限度地提高应用程序的质量,而不管它运行在什么平台上 。