首页 > 其他 > 详细

fuzzing准备工作---插桩

时间:2021-01-24 01:24:00      阅读:4      评论:0      收藏:0      [点我收藏+]

AFL代码插桩

在使用AFL时,需要先通过afl-gcc/afl-clang等工具编译目标程序(在这个过程中对目标进行插桩)。

编译过程:源代码-->汇编代码-->二进制。

源代码-->汇编代码:这一步是通过

汇编代码-->二进制:这一步是通过汇编器(assembler)。Linux中常用的汇编器是as

afl-gcc.c

main函数中重要的三个函数

//在AFL_PATH路径中找到假的GNU汇编器(即afl-as),或者从argv[0]中找到位置。如果失败,则发生中断。
find_as(argv[0]);
//把argv的内容复制给cc_params(这个参数后面会传递给真实的cc)。
edit_params(argc, argv);
//execvp函数的第一个参数是要执行的文件名,第二个参数是参数列表。
execvp(cc_params[0], (char**)cc_params);

afl-gcc本质上是gcc的wrapper。

gcc的-B 设置了搜索路径。

afl-as.c

AFL代码插桩是在源文件编译成汇编代码后通过afl-as进行的。

大致逻辑:处理汇编代码,在分支处插入插桩代码,然后调用as进行真正的汇编。

具体插入代码的部分:

fprintf(outf, use_64bit ? trampoline_fmt_64 : trampoline_fmt_32, R(MAP_SIZE));

fprintf()将格式化的字符串添加到汇编代码的合适位置。

格式化的字符串分为32位和64位两种情况(具体定义在afl-as.h头文件中,主要是汇编代码)。

fuzzing准备工作---插桩

原文:https://www.cnblogs.com/Ricardio/p/14318932.html

(0)
(0)
   
举报
评论 一句话评论(0
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号