如何从 Windows 可执行文件的资源表中获取资源数据条目的地址?

问题描述 投票:0回答:1

我正在尝试熟悉PE格式的资源表,我想我已经掌握了它的窍门,除了资源树中数据条目叶节点的rva应该指向该资源表的开头资源数据,但事实并非如此。

在下面发布的图像中(来自 010 十六进制编辑器),选择了一个资源数据条目。如图所示,0x28AF0是资源数据的实际地址,但DataRVA的值为0x2BEF0,实际上超出了文件的大小。 DataRVA 的最后一个字节和该数据以及资源表中其他数据的实际地址匹配,因此我认为它们是连接的,但它们之间的差异 (0x3400) 在整个资源表中并不一致。那么实际地址是怎么得到的呢?

Screenshot from 010 hex editor showing the DataRVA of the ResourceDataEntry and the actual Start address of said data entry

如果需要,很乐意提供 PE 标头信息或可执行文件本身。

exe reverse-engineering portable-executable hex-editors
1个回答
0
投票

我必须调试一个开源 PE 分析器才能了解它是如何计算的。公式为:

偏移量(实际地址)= DataRVA - Section.VirtualAddress + Section.PointerToRawData

where Section.VirtualAddress <= DataRVA < (Section.VirtualAddress + Section.VirtualSize).

© www.soinside.com 2019 - 2024. All rights reserved.