gpt4 book ai didi

c++ - macOS - 读取其他应用程序库代码的一部分并将其反汇编以获取偏移量

转载 作者:行者123 更新时间:2023-11-28 05:26:54 32 4
gpt4 key购买 nike

我的应用程序读取其他应用程序内存以获得指针。我需要首先从静态库中读取偏移量以开始使用应用程序本身。

dylib 中的某些函数包含指针“0x41b1110”的偏移量 - 我知道手动使用时此偏移量有效,但我需要使用我的应用程序自动读取它而无需手动检查值,如果我从内存中简单读取地址SomeAddressX as uint64_t 它得到的荒谬地址不等于 0x41b1110。我很确定我得到的只是这条指令。然后我尝试将其读取为字节数组,并且该字节数组等于该地址处纯二进制文件的字节数组。我想知道如何简单地阅读“0x41b1110”而不是整个指令?我是否需要将字节码反汇编为 x64 指令然后解析它以获取地址,还是有更聪明的方法?我对 asm 经验不多。

SomeAddressX - rax, qword [ds:0x41b1110]

添加示例字节码和指令

lea        rax, qword [ds:0x1043740]

给出

48 8D 05 6F D9 99 00

前三个 48 8D 05 似乎是 lea rax, qword 但另一部分 6F D9 99 00 看起来不像 01 04 37 40 (0x1043740) ?

example

最佳答案

它是 OSX 上的 x64 和强制 PIC(位置无关代码)代码(不允许非 PIC 可执行文件,因为它使用 ASLR)。

因此,反汇编对您隐藏了一些重要的信息。该指令的真实性质在这里揭示 (ba dum ts):

lea    rax,[rip+0x99d96f]

它使用当前指令指针rip 来相对寻址它的数据。

0x1043740addressOfInstruction + 7 + 0x99d96f 的结果。

0x99d96f 部分在字节码本身中清晰可见。

+7 是指令操作码大小。现在我不能 100% 确定它在那个阶段也被添加了,所以你自己做数学,如你所知的“addressOfInstruction”。

并检查您的调试器选项,看看您是否可以在友好的绝对内存显示与真正的 rip+offset 反汇编之间切换。

关于c++ - macOS - 读取其他应用程序库代码的一部分并将其反汇编以获取偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370784/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com