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调试即可。
本文详细介绍了如何使用Android.mk和Application.mk编译ARM可执行文件,包括设置ABI、生成代码、推送至手机并使用IDA进行调试的过程。通过具体步骤,读者可以掌握从代码编写到程序调试的全流程。

1564

被折叠的 条评论
为什么被折叠?



