我不知道为什么下面的代码遇到BAD_INSTRUCTION
错误,有人吗?
mov r4, r0
movw r0, #0xc70 ; injected code start here
movt r0, #0x8bb3
movw r3, #0x576
ldr r1, [r7]
movs r5, #0x1a
add r5, pc ; next instruction will jump over 9 instructions
bx r5 ; injected code end here
ldr r1, [r0]
ldr r0, [r2]
blx 0x26e11c
movw r1, #0x6442
movt r1, #0x18
add r1, pc
ldr r1, [r1]
blx 0x26e11c
mov r3, r1
movw r1, #0x66a4 ; r1 has not been loaded
movt r1, #0x15 ; with new value. Why?
mov r2, r0
add r1, pc ; This instruction isn't getting called
mov r0, r4 ; EXC_BAD_INSTRUCTION here
blx __sprintf
答案 0 :(得分:2)
在26字节偏移(即没有多个4字节ARM指令)和立即生成标志设置(movs r5, #0x1a
)之间,我感觉这是Thumb代码。但是,bx r5
是一个交互分支,由于r5的第0位没有被设置,它将与ARM状态交互到一些Thumb指令的中间并且变得非常不满意。由于我认为EXC_BAD_INSTRUCTION
是iOS报告的未定义指令异常,所有这些都会加起来。
如果您处于Thumb状态并希望保持Thumb状态,请使用非互通分支(即mov pc, r5
),或确保设置bx
目标的位0(即偏移量为0x1b)。