【发布时间】:2014-06-10 02:01:05
【问题描述】:
我有一个纯C的需求,在读完页面后,我想用跳转指令和另一个函数地址替换函数地址,这样我就可以用另一个函数代替当前函数运行时,它实现了 MOCK。
它在 X86 上运行良好,但在 ARM 上,我遇到了一些问题,不知道如何解决。你可以帮帮我吗?
什么是ARM的跳转指令,如何使用memcpy将其替换为当前函数地址?
我认为关键要素可能是 16hex ARM 跳转指令
【问题讨论】:
-
“我遇到了一些问题” - 说出这些问题究竟是什么什么会有所帮助。
-
另外,有许多 ARM 指令会导致分支,但在“纯 C”中您无法访问它们,因为 C 运行时环境的抽象是您的最低级别。这听起来确实像是您在有效地尝试重新实现函数指针,但是以一种依赖于实现细节或未定义行为的令人讨厌的方式。
-
您需要提供有关“C”环境的更多详细信息。以最纯粹的形式,auselen 的回答适用。但是,如果它是具有共享库的 Linux 或其他一些操作系统,则可能适用其他解决方案。另外,您是否允许修改源代码或者您想对二进制文件执行此操作?您是否有权访问 libelf 等
-
我使用 mprotect 使页面读/写,所以我可以改变内存,我的 ARM env 是 android 模拟器,但是在我 memcpy 之后,它就崩溃了。附言使用了 B 指令和函数地址。
-
@Samblg 你需要提高你的接受率。