我試圖從Android應用程序中反編譯classes.dex(或者至少得到像JVM中的字節代碼)文件。我發現this specification但我無法理解Dalvik VM是否有字節碼,或者只是彙編程序?它是否具有不同的命令長度,如x86或JVM一樣? DVM有沒有像this table這樣的東西?獲取Android應用程序中classes.dex的字節代碼
回答
該頁面列出了所有的字節碼。你需要的是.dex文件格式:http://s.android.com/tech/dalvik/dex-format.html
在開始反彙編字節碼之前,你需要解析dex文件,該字節位於與方法關聯的code_item結構中。
而且JVM和DalvikVM都不使用固定寬度命令。第一個字節是操作數,可能會跟隨0個或更多參數字節。 –
你的第二句話根本沒有意義。反編譯和反彙編是兩個獨立的過程。反編譯的目標是將字節碼/程序集轉換回它編譯的原始高級語言。反彙編的目標是產生一個人類可讀的字節碼的直接文本表示。 – JesusFreke
@JesusFreke - 也許不是最好的術語,但它是正確的。我的意思是反編譯,以分離作爲dex文件的編譯。 dex包含一個文件中的所有編譯(編譯器有意義)字節代碼(英文含義爲編譯)。 –
這是我搜索的東西:Dalvik opcodes。從這張表中您可以瞭解命令的長度以及如何從* .dex中獲取字節碼。
- 1. 如何在android應用程序中獲取ISO國家代碼?
- 2. 如何運行我從Android源代碼獲取的應用程序源代碼?
- 3. 獲取應用程序,從名字的GUID - 通過代碼
- 4. UWP-從應用程序的代碼中讀取.csproj的應用程序代碼
- 5. 獲取Android應用程序
- 6. 獲取Android應用程序
- 7. 如何訪問Android應用程序的classes.dex?
- 8. 如何從您的Android應用程序中讀取SMS代碼
- 9. 如何獲取windows phone7應用程序中的國家代碼?
- 10. 如何獲取應用程序代碼中的「start_lsn」值
- 11. 在代碼中獲取Qt應用程序的版本
- 12. 在iPhone SDK中獲取Siphon應用程序的示例代碼?
- 13. 「%02D」 的Android應用程序代碼
- 14. 運行Android應用程序的代碼
- 15. 應用程序的Android測試代碼?
- 16. 在Android應用程序中獲取帶有網址的html源代碼
- 17. 在Android應用程序中獲取帶有網址的html源代碼
- 18. 在本機代碼中獲取Android應用程序的root權限
- 19. 運行外部代碼/應用程序的Android應用程序?
- 20. 在Android應用程序中獲取JSON
- 21. 獲取應用程序:在Android Studio中
- 22. 在Android上獲取Java字節碼
- 23. 在代碼中獲取Azure Web應用程序名稱
- 24. 在桌面應用程序中獲取「代碼」而不是「access_token」
- 25. 在android代碼中創建一個套接字(不是在android應用程序中)獲取權限被拒絕
- 26. 使用/獲取應用程序的短代碼
- 27. 如何在Android應用程序中獲取手機號碼?
- 28. 字節序的C++代碼
- 29. 獲取JSONException的Android應用程序
- 30. 的EditText獲取Android應用程序
爲了防止您對此不熟悉,baksmali可以將dex文件反彙編爲人類可讀的文本格式,並且smali會做相反的處理。 – JesusFreke
另外,值得指出的是,http://s.android.com/tech/dalvik/instruction-formats.html包含了解析每種指令格式所需的詳細信息。 – JesusFreke