मैं C ++ प्रोग्राम के लिए असेंबली कोड कैसे देख सकता हूं?
ऐसा करने के लिए लोकप्रिय उपकरण क्या हैं?
मैं C ++ प्रोग्राम के लिए असेंबली कोड कैसे देख सकता हूं?
ऐसा करने के लिए लोकप्रिय उपकरण क्या हैं?
जवाबों:
यदि आप स्वयं कार्यक्रम का निर्माण कर रहे हैं, तो आप अपने संकलक से विधानसभा स्रोत का उत्सर्जन करने के लिए कह सकते हैं। अधिकांश UNIX कंपाइलर -S
स्विच का उपयोग करते हैं ।
यदि आप GNU असेंबलर का उपयोग कर रहे हैं, तो संकलन करने -g -Wa,-alh
से रुक-रुक कर स्रोत और असेंबली मिलेंगी ( -Wa
कंपाइलर ड्राइवर को -al
असेंबली में विकल्प पारित करने के लिए कहता है, असेंबली लिस्टिंग चालू करता है, और -ah
"उच्च-स्तरीय स्रोत" सूची जोड़ता है):
g++ -g -c -Wa,-alh foo.cc
Visual Studio के लिए, का उपयोग करें /FAsc
।
यदि आपने बाइनरी संकलित की है,
objdump -d a.out
UNIX पर उपयोग (साइबरविन के लिए भी काम करता है),dumpbin /DISASM foo.exe
विंडोज पर।डिबगर्स भी असंतुष्ट दिखा सकते हैं।
disas
GDB में कमांड का उपयोग करें ,जीसीसी / जी ++ में, के साथ संकलित करें -S
। यह something.s
असेंबली कोड के साथ एक फ़ाइल आउटपुट करेगा ।
संपादित करें: यदि आप चाहते हैं कि आउटपुट इंटेल सिंटैक्स में हो (जो आईएमओ है, बहुत अधिक पठनीय है, और अधिकांश विधानसभा ट्यूटोरियल इसका उपयोग करते हैं), के साथ संकलित करें -masm=intel
।
-fverbose-asm
विकल्प भी जोड़ें
विज़ुअल स्टूडियो में ;
यह साइट वर्तमान में मेरे लिए काम कर रही है (2017): https://godbolt.org/
बहुत से लोगों ने पहले ही बताया कि किसी दिए गए कंपाइलर के साथ असेंबली कोड का उत्सर्जन कैसे करें। एक अन्य समाधान एक ऑब्जेक्ट फ़ाइल को संकलित करना है और इसे एक उपकरण जैसे कि objdump , readelf (Unix पर) या DUMPBIN ( लिंक ) (विंडोज पर) के साथ डंप करना है । आप एक निष्पादन योग्य को भी डंप कर सकते हैं, लेकिन आउटपुट को पढ़ना अधिक कठिन होगा।
यह किसी भी संकलक के साथ उसी तरह काम करने का लाभ है।
जो भी डीबगर आप उपयोग कर रहे हैं, उसमें एक विधानसभा दृश्य (विजुअल स्टूडियो, बोरलैंड आईडीई, जीडीबी, आदि) होना चाहिए। यदि आप डिबगर का उपयोग नहीं कर रहे हैं और आप केवल यह देखना चाहते हैं कि किसी प्रोग्राम में असेंबली क्या है, तो आप एक डिस्सेम्बलर का उपयोग कर सकते हैं या वैकल्पिक रूप से, प्रोग्राम को चला सकते हैं और इसे डिबगर के साथ संलग्न कर सकते हैं और वहां से डंप कर सकते हैं। विकल्पों पर जानकारी के लिए disassemblers के संदर्भ देखें ।
जैसा कि किसी और ने उल्लेख किया है, आपके प्लेटफ़ॉर्म का डिबगर एक अच्छा शुरुआती बिंदु है। सभी डीबगर्स और डिस्सेम्बलर्स के जैकहैमर के लिए, आईडीए प्रो पर एक नज़र डालें ।
यूनिक्स / लिनक्स प्लेटफार्मों पर (सिगविन सहित) आप उपयोग कर सकते हैं objdump --disassemble <executable>
।
अधिकांश कंपाइलर्स के पास असेंबली लिस्टिंग को आउटपुट करने का विकल्प होता है। VisualStudio के साथ जैसे आप कुछ का उपयोग कर सकते हैं:
cl.exe /FAfile.asm file.c
सर्वश्रेष्ठ पठनीयता के लिए, हालांकि, अधिकांश डिबगर्स एक ऐसा दृश्य प्रस्तुत करेंगे, जो मूल स्रोत के साथ डिसएपस्म को इंटरलेव करता है, इसलिए आप अपने कोड की तुलना कंपाइलर के आउटपुट लाइन से कर सकते हैं।
32-बिट PE फ़ाइलों के लिए PE एक्सप्लोरर Disassembler । दूसरों के लिए आई.डी.ए.
आप इस साइट को भी आज़मा सकते हैं: http://assembly.ynh.io/
वहां, आप अपना C या C ++ कोड पेस्ट कर सकते हैं और असेंबली समकक्ष संस्करण देखने के लिए एक नीला बटन दबा सकते हैं।
विजुअल स्टूडियो में आप C ++ प्रोजेक्ट के लिए असेंबलर लिस्टिंग जेनरेट कर सकते हैं।
प्रोजेक्ट प्रॉपर्टीज पर जाएँ, फिर C ++ / आउटपुट फाइल्स में और असेंबलर आउटपुट सेटिंग और ASM लिस्ट लोकेशन को एक फाइल नाम पर सेट करें।
यदि आप एक ग्रहण उपयोगकर्ता हैं, तो आप Disassembly दृश्य का उपयोग कर सकते हैं ।
Disassembly दृश्य लोड प्रोग्राम को तुलना के लिए स्रोत कोड के साथ मिश्रित निर्देशांक के रूप में दिखाता है। वर्तमान में निष्पादित लाइन एक तीर मार्कर द्वारा दर्शाई गई है और दृश्य में हाइलाइट की गई है। आप Disassembly दृश्य में निम्नलिखित कार्य कर सकते हैं:
- किसी भी असेंबली इंस्ट्रक्शन के शुरू होने पर ब्रेकपॉइंट सेट करें
- ब्रेकपॉइंट को सक्षम और अक्षम करें और उनके गुण सेट करें
- अपने प्रोग्राम के डिस्सैम्ड निर्देशों के माध्यम से चरण
- कार्यक्रम में विशिष्ट निर्देशों के लिए कूदो
Alt +8