WEB开发网
开发学院软件开发VC PE文件格式详解(上) 阅读

PE文件格式详解(上)

 2006-07-20 11:43:30 来源:WEB开发网   
核心提示: 实模式残余程序实模式残余程序是一个在装载时能够被MS-DOS运行的实际程序,对于一个MS-DOS的可执行映像文件,PE文件格式详解(上)(4),应用程序就是从这里执行的,对于Windows、OS/2、Windows NT这些操作系统来说,同样,对于PE文件格式,MS-DOS残余程序就代替了

实模式残余程序

实模式残余程序是一个在装载时能够被MS-DOS运行的实际程序。对于一个MS-DOS的可执行映像文件,应用程序就是从这里执行的。对于Windows、OS/2、Windows NT这些操作系统来说,MS-DOS残余程序就代替了主程序的位置被放在这里。这种残余程序通常什么也不做,而只是输出一行文本,例如:“This program requires Microsoft Windows v3.1 or greater.”当然,用户可以在此放入任何的残余程序,这就意味着你可能经常看到像这样的东西:“You can''t run a Windows NT application on OS/2, it''s simply not possible.”

当为Windows 3.1构建一个应用程序的时候,链接器将向你的可执行文件中链接一个名为WINSTUB.EXE的默认残余程序。你可以用一个基于MS-DOS的有效程序取代WINSTUB,并且用STUB模块定义语句指示链接器,这样就能够取代链接器的默认行为。为Windows NT开发的应用程序可以通过使用-STUB:链接器选项来实现。

PE文件头部与标志

PE文件头部是由MS-DOS头部的e_lfanew域定位的,这个域只是给出了文件的偏移量,所以要确定PE头部的实际内存映射地址,就需要添加文件的内存映射基地址。例如,以下的宏是包含在PEFILE.H源文件之中的:

//PEFILE.H
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + \
            ((PIMAGE_DOS_HEADER)a)->e_lfanew))
在处理PE文件信息的时候,我发现文件之中有些位置需要经常查阅。既然这些位置仅仅是对文件的偏移量,那么用宏来实现这些定位就比较容易,因为它们较之函数有更好的表现。

请注意这个宏所获得的是PE文件标志,而并非PE文件头部的偏移量。那是由于自Windows与OS/2的可执行文件开始,.EXE文件都被赋予了目标操作系统的标志。对于Windows NT的PE文件格式而言,这一标志在PE文件头部结构之前。在Windows和OS/2的某些版本中,这一标志是文件头的第一个字。同样,对于PE文件格式,Windows NT使用了一个DWORD值。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:PE 文件 格式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接