我正在尝试熟悉PE格式的资源表,我想我已经掌握了它的窍门,除了资源树中数据条目叶节点的rva应该指向该资源表的开头资源数据,但事实并非如此。
在下面发布的图像中(来自 010 十六进制编辑器),选择了一个资源数据条目。如图所示,0x28AF0是资源数据的实际地址,但DataRVA的值为0x2BEF0,实际上超出了文件的大小。 DataRVA 的最后一个字节和该数据以及资源表中其他数据的实际地址匹配,因此我认为它们是连接的,但它们之间的差异 (0x3400) 在整个资源表中并不一致。那么实际地址是怎么得到的呢?
如果需要,很乐意提供 PE 标头信息或可执行文件本身。
我必须调试一个开源 PE 分析器才能了解它是如何计算的。公式为:
偏移量(实际地址)= DataRVA - Section.VirtualAddress + Section.PointerToRawData
where Section.VirtualAddress <= DataRVA < (Section.VirtualAddress + Section.VirtualSize).