用户可以在此放入任何的残余程序,这就意味着你可能经常看到像这样的东西: “ You can''t
run a Windows NT application on OS/2, it''s simply not possible. ”
当为 Windows 3.1 构建一个应用程序的时候,链接器将向你的可执行文件中链接一个名 为
WINSTUB.EXE 的默认残余程序 。 你可以用一个基于 MS-DOS 的有效程序取代 WINSTUB , 并且用 STU B
模块定义语句指示链接器,这样就能够取代链接器的默认行为。为 Windows NT 开发的应用程序
可以通过使用 -STUB: 链接器选项来实现 。 不同的文件 , 其大小不一样 , 即图 1 中 (2) 部分的大小
由 MS-DOS 头的域 e_lfnew 来确定。
3.3
3.3
3.3
3.3 PE
PE
PE
PE 文件头部与标志
PE 文件头部 的地址( peheader ) 是由 MS-DOS 头部的 e_lfanew 域定位的,这个域只是给出
了文件的偏移量 , 所以要确定 PE 头部的实际内存映射地址 , 就需要添加文件的内存映射基地址
。
P eheader = dos_head + dos_head->e_lfanew 。 PE 文件头部的定义,即图 1 中 (3) 部分的定义如
下: The IMAGE_NT_HEADERS structure represents the PE header format.
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature ;
IMAGE_FILE_HEADER FileHeader ;
IMAGE_OPTIONAL_HEADER OptionalHeader ;
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;
其中,文件头 FileHeader 的结构体定义如下:
The IMAGE_FILE_HEADER structure represents the COFF header format.
typedef struct _IMAGE_FILE_HEADER {
WORD Machine ;
WORD NumberOfSections ;
DWORD TimeDateStamp ;
DWORD PointerToSymbolTable ;
DWORD NumberOfSymbols ;
WORD SizeOfOptionalHeader ;
WORD Characteristics ;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
这个 文件头结构中一个有用的入口是 NumberOfSections 域 , 它表示如果你要方便地提取文
件信息的话,就需要了解多少个段 , 更明确一点来说,有多少个段头部和多少个段实体。每一
个段头部和段实体都在文件中连续地排列着,所以要决定段头部和段实体在哪里结束的话,段