Android oatdump工具使用指南

目录

一、oatdump工具介绍

二、oatdump工具功能及使用方法

[2.1 提取 Dex 字节码](#2.1 提取 Dex 字节码)

[2.2 反汇编机器码](#2.2 反汇编机器码)

[2.3 查看类与方法结构](#2.3 查看类与方法结构)

[2.4 地址到指令转换(addr2instr)](#2.4 地址到指令转换(addr2instr))

[2.5 导出元数据](#2.5 导出元数据)


一、oatdump工具介绍

oatdump 是分析 Android ART 运行时优化的核心工具,尤其适用于系统应用逆向、性能调优及崩溃分析。通过导出 Dex、反汇编机器码、过滤类方法等功能,为开发者提供了底层洞察能力。

二、oatdump工具功能及使用方法

  • 执行环境

1)需通过 adb shell 在设备上直接运行(部分参数需 root 权限)。

2)也可使用本地编译的 oatdump(路径:out/host/linux-x86/bin/oatdump)分析从设备拉取的 OAT 文件。

2.1 提取 Dex 字节码

OAT 文件本质上是 ELF 格式的容器,内含原始 Dex 字节码(或优化后的副本)。oatdump 可从中导出 Dex 文件,便于后续通过 dex2jar、JD-GUI 等工具进行 Java 源码级分析。

bash 复制代码
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --export-dex-to=/data/output

导出后的 Dex 可用 dex2jar 转换为 Jar,再通过 JD-GUI 查看源码。

2.2 反汇编机器码

支持将 OAT 中的本地机器码(ARM/x86 等指令集)反汇编为人类可读的汇编代码,用于分析性能优化或底层行为。

bash 复制代码
adb shell oatdump --oat-file=/data/dalvik-cache/arm64/xxx@classes.dex --output=/data/oatdump.txt
bash 复制代码
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --output=/data/oatdump.txt

添加 --no-disassemble 可禁用反汇编,仅输出元数据。

2.3 查看类与方法结构

可列出 OAT 文件内包含的所有类和方法信息(如方法索引、偏移地址),支持正则表达式过滤特定类或方法。

bash 复制代码
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --list-classes

过滤特定类和方法:

bash 复制代码
adb shell oatdump --oat-file=app.odex --class-filter=com.example.MyActivity --method-filter=onCreate

2.4 地址到指令转换(addr2instr)

根据内存地址(如崩溃日志中的 PC 值)定位到对应的反汇编指令,辅助调试 Native 层崩溃问题。

bash 复制代码
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --addr2instr=0x00001a3b

2.5 导出元数据

支持导出 GC 映射表、栈映射表等运行时元数据,用于分析 ART 内部机制。

bash 复制代码
adb shell oatdump  --oat-file=<OAT文件路径> --dump-metadata --output=/data/output.txt