2015-03-28 6 views
6

मैं वर्तमान में एक नंगे धातु निष्पादन योग्य बना रहा हूं, जिसमें कोड वाले कुछ विशेष खंड शामिल हैं। हालांकि, जब मैं objdump -d करता हूं तो मुझे केवल .text और .init.text अनुभागों के लिए कोड मिलता है। objdump के लिए मैनपेज केवल यह कहता है कि -d विकल्प का उपयोग करते समय यह केवल उन अनुभागों को अलग करता है जिनमें निर्देश शामिल होने की अपेक्षा की जाती है। ये कौन से अनुभाग हैं, और objdump कैसे बताते हैं कि कौन से अनुभाग डीकोड करें? मुझे पता है कि मैं सभी वर्गों का पूर्ण डिकोडिंग प्राप्त करने के लिए -D विकल्प का भी उपयोग कर सकता हूं, लेकिन आमतौर पर मुझे इसकी आवश्यकता से कहीं अधिक है।डिफ़ॉल्ट रूप से obzdump disassemble कौन सा अनुभाग करता है

उत्तर

5

objdump अनुभाग जानकारी प्राप्त करने के लिए आंतरिक रूप से libbfd का उपयोग करता है। objdumpbfd_map_over_sections() पर कॉलबैक पास करता है जो प्रत्येक अनुभाग पर कॉलबैक कॉल करता है। जब कॉल किया जाता है, libbfd कॉलबैक में asection * पास करता है, जिसमें सदस्य type है। यदि इस प्रकार के झंडे SEC_CONTENTS | SEC_CODE हैं तो द्वारा -d विकल्प पारित होने पर यह अलग हो जाता है।

libbfd में जाना काफी कठिन है, मुझे उम्मीद है कि प्रकार का पता लगाने वास्तुकला पर निर्भर करता है, लेकिन मुझे उम्मीद है कि मैंने आपको कम से कम सही सूचक दिया है। Btw (शायद जब अधिक समय बिता मैं और अधिक इस में खुदाई करेंगे और विस्तार जवाब) ..


, आप sed उपयोग कर सकते हैं अगर आप objdump -D से ब्याज के वर्गों को फिल्टर करने की एक स्क्रिप्ट की जरूरत है, इस तरह :

# ------------Place section names here ---------------vvv 
objdump -D object.o | sed -rn '/Disassembly of.*\.(comment|text)/{:a;p;n;/Disassembly of/!ba}' 
संबंधित मुद्दे