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

inv*_*306 0 java parsing android bytecode dex

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

  • 项目清单
  • 标头
  • 字符串ID
  • 类型ID
  • 原型ID
  • 字段ID
  • 方法ID
  • 类定义

只需根据各个字段的大小进行字节移位即可。

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

提前致谢!

Jes*_*eke 5

您可以查看dexlib2 库,它是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...
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)