2012-11-05 55 views
0

我試圖從Android應用程序中反編譯classes.dex(或者至少得到像JVM中的字節代碼)文件。我發現this specification但我無法理解Dalvik VM是否有字節碼,或者只是彙編程序?它是否具有不同的命令長度,如x86或JVM一樣? DVM有沒有像this table這樣的東西?獲取Android應用程序中classes.dex的字節代碼

+0

爲了防止您對此不熟悉,baksmali可以將dex文件反彙編爲人類可讀的文本格式,並且smali會做相反的處理。 – JesusFreke

+0

另外,值得指出的是,http://s.android.com/tech/dalvik/instruction-formats.html包含了解析每種指令格式所需的詳細信息。 – JesusFreke

回答

0

該頁面列出了所有的字節碼。你需要的是.dex文件格式:http://s.android.com/tech/dalvik/dex-format.html

在開始反彙編字節碼之前,你需要解析dex文件,該字節位於與方法關聯的code_item結構中。

+0

而且JVM和DalvikVM都不使用固定寬度命令。第一個字節是操作數,可能會跟隨0個或更多參數字節。 –

+1

你的第二句話根本沒有意義。反編譯和反彙編是兩個獨立的過程。反編譯的目標是將字節碼/程序集轉換回它編譯的原始高級語言。反彙編的目標是產生一個人類可讀的字節碼的直接文本表示。 – JesusFreke

+0

@JesusFreke - 也許不是最好的術語,但它是正確的。我的意思是反編譯,以分離作爲dex文件的編譯。 dex包含一個文件中的所有編譯(編譯器有意義)字節代碼(英文含義爲編譯)。 –

0

這是我搜索的東西:Dalvik opcodes。從這張表中您可以瞭解命令的長度以及如何從* .dex中獲取字節碼。

相關問題