tinyIns_note

TinyInst建立在自定义调试器之上。调试器通过监视目标进程的事件,例如加载模块、命中断点、引发异常等,实现对目标程序的完全访问和控制,进而实现插桩和覆盖率收集等功能。如果指定了目标方法,调试器还会实现断点和持久性。

TinyInst支持主流的三种代码覆盖率的统计:

  1. 基本块覆盖:计算运行时达到的基本块的数量。
  2. 边覆盖:计算运行时命中的边。
  3. 比较覆盖:计算CMP指令中命中的字节数。

TinyInst的插桩的简单流程如下:

graph TB
    subgraph Target_Process
        A[目标 Module] --> B(Debugger)
        B --创建运行空间--> C[插桩]
    end

TinyInst里比较关键的模块:通过debugger attach目标模块(Debugger)、对目标模块的执行进行控制以及插桩(TinyInst)、目标模块执行的覆盖率统计(LiteCov)。

graph TB
    subgraph TinyInst
        A[LiteCov] --继承--> B(TinyInst)
        B --继承--> C[Debugger]
    end