1. 编写arm可执行文件
- Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := main.s
include $(BUILD_EXECUTABLE)
- Application.mk
APP_ABI := armeabi
APP_PIE := true
- main.s
.arch armv7a
.text
.align 2
.global main
.type main, %function
main:
.code 32
@保存环境
STMFD SP!, {LR}
@获取CPSR寄存器状态
MRS R1, CPSR
@设置CPSR寄存器状态
@仅可以设置的标志位有:N Z C V Q
MVN R2, #0
MSR CPSR_cxsf, R2
@恢复环境
LDMFD SP!, {PC}
- 生成可执行文件
ndk-build
- 推送到手机
#makefile
all:
adb push ./libs/armeabi/main /data/local/tmp
adb shell chmod 777 /data/local/tmp/main
adb shell /data/local/tmp/main
若之前没有推送过android_server到手机,请添加推荐android_server部分,这里我将android_server拷贝到了程序文件目录。
adb push ./libs/armeabi/android_server /data/local/tmp
adb shell chmod 777 /data/local/tmp/android_server
2. 开启android_server
> adb shell
$ su
# /data/local/tmp/android_server
3. 设置本地端口映射
> adb forward tcp:23946 tcp:23946
4. ida 打开程序调试
-
设置调试信息
菜单栏Debugger,选择
设置Process options
如有必要,设置断点位置在OEP处
5. 开始调试
ida快捷键F9开始调试,
-
定位main函数
如果你的ida定位到了.text代码段,
向下找,找到第一个BL调用,按F4执行到这一行,
观察R2寄存器的值,R2寄存器的值就是main函数地址,
按g,输入R2的值,就跳转到了main函数,如果没解析,按C转为代码。
接下来,F2/F7/F8调试即可。