LLDB 读取内存指针

3

可以轻松地读取由另一个地址指向的位置的内存。

例如,$r0 = 0x15942600,在此内存地址中有AC B8 EC 14。

现在要读取0x14ecb8ac处的内存,我需要执行以下操作:

mem read $r0
mem read 0x14ecb8ac

有没有一种简单的方法可以执行mem read ($r0),以便我可以轻松地读取内存?
我已经尝试过这个:
(lldb) mem re $r1
0x007db594: 7c d5 e7 15 00 00 00 00 e4 b5 7d 00 70 f6 9a 36

(lldb) mem read 0x15e7d57c
0x15e7d57c: 74 69 63 72 63 74 37 35 00 00 63 61 00 00 49 39

(lldb) mem read '*(char **)$r1'
error: invalid start address expression.
error: address expression "*(char **)$r1" evaluation failed

我没有带有r0寄存器的架构来测试这个,但是 mem read '*(char **)$r0' 应该可以工作。 - Mark Plotnick
嘿,@MarkPlotnick,我已经尝试过了,不起作用。 - d123
有趣。目标架构是什么,lldb的版本是多少? - Mark Plotnick
p *(int **)$r1 会报错吗? - Mark Plotnick
嗯。所以 *(char **) 会报错,但是 *(int **) 可以正常工作? - Mark Plotnick
是的。哦对,目标架构是ARM。 - d123
1个回答

4
感谢 @MarkPlotnick 的帮助,这个可以工作了。
mem read '*(int **)$r1'

如果您需要读取某个偏移量处的内存地址,可以执行以下操作:
mem read '*(int **)($r1+4)'

已经在针对ARMv7和ARM64的Xcode调试中进行了尝试和测试


“mem read '(int)$r1'” 这样写不是更准确吗?在这种情况下,您通过取消引用“$r1”给出的地址来读取内存。 - Shuzheng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接