接下来是 afl 的编译,分成两个部分 gcc 编译部分和 llvm 模式,首先来介绍 gcc 部分。 afl-gcc 1. 文件描述 afl-gcc是gcc的一个wrapper,能够实现对一些关键节点进行插桩,利用插桩代码来记录程序的执行路径等信息。该文件的主要作用是进行源码编译,并在编译前对输入的参数进行处理。 2. 文件架构 文件涉及的头文件...
afl-as将不能处理内嵌汇编(C语言中由__asm__引导,汇编语言中由#APP与#NO_APP包围)语句,因此不进行插桩。检测处理逻辑如下: 若当前行的第一个字符或第二个字符是#,且当前行包含#APP,将skip_app标志位置位。 若当前行的第一个字符或第二个字符是#,且当前行包含#NO_APP,将skip_app标志位清除。 若skip_...
afl-as中的add_instrumentation函数收尾 现在我们把目光移回afl-as中的add_instrumentation函数,在完成主代码插桩后,还有最后一点代码: if(ins_lines)fputs(use_64bit ? main_payload_64 : main_payload_32, outf);if(input_file) fclose(inf); fclose(outf);if(!be_quiet) {if(!ins_lines) WARNF("No i...