2010-10-13 10 views
19

की सामग्री को निकालने के लिए कैसे प्रयास करते हैं, मैंने निम्नलिखित कोशिश की है, लेकिन परिणामस्वरूप फ़ाइल अभी भी एक ईएलएफ है और पूरी तरह से अनुभाग सामग्री नहीं है।आप केवल ईएलएफ अनुभाग

$ objcopy --only-section=<name> <infile> <outfile> 

मुझे बस अनुभाग की सामग्री चाहिए। क्या कोई उपयोगिता है जो यह कर सकती है? कोई विचार?

objcopy -O binary --only-section=.text foobar.elf foobar.text 

बस avr-objcopy के साथ सत्यापित और एक AVR ELF छवि के .text अनुभाग:

+0

objcopy काम करना चाहिए पैदा करता है। – Jichao

उत्तर

17

objdump और dd चारों ओर बल्कि असजीला हैक:

IN_F=/bin/echo 
OUT_F=./tmp1.bin 
SECTION=.text 

objdump -h $IN_F | 
    grep $SECTION | 
    awk '{print "dd if='$IN_F' of='$OUT_F' bs=1 count=$[0x" $3 "] skip=$[0x" $6 "]"}' | 
    bash 

objdump -h उम्मीद के मुताबिक उत्पादन जो योगिनी फ़ाइल में ऑफसेट अनुभाग वाली पैदा करता है। मैंने को dd शैल के लिए कमांड उत्पन्न करने के लिए बनाया है, क्योंकि dd हेक्साडेसिमल संख्याओं का समर्थन नहीं करता है। और शेल को आदेश दिया।

अतीत में मैंने मैन्युअल रूप से ऐसा किया था, बिना किसी स्क्रिप्ट के, क्योंकि इसकी शायद ही कभी आवश्यकता है।

+3

+1! – bstpierre

+0

यह मेरे द्वारा आने वाले मजाकिया लगेगा, लेकिन @ndim से सीधे आगे * उचित * समाधान क्यों नहीं ??? – Dummy00001

+1

क्योंकि यह मेरे सभी परीक्षण मामलों के लिए काम नहीं करता है। उपरोक्त किया था। – mepcotterell

36

-O binary उत्पादन प्रारूप का प्रयोग करें।

ध्यान दें कि यदि टिम नीचे बताता है, तो आपके अनुभाग में ALLOC ध्वज नहीं है, तो आपको इसे निकालने में सक्षम होने के लिए --set-section-flags .text=alloc जोड़ना पड़ सकता है।

+1

जब मैं इसे जोड़ता हूं, परिणामी खाली होता है। इसमें न तो ईएलएफ अनुभाग शीर्षलेख और न ही अनुभाग सामग्री शामिल है। प्रश्न में मैंने जो कमांड इस्तेमाल किया है वह खाली फ़ाइल नहीं बनाता है। – mepcotterell

+4

मेरे लिए निम्नलिखित कार्य करता है: objcopy -O बाइनरी-जे .text/usr/bin/lpr mylprtext –

+9

यह साफ चाल सभी वर्गों के लिए काम नहीं करती है। 'objcopy' ध्वजांकित किए गए अनुभागों की प्रतिलिपि नहीं करेगा जो न तो लोड किए गए हैं ("लोड") और न ही आवंटित ("alloc")। स्रोत में एक टिप्पणी का दावा है कि "इस तरह के एक वर्ग की सामग्री द्विआधारी प्रारूप में सार्थक नहीं है।" –

9

objcopy --dump-section

binutils 2.25 में लाया गया और -O binary --only-section करने के लिए एक समान प्रभाव प्राप्त होता है।

उपयोग:

objcopy --dump-section .text=output.bin input.o 

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html के रूप में यह दस्तावेज:

--dump अनुभाग sectionname = फ़ाइल नाम

प्लेस फ़ाइल फ़ाइल नाम में की धारा नामित sectionname सामग्री, किसी भी अधिलेखन सामग्री जो पहले वहाँ हो सकती है। यह विकल्प --add-section के विपरीत है। यह विकल्प --only-section विकल्प के समान है, सिवाय इसके कि यह स्वरूपित फ़ाइल नहीं बनाता है, यह किसी भी स्थानान्तरण को लागू किए बिना सामग्री को कच्चे बाइनरी डेटा के रूप में डंप करता है। विकल्प एक से अधिक बार निर्दिष्ट किया जा सकता है।

binutils 2.25.1 में परीक्षण किया गया उबंटू 15.10, एक ही आउटपुट के रूप में https://stackoverflow.com/a/3925113/895245

+3

@ डाउनवॉटर, कृपया समझाएं ताकि मैं जानकारी सीख और सुधार सकूं। –