java - 用于字节码检索的解析器 dex 文件

标签 java android parsing bytecode dex

我正在尝试解析文件 dex,我已经编写了 Java 代码来获取以下信息:

  • 列出项目
  • 标题
  • 字符串ID
  • 类型 ID
  • proto_ids
  • field_ids
  • method_ids
  • 类定义

简单地根据各个字段的大小进行字节移位。

现在我想获取字节码,然后获取源代码,即相关的 dex 文件。 也许这个信息可以在结构“code_item”中找到?
如果是这样,我什么时候需要阻止内存才能读取它。

提前致谢!

最佳答案

您可以查看 dexlib2 library这是 smali/baksmali 的一部分项目。它提供了一个易于使用的API来访问dex文件中的信息。

示例代码:

DexFile dexFile = DexFileFactory.loadDexFile("blah.dex", 15);

for (ClassDef classDef: dexFile.getClasses()) {
  for (Method method: classDef.getMethods()) {
    MethodImplementation impl = method.getImplementation();
    if (impl != null) {
      for (Instruction instruction: impl.getInstructions()) {
        // process instruction as needed...
      }
    }
  }
}

关于java - 用于字节码检索的解析器 dex 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904724/

相关文章:

c# - 错误 : No mapping exists from object type

javascript - 大量对象上的 JSON.parse() 使用的内存超出了应有的范围

java - 随机弹跳球

java - 如何设置JDK的路径?

java - 使用 spring 创建通用 Controller

java - 如何通过 LDAP 在 AD 中启用用户?

javascript - 防止在移动设备上的输入字段中输入小数位

android - Android 4.x 微调器中不再有提示了吗?

android - 使用自定义形状和 png 图像设置背景

python - 在 Python/元素树中从 300MG Xml 中删除元素