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

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调试即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值