我有一个 PE 文件(记事本),NumberOfRvaAndSize
COFF 标头中的值为0x10
,并且DataDirectory
按预期有 16个条目。
该文件说,这个值可以改变(虽然我从来没有看到过),这将意味着有大于少于16个条目。
紧接着,有一个包含名称的 16 个数据目录列表。
- 这些名称是否总是相同的,按照确切的顺序?
- 如果数量较少,是否总是会丢失最后的目录?
- 如果大于16,它们叫什么?
我有一个 PE 文件(记事本),NumberOfRvaAndSize
COFF 标头中的值为0x10
,并且DataDirectory
按预期有 16个条目。
该文件说,这个值可以改变(虽然我从来没有看到过),这将意味着有大于少于16个条目。
紧接着,有一个包含名称的 16 个数据目录列表。
简而言之:
数据目录是一个固定的稀疏数组,每个slot的含义是由规范定义的,所以(例如)Export表总是第一个条目,它不能移动。如果您没有导出表(但您有其他目录),则Size
和VirtualAddress
字段将为零。
请注意,目录的数量不是固定的。在查找特定目录之前,请检查可选标题中的 NumberOfRvaAndSizes 字段。
所以如果NumberOfRvaAndSizes
成员是2,那么你可以看一下Export表和Import表,其他的就没有了。
解析器是根据规范构建的,所以如果他们遇到一个NumberOfRvaAndSizes
值大于他们所知道的值的 PE 文件,那么他们不知道数据是什么或如何解释它(并且无法通过检查 PE 找出文件)。任何保留或未记录的目录也是如此。