NumberOfRvaAndSize
值为0x10
,并且按预期有16个DataDirectory
条目。文档说此值可以更改(尽管我从来没有看到它),这意味着条目数少于16个。
紧随其后的是包含名称的16个数据目录的列表。
这些名称是否总是按照正确的顺序相同?
如果少于16个,是否总是缺少末尾的目录?
如果大于16个,则他们打过电话吗?
#1 楼
简而言之:是的
正确的
您必须要了解一个规范。
数据目录是固定的稀疏数组,每个插槽的含义由规范定义,因此(例如)导出表始终是第一个条目,它不能移动。如果您没有Export表(但您还有其他目录),则
Size
和VirtualAddress
字段将为零。请注意,目录数不是固定的。在查找特定目录之前,请检查可选标题中的NumberOfRvaAndSizes字段。
因此,如果
NumberOfRvaAndSizes
成员为2,则可以查看Export表和Import表,但是没有其他内容。解析器是根据规范构建的,因此,如果遇到的PE文件的
NumberOfRvaAndSizes
值大于所知道的值,则他们将不知道数据是什么或如何解释。它(并且无法通过检查PE文件来找出)。对于保留的目录或其他未记录的目录也是如此。