文章目录

  • 一、使用 cache_flush 系统函数刷新 CPU 高速缓存
  • 二、使用 cache_flush 系统函数刷新 CPU 高速缓存的弊端
  • 三、函数拦截推荐时机

一、使用 cache_flush 系统函数刷新 CPU 高速缓存


使用 " 在实际被调用的函数中添加跳转代码实现函数拦截 " 方案 进行函数拦截 , 由于存在 CPU 的高速缓存机制 , 无法保证 100% 成功 ;

这里就需要刷新 CPU 的高速缓存 , 调用 cache_flush 系统函数 , 就会将 CPU 中高速缓存中涉及到该进程的所有数据全部清除 , 然后重新从内存中加载缓存信息 , 此时就可以将 修改后 添加了跳转函数的 被拦截函数 , 重新加载到内存中去 , 此时 CPU 就可以执行 修改后的 被拦截函数 ; 拦截生效 ;

二、使用 cache_flush 系统函数刷新 CPU 高速缓存的弊端


使用 cache_flush 系统函数刷新 CPU 高速缓存的弊端 :

① 性能损耗 : CPU 重建缓存 , 导致执行效率降低 , 可能导致卡顿 , 闪退等情况 ;

② 影响其它进程 : 多核 CPU 如果刷新 高速缓存 , 可能导致其它进程的 高速缓存 也被刷新 , 影响到其它进程执行 ;

③ 影响多线程代码逻辑 : 多个线程竞争 CPU 执行权限 , 清空了 CPU 高速缓存中 ,

多线程执行的逻辑 参考 【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 ) 博客 , Java 线程 运行时 , 每个 Java 线程都配套一个 工作内存 , 然后工作内存从 主内存 中获取数据 , 主内存被所有工作内存共享 ;

  • 工作内存 就是 线程的 本地内存 , 其中存储的是主内存中的 变量副本 , 使用主内存的变量前 , 先将变量拷贝工作内存中 ;
  • 当在线程中 修改了工作内存中的数据 , 需要同时 将变量的修改同步到主内存中 ;

这里的 工作线程 / 本地线程 相当于 CPU 中的 L1 / L2 缓存 , 主内存 相当于 CPU 中的 L3 缓存 ;

如果把高速缓存清了 , 多线程执行肯定会存在问题 ;

三、函数拦截推荐时机


鉴于 函数拦截 需要 清空 CPU 高速缓存 有上述弊端 , 因此这里建议在 程序初始化时进行函数拦截 , 不要在程序运行过程中进行 函数拦截 ;

如果必须在程序启动后进行拦截 , 只能冒险进行 清空 CPU 高速缓存 , 但是建议一次性把所有的函数拦截都做了 , 不要频繁进行 函数拦截 + 清空 CPU 高速缓存 操作 , 次数越多 , 出问题的几率就越大 ;

【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )相关推荐

  1. 【Android 逆向】Android 权限 ( ro.product.cpu.abi 属性 | ro.zygote 属性 | dhcp.eth0 属性 | net.* 属性 )

    文章目录 一.Android 权限相关的重要的系统属性 1.ro.product.cpu.abi 属性 2.ro.zygote 属性 3.dhcp.eth0 属性 4.net.* 属性 一.Andro ...

  2. 预警!VMware ESXi服务器遭大规模勒索攻击,已有数千系统中招!科力锐提供勒索病毒拦截应急恢复体系化解决方案

    新型勒索病毒"ESXiArgs"横空出世 专门针对VMware ESXi服务器进行勒索攻击 全球已有近三千多业务系统中招 人心惶惶如何防? 且看科力锐勒索病毒拦截&应急恢复 ...

  3. 【Android 逆向】函数拦截实例 ( ③ 刷新 CPU 高速缓存 | ④ 处理拦截函数 | ⑤ 返回特定结果 )

    文章目录 前言 一.刷新 CPU 高速缓存 二.处理拦截函数 1.桩函数 2.处理拦截函数 三.返回特定结果 四.相关完整代码 前言 [Android 逆向]函数拦截实例 ( 函数拦截流程 | ① 定 ...

  4. 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )

    文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...

  5. 【Android 逆向】函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )

    文章目录 一.ARM 架构下的插桩拦截 二.完整代码示例 一.ARM 架构下的插桩拦截 ARM 架构下的跳转指令 : 下面的二进制数都是十六进制数 ; 323232 位指令 ; 04 F0 1F E5 ...

  6. 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )

    文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...

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

    文章目录 一.CPU 高速缓存机制 二.CPU 高速缓存机制 导致 函数拦截失败 一.CPU 高速缓存机制 CPU 架构模型中 , 指令 在开始时 , 存放在内存中 , 如 : /proc/pid/m ...

  8. 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

    文章目录 一.通过修改 GOT 全局偏移表拦截函数 二.通过在实际被调用的函数中添加跳转代码实现函数拦截 一.通过修改 GOT 全局偏移表拦截函数 使用 GOT 全局偏移表 拦截函数 , 只需要将 G ...

  9. 【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )

    文章目录 一.可执行程序基本结构 二.GOT 全局偏移表 三.可执行程序函数调用步骤 一.可执行程序基本结构 程序加载到内存中之后 , 会分为以下 333 个部分 : 可执行程序 自定义函数库 : L ...

最新文章

  1. python中@wraps的作用
  2. 操作系统:Linux环境变量相关知识总结
  3. 踩不出足迹(牛客练习赛88 )
  4. mysql5.7卸载语句_MySQL5.7完全卸载
  5. android设置高德的3d,高德地图3D版的使用方法
  6. oracle备份与恢复 exp,Oracle数据库备份与恢复之一:exp/imp(导出与导入装库与卸库)...
  7. 《深入浅出DPDK》读书笔记(七):PCIe与包处理I/O
  8. mp4剪辑器_想学视频剪辑,可是专业的视频软件太难,来试试这软件吧!
  9. LCP 19. 秋叶收藏集
  10. 21天Jmeter打卡Day13 逻辑控制器之if和简单控制
  11. 获取mysql存储过程返回值_MySQL函数,存储过程,用户管理
  12. 递归函数定义、递归应用案例-科赫雪花/雪花晶片/汉诺塔
  13. Win11如何增强麦克风?Win11增强麦克风的设置
  14. 【微信小程序】-授权获取微信绑定手机号两种方案
  15. html表单中文字前黑点怎么弄,如何将word文档中标题前的黑点去掉
  16. 带常数项指数函数的非线性回归方法(python实现)
  17. 视频教程-SpringBoot核心技术-Java
  18. 问题描述:vcenter上数据存储的事件中有大量的警告,还有偶尔的报错,存储设备naa...的路径冗余已降级,路径。。已关闭,受影响的数据存储 与存储设备。。。连接丢失,路径。。已断开,受影响的存储
  19. 字节跳动 python面试_字节跳动数据分析实习岗面试全经历,竟然也会问这样的问题?...
  20. matlab矩阵分块与把分块矩阵还原

热门文章

  1. 高职高考数学可以用计算机吗,什么学习水平高职高考数学可以答满分
  2. Javascript特效之可翻阅上一条下一条的动态文字
  3. 常用抓包工具,手机调试工具大合集
  4. 荧光猝灭剂BHQ-1 acid/NHS/azide/amine/BHQ染料染料
  5. yolov5安装与环境配置
  6. 重温电视剧《陆小凤之凤舞九天》
  7. mysql 如果存在删除表_如果存在表则删除表然后创建Mysql(流程教程)
  8. python中三引号是什么意思_python中三个单引号是什么意思
  9. 自动驾驶之车辆运动学与动力学模型
  10. 堡垒主机在信息安全等级保护制度中的探究与应用