PE文件结构Word文档格式.docx
- 文档编号:16173497
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:21
- 大小:42.59KB
PE文件结构Word文档格式.docx
《PE文件结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《PE文件结构Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
代替的,我会向你介绍包含在PE文件中的概念,并且将他们和你每天都遇到的东西联系起来。
比如,线程局部变量的概念,如下所述:
declspec(thread)inti;
我快要发疯了,直到我发现它在可执行文件中实现起来是如此的简单并且优雅。
既然你们中的许多人都有使用16Windows的背景,我将把Win32PE文件的构造追溯到和它等价的16位NE文件。
除了一个不同的可执行文件格式,MicroSoft还引入了一个用它的编译器和汇编器生成的新的目标模块格式。
这个新的OBJ文件格式有许多和PE文件共同的东东。
我做了许多无用功去查找这个新的OBJ文件格式的文档。
所以我以自己的理解对它进行解析,并且,在这里,除了PE文件,我会描述它的一部分。
大家都知道,WindowsNT继承了VAX?
VMS?
和UNIX?
的传统。
许多WindowsNT的创始人在进入微软前都在这些平台上进行设计和编码。
当他们开始设计WindowsNT时,很自然的,为了最小化项目启动时间,他们会使用以前写好的并且已经测试过的工具。
用这些工具生成的并且工作的可执行和OBJ文件格式叫做COFF(CommonObjectFileFormat的首字母缩写)。
COFF的相对年龄可以用八进制的域来指定。
COFF本身是一个好的起点,但是需要扩展到一个现代操作系统如Windows95和WindowsNT的需要。
这个更新的结果就是(PE格式)可移植可执行文件格式。
它被称为"
可移植的"
是因为在所有平台(如x86,Alpha,MIPS等等)上实现的WindowsNT都使用相同的可执行文件格式。
当然了,也有许多不同的东西如二进制代码的CPU指令。
重要的是操作系统的装入器和程序设计工具不需要为任何一种CPU完全重写就能达到目的。
MicroSoft抛弃现存的32位工具和可执行文件格式的事实证实了他们想让WindowsNT升级并且运行的更快的决心。
为16位Windows编写的虚拟设备驱动程序用一种不同的32位文件布局--LE文件格式--WindowsNT出现很早以前就存在了。
比这更重要的是对OBJ文件的替换!
在WindowsNT的C编译器以前,所有的微软编译器都用Intel的OMF(ObjectModuleFormat)规范。
就像前面提到的,MicroSoft的Win32编译器生成COFF格式的OBJ文件。
一些微软的竞争者,如Borland和Symentec,选择放弃了COFF格式并坚持Intel的OMF文件格式。
这样的结果是制作OBJ和LIB的公司为了使用多个不同的编译器,不得不为每个不同的编译器分发这些库的不同版本(如果他们不这么做)。
PE文件格式在winnt.h头文件中文档化了(用最不精确的语言)!
大约在winnt.h的中间部分标题为"
ImageFormat"
的一个快。
在把MS-DOS的MZ文件头和NE文件头移入新的PE文件头之前,这个块就开始于一个小栏。
WINNT.H提供PE文件用到的生鲜数据结构的定义,但只有很少有助于理解这些数据结构和标志变量的注释。
不管谁为PE文件格式写出这样的头文件都肯定是一个信徒无疑(突然持续地冒出MichaelJ.O'
Leary的名字来)。
描述名字,连同深嵌的结构体和宏。
当你配套winnt.h进行编码时,类似下面这样的表达式并不鲜见:
pNTHeader->
OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG]
.VirtualAddress;
为了有助于逻辑的理解这些winnt.h中的信息,阅读可移植可执行和公共对象文件格式的规格说明,这些在MSDN既看光盘中是可用的,一直包括到2001年8月。
现在让我们转换到COFF格式的OBJ文件的主体上来,WINNT.H包括COFFOBJ和LIB的结构化定义和类型定义。
不幸的是,我还没有找到上面提到的可执行文件格式的类似文档。
既然PE文件和COFFOBJ文件是如此的相似,我决定是时间把这些文件带到重点上来,并且把它们也文档化。
仅仅读过了关于PE文件的组成,你自己也想Dump一些PE文件来看这些概念。
如果你用微软基于32位WINDOWS的开发工具,DUMPBIN程序可以将PE文件和COFFOBJ/LIB文件转化为可读的形式。
在所有的PEDump器中,DUMPBIN是最容易理解的。
它恰好有一些很好的选项来反汇编它正解析的文件的代码块,Borland用户可以使用tdump来浏览PE文件,但tdump不能解析COFFOBJ/LIB文件。
这不是一个重要的东西因为Borland的编译器首先就不生成COFF格式的OBJ文件。
我写了一个PE和COFFOBJ文件的Dump程序--PEDUMP(见表1),我想提供一些比DUMPBIN更加可理解的输出。
虽然它没有反汇编器以及和LIB库文件一起工作,它在其他方面和DUMPBIN是一样的,并且加入了一些新的特性来使它值得被认同。
它的源代码在任何一个MSJ电子公报版上都可以找到,所有我不打算在这里把他全部列出。
作为代替,我展示一些从PEDUMP得到的示例输出来阐明我为它们描述的概念。
译注:
--说实话,我从这这份代码中几乎唯一学到的东西就是"
如何处理命令行"
,其它的都没学到。
表1PEDUMP.C
file:
//--------------------/
//PROGRAM:
PEDUMP
//FILE:
PEDUMP.C
//AUTHOR:
MattPietrek-1993
#include<
windows.h>
stdio.h>
#include"
objdump.h"
exedump.h"
extrnvar.h"
//Globalvariablessethere,andusedinEXEDUMP.CandOBJDUMP.C
BOOLfShowRelocations=FALSE;
BOOLfShowRawSectionData=FALSE;
BOOLfShowSymbolTable=FALSE;
BOOLfShowLineNumbers=FALSE;
charHelpText[]=
"
PEDUMP-Win32/COFF.EXE/.OBJfiledumper-1993MattPietrek\n\n"
Syntax:
PEDUMP[switches]filename\n\n"
/Aincludeeverythingindump\n"
/Hincludehexdumpofsections\n"
/Lincludelinenumberinformation\n"
/Rshowbaserelocations\n"
/Sshowsymboltable\n"
;
//Openupafile,memorymapit,andcalltheappropriatedumpingroutine
voidDumpFile(LPSTRfilename)
{
HANDLEhFile;
HANDLEhFileMapping;
LPVOIDlpFileBase;
PIMAGE_DOS_HEADERdosHeader;
hFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)
{printf("
Couldn'
topenfilewithCreateFile()\n"
);
return;
}
hFileMapping=CreateFileMapping(hFile,NULL,
PAGE_READONLY,0,0,NULL);
if(hFileMapping==0)
{
CloseHandle(hFile);
printf("
topenfilemappingwithCreateFileMapping()\n"
}
lpFileBase=MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0);
if(lpFileBase==0)
CloseHandle(hFileMapping);
tmapviewoffilewithMapViewOfFile()\n"
Dumpoffile%s\n\n"
filename);
dosHeader=(PIMAGE_DOS_HEADER)lpFileBase;
if(dosHeader->
e_magic==IMAGE_DOS_SIGNATURE)
{DumpExeFile(dosHeader);
}
elseif((dosHeader->
e_magic==0x014C)//Doesitlooklikeai386
&
(dosHeader->
e_sp==0))//COFFOBJfile?
?
//Thetwotestsabovearen'
twhattheylooklike.They'
re
//reallycheckingforIMAGE_FILE_HEADER.Machine==i386(0x14C)
//andIMAGE_FILE_HEADER.SizeOfOptionalHeader==0;
DumpObjFile((PIMAG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PE 文件 结构