如何确定内存地址是否引用了有效的文件偏移量

时间:2018-02-04 22:43:52

标签: reverse-engineering offset

我正在尝试找出一种方法来计算给定地址或地址列表是否对应于有效的文件偏移量。我知道计算有效地址的偏移量使用公式:

ByteVirutalAddress - (ImageBase + SectionRelativeVirtualAddress)+ PointerToRawdata = ByteOffset

我在使用手动十六进制编辑器方法修补指令时使用此公式,而不是像Immunity一样易于使用的GUI。

我要做的是找出天气地址或地址列表对应文件偏移量。例如:

部门名称 - 地址 - 尺寸

图片库:00400000 - 00001000 .text:00401000 - 00003000 .rdata:00404000 - 00001000 .data:00405000 - 0002B000

如何计算地址00404185或0042F300是否与有效的文件偏移有关?

我的逻辑是:

在这种情况下,你需要做PointerToRawData + SizeOfRawdata + IMagebase,400000。并为每个部分执行此操作。

OR

将该部分的虚拟地址添加到该部分的SizeOfRawdata是否正确?从结果中,您应该能够看到这两个地址中的任何一个是否对应于有效的文件偏移量。

从结果中,查看结果中引用了上述2个地址中的哪一个,即result = 42D100。此引用0042300但未引用或对应00403185。

如果我的逻辑有缺陷,请告诉我。

我经常环顾四周,并没有特别找到这种计算的信息。仅在检查正确对齐或可能的损坏时才有用。我知道有一些工具可以帮到你,但我想知道如何手动操作而不是依赖脚本或工具。当工具和脚本出现问题时,它会有所帮助。

1 个答案:

答案 0 :(得分:0)

这样就可以回答了。我已经找到了解决这个问题的正确逻辑。

使用第二个选项+< Section SizeOfRawdata> =该部分的最大可能RVA范围。这应该为您提供该部分的最大可能相对虚拟地址,然后从中可以看出该地址是否属于此值。