objdump/dexdump/oatdump

1、objdump

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

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

前期工作:

a、新建test.c

#include<stdio.h>

int a=1;

int main()

{

    printf("a is %d.",a);

    return 0;

}

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

如果要在电脑上反汇编 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,使用方式如下:
(该目录下还提供了 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 简介

android 程序在 studio等工具中编译时,生成的 apk 文件中包含一个classes.dex 的文件,它是 dex 格式的,android 只认识 dex 格式,不认识 class 格式。

android 程序中如果引用了其它的 jar 文件,studio编译时,位于/build/intermediates/pre-dexed/debug/aaa.jar。 新的 jar 文件内部包含一个 .dex 的文件,即 class 格式的文件已经被 android 编译成 dex 格式的文件了。
dexdump 命令是专用于查看 dex 格式文件(以.jar结尾)内容的工具,在 device 中使用, 命令位于 /system/bin/dexdump。

电脑也可以用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 简介

ART推出后,device 中的 jar 文件(内容是 dex 格式的,只不过以jar 结尾)会被编译成 .odex 文件(oat 格式)。
    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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值