在GDB中,我可以使用"info line func_name"来获取func_name的内存地址,然后使用"set $ PC = memory_address"开始调试此函数.我如何在lldb中做同样的事情?提前致谢!
Jas*_*nda 15
lldb中的命令是"图像查找".我认为最近在lldb/gdb命令页面添加了"info func"< - >"image lookup"的示例 - http://lldb.llvm.org/lldb-gdb.html
例如
(lldb) im loo -n puts
1 match found in /usr/lib/system/libsystem_c.dylib:
Address: libsystem_c.dylib[0x0000000000011d9a] (libsystem_c.dylib.__TEXT.__text + 69850)
Summary: libsystem_c.dylib`puts
(lldb)
Run Code Online (Sandbox Code Playgroud)
虽然这只是显示libsystem_c.dylib中的偏移量(0x11d9a) - 要查看实际的加载地址,您需要使用"-v"选项进行图像查找,这将显示放置覆盖的地址范围.或者您可以使用lldb中的后面刻度表示法更直接地执行此操作,
(lldb) reg read pc
rip = 0x0000000100000f2b a.out`main + 11 at a.c:3
(lldb) reg write pc `(void(*)())puts`
(lldb) reg read pc
rip = 0x00007fff99ce1d9a libsystem_c.dylib`puts
Run Code Online (Sandbox Code Playgroud)
好吧我必须转换puts(),因为lldb在这里需要一个函数原型 - 不是很方便,但如果它是你自己的一个不需要的函数:
(lldb) reg write pc `main`
(lldb) reg read pc
rip = 0x0000000100000f20 a.out`main at a.c:2
Run Code Online (Sandbox Code Playgroud)