簡體   English   中英

如何用lldb查找函數的內存地址?

[英]How to find a function's memory address with lldb?

在GDB中,我可以使用“信息行func_name”來獲取func_name的內存地址,然后使用“ set $ PC = memory_address”來開始調試此功能。 我如何在lldb中做同樣的事情? 提前致謝!

lldb中的命令是“圖像查找”。 我認為,“信息FUNC”的一個例子< - >“圖像查找”最近添加到LLDB / GDB命令頁- 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) 

盡管這僅在此處顯示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

好的,我不得不轉換puts(),因為lldb在這里需要一個函數原型-並不是超級方便,但是如果它是您自己不需要的函數之一:

(lldb) reg write pc `main`
(lldb) reg read pc
     rip = 0x0000000100000f20  a.out`main at a.c:2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM