Android 刷新snapdragon指令缓存

Android 刷新snapdragon指令缓存,android,linux-kernel,arm,cpu-cache,self-modifying,Android,Linux Kernel,Arm,Cpu Cache,Self Modifying,我目前正在snapdragon机器(Nexus5)上编写内核hooker代码。我当前的hooker实现就在这里 我用Galaxy Note 2(exynos 4412)测试了这段代码,它可以正常工作(当调用sys_open时打印Awesome!代码:)。但当我在Nexus5(MSM8974)中运行这段代码时,指令缓存似乎根本没有刷新 如何刷新snapdragon的指令缓存?编写“自我修改”代码很困难。您不仅需要使i-cache无效,还需要确保d-cache已刷新(从memcpy())并且写入缓

我目前正在snapdragon机器(Nexus5)上编写内核hooker代码。我当前的hooker实现就在这里

我用Galaxy Note 2(exynos 4412)测试了这段代码,它可以正常工作(当调用sys_open时打印Awesome!代码:)。但当我在Nexus5(MSM8974)中运行这段代码时,指令缓存似乎根本没有刷新


如何刷新snapdragon的指令缓存?

编写“自我修改”代码很困难。您不仅需要使i-cache无效,还需要确保d-cache已刷新(从
memcpy()
)并且写入缓冲区已提交内存。然后需要使i-cache范围无效。在cortex-a手册中查找IMB;对于具有多个缓存级别的多cpu配置,这比您当前拥有的更复杂。完成攻击后,您应该尝试更困难的防御工作。更新:我尝试清理数据缓存到一致点,并使指令缓存到统一点无效。为了实现这一点,我使用了内联汇编。这是代码。我的新代码适用于Exynos 4412,但在Snapdragon(Nexus 5)中仍然不起作用。Nexus 5是高通公司定制的Cortex-A15型设计。Exynos芯片是Cortex-A9?可能是ARM的官方设计。像自定义刷新代码这样的事情将有所不同。您需要查看每个的TRM,并确保刷新顺序相同。例如,可能正在使用。我猜高通TRM属于保密协议,这就是为什么您的问题中没有链接?