B
beta
Unregistered / Unconfirmed
GUEST, unregistred user!
暂时只翻译了一小部分.先贴出来看看,有什么问题即使纠正:<br><br> windows exe文件的格式(3.1)<br><br>//由DFW beta翻译,如有不当之处还望来信告知: xbeta@163.net<br>//对于我拿不准的,均附有原文,当然,如果第二次出现,则不用再加了<br><br>一个windows可执行文件是一个代码和数据或者是代码,数据,资源的联合.<br>同时,可执行文件包含两个文件头:dos文件头和windows文件头.<br>接下来的两个区(section)描述了这两个文件头;第三个段则是描述可执行文件中的代码和数据的.<br><br>dos文件头<br><br>dos文件头(旧式的)包含4个独特的部分:<br> 1)文件头信息的集合(collection)[例如:标志字(signature word),文件长度等等]<br> 2)保留区<br> 3)指向windows文件头的指针(如果有windows文件头的话)<br> 4)残余程序(stub program)<br><br>如果在偏移为18h处的word值为40h或更大的话,那么3ch处的word值则为windows文件头的偏移量.<br>应用程序必须校验每一个被测试(being tested)的可执行文件头,因为少数程序有不同的文件头风格.<br>如果用户企图在windows启动(be loaded)前运行它的话,ms-dos将用残余程序来显示某些信息.<br><br>windows文件头<br><br>windows文件头(新式的)含有装载程序(loader)所需要的文件段(segmented executable files)信息.<br>这些信息包括连接器(linker)版本号,连接器指定(specify)的数据,资源编译器(resource compiler)<br>指定的数据,段数据表(tables of segment data),资源数据表等等.<br>接下来的部分将叙述windows文件头的内容.<br><br>信息块(information block)<br><br>windows文件头的信息块包括连接器版本号,进一步描述该文件的各表的长度,从文件头的开始到这些<br>表的偏移量,堆和栈的长度等.<br>下面的列表总结了文件头信息块的内容(其位置与该块的起点有关):<br><br>偏移(location) 描述<br><br>00h 标志字.低位"N"(4eh),高位"E"(45h)<br>02h 连接器版本号<br>03h 连接器修订版本号(revision number)<br>04h 入口表(entry table)的偏移量(与文件头的起点有关)<br>06h 入口表的长度(以字节为单位)<br>08h 保留<br>0ch 描述文件内容的标志位.该标志位可以是以下的值:<br><br> 位(bit) 意义<br><br> 0 如果此为单数据段(singledata)程序,连接器将置此位为1.如果是dll,则此位被置1.<br> 1 如果此位多数据段(multipledata)程序,连接器将置此位为1.如果是windows程序,此位<br> 被置1.<br><br> 如果0,1两位都没被置,那么,该文件没有自动数据(autodata),即没有自动数据段(automatic data <br> segment).<br><br> 2 保留. <br> 3 保留. <br> 8 保留. <br> 9 保留. <br> 11 如果该位被设,表明文件的第一个段(segment)包含调用程序的代码.<br> 13 如果该位被设,连接器将在联接时监测错误,但仍然会建立一个可执行文件.<br> 14 保留. <br> 15 如果该位被设,表明该文件是一个库模块(library module).<br><br> 如果第15位被置,cs:ip寄存器将指向一个由ax寄存器的值--即模句柄(module handle)--所指定的<br> 初始化过程,该初始化过程必须执行一个远程返回(far return)给调用者(caller).如果过程执行<br> 成功ax寄存器的值为非零,否则,ax寄存器的值为零.如果是单数据段程序,ds寄存器将指向库的数<br> 据段(library's data segment),否则ds将指向载入该库的程序(application that loads the <br> library)的数据段.<br>