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調試便可。

相關文章
相關標籤/搜索