本文主要来自:http://doar-e.github.io/blog/2013/08/31/some-thoughts-about-code-coverage-measurement-with-pin/
问题
给定一个输入,运行一个二进制程序时,通过pin可以捕获到程序的一个执行流。
需求
我们想要知道这个执行流到底覆盖了整个code base的多少?
难点
你不知道完整的code base,怎么算呢?
解决方案
可以对两个输入inputA和inputB产生的执行流做对比,这样们可以知道两个输入谁拥有哪个好的Code Coverage.
pin实现
大致上,我们只需要keep track of all the basic blocks executed,保存这些basic block的地址和拥有的指令数目。
然后我们把指令过得basic block的信息,以json的格式保存下来。
之后,我们可以通过IDA打开一个二进制文件,然后通过IDA Python脚本,把执行过的basic block全部标记为已执行的颜色(比如黑色),这样我们就可以看到一个二进制程序的执行流了。