使用lldb查找字符串内存

4

你好,我正在尝试在Mac OS上使用lldb查找字符串的地址。

在GDB中,我会使用find命令,并指定要搜索的地址范围。

但是我无法找到lldb中类似的命令。我知道该字符串位于cstring部分,而在我的情况下它的地址范围是0x00000000002e4f08-0x000000000032e0a8

但我需要确切地知道它在哪个位置。


它有你可以使用的符号吗? - trojanfoe
@trojanfoe,我不确定您所说的符号是什么意思,但是当我在lldb之外键入“cstring <program>”时,字符串就在那里,所以我猜是吗? - Jona
如果程序有调试信息,那么答案就是肯定的,这将是最好的路线。请调查如何查询符号信息(可能是 image lookup ...)。 - trojanfoe
2个回答

6
使用三个lldb命令image dump sectionsmemory findmemory read的简单示例,用于在剥离、发布的应用程序中查找字符串。
(lldb) image dump sections MyAppBinary 
[0x0000010462c000-0x00000107744000] 0x0003118000 MyApp`__TEXT
[0x00000107744000-0x00000107d48000] 0x0000604000 MyApp`__DATA
/* removed sections for brevity */

(lldb) mem find -s "youtube" -- 0x00000107744000 0x00000107d48000
data found at location: 0x10793362c
0x10793362c: 79 6f 75 74 75 62 65 2e 63 6f 6d 2f 65 6d 62 65  youtube.com/embe


(lldb) memory read -c100 0x10793362c
0x10793362c: 79 6f 75 74 75 62 65 2e 63 6f 6d 2f 65 6d 62 65  youtube.com/embe
0x10793363c: 64 2f 58 46 67 45 59 75 35 71 66 36 38 3f 61 75  d/XFgccu5qf68?a

如果您想获取一些有用的别名和脚本来使用 lldb,您可以访问 https://github.com/DerekSelander/LLDB。例如,我更喜欢 Derek 的脚本 sections 而不是 image dump sections MyAppBinary

1
(lldb) section 是什么?我找不到它作为内置命令?这是您添加的别名吗?如果是,那它是什么别名?谢谢。 - AymenTM
很好的评论@AymenTM。非常抱歉,我使用了这些脚本的别名:https://github.com/DerekSelander/LLDB。让我更新我的答案。 - rustyMagnet
1
我还要补充一点,你可以使用 memory region <some address> 命令来查找包含 <some address> 的内存区域,这对于在运行时堆栈中查找值非常有用。 - Alexander

2
如果您可以访问Xcode 6预发布工具,则lldb包含一个新的memory find命令来实现此操作。Enrico几个月前添加了这个命令的快速实现。

好的,谢谢。我没有访问工具的权限,但我猜目前似乎没有办法解决这个问题,不过我已经找到了一个解决方法。 - Jona

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