本文不完全译自:afl-2.49b/qemu_mode/README.qemu
转载请注明出处。
1. 引言
本目录下的代码可以利用QEMU 的“user emulation”模式帮助建立独立特征,并允许调用者获得黑盒、闭源的二进制程序的插桩输出。这一机制能支持afl-fuzz用于无法使用afl-gcc编译的目标程序的压力测试(stress-test)。
通常情况下,使用这种方式对程序性能开销会有2-5x的性能下降,即使是这样,仍然比DynamoRIO和PIN等工具要好。
思路和大部分代码实现都来源于Andres Griffiths。
2.如何使用
这一特性是在实现QEMU 2.3.0上实现的一个相当简单的path的基础上完成的。最简单的方式是运行./build_qumu_support.sh脚本建造(build)环境。这一脚本会自动下载、配置(configure)以及编译好QEMU二进制。
QEMU是一个非常大的项目,所以这一个过程会比较耗费时间,另外可能还需要解决依赖项问题,典型的如lib和glib2-devel等。
一旦二进制编译完成,就可以通过在命令行中添加-Q参数的方式调用afl-fuzz和所有相关工具使用QEMU工具。
需要注意的是,QEMU需要设置充足的内存限制(memory limit)才能运行;200MB是个比较好的初始设置,但对复杂程序,需要把这一值设置成更大才行。当指定-Q参数时,默认-m限制将会自动增加到200 MB。
原则上来说,如果在调用./build_qemu_support.sh之前设置CPU_TARGET,则应该建立运行非本地二进制(可以尝试 CPU_TARGET