【发布时间】:2015-01-08 04:52:18
【问题描述】:
我对文件中的偏移量有疑问。例如“.exe”扩展名/文件,当您打开这样的文件时。
handle = open('file.exe', mode='rb')
现在,当您尝试访问第 10 个“字节”时,您可以使用 seek 功能。
handle.seek(10, 0)
PE 头中的很多值都是 RVA 的,这意味着 Imagebase + RVA 是加载到内存中时的偏移量。问题是你不能用这个值来寻找。例如:
.idtata 部分有一个虚拟地址 (RVA) 和一个原始地址(基于图像)。现在使用前面的方法,您可以使用原始地址在正确的偏移量处读取。对于很多值,只给出了它不起作用的 RVA。
以这种方式打开文件从 0 开始,当加载到内存中时,大多数时候镜像库是 0x00400000。有没有办法可以将文件加载到内存中,从而在将文件加载到内存时使用精确的偏移值?因此,文件不是从 0 开始,而是从图像库开始,以便您可以查找 RVA?
致以诚挚的问候,
【问题讨论】:
-
请注意,您不会“将 [executable] 文件加载到内存中”——操作系统会这样做。我认为对此没有明确的答案 - 请参阅memory address randomization
标签: python memory file-io portable-executable