深入理解PE文件格式:Windows可执行文件内幕

需积分: 10 1 下载量 139 浏览量 更新于2024-07-20 收藏 448KB PDF 举报
"这篇文章主要探讨了PE文件内幕,即Win32可移植可执行文件格式,它是Microsoft在所有基于Win32的系统上使用的标准,包括Windows NT、Win32s以及Windows 95。作者指出,对于使用Win32s或Windows NT的程序员来说,PE文件已经非常常见,即使是为Windows 3.1编写程序的Visual C++用户也间接接触到了PE文件。文章旨在揭示PE文件格式的内容及其与日常编程工作的关系,而不涉及过于底层的十六进制细节。作者通过线程局部变量的例子展示了PE文件的实现机制,并将Win32的PE文件格式与16位Windows的NE文件格式进行了对比。此外,文章还提及了Microsoft新采用的OBJ文件格式,这是一种与PE文件格式密切相关的对象文件格式,但由于缺乏官方文档,作者计划对其进行揭秘。文章的背景部分提到了Windows NT的设计受到VAX VMS和UNIX的影响,表明了PE格式在设计时可能借鉴了这些系统的某些特性。" 本文详细介绍了PE文件的背景和重要性,它是Microsoft操作系统的核心组成部分,适用于各种环境。PE文件格式不仅包含执行代码,还包含了运行时环境所需的各种信息,如资源、导入和导出函数、线程局部存储等。作者通过实例展示了如何在PE文件中实现特定的编程概念,如`__declspec(thread)`关键字所表示的线程局部变量,这有助于读者理解这些高级特性在底层如何工作。 在16位Windows时代,NE(New Executable)文件格式是常见的,但随着Win32的出现,PE格式因其更强的灵活性和功能而取代了NE。PE格式支持多线程、动态链接、安全特性等,这些都是16位系统所不具备的。此外,PE文件格式的结构允许在不修改原始二进制代码的情况下添加或更新资源,这对于软件维护和更新至关重要。 文章还暗示了OBJ文件格式的变化,这是一个与PE文件紧密关联的中间文件格式,用于编译器和汇编器生成的目标代码。由于官方文档的缺失,作者计划在文章中自行解析这种新格式,以帮助读者了解编译和链接过程中的更多细节。 这篇资源深入解析了PE文件的内部结构,不仅对Windows系统开发者具有很高的参考价值,也是理解Win32编程和系统工作原理的重要资料。通过比较不同的文件格式,读者可以更好地理解Windows的进化历程,以及为何PE格式成为了现代Windows系统的基础。