首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >afl源码阅读之afl-showmap

afl源码阅读之afl-showmap

作者头像
用户1423082
发布2024-12-31 20:15:11
发布2024-12-31 20:15:11
11600
代码可运行
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog
运行总次数:0
代码可运行

看过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();
// 设置环境变量,ASAN_OPTIONS和MSAN_OPTIONS,还有根据AFL_PRELOAD设置LD_PRELOAD和DYLD_INSERT_LIBRARIES
set_up_environment();
// 查找binary,假如是绝对路径,就检测一下文件是否存在,是否可执行,否则就在PATH环境变量下查找binary
find_binary(argv[optind]);
// 非安静模式,输出banner和执行的binary路径
if (!quiet_mode) {
  show_banner();
  ACTF("Executing '%s'...\n", target_path);
}
// 假如参数中有@@,会将-A参数的testcase替换@@的位置
detect_file_args(argv + optind);

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

if (!quiet_mode) {

  if (!tcnt) FATAL("No 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
000230:2
000360:4
000473:1
000522:1
000686:1
000755:1
000774:1
001084:8
001188:4
001220:1
001370:1
001571:7
001880:1
001963:1
002199:1
002268:1
002419:2
002449:2
002781:1
003124:2
......
......
......
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • main函数
  • 实际结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档