2008-11-26 14 views
14

मैं एक प्रोग्राम को डीबग करने के लिए जीडीबी का उपयोग कैसे करूं जिसमें 32-बिट x86 प्रोसेसर पर डिबगिंग प्रतीक नहीं हैं? फ़ंक्शन तर्कों का निरीक्षण करना, स्थानीय चर, पॉइंटर्स को हल करना उपयोगी होगा कि यह कैसे करना है। इरादा वास्तव में रिवर्स इंजीनियरिंग के लिए इसका उपयोग नहीं करना है, क्योंकि कभी-कभी मैं डिबगिंग प्रतीकों को स्थापित करने के लिए बहुत आलसी हूं और यह जानना बहुत अच्छा होगा कि जीडीबी से कुछ बुनियादी जानकारी कैसे प्राप्त करें।x86 पर डीबगिंग प्रतीकों के बिना जीडीबी का उपयोग करना?

उत्तर

6

डिबगिंग प्रतीकों के बिना, आप केवल एएसएम स्तर पर डीबग कर सकते हैं। ठीक है आप बिट अधिक जानकारी प्राप्त करते हैं, लेकिन आप बहुत दूर नहीं जा रहे हैं जब तक कि आप एएसएम का थोड़ा सा समझ नहीं लेते और संकलक उत्पन्न कोड को समझते हैं। यह आपको यदि पता है कि आप क्या कर रहे हैं तो स्थानीय चर आदि का एक सरल निरीक्षण करने देंगे।

यदि आपके पास स्रोत है, तो इसे पुन: संकलित करने के लिए यह कहीं अधिक आसान होगा।

+0

+1, GDB एक द्विआधारी प्रतीकों के बिना संकलित पर (या यहां तक ​​कि एक पर्याप्त अनुकूलित बाइनरी) एक विधानसभा स्तर के रूप में सबसे अच्छा काम करता सुनिश्चित करें डीबगर - एक कार्य यह उचित रूप से सक्षम है। – Falaina

1

आप जो भी कर सकते हैं वह रजिस्टरों और ढेर की सामग्री को देखता है - आपको यह बताकर सबकुछ करना होगा कि चीजों का क्या उपयोग किया जाता है, जैसा कि ड्रैमन का उल्लेख है।

20

शुरू करने के लिए, आप कर सकते हैं;

gdb "whatever" 
break __libc_start_main 
r 

libc के crt0 कोड में एक ब्रेकपाइंट सेटअप होगा और आप, मुख्य से पहले तोड़ने के लिए भले ही लक्ष्य द्विआधारी पूरी तरह से छीन लिया गया है की अनुमति देते हैं कि।

जो आपको अधिकतर उपयोगकर्ता कोड से पहले ब्रेकपॉइंट पर चलने वाली स्थिति में ले जाएगा। फिर आप एक ही कदम, विघटन, स्मृति डंप आदि ... अपने दिल की सामग्री के लिए कर सकते हैं।

यह सभी प्लेटफॉर्म पर काम करता है, तथ्य यह है कि आईए -32/x86 के बारे में पूछने से कोई फर्क नहीं पड़ता।

+0

बहुत अच्छा है। यह उल्लेख करने के लिए अच्छा होगा कि "डिससेम्बल" एक जीडीबी कमांड है जो एएसएम को डंप करता है। अब आप एएसएम कोड पढ़ सकते हैं (या, मेरे मामले में, देखो)! वाह! – Lotus

+1

[यहां अच्छा ट्यूटोरियल है] (http://felix.abecassis.me/2012/08/gdb-debugging-stripped-binaries/) जीडीबी के साथ छीनने वाली बाइनरी डिबगिंग के बारे में। –

0

अच्छा, बिल्कुल सबसे महत्वपूर्ण बात यह है कि आप ढेर को खोलने में सक्षम हैं। तीन तरीके यह सुनिश्चित किया जा सकता हैं:

  • -g

  • साथ डिबगिंग बिल्ड प्रतीकों सिस्टम तालिकाओं (? शायद कुछ भी ELF इन दिनों) के माध्यम से करते हैं कि C++ अपवाद तनाव मुक्त होने के पर, -funwind-tables झंडा यह बता देंगे भाषा के बावजूद ऐसी तालिकाओं को उत्पन्न करने के लिए, और जीडीबी इन तालिकाओं का उपयोग कर सकते हैं (कम से कम, x86 लिनक्स के साथ)।

  • या, उन में नाकाम रहने, कम से कम है कि सक्षम नहीं है