COFF 数据目录的名称是否固定?

逆向工程 视窗 聚乙烯 文件格式 可执行
2021-06-15 10:35:45

我有一个 PE 文件(记事本),NumberOfRvaAndSizeCOFF 标头中的值为0x10,并且DataDirectory按预期有 16个条目。

文件说,这个值可以改变(虽然我从来没有看到过),这将意味着有大于少于16个条目。

紧接着,有一个包含名称的 16 个数据目录列表。

  1. 这些名称是否总是相同的,按照确切的顺序?
  2. 如果数量较少,是否总是会丢失最后的目录?
  3. 如果大于16,它们叫什么?
1个回答

简而言之:

  1. 是的
  2. 正确的
  3. 你必须有一个规范才能知道。

数据目录是一个固定的稀疏数组,每个slot的含义是由规范定义的,所以(例如)Export表总是第一个条目,它不能移动。如果您没有导出表(但您有其他目录),则SizeVirtualAddress字段将为零。

请注意,目录的数量不是固定的。在查找特定目录之前,请检查可选标题中的 NumberOfRvaAndSizes 字段。

所以如果NumberOfRvaAndSizes成员是2,那么你可以看一下Export表和Import表,其他的就没有了。

解析器是根据规范构建的,所以如果他们遇到一个NumberOfRvaAndSizes值大于他们所知道的 PE 文件,那么他们不知道数据是什么或如何解释它(并且无法通过检查 PE 找出文件)。任何保留或未记录的目录也是如此。