您现在的位置是:首页 > 编程 > 

afl源码阅读之afl

2025-07-25 22:38:54
afl源码阅读之afl 看过afl-fuzz的源码,之后再看afl-showmap,很多代码都是copy过去的main函数首先还是参数解析-o:指定afl-showmap输出的文件名 -m:内存限制 -t:设置超时值 -e:就是只获取边,不用获取边的频率 -q:安静模式 -Z:安静模式,和cmin_mode置1,会影响输出文件的格式 -A:指定输入的文件,替代命令行的@@ -Q:qemu模式 -b

afl源码阅读之afl

看过afl-fuzz的源码,之后再看afl-showmap,很多代码都是copy过去的

main函数

首先还是参数解析

-o:指定afl-showmap输出的文件名 -m:内存限制 -t:设置超时值 -e:就是只获取边,不用获取边的频率 -q:安静模式 -Z:安静模式,和cmin_mode置1,会影响输出文件的格式 -A:指定输入的文件,替代命令行的@@ -Q:qemu模式 -b:输出的是二进制格式,类似于afl-fuzz输出的out_dir/queue/fuzz_bitmap -c:根据注释是Allow coredumps -V:输出版本

代码语言:javascript代码运行次数:0运行复制
// 配置共享内存
setup_shm();
// 设置一些信号的回调函数
setup_signal_handlers();
// 设置环境变量,ASA_OPTIOS和MSA_OPTIOS,还有根据AFL_PRELOAD设置LD_PRELOAD和DYLD_ISERT_LIBRARIES
set_up_environment();
// 查binary,假如是绝对路径,就检测一下文件是否存在,是否可执行,否则就在PATH环境变量下查binary
find_binary(ar[optind]);
// 非安静模式,输出banner和执行的binary路径
if (!quiet_mode) {
  show_banner();
  ACTF("Executing '%s'...\n", target_path);
}
// 假如参数中有@@,会将-A参数的testcase替换@@的位置
detect_file_args(ar + optind);

if (qemu_mode)
  // 假如是qemu模式,构建qemu的参数,运行的命令替换成`afl-qemu-trace -- target_path`
  use_ar = get_qemu_ar(ar[0], ar + optind, argc - optind);
else
  use_ar = ar + optind;
// fork一个子进程去运行target,之后对trace_bits进行归一化处理(通过setitimer设置超时发出SIGALRM信号,会回调handle_timeout函数,将子进杀掉)
run_target(use_ar);
// 将结果写到-o指定的文件中,假如binary_mode,将trace_bits直接写到文件中,否则就是`fprintf(f, "%06u:%u\n", i, trace_bits[i]);`写到文件中
tcnt = write_results();

if (!quiet_mode) {

  if (!tcnt) FATAL("o instrumentation detected" cRST);
  OKF("Captured %u tuples in '%s'." cRST, tcnt, out_file);

}
// 退出
exit(child_crashed * 2 + child_timed_out);

实际结果

代码语言:javascript代码运行次数:0运行复制
/afl/afl-showmap -o mapfile ./testimage ./test/tests_61412.jpg
$ cat mapfile | more
000000:1
00020:2
00060:4
00047:1
000522:1
000686:1
000755:1
000774:1
001084:8
001188:4
001220:1
00170:1
001571:7
001880:1
00196:1
002199:1
002268:1
002419:2
002449:2
002781:1
00124:2
......
......
......
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-08-27,如有侵权请联系 cloudcommunity@tencent 删除ar二进制函数源码源码阅读

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1207075.html

相关标签:无
上传时间: 2025-07-24 12:28:06
留言与评论(共有 19 条评论)
本站网友 青春期男孩
26分钟前 发表
之后再看afl-showmap
本站网友 自行我路
4分钟前 发表
ar + optind
本站网友 025区号
5分钟前 发表
否则就在PATH环境变量下查binary find_binary(ar[optind]); // 非安静模式
本站网友 insulin
23分钟前 发表
否则就是`fprintf(f
本站网友 吃西瓜减肥法
0秒前 发表
argc - optind); else use_ar = ar + optind; // fork一个子进程去运行target
本站网友 360极速浏览器崩溃
26分钟前 发表
1 000686
本站网友 戊二醛
21分钟前 发表
会将-A参数的testcase替换@@的位置 detect_file_args(ar + optind); if (qemu_mode) // 假如是qemu模式
本站网友 股市熔断机制
7分钟前 发表
和cmin_mode置1
本站网友 张定国
5分钟前 发表
替代命令行的@@ -Q:qemu模式 -b:输出的是二进制格式
本站网友 张曼
21分钟前 发表
ar + optind
本站网友 建邦集团
28分钟前 发表
原始发表:2021-08-27
本站网友 幸运赌神
25分钟前 发表
类似于afl-fuzz输出的out_dir/queue/fuzz_bitmap -c:根据注释是Allow coredumps -V:输出版本代码语言:javascript代码运行次数:0运行复制// 配置共享内存 setup_shm(); // 设置一些信号的回调函数 setup_signal_handlers(); // 设置环境变量
本站网友 水银人
30分钟前 发表
"%06u
本站网友 警校招生
4分钟前 发表
是否可执行
本站网友 金地嘉年华城
23分钟前 发表
ar + optind
本站网友 腔静脉
11分钟前 发表
否则就在PATH环境变量下查binary find_binary(ar[optind]); // 非安静模式
本站网友 海淀二手房网
19分钟前 发表
argc - optind); else use_ar = ar + optind; // fork一个子进程去运行target
本站网友 哪家整容好
5分钟前 发表
构建qemu的参数