ARM 汇编
由于开始好好的接触安卓这些东西,所以还是决定把所有的东西从头到尾的好好学习一下,也是开始记录生活的一种方式吧
主要的学习流程大概这两个:
- 看一下周壑老师的视频
- 辅助一下利用 https://azeria-labs.com/ 这个网站上的lab进行学习
ARM 汇编介绍 & 环境搭建
环境需要:Android studio ( 模拟器,ndk交叉编译环境,adb工具 ) ida( 远程调试 ),keypatch 插件
Android studio & ida 的配置
勾选这几个选项即可,下载完会在上面表示的sdk Location的目录下
安装完之后自己在 .zshrc 中配置一下环境变量
export ANDROID_HOME="Android/sdk所在路径"
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
export PATH=${PATH}:${ANDROID_HOME}/ndk所在的路径
所需要的东西比如Emulator,ndk这些东西都在这个Location的目录下了
代码的头文件在 toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include 下
进到android studio中里面自带有一个arm64的emu,avd所在的位置 .android/avd/{emu:name}
以后避免每次都打开 android studio可以用emulator里面命令来启动avd
⚠️ 如果我们后面如果调试或者做什么搞坏了,我们可以直接到 snapshots 目录下把下面的文件删除就行,这样就是冷启动了
配置ida调试就是直接把 android的server通过adb丢进去然后启动,配置一下端口的转发
这样后ida attach就可以看到对应的进程那些了
c编译环境
https://developer.android.google.cn/ndk/guides/ndk-build?hl=en
主要需要的是 Application.mk 和 Android.mk 这两个文件,现在写一个c然后编译一下试试
APP_ABI := arm64-v8a
APP_BUILD_SCRIPT := Android.mk
APP_PLATFORM := android-16
LOCAL_PATH := $(call my-dir)
#LOCAL_ARM_MODE := arm
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_EXECUTABLE)
执行 ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk
可以看到已经生成了,一个是debug版本的一个是release版本的,ida这样就可以开始调试起来了
⚠️ 好像mac m1还没办法运行32位的,所以该文章主要都以64位为主,学的时候也是多学一下64位的毕竟是主流