在一个反汇编的 elf 二进制文件中,我发现了这些手臂拇指指令:
function0
0x002cc3a8 8079 ldrb r0, [r0, #6]
0x002cc3aa 7047 bx lr
在 codecave 中,这些是初始的十六进制字节:
0x00033fd8 00 00 00 00 00 00 00 00
0x00033fe0 00 00 00 00 00 00 00 00
然后我只是分支到代码洞穴(将指令转换为拇指十六进制):
function0
0x002cc3a8 33F0EABF b 0x33fd8
然后将相同的十六进制字节插入到代码洞中(我没有改变任何东西):
0x00033fd8 80 79 70 47 00 00 00 00
0x00033fe0 00 00 00 00 00 00 00 00
Function0 和 codecave 位于不同的部分,但两个部分具有相同的可读和可执行标志。在调用该函数时运行应用程序后出现错误。该应用程序刚刚退出。问题似乎来自分支到 codecave。我做错了什么吗?函数和 codecave 应该在同一部分吗?