分类:
2011-04-09 13:55:40
大小 |
域 |
描述 |
WORD |
Machine |
目标平台CPU的类型。常用的值有:
IMAGE_FILE_MACHINE_I386 0x014c // Intel 386
IMAGE_FILE_MACHINE_IA64 0x0200 // Intel 64 |
WORD |
NumberOfSections |
指示节表中节的数目。节表紧跟着IMAGE_NT_HEADERS结构。 |
DWORD |
TimeDateStamp |
指示文件创建时间。这个值是从格林尼治时间(GMT)1970年1月1日00:00以来的总秒数。它比文件系统所指明的日期/时间更精确。使用_ctime函数可以很容易地把这个值转换成可读性比较好的字符串(这个函数与时区相关)。另一个可用于这个值的函数gmtime也比较有用。 |
DWORD |
PointerToSymbolTable |
COFF符号表的文件偏移。Microsoft的PECOFF规范5.4节描述了COFF符号表。COFF符号表在PE文件中非常少见,因为新的调试符号格式已经取代了它。在Visual Studio .NET之前,可以使用/DEBUGTYPE:COFF这个链接器选项来指定创建COFF符号表。它总是存在于OBJ文件中。如果不存在符号表的话,将它设置为0。 |
DWORD |
NumberOfSymbols |
符号表中的符号数(如果存在的话)。COFF符号是一个大小固定的结构,这个域用来定位COFF符号表的结尾。紧跟着COFF符号表的是一个字符串表,它用来保存长符号名。 |
WORD |
SizeOfOptionalHeader |
IMAGE_FILE_HEADER结构后面的可选数据的大小。在PE文件中,这个可选数据就是IMAGE_OPTIONAL_HEADER。这个大小在32位和64位文件中是不同的。对于32位PE文件来说,它通常是224;对于64位PE32+文件来说,它通常是240。但是,它们只是最小值,可能有更大的值。 |
WORD |
Characteristics |
指示文件属性的一组位标志。这些标志的合法值就是WINNT.H文件中定义的IMAGE_FILE_xxx值。一些常见的值列于下表。 |
标志 |
描述 |
IMAGE_FILE_RELOCS_STRIPPED |
重定位信息已经从文件中移除。 |
IMAGE_FILE_EXECUTABLE_IMAGE |
文件是可执行映像。 |
IMAGE_FILE_AGGRESSIVE_WS_TRIM |
让操作系统尽量减小工作集(working set)。 |
IMAGE_FILE_LARGE_ADDRESS_AWARE |
此应用程序可以处理大于2GB的地址。 |
IMAGE_FILE_32BIT_MACHINE |
需要字长为32位的机器。 |
IMAGE_FILE_DEBUG_STRIPPED |
调试信息已经被移到.DBG文件中。 |
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP |
如果可执行映像在可移动媒体上,把它复制到交换文件中并从交换文件中运行。 |
IMAGE_FILE_NET_RUN_FROM_SWAP |
如果可执行映像在网络上,把它复制到交换文件中并从交换文件中运行。 |
IMAGE_FILE_DLL |
文件是DLL。 |
IMAGE_FILE_UP_SYSTEM_ONLY |
只能运行于单处理器机器上。 |
大小 |
域 |
描述 |
WORD |
Magic |
一个特征字,用于表明文件头的类型。两个常用的值为: IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b |
BYTE |
MajorLinkerVersion |
用于创建这个可执行文件的链接器的主版本号。对于由Microsoft链接器生成的可执行文件来说,这个版本号对应于Visual Studio的版本号(例如Visual Studio 6.0就是版本6)。 |
BYTE |
MinorLinkerVersion |
用于创建这个可执行文件的链接器的次版本号 |
DWORD |
SizeOfCode |
带有IMAGE_SCN_CNT_CODE 属性的所有节的总大小。 |
DWORD |
SizeOfInitializedData |
所有由已初始化的数据组成的节的总大小。 |
DWORD |
SizeOfUninitializedData |
所有由未初始化的数据组成的节的总大小。它通常是0,因为链接器经常把未初始化的数据添加到正常的数据节的末尾。 |
DWORD |
AddressOfEntryPoint |
文件中首先被执行的代码的第一个字节的RVA。对于DLL来说,入口点在进程初始化和退出期间,以及线程创建和退出期间都会被调用。在大多数可执行文件中,这个地址并不是直接指向main、WinMain或者DllMain,而是指向调用上述函数的运行时库代码。对于DLL来说,这个域可以设为0,这样它就接收不到前面说的四个通知。/NOENTRY链接器选项可以将这个域设置为0 |
DWORD |
BaseOfCode |
加载进内存之后代码的第一个字节的RVA。 |
DWORD |
BaseOfData |
理论上这是加载进内存之后数据的第一个字节的RVA。但是这个域的值在不同版本的Microsoft链接器间是不一致的。64位可执行文件中并不存在这个域。 |
DWORD |
ImageBase |
这个文件在内存中的首选加载地址。如果有可能的话(也就是说这个内存当前并未被占用,并且它是对齐的,同时是一个合法的地址等等),加载器尽量把PE文件加载到这个地址。如果可执行文件被加载到这个地址,加载器就可以跳过基址重定位(将在本文的第二部分中描述)。对于EXE来说,默认的ImageBase为0x400000;对于DLL来说,它是0x10000000。可以在链接时使用/BASE选项或者以后使用REBASE工具来设定此值。 |
DWORD |
SectionAlignment |
加载进内存之后节的对齐值。这个对齐值必须大于或等于文件对齐值(下面将要讲到)。默认的对齐值是目标平台的页面大小。对于运行于Windows 9x或Windows Me上的用户模式的可执行文件来说,最小的对齐值是一个页面(4KB)。这个域的值可以使用/ALIGN链接器选项来设定。 |
DWORD |
FileAlignment |
节在PE文件中的对齐值。对于x86可执行文件来说,它或者是0x200,或者是0x1000。不同版本的Microsoft链接器的默认值不一样。这个值必须是2的幂,并且如果SectionAlignment域的值小于CPU的页面大小,这个值必须与SectionAlignment域的值匹配。链接器选项/OPT:WIN98将x86平台上的可执行文件的对齐值设为0x1000,而/OPT:NOWIN98选项将它设为0x200。 |
WORD |
MajorOperatingSystemVersion |
所需的操作系统的主版本号。随着众多版本Windows的到来,这个域已失去了它最初的意义。 |
WORD |
MinorOperatingSystemVersion |
所需的操作系统的次版本号。 |
WORD |
MajorImageVersion |
此文件的主版本号。系统并未使用这个域,可以设置为0。使用/VERSION链接器选项可以设定这个域的值。 |
WORD |
MinorImageVersion |
此文件的次版本号。 |
WORD |
MajorSubsystemVersion |
可执行文件所需的子系统的主版本号。以前相对于旧版本的Windows NT界面来说,用它来指明需要新的Windows 95或Windows NT 4.0用户界面。现在由于Windows版本繁多,这个域已经不使用了,通常被设为4。使用链接器选项/SUBSYSTEM可以设置这个域的值。 |
WORD |
MinorSubsystemVersion |
可执行文件所需的子系统的次版本号。 |
DWORD |
Win32VersionValue |
一个从来不用的域,通常设为0。 |
DWORD |
SizeOfImage |
SizeOfImage包含了假设存在于最后一个节之后的那个节的RVA。这等效于把此文件加载进内存时系统需要保留的内存数量。这个域的值必须是节的对齐值的倍数。 |
DWORD |
SizeOfHeaders |
MS-DOS文件头、PE文件头和节表的总大小。在PE文件中,这些内容出现于任何代码或数据节之前。这个域的值被向上舍入到文件对齐值的倍数。 |
DWORD |
CheckSum |
映像的校验和。IMAGEHLP.DLL中的CheckSumMappedFile API可以计算这个值。对于内核模式的驱动程序和一些系统DLL来说,校验和是必须的。否则这个域被设置为0。当使用/RELEASE链接器选项时,校验和会被放在文件中。 |
WORD |
Subsystem |
指示可执行文件所需子系统(用户界面类型)的一个枚举值。在EXE文件中这个值比较重要。一些重要的值如下:
IMAGE_SUBSYSTEM_NATIVE
// 不需要子系统
IMAGE_SUBSYSTEM_WINDOWS_GUI
// 使用Windows GUI
IMAGE_SUBSYSTEM_WINDOWS_CUI
// 控制台应用程序。当它运行时,操作系统为其创一
// 个控制台并提供stdin、stdout和stderr文件句柄。 |
WORD |
DllCharacteristics |
指示DLL特征的标志。这些值对应于WINNT.H文件中的IMAGE_DLLCHARACTERISTICS_xxx定义。当前值如下:
IMAGE_DLLCHARACTERISTICS_NO_BIND
// 不绑定映像 IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
// 使用WDM模型的驱动程序 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE // 当终端服务器加载一个并没有准备运行于终端服务 // 器上的应用程序时,它同时加载包含兼容代码的DLL |
DWORD |
SizeOfStackReserve |
在EXE文件中,它表示进程中的线程堆栈最初可以增长到的最大值。默认是1MB。并不是初始化时就提交这里指定的所有内存。 |
DWORD |
SizeOfStackCommit |
在EXE文件中,它表示初始化时提交的堆栈的大小。默认是4KB。 |
DWORD |
SizeOfHeapReserve |
在EXE文件中,它表示最初为默认进程堆保留的内存数量。默认是1MB。然而对于当前版本的Windows,在没有用户干预的情况下,堆可以超过这个值。 |
DWORD |
SizeOfHeapCommit |
在EXE文件中,它表示提交的堆的大小。默认是4KB。 |
DWORD |
LoaderFlags |
此域已经废弃不用。 |
DWORD |
NumberOfRvaAndSizes |
在IMAGE_NT_HEADERS结构末尾处是一个IMAGE_DATA_DIRECTORY结构数组。这个域包含了这个数组的元素数目。由于以前发行的Windows NT的原因,它被设置为16。 |
IMAGE_ DATA_ DIRECTORY |
DataDirectory[16] |
IMAGE_DATA_DIRECTORY结构数组。每个结构包含可执行文件中一些重要部分(例如导入表、导出表以及资源等)的RVA和大小。 |
大小 |
域 |
描述 |
BYTE |
Name[8] |
节的名称(ASCII码)。节名并不保证以NULL结尾。如果你指定的节名大于8个字节,链接器在生成可执行文件时将其截断为8个字符。在OBJ文件中存在一种机制可以让节名更长。节名通常以圆点开始,但这并不是必需的。对于带有$字符的节名链接器会特殊对待。如果几个节名中$字符以前的部分相同,那么这些节会被合并。它们按$字符后面的部分在字母表中的顺序出现于最终的节中。关于节名中带有$字符的节和它们如何被合并方面还有很多内容,但对它的详细讨论已经超出了本文的范围。 |
DWORD |
VirtualSize |
指示节实际占用的内存大小。这个域的值可能比SizeOfRawData域的值大或小。如果大,SizeOfRawData域表示可执行文件中已初始化的数据的大小,VirtualSize域比它大的部分用0填充。在OBJ文件中,此域的值为0。 |
DWORD |
VirtualAddress |
在可执行文件中,它表示在内存中节的起始RVA。在OBJ文件中它被设置为0。 |
DWORD |
SizeOfRawData |
可执行文件或OBJ文件中的节中存储的数据的大小(以字节计)。对于可执行文件来说,它必须是PE文件头中给出的文件对齐值的倍数。如果它被设置为0,表示这个节中是未初始化的数据。 |
DWORD |
PointerToRawData |
节中数据起始的文件偏移。对于可执行文件来说,它必须是PE文件头中给出的文件对齐值的倍数。 |
DWORD |
PointerToRelocations |
节的重定位信息的文件偏移。它只用于OBJ文件,在可执行文件中它被设置为0。在OBJ文件中,如果它不为0,那么它指向一个IMAGE_RELOCATION结构。 |
DWORD |
PointerToLinenumbers |
节中COFF行号信息的文件偏移。如果它不为0,那么它指向一个IMAGE_LINENUMBER结构。 |
WORD |
NumberOfRelocations |
PointerToRelocations域指向的重定位信息的数目。在可执行文件中应该为0。 |
WORD |
NumberOfLinenumbers |
PointerToLinenumbers域指向的行号信息的数目。只有当生成COFF行号信息时才使用。 |
DWORD |
Characteristics |
指示节属性的标志(可以用“或”连接)。这些标志中的大部分可以使用链接器的/SECTION选项来设置。常用的值列于下表。 |
标志 |
描述 |
IMAGE_SCN_CNT_CODE |
节中包含代码。 |
IMAGE_SCN_MEM_EXECUTE |
节是可执行的。 |
IMAGE_SCN_CNT_INITIALIZED_DATA |
节中包含已初始化的数据。 |
IMAGE_SCN_CNT_UNINITIALIZED_DATA |
节中包含未初始化的数据。 |
IMAGE_SCN_MEM_DISCARDABLE |
这个节在最终的可执行文件中可以被丢弃。用于保存链接器使用的信息,包括.debug$节。 |
IMAGE_SCN_MEM_NOT_PAGED |
这个节不能被交换到页面文件中,因此它应该总是存在于物理内存中。经常用于内核模式驱动程序。 |
IMAGE_SCN_MEM_SHARED |
包含这个节的物理页面将在加载这个可执行文件的所有进程之间共享。因此每个进程看到的这个节中的数据的值完全一样。对于在进程的所有实例之间共享全局变量比较有用。要共享某个节,使用/SECTION:节名,S链接器选项。 |
IMAGE_SCN_MEM_READ |
节是可读的。几乎总是设置这个值。 |
IMAGE_SCN_MEM_WRITE |
节是可写的。 |
IMAGE_SCN_LNK_INFO |
节中包含链接器使用的信息。仅存在于OBJ文件中。 |
IMAGE_SCN_LNK_REMOVE |
这个节中的内容将不成为最终的映像的一部分。仅用于OBJ文件。 |
IMAGE_SCN_LNK_COMDAT |
节中的内容是公共数据(comdat)。公共数据(Communal data)是可以被定义在多个OBJ文件中的数据(或代码)。链接器只将其中的一份副本包含进最终的可执行文件中。Comdats对于支持C++的模板函数和函数级的链接至关重要。它仅存在于OBJ文件中。 |
IMAGE_SCN_ALIGN_xBYTES |
这个节中的数据在最终的可执行文件中的对齐值。有各种各样的值(_4BYTES,_8BYTES,_16BYTES等)。如果不指定,默认为16字节。仅在OBJ文件中才设置这些标志。 |
名称 |
描述 |
.text |
默认的代码节。 |
.data |
默认的可读/可写数据节。全局变量通常在这个节中。 |
.rdata |
默认的只读数据节。字符串常量和C++/COM虚表就放在这个节中。 |
.idata |
导入表。实际上,链接器经常把.idata节合并到其它节中(或者是明确指定的,或者是通过链接器的默认行为)。默认情况下,链接器仅在创建发行版的程序时才把.idata节合并到其它节中。 |
.edata |
导出表。当创建要导出函数或数据的可执行文件时,链接器会创建一个.EXP文件。这个.EXP文件包含一个.edata节,这个节被添加到最后的可执行文件中。与.idata节一样,.edata节也经常被合并到.text节或.rdata节中。 |
.rsrc |
资源节。这个节是只读的。它不应该被命名为其它名称,也不应该被合并到其它节中。 |
.bss |
未初始化的数据节。在最新的链接器创建的可执行文件中很少见到。链接器扩展可执行文件的.data节的VirtualSize域以便容纳未初始化的数据。 |
.crt |
添加到可执行文件中的数据,用来支持C++运行时库(CRT)。一个比较好的例子就是用于调用静态C++对象的构造函数和析构函数的指针。要获取更详细的信息,可以参考 |
.tls |
这个节中的数据用来支持使用__declspec(thread)语法创建的线程局部存储变量。它包括数据的初始值,以及运行时需要的附加变量。 |
.reloc |
可执行文件中的基址重定位节。通常DLL需要基址重定位信息而EXE并不需要。在创建发行版的程序时,链接器并不为EXE文件生成基址重定位信息。可以使用/FIXED链接器选项移除基址重定位信息。 |
.sdata |
通过全局指针(Global Pointer)相对寻址的“短(Short)”可读/可写数据。用于IA-64和其它使用全局指针寄存器的平台上。IA-64平台上正常大小的全局变量在这个节中。 |
.srdata |
通过全局指针相对寻址的“短(Short)”只读数据。用于IA-64和其它使用全局指针寄存器的平台上。 |
.pdata |
异常表。它包含一个IMAGE_RUNTIME_FUNCTION_ENTRY结构数组,这个结构与平台体系结构相关。数据目录中索引为IMAGE_DIRECTORY_ENTRY_EXCEPTION的项指向它。用于使用基于表的异常处理的平台,例如IA-64。惟一不使用基于表的异常处理的平台是x86(它使用的是基于堆栈的异常处理)。 |
.debug$S |
OBJ文件中的Codeview格式的调试符号(Symbol)信息。这是一列可变长度的CodeView格式的调试符号记录。 |
.debug$T |
OBJ文件中的Codeview格式的调试类型(Type)记录。这是一列可变长度的CodeView格式的调试类型记录。 |
.debug$P |
可以在使用预编译头(Precompiled Headers)生成的OBJ文件中找到这个节。 |
.drectve |
这个节包含链接器指令,并且只存在于OBJ文件中。这些指令是传递到链接器命令行的ASCII码字符串,例如:-defaultlib:LIBC。指令之间用空格分开。 |
.didat |
延迟加载导入数据。可以在非发行版本的可执行文件中找到。在发行版本中,延迟加载数据被合并到其它节中。 |
大小 |
域 |
描述 |
DWORD |
Characteristics |
导出标志。当前未定义任何值。 |
DWORD |
TimeDateStamp |
导出数据的创建时间。这个域的定义与IMAGE_NT_HEADERS.FileHeader.TimeDateStamp相同(从GMT时间1970年1月1日00:00以来的总秒数)。 |
WORD |
MajorVersion |
导出数据的主版本号。未用,设置为0。 |
WORD |
MinorVersion |
导出数据的次版本号。未用,设置为0。 |
DWORD |
Name |
与导出符号相关的DLL的名称ASCII字符串的RVA(例如KERNEL32.DLL)。 |
DWORD |
Base |
这个域包含了这个可执行文件的导出符号所使用的序数值的起始值。通常情况下这个值为1,但并不总是这样。当通过序数查找导出符号时,将序数值减去这个域的值就得到了这个导出符号在导出地址表(Export Address Table ,EAT)中的索引。 |
DWORD |
NumberOfFunctions |
EAT中的元素数。注意EAT中的某些元素可能为0,这表明没有 代码/数据使用那个序数值导出。 |
DWORD |
NumberOfNames |
导出名称表(Export Names Table,ENT)中的元素数。这个域的值总是小于或等于NumberOfFunctions域的值。当某些符号仅使用序数导出时,它就小于那个域的值。如果导出序数之间有间隔,它同样也小于那个域的值。这个域的值也是导出序数表的大小(见下文)。 |
DWORD |
AddressOfFunctions |
EAT的RVA。EAT中的每个元素都是一个RVA。其中每个非0的RVA都对应一个导出符号。 |
DWORD |
AddressOfNames |
ENT的RVA。ENT中的每个元素都是一个ASCII码字符串的RVA。其中的每个ASCII码字符串都对应一个由名称导出的符号。这些字符串是按一定顺序排列的。这就使得加载器在查找导出符号时可以进行二进制搜索。名称字符串的排序是按二进制(与C++运行时库函数strcmp类似),而不是与位置相关的字母表顺序。 |
DWORD |
AddressOfNameOrdinals |
导出序号表的RVA。这个表是一个WORD类型的数组。它将ENT中的索引映射到导出地址表中相应的元素上。 |
大小 |
域 |
描述 |
DWORD |
OriginalFirstThunk |
这个域的命名太不恰当。它包含导入名称表的RVA。导入名称表是一个IMAGE_THUNK_DATA结构数组。这个域被设置为0表示IMAGE_IMPORT_DESCRIPTOR结构数组的结尾。 |
DWORD |
TimeDateStamp |
如果可执行文件并未绑定导入的DLL,这个域的值为0。当使用老的绑定类型进行绑定(参考“绑定”一节)时,这个域包含日期/时间戳。当使用新的绑定类型进行绑定时,这个域的值为-1。 |
DWORD |
ForwarderChain |
这是首个转发的函数的索引。如果没有转发的函数,这个域被设置为-1。它仅用于老的绑定类型,因为那种绑定类型不能很有效地处理转发的函数。 |
DWORD |
Name |
导入的DLL名称字符串(ASCII码格式)的RVA。 |
DWORD |
FirstThunk |
导入地址表的RVA。IAT是一个IMAGE_THUNK_DATA结构数组。 |
大小 |
域 |
描述 |
DWORD |
grAttrs |
此结构的属性。当前惟一定义的标志是dlattrRva(值为1)。这个标志表明此结构中的地址域是RVA,而不是虚拟地址。设置这个标志表明延迟加载描述符是VC7.0或其后续版本。 |
RVA |
rvaDLLName |
导入的DLL的名称字符串的RVA。这个字符串被传递给LoadLibrary函数。 |
RVA |
rvaHmod |
一块HMODULE大小的内存的RVA。当延迟加载的DLL被加载进内存时,它的HMODULE被存储在这个位置。 |
RVA |
rvaIAT |
此DLL的导入地址表的RVA。它的格式与正常的IAT相同。 |
RVA |
rvaINT |
此DLL的导入名称表的RVA。它的格式与正常的INT相同。 |
RVA |
rvaBoundIAT |
可选的绑定IAT的RVA。它是此DLL的导入地址表的一个绑定副本的RVA。它的格式与正常的IAT相同。当前这个IAT副本并未绑定,但这个功能可能被添加到将来的BIND程序中。 |
RVA |
rvaUnloadIAT |
原始的IAT的可选副本的RVA。它是此DLL的导入地址表的一个未绑定的副本的RVA。它的格式与正常的IAT相同。当前总是设置为0。 |
DWORD |
dwTimeStamp |
延迟加载导入的DLL的日期/时间戳。通常设置为0。 |
大小 |
域 |
描述 |
DWORD |
Characteristics |
未用,设置为0。 |
DWORD |
TimeDateStamp |
调试信息的日期/时间戳。 |
WORD |
MajorVersion |
调试信息的主版本号,未用。 |
WORD |
MinorVersion |
调试信息的次版本号,未用。 |
DWORD |
Type |
调试信息的类型。以下是经常遇到的类型:
IMAGE_DEBUG_TYPE_COFF
IMAGE_DEBUG_TYPE_CODEVIEW // 包含PDB文件
IMAGE_DEBUG_TYPE_FPO // 帧指针省略
IMAGE_DEBUG_TYPE_MISC // IMAGE_DEBUG_MISC
IMAGE_DEBUG_TYPE_OMAP_TO_SRC
IMAGE_DEBUG_TYPE_OMAP_FROM_SRC
IMAGE_DEBUG_TYPE_BORLAND // Borland格式 |
DWORD |
SizeOfData |
文件中调试数据的大小。不包括外部调试文件(例如.PDB文件)的大小。 |
DWORD |
AddressOfRawData |
当映射进内存时调试数据的RVA。如果调试信息不被映射,它被设置为0。 |
DWORD |
PointerToRawData |
调试数据的文件偏移(不是RVA)。 |
类型 |
域 |
描述 |
DWORD |
cb |
头部的大小(以字节计)。 |
WORD |
MajorRuntimeVersion |
运行这个程序所需的运行时组件的最小版本号。对于第一个发行的.NET Framework而言,此值为2。 |
WORD |
MinorRuntimeVersion |
次版本号,当前为0。 |
IMAGE_DATA_DIRECTORY |
MetaData |
元数据表的RVA。 |
DWORD |
Flags |
包含这个映像属性的标志。当前定义了以下值:
COMIMAGE_FLAGS_ILONLY
// 映像仅包含IL代码,并不需要运// 行于特定CPU上
COMIMAGE_FLAGS_32BITREQUIRED // 仅运行于32位处理器上
COMIMAGE_FLAGS_IL_LIBRARY
STRONGNAMESIGNED
// 映像已经用散列数据签名
COMIMAGE_FLAGS_TRACKDEBUGDATA
// 让JIT或运行时组件为方法保持// 调试信息 |
DWORD |
EntryPointToken |
映像入口点的MethodDef的记号。.NET运行时调用这个方法开始托管执行。 |
IMAGE_DATA_DIRECTORY |
Resources |
.NET资源的RVA和大小。 |
IMAGE_DATA_DIRECTORY |
StrongNameSignature |
强名称散列数据的RVA。 |
IMAGE_DATA_DIRECTORY |
CodeManagerTable |
代码管理器表的RVA。代码管理器包含获取正在运行的程序的状态(例如堆栈跟踪和跟踪GC引用)所需的代码。 |
IMAGE_DATA_DIRECTORY |
VTableFixups |
需要被修正的函数指针组成的数组。用于支持非托管的C++虚表。 |
IMAGE_DATA_DIRECTORY |
ExportAddressTableJumps |
由对应于导出符号的JMP形实转换块被写入的位置(RVA)组成的数组的RVA。这些形实转换块允许托管方法被导出,这样非托管代码可以调用它们。 |
IMAGE_DATA_DIRECTORY |
ManagedNativeHeader |
在内存中供.NET运行时组件内部使用。在可执行文件中被设置为0。 |
大小 |
域 |
描述 |
DWORD |
StartAddressOfRawData |
用于在内存中初始化新线程的TLS数据的一段内存的起始地址。 |
DWORD |
EndAddressOfRawData |
用于在内存中初始化新线程的TLS数据的一段内存的结束地址。 |
DWORD |
AddressOfIndex |
当可执行文件被加载进内存时,如果它包含.tls节,加载器调用TlsAlloc给它分配一个TLS句柄,并将分配的句柄保存在这个域指定的位置处。运行时库使用这个句柄定位线程局部数据。 |
DWORD |
AddressOfCallBacks |
由PIMAGE_TLS_CALLBACK类型的函数指针组成的数组的地址。当创建或撤销线程时,这个列表中的每个函数都会被调用。最后一个元素的值为0,它标志着表的结尾。一般由Visual C++生成的可执行文件中这个表是空的。 |
DWORD |
SizeOfZeroFill |
已初始化数据中除了由StartAddressOfRawData和EndAddressOfRawData域组成的已初始化数据界限之外的大小(以字节计)。所有超出这个范围的用于单个线程的数据都被初始化为0。 |
DWORD |
Characteristics |
保留,当前被设置为0。 |
名称 |
描述 |
/A |
转储所有内容 |
/B |
显示基址重定位信息 |
/H |
包括每个节中原始数据的十六进制形式 |
/I |
包括导入地址表形实转换块的地址 |
/L |
包括行号信息 |
/P |
包括PDATA(运行时函数) |
/R |
包括详细的资源信息(字符串表和对话框) |
/S |
显示符号表 |