2011-08-25 28 views
8

मैं जीसीसी के साथ एआरएम के लिए बनाई गई वस्तु को अलग करने की कोशिश कर रहा हूं। दुर्भाग्य से, objdump यह अनुमान लगाने का प्रयास कर रहा है कि कोड एआरएम और थंब है, और यह गलत हो रहा है: ऐसा लगता है कि मेरा कोड थंब है जब यह वास्तव में एआरएम है।objdump और एआरएम बनाम थंब

मुझे लगता है कि objdump के पास थंब (-Mforce-thumb) के रूप में सभी निर्देशों की व्याख्या करने के लिए मजबूर करने का विकल्प है, लेकिन इसमें एआरएम मोड को मजबूर करने के लिए कोई नहीं है!

यह मेरे लिए वास्तव में अजीब चूक की तरह लगता है, और यह काम करने की मेरी क्षमता को गंभीरता से बाधित कर रहा है (मैं एक एम्बेडेड डिवाइस पर हूं और डिबगिंग का मेरा एकमात्र साधन डिस्सेप्लिब्स को देखना है)। मैंने विभिन्न दृष्टिकोणों की कोशिश की है, जिसमें ओआरजेडम्प को एआरएम आर्किटेक्चर का उपयोग करने की कोशिश करने का प्रयास करना शामिल है जो थंब का समर्थन नहीं करता है, लेकिन कुछ भी काम नहीं करता है। कोई विचार?

(और हाँ, मुझे पता है कि निर्देश वास्तव में एआरएम रहे हैं ...)

+0

क्या आप बाइनरी (एल्फ) फ़ाइलों को अलग कर रहे हैं, शायद जानकारी वहां थी और फिर हटा दी गई थी। या शायद आपको बाइनरी में डीबग जानकारी शामिल करने के लिए एक स्विच जोड़ना होगा। –

+0

यह 'objdump ... -मोनो-फोर्स-थंब' आज है। यह नहीं कह सकता कि यह 2011 में वापस मौजूद था। अनिवार्य रूप से यह या तो एआरएम या थंब है, इसलिए जब आप 'नो-फोर्स-थंब' कहते हैं तो निर्देश सेट एआरएम है। – JSmyth

उत्तर

0

यह या तो संकलक/लिंकर या objdump में एक बग की तरह लगता है। आम तौर पर प्रतीकों को ठीक से चिह्नित किया जाना चाहिए यदि वे थंब या एआरएम हैं और तदनुसार अलग किए गए हैं।

जिसके अनुसार, कुछ बातें तुम कोशिश कर सकते है:

  1. सादा बाइनरी (बी द्विआधारी डी) के रूप में फ़ाइल की व्याख्या - इस जाँच प्रतीक को निष्क्रिय कर देगा और एआरएम के रूप में पूरी फ़ाइल एकत्रित न होगा। डाउनसाइड: आउटपुट में बहुत सारे कचरे, कोई अच्छा पता नहीं।
  2. IDA Pro का उपयोग करें। भले ही यह गलत तरीके से अनुमान लगाए, आप हमेशा अपने निर्णय को ओवरराइड कर सकते हैं। इसके अलावा, यह एक बहुत अच्छा डिस्सेप्लर पर्यावरण है :)
+0

मुझे प्रतीक की जानकारी चाहिए इसलिए मुझे पता है कि मैं क्या देख रहा हूं, इसलिए कच्चे बाइनरी का उपयोग करके इसे काट नहीं आता है, मुझे डर है। प्रश्न में फ़ाइल में डीबगिंग जानकारी है इसलिए अंकन जानकारी वहां होनी चाहिए। मेरी निर्माण प्रक्रिया को गठबंधन किया गया है लेकिन इसमें जीसीसी शामिल है; कोई विचार क्या प्रतीक चिह्न को अलग कर सकता है? –

+0

यह कहना मुश्किल है कि समस्या वास्तव में क्या है। प्रतीक तालिका की सामग्री मुद्रित करें और arm-dis.c में print_insn (_arm) पर एक नज़र डालें। शायद यह आपको कुछ विचार देगा। –

3

arm-linux-gnueabi-objdump -marm -b binary -D मेरे लिए चाल है। यह प्रतीक की जानकारी को संरक्षित नहीं करता है, इसलिए यह काफी नहीं है जो आप खोज रहे हैं, लेकिन यह आपको अलग-अलग देता है, जो एक शुरुआत है।