2017-04-09 95 views
1

我对IMAGE_OPTIONAL_HEADER.DataDirectory有些困惑。作为PE/COFF Specification说,IMAGE_OPTIONAL_HEADER.DataDirectory具有固定或可变的大小?

头部分:数据目录

尺寸:可变

说明:地址/特殊表大小成对的图像文件中找到,并由操作系统使用(例如,导入表和导出表)。

并且还

的NumberOfRvaAndSizes:数据的目录条目在可选头的剩余部分的数量。每个描述一个位置和大小。

最后,

3.4.3。可选标题数据目录(仅限图像)

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

另外,不要假定此表中的RVA指向节的开头,或者包含特定表的节具有特定名称。

最后一段引用如下表:

enter image description here

当我从上面的了解,DataDirectory不必有固定的IMAGE_NUMBEROF_DIRECTORY_ENTRIES大小。它应该包含NumberOfRvaAndSizes条目。实际上,这与上面的目录条目表矛盾,每个类型在表格中都有它自己的偏移量,并且令人困惑。

所以,我的问题是:是否允许在DataDirectory中包含小于IMAGE_NUMBEROF_DIRECTORY_ENTRIES或者它必须始终是那个大小?

如何在这种情况下正确计算NumberOfRvaAndSizes?例如,我只有导入目录。然后NumberOfRvaAndSizes应该是1.但是我仍然会在DataDirectory中有16个条目,并在索引1处导入条目?

对不起,有些误导性标签。我添加了它们以引起注意,因为指定portable-executable只会导致熟悉该格式的人可能会错过问题

+0

'是它允许包括less' - 是的。 '我只有导入目录。' - 在这种情况下你需要'NumberOfRvaAndSizes> = 2',因为'IMAGE_DIRECTORY_ENTRY_IMPORT == 1' – RbMm

回答

0

是它允许包括在 DataDirectory目录小于IMAGE_NUMBEROF_DIRECTORY_ENTRIES或者它必须永远是多大?

是的,它允许。 的NumberOfRvaAndSizes可以是任何值,包括0

如何正确计算在这种情况下的NumberOfRvaAndSizes?

奇怪的问题。只需读取并使用它 - 它在DataDirectory数组中的有效条目数。

例如,我只有导入目录。然后NumberOfRvaAndSizes 应为1

NumberOfRvaAndSizes必须>您使用最大指数。因为IMAGE_DIRECTORY_ENTRY_IMPORT == 1 - NumberOfRvaAndSizes必须> 1 - 如何最低2

,寻找source代码更明白这一点

+0

好吧,这很有道理。谢谢 –

-1

特殊表的地址/大小对在映像文件中找到并由操作使用系统(例如,导入表和导出表)。

相关问题