当前位置: 首页 > 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

相关文章:

  • 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题-二叉树的后序遍历
  • 均价19.5万元/平米!上海徐汇滨江地王项目“日光”,销售额近70亿元
  • 领证不用户口本,还需哪些材料?补领证件如何操作?七问七答
  • 华泰柏瑞基金总经理韩勇因工作调整卸任,董事长贾波代为履职
  • 溢价26.3%!保利置业42.4亿元竞得上海杨浦宅地,楼板价80199元/平方米
  • 上海楼市“银四”兑现:新房市场高端改善领跑,二手房量价企稳回升
  • 晶圆销量上升,中芯国际一季度营收增长近三成,净利增超1.6倍