我正在使用lldb
来跟踪调用CoreFoundation
等CFRunLoopTimerCreate
函数的普通C或C ++代码(32位)。
我在CFRunLoopTimerCreate
设置了一个断点,并希望检查传递的参数。
我该怎么做? frame variable
在这里没有工作(它什么都不打印),因为它不在ObjC上下文中。
我想我必须以某种方式使用x
命令来查看sp
以上的内存,但无论我尝试什么语法,我都会收到错误消息。
那么,基本上,在寄存器指向的地址处检查内存的语法是什么?另外,有没有更好的方法来查看堆栈上的参数?
答案 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