首页 文章

内存地址文件

提问于
浏览
0

我有一个关于文件中的偏移的问题 . 例如,当您打开这样的文件时,“ . exe”扩展名/文件 .

handle = open('file.exe', mode='rb')

现在,当您尝试访问第10个“字节”时,您可以使用搜索功能 .

handle.seek(10, 0)

PE头中的许多值都是RVA,这意味着Imagebase RVA是在内存中加载时的偏移量 . 问题是你无法用这个 Value 寻求 . 例如:

.idtata部分具有虚拟地址(RVA)和原始地址(基于图像) . 现在使用前面的方法,您可以使用原始地址读取正确的偏移量 . 对于很多值,只给出RVA,它不起作用 .

以这种方式打开文件从0开始,当加载到内存中时,大多数时候imagebase是0x00400000 . 有没有办法可以将文件加载到内存中,从而在加载到内存时使用精确的偏移值?因此,文件从图像库开始,而不是0,所以你可以寻找RVA的?

与种姓问候,

1 回答

  • 0

    如果您使用的是Windows,则可以将Image Loader加载(即解压缩)PE映像到内存中 . 然后,您可以相对于图像库直接使用RVA来定位所需的数据 .

    另一种选择是实现一些函数来解析PE头和节表 . 节表包含有关PE文件中每个节的信息,例如它在文件中的位置(原始文件偏移量),以及它应该在内存中相对于映像基址解压缩的位置 . 通过节表,您可以编写一个函数,将RVA转换为相应的原始文件偏移量 .

    您唯一应该注意的是,并非每个RVA都可以映射回文件偏移量 . 例如,许多部分在末尾具有零初始化数据的区域,该区域未在二进制文件中明确表示 . 相反,加载程序将在加载时根据每个部分的虚拟大小(也在部分表条目中找到)用零填充这些部分 .

相关问题