作者:陆麟
转载请征得作者同意.
1999.8.17
今天我的PE分析器写完了COFFHEAD部分.接下来也该写点东西给主页了:)
在COFFHEAD下面有一个至关重要的数字.这个数字乃6.0和以前PE格式的根本去别的识别字.
先说说MS可执行文件的限制.MS对一个WIN32可执行文件的大小限制为4G.当然是根据该文件所需分配内存为计算条件.包括代码,数据,栈,线程局部存储...但是目前的WIN32平台包括9X和NT4,都给了应用程序不到2G的可用空间.(NT4SP3开始,如果应用程序标志位IMAGE_FILE_LARGE_ADDRESS_AWARE为1的话,系统将给应用程序近3G的可用空间.)那么如果一个应用程序映象真的要4G,岂非大是糟糕.这样的程序尽管符合规范,但是却永远运行不起来.现在,MS为了新的64位OS已经打好准备.应用程序映象可以真正达到4G,而且可以用64位地址了.
这个标志就在于紧接于COFFHEAD后的2字节里.当年如果该处值为10BH的话,就说明字节的确是个PE32文件.而现在MS扩展了该处的含义.如果该处值为20BH,就说明本文件是个PE32增强文件.
也就是说:
本程序可能用了64位的地址指针,而且标志位后面的数据格式不同于老的PE32文件了.
在该标志位后乃是OPTIONAL HEADER.所有的可执行文件都必须有一个这样的头,将对可执行映象定位起到决定性的作用.而OBJ文件可以有,但是通常情况下,该OPTIONAL
HEADER没有功能.
在规范里,老PE32可选头的大小为224字节.而增强PE32的可选头的大小为240字节.该处大小有COFFHEAD偏移16字节处的WORD决定.
关于可选头的详细细节且听下回分解.