Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C ARM程序集跳转到地址_C_Assembly_Arm - Fatal编程技术网

C ARM程序集跳转到地址

C ARM程序集跳转到地址,c,assembly,arm,C,Assembly,Arm,我需要纯C,在读取页面后,我想用跳转指令和另一个函数地址替换函数地址,这样我可以在运行时使用另一个函数代替当前函数,从而实现MOCK 它在X86上运行良好,但在ARM上,我遇到了一些问题,不知道如何解决它。你能帮我吗 什么是ARM的跳转指令,如何使用memcpy将其替换为当前函数地址 我认为关键的元素可能是16hex ARM跳转指令来自ARM社区页面上标题为: 缓存的ARM体系结构具有单独的数据缓存和 指令访问;这些被称为D缓存和I缓存, 分别地有两个CPU接口, 内核可以同时加载一条指令和一些

我需要纯C,在读取页面后,我想用跳转指令和另一个函数地址替换函数地址,这样我可以在运行时使用另一个函数代替当前函数,从而实现MOCK

它在X86上运行良好,但在ARM上,我遇到了一些问题,不知道如何解决它。你能帮我吗

什么是ARM的跳转指令,如何使用memcpy将其替换为当前函数地址

我认为关键的元素可能是16hex ARM跳转指令

来自ARM社区页面上标题为:

缓存的ARM体系结构具有单独的数据缓存和 指令访问;这些被称为D缓存和I缓存, 分别地有两个CPU接口, 内核可以同时加载一条指令和一些数据

因为D-cache和I-cache不一致,所以 新编写的指令可能会被现有的 I-cache,导致处理器执行旧的(或可能 无效)指令


我相信本文的其余部分将帮助您深入挖掘,但我想知道为什么您不使用函数指针?它们将更容易构建。

“我遇到了一些问题”-这将有助于说明这些问题的确切含义。此外,有几十条ARM指令可以导致分支,但在“纯C”中,您无法访问它们,因为C运行时环境的抽象是您的最低级别。这听起来确实像是在有效地重新实现函数指针,但这种方式很糟糕,依赖于实现细节或未定义的行为。您需要提供有关“C”环境的更多详细信息。以最纯粹的形式,奥塞伦的答案适用。但是,如果是带有共享库的Linux或其他操作系统,则可能会应用其他解决方案。另外,是否允许您修改源代码,或者是否希望对二进制文件执行此操作?你有访问libelf等的权限吗?我使用mprotect使页面读/写,因此我可以更改内存,我的ARM env是android模拟器,但在我记忆之后,它就崩溃了。另外,使用了B指令和函数地址。@Samblg您需要处理接受率。