2011-01-29 14 views
11

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

  • समझ कैसे एक मध्यवर्ती प्रतिनिधित्व में बाइट कोड डिकंपाइल और फिर इसे वापस संकलन
  • को वीएम विनिर्देशों (Dalvik या जावा) का उपयोग करना उत्पन्न बाइट-कोड
  • व्याख्या करने के लिए

संक्षेप में, शायद मैं जो खोज रहा हूं वह रिवर्स इंजीनियरिंग बाइट कोड सीखना है ताकि मैं इसे कमजोरियों के लिए विश्लेषण कर सकूं। कोई सुझाव?

+0

सामान्य जावा के लिए '.class' फाइलें देखते हैं डीकंपलर जो जावा स्रोत-कोड उत्पन्न करते हैं जो बहुत पठनीय है। – CodesInChaos

+1

@CodeInChaos: हां। मुझे कुछ डिकंपेलर मिल सकते थे, लेकिन मैं सीखने की कोशिश कर रहा हूं कि चीजें कैसे काम करती हैं, इस बारे में महसूस करने के लिए एक सरल डिकंपेलर कैसे लिखना है। – Legend

+0

@CodeInChaos सामान्य .class फ़ाइलों के लिए Decompilers Android के Dalvik VM के लिए बहुत मदद नहीं करते हैं, क्योंकि यह पूरी तरह से अलग वर्चुअल मशीन आर्किटेक्चर, और पूरी तरह से अलग बाइट कोड का उपयोग करता है। –

उत्तर

9

संदर्भ सामग्री के लिए, दल्विक दस्तावेज़ों को कुछ भी नहीं धड़कता है। आप या तो AOSP में Dalvik उप परियोजना में इन पा सकते हैं, या वे अब http://s.android.com/tech/dalvik/index.html

Bytecode format (Dalvik परियोजना में या Dalvik-bytecode.html) पर ऑनलाइन उपलब्ध हैं शायद एक है कि आप सबसे में रुचि होगी है । .Dex Format (डेक्स-format.html), भी उपयोगी है के रूप में Instruction Formats है (अनुदेश-formats.html)

बाईटकोड बारे में कुछ और सामान्य जानकारी के लिए http://code.google.com/p/smali/wiki/Registers और http://code.google.com/p/smali/wiki/TypesMethodsAndFields

आप निश्चित रूप से चाहता हूँ की जाँच कुछ औजार मैं smali/baksmali पर स्वाभाविक रूप से काफी आंशिक हूं, जो वर्तमान में उपलब्ध एकमात्र असेंबलर/डिस्सेबलर जोड़ी है। dedexer (लेकिन कोई असेंबलर) नामक एक डिस्सेबलर भी नहीं है, और डेक्सडम्प, जो एओएसपी कोडबेस के साथ आता है और डीईएक्स फाइलों का निम्न स्तर का डंप प्रदान करता है - न केवल बाइटकोड, बल्कि सभी डेक्स संरचनाओं के साथ-साथ (बाक्समली के समान आउटपुट , डी विकल्प के साथ)।

आपको apktool में भी रुचि हो सकती है, जो स्माली/बाक्समाली का उपयोग करती है, लेकिन इसमें एपीके में "संकलित" एक्सएमएल फाइलों को रिवर्स करने की क्षमता भी है।

वहां उपकरण है कि Dalvik बाईटकोड वापस परिवर्तित जावा बाईटकोड करने के लिए कुछ है, हालांकि मुझे नहीं लगता कि वे कर रहे हैं अभी तक 100% कर रहे हैं - undx और dex2jar

3

बाइट कोड के मानव-पठनीय प्रतिनिधित्व उत्पन्न करने के लिए पहले से ही रिवर्स इंजीनियरिंग .dex फ़ाइलों के लिए उपकरण हैं। सबसे लोकप्रिय में से एक बाक्समाली है, जिसे आप यहां पा सकते हैं: http://code.google.com/p/smali/

बाइट कोड का विवरण स्वयं Googling द्वारा आसानी से पाया जा सकता है। यहां तीसरे परिणाम थे: http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html

यदि आप रिवर्स इंजीनियरिंग लेआउट हैं, तो आपको एक बाइनरी-एक्सएमएल-टू-एक्सएमएल कनवर्टर भी चाहिए। एक और स्टैक ओवरफ़्लो प्रश्न है जो ऐसा करने के लिए कुछ टूल का उल्लेख करता है: Parse versionCode from android apk files

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