深入理解Win32可移植可执行文件格式(PE)

需积分: 10 7 下载量 20 浏览量 更新于2024-12-18 收藏 406KB PDF 举报
"这篇文章是关于Win32可移植可执行文件格式(PE文件)的深入探索,由Matt Pietrek撰写。PE格式是Microsoft为所有基于Win32的系统,包括Windows NT、Win32s和Windows 95设计的,且在后续的操作系统如Windows 2000中继续扮演关键角色。作者并未要求读者深入研究十六进制细节,而是关注PE格式如何与开发者日常工作相关,如线程局部变量的实现。文章还将Win32 PE文件格式与16位Windows的NE文件格式进行了对比,并提及Microsoft的新OBJ文件格式,该格式与PE有相似之处,但由于缺乏官方文档,作者将对其进行揭秘。Windows NT的设计受到了VAX VMS和UNIX的影响,其开发团队成员此前有在这些平台上工作的经验。" 在这篇文章中,作者首先强调了可执行文件格式与操作系统的紧密联系,尽管不是每个程序员都会深入研究这个主题,但理解PE格式能提供宝贵的知识。PE文件包含了运行时环境所需的各种信息,如代码、数据、资源和元数据,支持Win32 API的功能,如动态链接库(DLL)、线程和进程管理等。 作者以 "__declspec(thread) int i" 这个声明为例,解释了线程局部存储(TLS)的概念,即变量i在每个线程中都有独立的副本。在PE文件中,TLS的实现是通过特定的数据结构和索引机制完成的,这使得在多线程程序中高效地管理和访问线程局部变量成为可能。 文章接着回顾了16位Windows时代的NE文件格式,指出PE格式相对于NE的改进,包括更强大的模块性和对32位地址空间的支持。这种进化反映了Windows从16位到32位架构的转变,为更复杂的软件和更大的内存管理提供了基础。 然后,作者提到了Microsoft的OBJ文件格式,这是编译器和汇编器生成的中间文件格式,它与PE格式有着密切的关联。由于缺乏官方文档,作者计划通过自己的分析揭示OBJ格式的一些关键特性,这将帮助读者更好地理解编译和链接过程。 最后,文章暗示了Windows NT的设计理念,即从VAX VMS和UNIX系统中吸取经验,如分层架构、进程和线程模型,以及错误处理机制等,这些都是构建稳定、安全和高性能操作系统的基础。 这篇“探索PE文件内幕”不仅是一篇技术性文章,也是一部关于Win32系统演进的历史记录,对于深入理解Windows操作系统的内部运作,尤其是软件开发人员来说,具有很高的价值。