当前位置: 首页 > news >正文

C语言_函数hook方案

背景

       单体测试中测试一个函数时,该函数调用的其他函数,需要按照测试case,依赖其他函数进行调用参数检查,返回特定值。但是其他函数,不容易做到参数检查和返回特定值,这时需要将其他函数进行hook,hook函数用户自己实现,比较容易实现参数检查和返回值特定值。   

      本文主要介绍如何用测试函数对原函数的hook  

//源代码
int my_add(int a, int b) {return a+b;
}void test_add()
{my_add(1,2);
}//测试代码
int c = 1000;
int hook_my_add(int a, int b) {printf("\t##%s():%d is call \n",__FUNCTION__, __LINE__); return c;
}

   test_add() 调用my_add,强制修改成调用hook_my_add. 在不修改源码的基础上可以完成对test_add函数的测试。

设计

    函数的hook可以理解为在调用原函数的地方,调用了测试函数。

    设想
    调用到原函数时,将函数跳转到测试函数,测试函数返回到原函数调用的地方。

     1. 调用到原函数,程序调用到函数的地址
     2. 跳转到测试函数,可以使用JMP指令
     3. 测试函数会自动返回到原函数的调用处

     主要考虑如何修改原函数的代码段,跳转到测试函数。

      代码段是只读的,需要通过mprotect

http://www.dtcms.com/a/183312.html

相关文章:

  • Cesium高度参考系统
  • lnx 0-1 积分
  • 北斗导航 | 北斗RTK定位厄待解决的问题,未来发展
  • 不同句子切割(文本分段 / chunking)工具或库 各自采用的策略和目标对比和分析
  • 系统分析与设计期末复习
  • OSPF案例
  • 小黑独自一人享受思考心流:79. 单词搜索
  • JavaScript基础-switch分支流程控制
  • Qt中的RCC
  • 滚珠丝杆在工作中损耗会影响什么?
  • python笔记和练习----少儿编程课程【阶段二(二)】
  • spark-哈希join介绍
  • vmware环境ORACLE RAC环境数据库节点1无法启动问题分析处理
  • MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL
  • 打工人TOP,截图工具天花板
  • SSRF服务端请求伪造
  • 自定义类型-结构体(一)
  • MySQL 索引和事务
  • 开疆智能Profinet转canopen网关连接易福门(IFM)传感器配置案例
  • LintCode第68题-二叉树的前序遍历,第67题-二叉树的后序遍历
  • 构件是一个逻辑概念,还是一个物理概念?
  • 【vite好用的配置】自动导入组件、vue中的hook、路径解析、打包配置、本地运行反向代理配置
  • 如何通过ABAP获取SAP生产订单的目标成本
  • 【无标题】I/O复用(epoll)三者区别▲
  • LeetCode 热题 100 24. 两两交换链表中的节点
  • JS正则表达式介绍(JavaScript正则表达式)
  • AI与机器人学:从SLAM到导航的未来
  • leetcode 2918. 数组的最小相等和 中等
  • Windows右键管理工具:轻松添加/删除/修改右键菜单项!
  • 常见的算法介绍