新版Outlook将增四大功能 推Android版客户端(Outlook主要功能)
615
2022-05-29
文章目录
一、CPU 高速缓存机制
二、CPU 高速缓存机制 导致 函数拦截失败
一、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小时内删除侵权内容。