ARM 汇编

由于开始好好的接触安卓这些东西,所以还是决定把所有的东西从头到尾的好好学习一下,也是开始记录生活的一种方式吧

主要的学习流程大概这两个:

ARM 汇编介绍 & 环境搭建

环境需要:Android studio ( 模拟器,ndk交叉编译环境,adb工具 ) ida( 远程调试 ),keypatch 插件

Android studio & ida 的配置

alt text

勾选这几个选项即可,下载完会在上面表示的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 下

alt text

进到android studio中里面自带有一个arm64的emu,avd所在的位置 .android/avd/{emu:name}

alt text

alt text

以后避免每次都打开 android studio可以用emulator里面命令来启动avd

alt text

⚠️ 如果我们后面如果调试或者做什么搞坏了,我们可以直接到 snapshots 目录下把下面的文件删除就行,这样就是冷启动了

alt text

配置ida调试就是直接把 android的server通过adb丢进去然后启动,配置一下端口的转发

alt text

这样后ida attach就可以看到对应的进程那些了

alt text

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

alt text

可以看到已经生成了,一个是debug版本的一个是release版本的,ida这样就可以开始调试起来了

alt text

⚠️ 好像mac m1还没办法运行32位的,所以该文章主要都以64位为主,学的时候也是多学一下64位的毕竟是主流

寄存器和指令基本格式