29)堆和栈的这些描述之后,我们就发现一个32位的“LoaderFlags(加载器标志)”,我没有找到它的任何有用的描述。我只发现一篇时新的关于设置此标志位的短文,说设置此标志位会在映象文件载入后自动地调用一个断点或者调试器;可似乎不正确。
30)接着我们会发现32位的“NumberOfRvaAndSizes(Rva数和大小)”,它是紧随其后的目录的有效项的数目。我已发现此值不可靠;你也许希望用常量IMAGE_NUMBEROF_DIRECTORY_ENTRIES(映象文件目录项数目)来代替它,或者用它们中的较小者。
NumberOfRvaAndSizes之后是一个IMAGE_NUMBEROF_DIRECTORY_ENTRIES (16)(映象文件目录项数目)个IMAGE_DATA_DIRECTORY(映象文件数据目录)数组。这些目录中的每一个目录都描述了一个特定的、位于目录项后面的某一节中的信息的位置(32位的RVA,叫“VirtualAddress(虚拟地址)”)和大小(也是32位,叫“Size(大小)”)。
例如,安全目录能在索引4中给定的RVA处发现并具有索引4中给定的大小。
稍后我将讨论我知道其结构的目录。
已定义的目录及索引有:
IMAGE_DIRECTORY_ENTRY_EXPORT(0)
输出符号目录;大多用于DLL文件。
后面介绍。
IMAGE_DIRECTORY_ENTRY_IMPORT(1)
输入符号目录;参见后面。
IMAGE_DIRECTORY_ENTRY_RESOURCE(2)
资源目录。后面介绍。
IMAGE_DIRECTORY_ENTRY_EXCEPTION(3)
异常目录-结构和用途不详。
IMAGE_DIRECTORY_ENTRY_SECURITY(4)
安全目录-结构和用途不详。
IMAGE_DIRECTORY_ENTRY_BASERELOC(5)
基址重定位表-参见后面。
IMAGE_DIRECTORY_ENTRY_DEBUG(6)
调试目录-内容编译器相关。此外,许多编译器将编译信息填入代码节,并不为此创建一个单独的节。
IMAGE_DIRECTORY_ENTRY_COPYRIGHT(7)
描述字符串-一些随意的版权信息之类。
IMAGE_DIRECTORY_ENTRY_GLOBALPTR(8)
机器值(MIPSGP)-结构和用途不详。
IMAGE_DIRECTORY_ENTRY_TLS(9)
线程级局部存储目录-结构不详;包含声明为“__declspec(thread)”的变量,也就是每线程的全局变量。
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG(10)
载入配置目录-结构和用途不详。
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT(11)
绑定输入目录-参见输入目录的描述。
IMAGE_DIRECTORY_ENTRY_IAT(12)
标签: Compiler, Linker, Windows