我目前正在研究Dalvik字节码,但是由于我缺乏编译器背景,因此难以掌握设计。我敢肯定,没有人写过有关Dalvik的书(或者我可能错了),所以有人可以向我推荐Java VM上的引用,其中包含一些动手示例吗?具体来说,我感兴趣的是:

  • 了解如何解释生成的字节码
  • 使用VM规范(Dalvik或Java)将字节码反编译为中间表示形式,然后将其编译回

  • 简而言之,可能我正在寻找的是学习反向工程字节码,以便我可以分析其漏洞。有什么建议么?

    最佳答案

    对于引用资料,dalvik文档无人能及。您可以在AOSP的dalvik子项目中找到它们,也可以在http://s.android.com/tech/dalvik/index.html上在线获取它们。

    Bytecode format(或dalvik项目中的dalvik-bytecode.html)可能是您最感兴趣的一种。.Dex Format(dex-format.html)也很有用,Instruction Formats(instruction-formats.html)也很有用。

    有关字节码的更多常规信息,请查看http://code.google.com/p/smali/wiki/Registershttp://code.google.com/p/smali/wiki/TypesMethodsAndFields

    您肯定会需要一些工具。我自然很喜欢smali/baksmali,这是当前唯一可用的汇编程序/反汇编程序对。还有一个称为dedexer的反汇编程序(但没有汇编程序)和dexdump,它与AOSP代码库一起提供,并提供了dex文件的低级转储-不仅字节码,而且还包括所有dex结构(baksmali具有相似的输出,以及-D选项)。

    您可能也对apktool感兴趣,它使用smali/baksmali,但还具有反转apk中“已编译” xml文件的功能。

    有几种工具可以将dalvik字节码转换回Java字节码,尽管我认为它们还不是100%-undxdex2jar

    关于java - 在Dalvik或Java虚拟机上引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4839371/

    10-11 05:18