Android oatdump工具使用指南
目录
一、oatdump工具介绍
二、oatdump工具功能及使用方法
2.1 提取 Dex 字节码
2.2 反汇编机器码
2.3 查看类与方法结构
2.4 地址到指令转换(addr2instr)
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 源码级分析。
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 等指令集)反汇编为人类可读的汇编代码,用于分析性能优化或底层行为。
adb shell oatdump --oat-file=/data/dalvik-cache/arm64/xxx@classes.dex --output=/data/oatdump.txt
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --output=/data/oatdump.txt
添加 --no-disassemble 可禁用反汇编,仅输出元数据。
2.3 查看类与方法结构
可列出 OAT 文件内包含的所有类和方法信息(如方法索引、偏移地址),支持正则表达式过滤特定类或方法。
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --list-classes
过滤特定类和方法:
adb shell oatdump --oat-file=app.odex --class-filter=com.example.MyActivity --method-filter=onCreate
2.4 地址到指令转换(addr2instr)
根据内存地址(如崩溃日志中的 PC 值)定位到对应的反汇编指令,辅助调试 Native 层崩溃问题。
adb shell oatdump --oat-file=/system/framework/oat/arm64/services.odex --addr2instr=0x00001a3b
2.5 导出元数据
支持导出 GC 映射表、栈映射表等运行时元数据,用于分析 ART 内部机制。
adb shell oatdump --oat-file=<OAT文件路径> --dump-metadata --output=/data/output.txt