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



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

ByteVirutalAddress - (ImageBase + SectionRelativeVirtualAddress) + PointerToRawdata = ByteOffset

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

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

部分名称 - 地址 - 大小

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

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

我的逻辑是:

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

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

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

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

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

只是为了回答这个问题。我已经找到了解决这个问题的正确逻辑。

使用第二个选项是正确的,+<部分大小原始数据>= 该部分的最大可能 RVA 范围。这应该为您提供该部分的最大可能相对虚拟地址,然后从中,您可以查看地址是否在此值范围内。

最新更新