Fuzz:插桩技术入门

定义

插桩是一种测试程序性能、检测错误、获取程序执行信息的技术。插桩技术最早由J.C. Huang提出[3]。在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(probe),即添加一些代码,获得程序的控制流和数据流信息。例如通过自动工具或手动,在函数执行前后插入读取计时器的代码,获取函数执行时间。

分类

  • 根据插桩对象不同,分为源代码插桩和二进制插桩。
  • 根据粒度不同,分为指令级别插桩、函数级别插桩、基本块级别插桩、边界级别插桩。
  • 根据分析方法不同,分为静态插桩和动态插桩。

用途

  • 语句覆盖探针:在基本块的出入口分别植入探针,以确定此块在运行时是否被覆盖。
  • 分支覆盖探针:同上。
  • 条件覆盖探针:在if、switch、while等条件表达式后植入探针,进行变量跟踪取指,以确定其被覆盖情况。

动态二进制插桩

执行模式

大多数动态二进制插桩都有三种执行模式:

  • JIT(Just-In-Time)模式:在新的内存区域中生成修改后的二进制文件执行部分的副本,然后执行。
  • 解释模式:用户实现一张查找表,二进制文件的每条指令都都在查找表中映射后加以执行。
  • 探测模式:使用新指令覆盖旧指令达到修改目的。

Pin框架分析

在这里插入图片描述
参考:Intel Pin架构

猜你喜欢

转载自blog.csdn.net/weixin_43249758/article/details/125891517