我需要在纯 C 中,在读取页面后,我想用跳转指令和另一个函数地址替换函数地址,所以我可以使用另一个函数代替当前函数运行时,实现MOCK。
它在X86上运行良好,但在ARM上,我遇到了一些问题,并且不知道如何解决它。你可以帮帮我吗?
什么是ARM的跳转指令,以及如何使用memcpy将其替换为当前函数地址?
我认为关键因素可能是16hex ARM跳转指令
答案 0 :(得分:1)
来自arm社区页面上标题为Caches and Self-Modifying Code的博文:
缓存的ARM体系结构具有单独的数据缓存和 指令访问;这些被称为D-cache和I-cache, 分别。 ...有两个CPU接口, 核心可以同时加载指令和一些数据。
... 因为D-cache和I-cache不连贯, 新写的指令可能会被现有的内容掩盖 I-cache,导致处理器执行旧的(或可能 无效的说明。
我相信文章的其余部分会帮助你深入挖掘,但我想知道你为什么不使用函数指针?它们将更容易构建。