利用Pin实现CodeCoverage

本文主要来自: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全部标记为已执行的颜色(比如黑色),这样我们就可以看到一个二进制程序的执行流了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值