Fuzzing Like A Caveman 3: Trying to Somewhat Understand The Importance Code Coverage
用C语言改写fuzzer
与作者的细节上有些许不同,有些是我自己的代码风格
1 | |
关于bitflip和overwriting bytes的不同
文中提到,在一个字节中,单纯翻转一个bit,带来的变异效果非常有限,比如对于一个字节, 01000001,十进制就是65
- 翻转第一个bit:11000001 = 193
- 翻转第二个bit:00000001 = 1
- 翻转第三个bit:01100001 = 97
- 翻转第四个bit:01010001 = 81
- 翻转第五个bit:01001001 = 73
- 翻转第六个bit:01000101 = 69
- 翻转第七个bit:01000011 = 67
- 翻转第八个bit:01000000 = 64
由此可见,单纯翻转一个bit,只能限定在这上面8个数字中,而直接整个byte覆写,则能带来255种改变
覆盖率的重要性
文章后面就是讲fuzz出一个crash的概率,然后就引出覆盖率导向变异策略很有效,emmmm,这部分还是不做笔记了,看过太多遍了