क्या कोई कृपया समझा सकता है, मेरे पास सी पर एक प्रोग्राम है, क्या मैं इसे असेंबली में बदल सकता हूं? यदि हां, तो कैसे?सी से असेंबली
उत्तर
आप जीसीसी का उपयोग करते हैं आप this पेज के अनुसार उत्पादन प्राप्त करने के लिए क्या कर सकते हैं gcc -O2 -S -c foo.c
एक मानव पठनीय रूप में असेंबली।
यही आपके संकलक करता है।
कंपाइलर आपके सी प्रोग्राम को मशीन भाषा में संकलित करता है जो मशीन प्रोग्राम का एक बाइनरी प्रतिनिधित्व है। जब कोई मानव मशीन भाषा लिखना चाहता है, तो वह इसे असेंबलर में लिखता है, जिसे बाइनरी मशीन भाषा में अनुवादित किया जाता है।
असेंबलर कोड बस बाइनरी मशीन भाषा का एक मानव पठनीय रूप है।
सी कार्यक्रम:
$ cat test.c
#include <stdio.h>
int main(int argc, char **argv) {
int a = 11+12;
printf("a = %d\n", a);
return 0;
}
संकलन यह
$ gcc -c test.c
यह एकत्रित न:
$ objdump -d test.o
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 e4 f0 and $0xfffffff0,%esp
6: 83 ec 20 sub $0x20,%esp
9: c7 44 24 1c 17 00 00 movl $0x17,0x1c(%esp)
10: 00
11: b8 00 00 00 00 mov $0x0,%eax
16: 8b 54 24 1c mov 0x1c(%esp),%edx
1a: 89 54 24 04 mov %edx,0x4(%esp)
1e: 89 04 24 mov %eax,(%esp)
21: e8 fc ff ff ff call 22 <main+0x22>
26: b8 00 00 00 00 mov $0x0,%eax
2b: c9 leave
2c: c3 ret
जीसीसी के साथ, आप -S
विकल्प का उपयोग कर सकते हैं:
gcc -O2 -S myfile.c
(इस तरह के -O2
के रूप में) सबसे अन्य विकल्प यहाँ भी इस्तेमाल किया जा सकता, यह निर्धारित करने के विधानसभा कोड किस तरह का उत्पादन किया जाता है।
नोट, हालांकि, यह केवल मध्यवर्ती चरण को उजागर कर रहा है कि संकलक वैसे भी चला जाता है (असेंबली स्रोत फ़ाइल की पीढ़ी नहीं, बल्कि यह है कि मशीन कोड जो इसका प्रतिनिधित्व करता है)। अंत परिणाम, एक असेंबलर के माध्यम से इस कोड को पार करने के बाद सीधे मशीन कोड को संकलित करने से किसी भी तरह से भिन्न नहीं होगा।
आपके कंपाइलर के पास ऐसा करने का कुछ विकल्प होना चाहिए। उदाहरण के लिए, जीसीसी के लिए आप -एस विकल्प का उपयोग कर सकते हैं। एक छोटी उदाहरण:
// test.c
#include <stdio.h>
int
main()
{
printf ("hello, world\n");
return 0;
}
-S
विकल्प के साथ यह संकलित करें।
.file "test.c"
.section .rodata
.LC0:
.string "hello, world"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $4, %esp
movl $.LC0, (%esp)
call puts
movl $0, %eax
addl $4, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
.section .note.GNU-stack,"",@progbits
सोच रहा था अगर मुझे कुछ खास चाहिए? उदाहरण के लिए पीडीपी -11? – lego69
compilers के अधिकांश द्विआधारी फ़ाइलों के साथ विधानसभा लिस्टिंग उत्पन्न करने के लिए कुछ विकल्प होता है: यह एक test.s फ़ाइल जो विधानसभा में शामिल होंगे का उत्पादन करेगा। विजुअल स्टूडियो में आप इसे फ़ाइल गुणों में "कोड जनरेशन" अनुभाग के अंतर्गत पा सकते हैं।
जीसीसी के साथ आप -एस स्विच (पूंजी एस)
का उपयोग कर सकते हैं अंततः यदि आपके पास बाइनरी है तो आप objdump -S (पूंजी एस) का उपयोग कर सकते हैं।
this question देखें। जब आप असेंबली को पढ़ना चाहते हैं तो This answer उपयोगी हो सकता है। इसके अलावा, आप एक प्रोग्राम संकलित कर सकते हैं, और फिर असेंबली आउटपुट प्राप्त करने के लिए विवाद का उपयोग करें।
चूंकि आपने देव-सी ++ का उल्लेख किया है, यह उल्लेखनीय है कि -S
ध्वज भी काम करता है। मान लें कि विंडोज़, देव-सी ++ अभी भी आउटपुट .exe का नाम रखेगा, लेकिन नतीजा निष्पादन योग्य फ़ाइल नहीं होगा, इसलिए एक्सटेंशन को .txt में बदलें या जो कुछ भी इसे आपकी पसंद के संपादक में पढ़ा जा सके। प्रोजेक्ट> प्रोजेक्ट विकल्प> पैरामीटर्स> कंपाइलर या टूल्स> कंपाइलर विकल्प के तहत विकल्प/झंडे जोड़ें।
HAHA! ठीक है!! बहुत बढ़िया! मैं सिर्फ आधा घंटे, और कल शाम के लिए यह खोज रहा था। आखिर में यह आखिरकार है! मुझे नहीं मिला कि आपको इसे दस्तावेज़ प्रारूप में पुनर्नामित करना होगा! अरे मैं ट्रोल किया गया था! महोदय आपका बहुत बहुत धन्यवाद! –
- 1. सी # असेंबली। लोड बनाम असेंबली। रिफ्लेक्शनऑनलीलोड
- 2. सी #: जीएसी से असेंबली कैसे लोड करें?
- 3. असेंबली से रिवर्स इंजीनियरिंग सी-सोर्स कोड
- 4. अनधिकृत कॉलर्स से सुरक्षित सी # असेंबली
- 5. सी # असेंबली, असेंबली में क्या है?
- 6. प्रबंधित सी ++ असेंबली गुण
- 7. एक सी # असेंबली
- 8. मैं सी/सी ++ से .NET असेंबली कैसे कॉल करूं?
- 9. x86 असेंबली से एलएलवीएम
- 10. मिक्सिंग सी और असेंबली फाइलें
- 11. एकाधिक परियोजनाओं से एकल असेंबली
- 12. असेंबली कोड को सी कोड
- 13. मैं संदर्भित असेंबली से प्रतिबिंब
- 14. सी # से एक असेंबली के एमवीआईडी पुनर्प्राप्त करें?
- 15. सी से असेंबली कॉल सम्मेलन 32 बिट बनाम 64 बिट
- 16. असेंबली में, आप सी स्ट्रक्चर से कैसे निपटते हैं?
- 17. मेवेन असेंबली: असेंबली
- 18. असेंबली असेंबली भाषा स्पेगेटी कोड
- 19. प्रोग्रामेटिक रूप से असेंबली बाध्यकारी
- 20. सी # - क्या आप एक मजबूत नामित असेंबली
- 21. सी #: एक असेंबली पर हस्ताक्षर क्यों करें?
- 22. असेंबली
- 23. असेंबली एडीसी (कैरी के साथ जोड़ें) सी ++
- 24. कौन सी असेंबली भाषा सीखने के लिए
- 25. असेंबली
- 26. मेरी सी ++ असेंबली क्यों हस्ताक्षरित नहीं है?
- 27. जीसीसी सी ++ और इनलाइन असेंबली कोड?
- 28. सी #: असेंबली में सभी वर्गों की सूची
- 29. असेंबली
- 30. असेंबली
मुझे यकीन है कि dev-cpp में असेंबली आउटपुट का उत्पादन करने के लिए विकल्प (जीसीसी के समान) हैं। मुझे नहीं पता कि dev-cpp में _intermediate_ आउटपुट के लिए एक ही हुक है, लेकिन मुझे नहीं लगता कि आपको वास्तव में उन चीज़ों की आवश्यकता है जो आप पूछ रहे हैं। उदाहरण के लिए –