IDA Pro 调试 ARM 可执行文件

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拷贝到了程序文件目录。android

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 打开程序调试

  • 设置调试信息shell

    菜单栏Debugger,选择tcp

    设置Process options函数

    若有必要,设置断点位置在OEP处ui

5. 开始调试

ida快捷键F9开始调试,3d

  • 定位main函数调试

    若是你的ida定位到了.text代码段,code

    向下找,找到第一个BL调用,按F4执行到这一行,server

    观察R2寄存器的值,R2寄存器的值就是main函数地址,blog

    按g,输入R2的值,就跳转到了main函数,若是没解析,按C转为代码。

    接下来,F2/F7/F8调试便可。

相关文章
相关标签/搜索