我对IMAGE_OPTIONAL_HEADER.DataDirectory
有些困惑。作为PE/COFF Specification说,IMAGE_OPTIONAL_HEADER.DataDirectory具有固定或可变的大小?
头部分:数据目录
尺寸:可变
说明:地址/特殊表大小成对的图像文件中找到,并由操作系统使用(例如,导入表和导出表)。
并且还
的NumberOfRvaAndSizes:数据的目录条目在可选头的剩余部分的数量。每个描述一个位置和大小。
最后,
3.4.3。可选标题数据目录(仅限图像)
请注意,目录数量不固定。在查找特定目录之前,请检查可选标题中的NumberOfRvaAndSizes字段。
另外,不要假定此表中的RVA指向节的开头,或者包含特定表的节具有特定名称。
最后一段引用如下表:
当我从上面的了解,DataDirectory
不必有固定的IMAGE_NUMBEROF_DIRECTORY_ENTRIES
大小。它应该包含NumberOfRvaAndSizes
条目。实际上,这与上面的目录条目表矛盾,每个类型在表格中都有它自己的偏移量,并且令人困惑。
所以,我的问题是:是否允许在DataDirectory
中包含小于IMAGE_NUMBEROF_DIRECTORY_ENTRIES
或者它必须始终是那个大小?
如何在这种情况下正确计算NumberOfRvaAndSizes
?例如,我只有导入目录。然后NumberOfRvaAndSizes
应该是1.但是我仍然会在DataDirectory
中有16个条目,并在索引1处导入条目?
对不起,有些误导性标签。我添加了它们以引起注意,因为指定portable-executable
只会导致熟悉该格式的人可能会错过问题
'是它允许包括less' - 是的。 '我只有导入目录。' - 在这种情况下你需要'NumberOfRvaAndSizes> = 2',因为'IMAGE_DIRECTORY_ENTRY_IMPORT == 1' – RbMm