2012-01-26 19 views
7

साथ संकलन मैं LLVM मानव पठनीय .ll फ़ाइल (उर्फ LLVM विधानसभा भाषा) करने के लिए 86 विधानसभा स्रोत कोड में परिवर्तित करने की जरूरत है। मैं यह कैसे कर सकता हूँ? यदि कोई सीधा समाधान नहीं है तो एलएलवीएम बुनियादी ढांचे के भीतर एक को जितना संभव हो उतना कम प्रयास करना संभव होगा?स्रोत करने वाली स्रोत LLVM

मुझे लगता है कि मैं जिस समाधान की तलाश कर रहा हूं वह llc का समकक्ष होना चाहिए जो .s फ़ाइल को .ll प्रतिनिधित्व में परिवर्तित करता है।

+3

यह प्रश्न पहले से ही पूछा गया था और उत्तर दिया गया था। कई सामानों (उदा। अप्रत्यक्ष शाखाओं) के कारण कोई प्रत्यक्ष समाधान नहीं है। आप इस परियोजना को llvm-qemu और libcpu जैसे आपके लिए उपयोगी पा सकते हैं। किसी भी मामले में, यह प्रश्न http://stackoverflow.com/questions/6981810/translation-of-machinecode-into-llvm-ir-disassembly-reassembly-of-x86-64-x86 –

+1

का एक डुप्लिकेट है। मैंने आपके द्वारा उल्लिखित परियोजनाओं पर पहले से ही एक नज़र डाली है। दुर्भाग्यवश, _llvm-qemu_ मृत दिखता है। और _libcpu_ एलएलवीएम के बुनियादी ढांचे का उपयोग करने के बजाय पार्सिंग असेंबली में अपना रास्ता तय करने जैसा दिखता है (इसलिए यह x86 आईएसए का समर्थन करने में अधूरा प्रतीत होता है)। दरअसल, मैंने सोचा कि जिस टूल को मैं ढूंढ रहा हूं उसे एलएलवीएम के ** एएसएम प्रिंटर ** का काम करना चाहिए, लेकिन विपरीत आईएसए निर्देशों का अनुवाद एलएलवीएम के _माचिनइनस्ट्र_ या एलएलवीएम-एमसी के _एमसीइन्स्ट_ में करना चाहिए। – bsa2000

+0

और एलएलवीएम के सबप्रोजेक्ट ** llvm-mc ** के बारे में क्या? इसमें _AsmParser_ क्लास है जो .s फ़ाइल खाने और _MCInst_ कक्षा के आधार पर इसका प्रतिनिधित्व उत्पन्न करने में सक्षम है। इस मामले में एकमात्र हिस्सा पूर्ववत रहा है _MCLowering_ वर्ग के संबंध में एलएलवीएम के _MachineInstr_- आधारित प्रतिनिधित्व के संबंध में विपरीत दिशा में वापस जाना है। – bsa2000

उत्तर

8

सिर्फ उन लोगों के लिए जो इस विषय पर अधिक जानकारी चाहते हैं, मैं एक चल रहे प्रोजेक्ट (http://dslab.epfl.ch/proj/s2e) के बारे में जानकारी साझा करना चाहता हूं जो मैंने वेब पर पाया है।

  1. LLVM आईआर के लिए 86 मशीन कोड के गतिशील अनुवाद के लिए x86-to-LLVM backend 86 युग्मक की स्थिर विश्लेषण के लिए
  2. RevGen उपकरण, LLVM को इनलाइन 86 विधानसभा का अनुवाद आईआर

करने में सक्षम: परियोजना दो घटक होते हैं यहां रेवजेन प्रोटोटाइप: रेवजेन एक x86 बाइनरी इनपुट के रूप में लेता है और तीन चरणों में समकक्ष एलएलवीएम मॉड्यूल आउटपुट करता है। सबसे पहले, रेवजेन कोड के सभी निष्पादन योग्य ब्लॉक ढूंढता है और उन्हें एलएलवीएम अनुवाद ब्लॉक में परिवर्तित करता है। दूसरा, जब कवर करने के लिए कोई और अनुवाद ब्लॉक नहीं होता है, तो रेवजेन उन्हें मूलभूत ब्लॉक में बदल देता है और एलएलवीएम प्रारूप में मूल बाइनरी के नियंत्रण प्रवाह ग्राफ का पुनर्निर्माण करता है। तीसरा, रेवजेन अंतिम एलएलवीएम मॉड्यूल बनाने के लिए बाहरी फ़ंक्शन कॉल का समाधान करता है। गतिशील विश्लेषण के लिए, एक अंतिम चरण एलएलवीएम मॉड्यूल को रन-टाइम लाइब्रेरी से जोड़ता है जो एलएलवीएम मॉड्यूल के निष्पादन की अनुमति देता है।

+0

वे उपकरण उन कार्यक्रमों के साथ काम करने के लिए हैं जो पहले से ही इकट्ठे हुए हैं। जब तक कि आपकी कहानियां या तो x86 .ASM से एलएलवीएम बिटकोड/आईआर उत्पन्न नहीं कर सकती? – TechZilla

+0

@techzilla x86 स्रोत कोड से कुछ शुरू हुआ? – franck

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^