当前位置:   article > 正文

objdump/dexdump/oatdump

oatdump

1、objdump

  1. 简介: objdump是gcc工具,用来查看编译后目标文件的组成,objdump命令是Linux下的反汇编目标文件或者可执行文件的命令。用于反汇编ELF格式的文件的内容。
  2. 目标: .o文件、可执行文件、核心转储文件(core dump)、.so文件(动态链接库都属于ELF文件

下面以可执行文件test为例详细介绍:

前期工作:

a、新建test.c

  1. #include<stdio.h>
  2. int a=1;
  3. int main()
  4. {
  5. printf("a is %d.",a);
  6. return 0;
  7. }

b、分别生成test.o和test文件(以下命令在终端.c文件路径执行)

gcc -c test.c(编译test.c文件,成功时输出目标文件test.o)

gcc -o test test.o(将test.o连接成可执行的二进制文件test)

./test(运行可执行文件test)

c、利用objdump命令分别查看test.o和test

常用参数如下:

objdump -f test

显示test的文件头信息

objdump -d test

反汇编test中的需要执行指令的哪些section

objdump -D test

与-d类似,但反汇编test中的所有section

objdump -h test

显示test的Section Header信息

objdump -x test

显示test的全部Header信息

objdump -s test

除了显示test的全部Header信息,还显示他们对应的十六进制文件代码

d、.c文件编程成so文件

gcc test.c -fPIC -shared -o libtest.so

e、so文件反编译

objdump -d libtest.so > libtest.txt

  1. 如果要在电脑上反汇编 android 中的 so,如libmorpho_hyperlapse_jni_v6.so,可使用 aarch64-linux-android-objdump,命令位于rom source code 下的/rom_dugl/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb,使用方式如下:
  2. (该目录下还提供了 for arm 的 readelf、gcc 等工具)。

$./aarch64-linux-android-objdump -d -S '/home/yingkun_che/桌面/objdump/libmorpho_hyperlapse_jni_v6.so' > '/home/yingkun_che/桌面/objdump/libmorpho_hyperlapse_jni_v6.txt'

注:-S 表示关联 source code 并一起输出。

2、dexdump

1 简介

  1. android 程序在 studio等工具中编译时,生成的 apk 文件中包含一个classes.dex 的文件,它是 dex 格式的,android 只认识 dex 格式,不认识 class 格式。
  2. android 程序中如果引用了其它的 jar 文件,studio编译时,位于/build/intermediates/pre-dexed/debug/aaa.jar。 新的 jar 文件内部包含一个 .dex 的文件,即 class 格式的文件已经被 android 编译成 dex 格式的文件了。
  3. dexdump 命令是专用于查看 dex 格式文件(以.jar结尾)内容的工具,在 device 中使用, 命令位于 /system/bin/dexdump。
  4. 电脑也可以用dexdump命令,位于android-sdk-linux/build-tools/28.0.3/dexdump

2 常用参数

-d后面可以跟 .dex、.jar、.apk文件

连接device使用:

$ adb shell dexdump -d system/app/Duo/Duo.apk > duo_dump.log

电脑 本地使用:

$ dexdump -d Generated_1098644608.jar

$ dexdump -d Duo.apk > duo_dump.log#没有oat优化时使用

3、oatdump

1 简介

  1. ART推出后,device 中的 jar 文件(内容是 dex 格式的,只不过以jar 结尾)会被编译成 .odex 文件(oat 格式)。
  2. oatdump 命令是专用于查看 oat 格式文件(以.odex结尾)内容的工具。它只能在 device 中使用,命令位于 /system/bin/oatdump。

2 相关知识

参考:http://blog.csdn.net/asmcvc/article/details/40397561

odex vdex art文件介绍【笔记】odex , vdex ,art 文件区别_高大达的博客-CSDN博客_odex vdex

3 常用参数

$ adb shell oatdump --oat-file='/system/priv-app/HTCZero/oat/arm/HTCZero.odex' > HTCZero.txt

$ adb shell oatdump --oat-file=/data/dalvik-cache/arm/system@priv-app@HTCZero@HTCZero.apk@classes.dex

$ adb shell oatdump --oat-file=/system/framework/arm64/boot.oat >> boot.oat.dump.txt

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号