IDA Pro 调试 ARM 可执行文件

a 夏天 提交于 2019-11-30 01:46:47

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

5. 开始调试

ida快捷键F9开始调试,

  • 定位main函数

    如果你的ida定位到了.text代码段,

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

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!