【无标题】

快速定位到NDK安装目录

  1. 打开你的 .bash_profile
vim ~/.bash_profile
  1. 设置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
  1. 保存后,重启你的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++filtDemagele 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时,不显示偏移值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值