使用lldb检查堆栈上的参数

时间:2015-11-22 20:54:27

标签: lldb

我正在使用lldb来跟踪调用CoreFoundationCFRunLoopTimerCreate函数的普通C或C ++代码(32位)。

我在CFRunLoopTimerCreate设置了一个断点,并希望检查传递的参数。

我该怎么做? frame variable在这里没有工作(它什么都不打印),因为它不在ObjC上下文中。

我想我必须以某种方式使用x命令来查看sp以上的内存,但无论我尝试什么语法,我都会收到错误消息。

那么,基本上,在寄存器指向的地址处检查内存的语法是什么?另外,有没有更好的方法来查看堆栈上的参数?

2 个答案:

答案 0 :(得分:2)

x实际上是memory read命令的简写。您可以选择字号,例如这样:

memory read --format x --size 4 --count 8 `$esp - 32`

将显示堆栈的前32个字节(在i386上)格式化为4字节的十六进制数字。如果您正在寻找指针值等,这可能会更容易。对于十进制输出,--format的参数也可以是d--outfile允许您指定要写入内存内容的文件路径,这对于大量内容可能更有用。使用反引号来评估环绕声表达式。

答案 1 :(得分:0)

这是你在找什么?

(lldb) x $sp-10
0x7fff5cd3eda6: 00 00 86 0a ec 02 01 00 00 00 00 00 00 00 00 00  ................
0x7fff5cd3edb6: 00 00 00 00 00 00 00 00 00 00 90 94 33 75 ff 7f  ............3u..

寄存器通常被称为$ rax等。 您可能还希望查看此前一个问题,以获取有关缩短lldb内存读取命令的一些提示:Dump memory in lldb