我正在调试ARM程序(android)并对其进行一些修改。我想在0x8436到JMP 0x8684,所以我覆盖4个字节BLX指令,在那之后我用IDA Pro来加载程序,它似乎成功从IDA的观点:arm指令是'UNDEFINED'?
IDA view
-----------------------------------------------------------------
.text:00008430 LDR R0, =(aOkkkkkkk___ - 0x8438)
.text:00008432 PUSH {R4,LR}
.text:00008434 ADD R0, PC ; "okkkkkkk..."
.text:00008436 BLX sub_8684
.text:0000843A POP {R4,PC}
HEX view(the machine code)
-----------------------------------------------------------------
00008436 00 F0 25 E9
但是,程序运行失败( src程序正常运行):
arm-eabi-gdb
-----------------------------------------------------------------
(gdb) x/10i 0x8430
=> 0x8430: ldr r0, [pc, #8] ; (0x843c)
0x8432: push {r4, lr}
0x8434: add r0, pc
0x8436: ; <UNDEFINED> instruction: 0xf000e925
0x843a: pop {r4, pc}
(gdb) x/10x 0x8436
0x8436: 0xe925f000 0x001cbd10
那么blx指令的机器码是错的?请帮我...我想知道正确的指令和BLX转换成机器代码的运算...
而且原始指令这里(正常运行):
ori:
.text:00008430 LDR R0, =(aOkkkkkkk___ - 0x8438)
.text:00008432 PUSH {R4,LR}
.text:00008434 ADD R0, PC ; "okkkkkkk..."
.text:00008436 BLX sub_83F0
.text:0000843A POP {R4,PC}
ori:
00008430 02 48 10 B5 78 44 FF F7 DC EF 10 BD
modified:
00008430 02 48 10 B5 78 44 00 F0 25 E9 10 BD
好像很奇怪? –
请提供更多的反汇编,blx指令是拇指或手臂上的32位(技术上拇指是两个单独的16位指令),所以如果您用手臂版本替换了拇指指令,那么它肯定会中断。对于此处显示的所有装配,请提供 –
之前版本和后续版本或机器代码(如果更容易)的反汇编。随你。 –