当前位置: 首页 > news >正文

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
http://www.dtcms.com/a/330520.html

相关文章:

  • PyCharm 2025.2:面向工程师的 AI 工具
  • Android 自定义Toast
  • Redis 03 redis 缓存异常
  • XCTF-warmup详细题解(含思考过程)
  • Android数据缓存目录context.getCacheDir与Environment.getExternalStorageDirectory
  • 飞算JavaAI合并项目实战:7天完成3年遗留系统重构
  • ASQA: 面向模糊性事实问题的长格式问答数据集与评估框架
  • 微服务从0到1
  • Linux基本使用和Java程序部署(含 JDK 与 MySQL)
  • 电子电路学习日记
  • 飞算JavaAI:革新Java开发体验的智能助手
  • 零基础数据结构与算法——第七章:算法实践与工程应用-搜索引擎
  • JUC学习笔记-----LinkedBlockingQueueConcurrentLinkedQueueCopyOnWriteArrayList
  • Nginx学习笔记(八)—— Nginx缓存集成
  • c++26新功能—多维数组视图
  • iOS混淆工具有哪些?游戏 App 防护下的混淆与加固全攻略
  • 【Linux基础知识系列】第九十四篇 - 如何使用traceroute命令追踪路由
  • 使用Docker安装MeiliSearch搜索引擎
  • 从零开始的云计算生活——激流勇进,kubernetes模块之Pod资源对象
  • 使用 Rust 进行 Web 自动化入门
  • npm删除包
  • 基于Redisson的分布式锁原理深度解析与优化实践
  • OpenCV图像处理2:边界填充与平滑滤波实战
  • VSC遇到的问题:无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测
  • 计算机视觉CS231n学习(9)
  • VLMs开发——基于Qwen2.5-VL 实现视觉语言模型在目标检测中的层级结构与实现方法
  • 【CV 目标检测】R-CNN①——Overfeat
  • PyCharm性能优化与大型项目管理指南
  • Linux 路由表建立过程分析