मेरी सिफारिश पूरी तरह से "रिवर्स इंजीनियरिंग" परिप्रेक्ष्य से है यह समझना है कि कैसे एक कंपाइलर पहली जगह में असेंबली भाषा निर्देशों में उच्च स्तरीय अवधारणाओं का अनुवाद करता है। विभिन्न संकलकों में पंजीकरण आवंटन कैसे किया जाता है और यह कैसे समझता है कि कैसे विभिन्न अनुकूलन नेस्टेड लूप (et.al.) के उच्च-स्तरीय प्रतिनिधित्व को अस्पष्ट किया जाएगा, असेंबली इनपुट की एक विशेष बोली लिखने में सक्षम होने से अधिक महत्वपूर्ण है।
आपकी सबसे अच्छी शर्त आपके द्वारा लिखे गए स्रोत कोड से असेंबली भाषा इंटरमीडिएट फ़ाइलों से शुरू करना है (this question for more information देखें)। फिर आप स्रोत बदल सकते हैं और देख सकते हैं कि यह मध्यवर्ती फ़ाइलों को कैसे प्रभावित करता है। शुरू करने के लिए दूसरी जगह इंटरैक्टिव डिस्सेबलरIDA Pro का उपयोग कर है।
असल में असेंबली भाषा कार्यक्रम लिखना और NASM, MASM, gas
के सिंटैक्स को सीखना, as
का सबसे आसान हिस्सा है और इससे कोई फर्क नहीं पड़ता कि आप कौन सी सीखते हैं। वे बहुत समान हैं क्योंकि स्रोत भाषा का वाक्यविन्यास बहुत बुनियादी है। यदि आप सीखने की योजना बना रहे हैं कि प्रोग्राम को क्या करना है और समझना है, तो मैं मैक्रो असेंबलरों को पूरी तरह से अनदेखा कर दूंगा क्योंकि मैक्रोज़ अनुवाद के दौरान पूरी तरह से गायब हो जाते हैं और आप डिस्सेबलर आउटपुट को देखते समय उन्हें नहीं देख पाएंगे। लर्निंग विधानसभा
एक विधानसभा भाषा सीखना पर
अभियोगात्मक भाषण में एक उच्च स्तरीय प्रोग्रामिंग भाषा सीखने की तुलना में अलग है। यदि आप मैक्रो असेंबलरों को अनदेखा करते हैं तो कम वाक्य रचनात्मक संरचनाएं होती हैं। समस्या यह है कि प्रत्येक कंपाइलर चेन का थोड़ा अलग प्रतिनिधित्व होता है, इसलिए आपको समर्थित पता मोड, पंजीकरण प्रतिबंध आदि जैसी अवधारणाओं पर ध्यान देना होगा। ये भाषा के आधार पर भाषा का हिस्सा नहीं हैं क्योंकि वे हार्डवेयर द्वारा निर्धारित हैं।
जिस दृष्टिकोण को मैंने लिया (आंशिक रूप से विश्वविद्यालय ने मुझे मजबूर किया), हार्डवेयर का पता लगाने और समझने के लिए है (उदाहरण के लिए, रजिस्टरों का #, रजिस्टरों का आकार, समर्थित शाखा निर्देशों का प्रकार इत्यादि) और थोड़ा और असेंबली भाषा कार्यक्रम लिखना शुरू करने से पहले इंटर्टर मैच के लिए इंटरप्ट्स और बिटवाईड मैनिपुलेशन का उपयोग करके अकादमिक अवधारणाएं। यह एक लंबा रास्ता है लेकिन परिणामस्वरूप असेंबली की समृद्ध समझ और उच्च प्रदर्शन कार्यक्रम कैसे लिखना है।
दिलचस्प बात यह है कि जब मैंने असेंबली और कंपाइलर निर्माण (जो आंतरिक रूप से संबंधित है) सीखने में बिताया, तो मैंने वास्तव में बहुत कम असेंबली कार्यक्रम लिखे। अधिकतर, मुझे यहां और वहां इनलाइन असेंबली के छोटे स्निपेट लिखने की आवश्यकता होती है (उदाहरण के लिए रनटाइम लोडर नहीं होने पर इंडेक्स रजिस्टरों की स्थापना करना)।मैंने स्मृति स्थान, लोडर मानचित्र फ़ाइल, और असेंबलर आउटपुट लिस्टिंग से क्रैश डंप को विच्छेदन करने में काफी समय बिताया है। मैं ईमानदारी से कह सकता हूं कि प्रत्येक असेंबलर का सिंटैक्स नाटकीय रूप से अलग है और साथ ही साथ विभिन्न कंपाइलर्स तीव्र या छोटे कोड में इरादे को हल करने के लिए क्या करेंगे।
विधानसभा कार्यक्रमों को लिखना सीखना शिक्षा प्रक्रिया का कम से कम सार्थक हिस्सा था। यह समझना आवश्यक था कि कंप्यूटर का निष्पादन बिट्स और बाइट्स में किस प्रकार अनुवाद किया जाता है, लेकिन वास्तव में ऐसा नहीं था कि मुझे वास्तव में कच्चे बाइनरी (डिससेबलर -> असेंबली लिस्टिंग -> उच्च स्तरीय मंशा का सर्वोत्तम अनुमान) से इंजीनियर को रिवर्स करने की आवश्यकता नहीं थी। या एक स्मृति डंप। मैं बाद में अधिक करता हूं, लेकिन नौकरी की आवश्यकताएं समान हैं।
- आपको वास्तव में समझना होगा कि आर्किटेक्चर की बाधाएं क्या हैं।
- आपको विचाराधीन कोडांतरक का बहुत ही बुनियादी वाक्यविन्यास पता करने के लिए है - पता मोड इंगित किया गया है कि कैसे, रजिस्टर इंगित किया गया है कि कैसे, एक
move
- क्या एक संकलक
if (a > 0)
से लिए जाने के लिए करता है परिवर्तनों के लिए तर्कों की क्रम क्या है mov.b r0,d0 ... bnz $L
प्रारंभ कंप्यूटर वास्तुकला के बारे में सीखने के द्वारा, तो कैसे एक ओएस वास्तव में भार (जैसे, Andrew Tanenbaum से कुछ पढ़ा) और एक प्रोग्राम (लेविन के Linkers & Loaders), तो C/C साधारण कार्यक्रम संकलन ++ और विधानसभा को देखो चलाता है भाषा लिस्टिंग
जब आप मुख्य रूप से असेंबली पढ़ते हैं तो उन्हें उलटते हैं। तो आप उच्च स्तरीय संरचनाओं से लाभ नहीं उठाते हैं। – CodesInChaos
थोड़ा ऑफ-विषय लेकिन चूंकि आप रिवर्स इंजीनियरिंग में दिलचस्पी रखते हैं, तो कृपया यहां रिवर्स इंजीनियरिंग साइट प्रस्ताव पर प्रतिबद्ध रहें: http://area51.stackexchange.com/proposals/26607/reverse-engineering – teukkam
नकारात्मक मतदाता? कोई कारण? – questions