Android NDK工具使用

快速定位到NDK安装目录

  • 打开你的 .bash_profile

vim ~/.bash_profile
  • 设置ndk的环境变量

ANDROID_HOME="/Users/xxxx/Library/Android/sdk" export NDK=${PATH}:${ANDROID_HOME}/ndk/21.3.6528147 //这个就是你的快捷指令 alias ndk=alias ndk=${ANDROID_HOME}/ndk/21.3.6528147/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin
  • 保存后,重启你的ternimal,就可以快速定位到你的ndk所在位置

ndk工具的介绍

工具

说明

用法

aarch64-linux-android-addr2line

用addr2line可以将函数地址解析为函数名

./aarch64-linux-android-addr2line -C -f -e /XXXX/Desktop/libbytebench.so 0000007994a1ee20

aarch64-linux-android-objdump

把so进行反汇编

./aarch64-linux-android-objdump -j.text -l -C -S /xxx/xxxx/xxx.so > /xxxx/XX/xxxx.txt

aarch64-linux-android-c++filt

Demagele c++ 符号

 

aarch64-linux-android-nm

查看定义的符号

./aarch64-linux-android-nm -D /Users/XXX/Desktop/libbytebench.so

aarch64-linux-android-strings

查看so中所有的字符串

./aarch64-linux-android-strings -a /Users/XXXX/Desktop/libbytebench.so

一点点ARM指令的知识

寄存器:

  • PC寄存器:通常被理解为程序当前执行的指令地址,但是在ARM中,pc的值实际是当前指令的地址:codeAddr+4(Thumb)或+8(ARM)

  • LR寄存器:链接寄存器,cpu在执行BL/BLX时,将当前指令的下一条指令的地址写入LR寄存器

反汇编的格式:

使用objdump进行反汇编

 

  • 第一列(237fec):当前指令在动态库中的相对便宜地址,记作codeAddr

  • 第二列(f7ff fe80):当前指令的机器码,其中f7ff是高16位,是指令格式图中的前半部,fe80是低16位,是指令格式图中的后半部

  • 第三列(bl):bl是跳转指令

  • 第四列(237cf0 <__ZN3art6Thread25InstallImplicitProtectionEv>):要跳转的目标地址及其符号和符号偏移(目标地址相对符号的偏移位0时,不显示偏移值)

你可能感兴趣的:(android)