我对IMAGE_OPTIONAL_HEADER.DataDirectory有点困惑。正如PE/COFF规范所说,
头部分:数据目录 大小:变量 描述:图像文件中找到并由操作系统使用的特殊表的地址/大小对(例如导入表和导出表)。
而且还
NumberOfRvaAndSizes:可选标头剩余部分中的数据目录条目数。每个描述一个位置和大小。
最后,
3.4.3.可选的头数据目录(仅图像) 注意,目录的数量不是固定的。在查找特定目录之前,请检查可选标头中的NumberOfRvaAndSizes字段。 另外,不要假设这个表中的RVA指向一个节的开头,或者包含特定表的部分具有特定的名称。
最后一段提到了下表:

正如我从上面了解到的,DataDirectory不必有固定大小的IMAGE_NUMBEROF_DIRECTORY_ENTRIES。它应该包含NumberOfRvaAndSizes条目。实际上,这与上面的目录条目表相矛盾,其中每种类型在表中都有自己的偏移量,并且混淆了。
所以,我的问题是:在DataDirectory中是否允许包含小于DataDirectory的内容,还是必须总是这样大小?
在这种情况下,如何正确计算NumberOfRvaAndSizes?例如,我只有导入目录。那么NumberOfRvaAndSizes应该是1。但是DataDirectory中仍然有16个条目,而导入条目在索引1中?
很抱歉有一些误导的标签。我添加它们是为了引起注意,因为指定portable-executable只会导致熟悉格式的人可能会错过这个问题。
发布于 2017-04-09 13:00:51
在映像文件中找到并由操作系统使用的特殊表的地址/大小对(例如,导入表和导出表)。
https://stackoverflow.com/questions/43306896
复制相似问题