假设我想开始模糊Acme Corp的PDF Reader。我想通过下载一堆良性PDF并对它们进行突变来遵循Miller的所作所为。

Miller首先通过修剪具有相似代码覆盖率的样本来将其PDF样本的语料减少到最少。也就是说,他如何确定相似的代码覆盖率?

我可以想象一个跟踪执行并记录JMP / CALL以获得执行图的工具,我想您可以对这些图进行比较。但是JIT代码呢?由于JIT可能位于内存中的不同位置,所以这些图是否会非常不同?

#1 楼

不确定使用JIT编译代码对应用程序有何影响,但是peach具有minset实用程序,可以创建具有最高代码覆盖率的最小文件集:目标程序并确定代码覆盖率。然后,它将找到覆盖最多代码所需的最少文件数量。这将是模糊测试时应使用的最少文件集。


但据我所知,它使用了您建议的方法,监视应用程序所有基本块的命中。它使用pintool来做到这一点。

#2 楼

尽管与GCC紧密结合,但gcov项目还是作为Linux代码覆盖工具而流行的。但是,它需要使用-fprofile-arcs -ftest-coverage标志来编译程序,如果以封闭源代码软件为目标,则这可能不是一个选择。可以在这里找到更多信息:http://gcc.gnu.org/onlinedocs/gcc/Gcov.html

评论


这是一个很好的建议,但我希望能提供有关闭源软件的建议。

–mrduclaw
13年3月30日在20:54