Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )

网友投稿 540 2022-05-29

文章目录

一、CPU 高速缓存机制

二、CPU 高速缓存机制 导致 函数拦截失败

一、CPU 高速缓存机制

CPU 架构模型中 ,

指令

在开始时 ,

【Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )

存放在内存中

, 如 : /proc/pid/maps 中的每个 .so 动态库都在内存中有一个地址 , 动态库中存放的就是指令 ;

CPU 与 内存之间的访问速率比较低 , 这里的低是与 CPU 访问寄存器比较的 ,

CPU 访问寄存器的速度 >

CPU 访问内存的速度 >

CPU 访问磁盘的速度 ;

为了提升 CPU 访问 内存 的速度 , 在 CPU 内部准备了一块

高速缓存

, 内存中的指令不是直接放入 CPU , 而是先放到高速缓存中 , 然后从高速缓存读取到寄存器中进行指令操作 ;

如果 CPU 要访问的指令正好在高速缓存中 , 那么就可以高速执行 代码指令 , 执行的同时 , 又将后续指令源源不断的加载到高速缓存中 , 这样就可以保证

CPU 高效执行指令 ;

二、CPU 高速缓存机制 导致 函数拦截失败

在上一篇博客 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 ) 中的可靠函数拦截方案中 , 推荐使用 "

在实际被调用的函数中添加跳转代码实现函数拦截

" 方案实现函数拦截 ;

上述方案需要在 实际被调用的函数 中 , 写入一条跳转指令 ,

该写入指令的函数是存放在内存中的

, 也只能是在内存中写入 , CPU 的高速缓存完全由 CPU 内部硬件调用 , 外部代码无法访问高速缓存 ;

这里就涉及到一个问题 , 在 被拦截的函数中插入跳转代码 ,

如果该函数已经被加载到 CPU 的高速缓存中

, 那么

修改内存 , 也无法让 CPU 执行该修改后的代码指令 ;

CPU 中的 高速缓存是

按照命令率进行排序

, 使用越频繁的函数 , 其优先级越高 , 越不容易被移除 ;

如果要拦截的函数 , 调用频率很高 , 可能改函数会一直驻留在 CPU 高速缓存中 , 就

一直无法拦截该函数 ;

这就导致了

函数拦截 , 无法 100% 成功 ;

Android

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:OdomLaserCalibraTool标定工具的使用及踩坑记录
下一篇:计蒜客(二)进程
相关文章