作者:Matt Pietrek
本文中大部分内容翻译自MSDN.如有翻译不正确的地方,还望大家多多指点.
摘要:对PE文件格式的深入理解能够帮助我们更好的理解操作系统.如果你真正理解DLL和EXE的本质是什么,那么将有助于你成为一名更加优秀的程序员.这篇是两篇中深入理解关于PE格式中的第一篇,首先浏览一下最近几年PE格式所发生的变化,以及PE格式
大约有好几年前(1994年),我为Microsoft System Journal所写的第一篇文章<<Peering Inside the PE: A Tour of the Win32 Portable Executable File Format",结果出乎我的意料之外.一直到今天,我仍然知道许多人在用这篇文件来帮助他们理解PE格式,而且现在在MSDN中这篇文件仍是可以查阅的.不过不幸的是,Win32世界已经发生一些变化,而我那篇文章是写于好几年前,所以很多东西是过时的.所以我从这个月开始写这篇文章来弥补这些.
你可能奇怪为什么要这么关注PE格式呢.答案是:一个操作系统的可执行文件格式能够反映一些在操作系统层面的一些东西.通过理解DLL和EXE,你能变成一个更加优秀的程序员.
当然,你可以阅读Microsoft的规范,但是这将会牺牲可读性.在这篇文件,我的重点是解释一些与之相关的的部分,来填补在规范中没有关于"怎么样"和"为什么".另外,我也有一些在规范是所没有的东西.
首先我用一个例子来说一下自从我在1994年写的那篇文章以后所发生的变化.16位的Windows已经成为了历史,所以也就没有去与16 位Windows 可执行文件格式进行比较的必要.一个受欢迎的变化是从Win32 .在Windows3.1上运行Win32 的程序是相当的不稳定的.
那时,Windows95(代号为"Chicago")还没有发行,WindowsNT版本仍在3.5,Microsoft 的连接器的设计者还没有开始为他们的可执行文件进行优化.然而,在这时Windows NT能够实现在MIPS 和DEC Alpha 平台上的运行.
自从这篇文章以后有哪些新的东西呢?64位的Windows提出了自已的PE格式.Windows CE添加了新的处理器类型.在优化方面添加了诸如DLL的延时加载,section合并....