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

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.xdnf.cn/news/5239.html

相关文章:

  • Java学习手册:Spring Cloud 组件详解
  • 8.3.监控与日志体系
  • LAMMPS分子动力学基于周期扰动法的黏度计算
  • Spring事务融入(REQUIRED)具体实现步骤解析
  • 使用openlayers计算两个经纬度之间的距离 ,单位有米和千米
  • 区间 DP 详解
  • Java注解:深入探究理解与实践应用
  • SpringMVC-简介及入门
  • linux中常用的命令(三)
  • Java MCP 实战 --> AI玩转贪吃蛇
  • BUCK基本原理学习总结-20250509
  • JVM调优
  • python tkinter 实现 带界面(GUI)的RSA加密、签名
  • Linux终端展示效果优化:【whiptail】使用教程
  • 【目录】学习如何使用dify建设专业知识库
  • 【AI提示词】金字塔模型应用专家
  • 3.优惠券秒杀
  • c++类【高潮】
  • MySQL开篇
  • C++Primerplus编程练习 第八章
  • 生产级AI/ML特征存储平台:Feast全面使用指南 — Use Cases Third party integrations FAQ
  • java: Compilation failed: internal java compiler error 报错解决方案
  • 【Java学习日记32】:面向对象,类和对象
  • matlab介绍while函数
  • 计算机网络:怎么理解WIFI穿墙?
  • SSRF服务端请求伪造
  • 2025python学习笔记
  • 用tinyb210实现srsran小基站
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷六及详细答案解析
  • 2025年保安员考试题库及答案