我有一些软件从另一个软件的内存中读取一个值。每次更新我都可以完美地找到它的静态偏移量。我的问题如下:
假设软件使用ASLR,其基址指针为0x00123456 ..所需值的静态偏移量为base + 0x00006666。我想自动找到它们,因此在每次更新时解析.exe文件。在理论上,地址应该在程序集中。问题是:它们是如何编码的?
如果我打开.exe文件的十六进制编辑器并搜索偏移量或基数+偏移量,则文件中不包含任何内容。当我想在汇编代码中找到它们被使用的地方时,我如何转换我的地址?
答案 0 :(得分:1)
大多数.DLL文件和许多.EXE文件都包含一个基本重定位表。
此表包含.EXE文件中使用的所有绝对地址的列表。
它通常存储在名为“.reloc”的部分中。但是,Windows会忽略节名称; PE EXE文件头包含对基本重定位表的引用。
但并非所有.EXE文件都包含此类基本重定位表。如果没有这样的表,则.EXE文件始终加载到同一地址 - 即使ASLR处于活动状态。
GNU链接器创建的大多数32位EXE文件都是这种情况。