2012-08-17 12 views
5

जीडीबी में, मैं func_name के मेमोरी पते को पाने के लिए "info line func_name" का उपयोग कर सकता हूं, और उसके बाद इस फ़ंक्शन को डीबग करने के लिए "सेट $ पीसी = मेमोरी_ड्रेस" का उपयोग कर सकता हूं। मैं एलएलडीबी के भीतर ऐसा कैसे करूं? अग्रिम में धन्यवाद!lldb के साथ फ़ंक्शन का मेमोरी पता कैसे ढूंढें?

उत्तर

13

एलएलडीबी में कमांड "छवि लुकअप" है। मुझे लगता है कि "info 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 

ठीक मैं पुट() क्योंकि lldb यहां एक समारोह के प्रोटोटाइप की जरूरत कास्ट करने के लिए था कर सकता है, - सुपर सुविधाजनक नहीं, लेकिन अगर यह अपने खुद के कार्यों में से एक है इसकी आवश्यकता नहीं है:

(lldb) reg write pc `main` 
(lldb) reg read pc 
    rip = 0x0000000100000f20 a.out`main at a.c:2 
संबंधित मुद्दे