基本上我想用MOVS R1, #0x0替换MOV.W R1, #0x123,因为后面的指令需要4个字节,所以不可能简单地用十六进制代码替换。我读过有关代码凹腔的信息,但我的文本段没有可用空间来添加新数据。

#1 楼

由于您只需要2个字节,因此不需要庞大的代码空间。开箱即用,您可以尝试以下四种方法:


很可能您的文本段中有一个或两个函数,它们存在于某些源代码中,但从未调用过。在几十个字节之后查找具有标准功能前缀(loc_XXXX)和后缀(push ....,LR)的pop ....,PC标签。将这些功能重新用于您的代码陷阱。
检查代码中是否有多余的指令。也许您可以在附近的某个地方省略2个字节,然后将其余部分移走。
通常,函数开始对齐到16个字节的边界。当前函数和下一个函数之间可能有一些备用字节。这些可以在汇编中显示为nop.w,在十六进制中显示为f3af 8000。将“ ThisIsALongErrorMessage \ 0”替换为“ LongError \ 0”,您已经获得了一些字节,但是却以清晰的错误消息为代价,因此您永远也看不到。这有点难,因为您的文本可能在某些未标记为可执行的部分中,因此您必须弄弄ELF标头才能解决此问题。


评论


谢谢..我在同一功能中发现了一些调试消息,因此我将省略对__android_log_print的调用以获取一些空间。

–user2578525
15年6月8日在12:31