首页 > 其他分享 >afl-fuzz的qemu模式中如何去判断是否crash

afl-fuzz的qemu模式中如何去判断是否crash

时间:2024-10-01 17:22:21浏览次数:6  
标签:afl status crash fsrv fuzz child

1. afl-fuzz部分

afl-fuzz部分和非qemu模式是相同的,主要是通过管道接收来自forkserver传入的status信息,通过status信息来判断是否存在crash

  if (unlikely(
          /* A normal crash/abort */
          (WIFSIGNALED(fsrv->child_status)) ||
          /* special handling for msan and lsan */
          (fsrv->uses_asan &&
           (WEXITSTATUS(fsrv->child_status) == MSAN_ERROR ||
            WEXITSTATUS(fsrv->child_status) == LSAN_ERROR)) ||
          /* the custom crash_exitcode was returned by the target */
          (fsrv->uses_crash_exitcode &&
           WEXITSTATUS(fsrv->child_status) == fsrv->crash_exitcode))) {

主要是通过这一段判断,如果是crash,child_status的某些值会显示signal的值

2. qemu部分

在cpu-exec.c的afl_forkserver函数中,

    if (write(FORKSRV_FD + 1, &child_pid, 4) != 4) exit(5);

    /* Collect translation requests until child dies and closes the pipe. */

    afl_wait_tsl(cpu, t_fd[0]);
    if (waitpid(child_pid, &status, is_persistent ? WUNTRACED : 0) < 0) {
      printf("waitpid failed with errno: %d (%s)\n", errno, strerror(errno));
      exit(6);
      
    }

    /* In persistent mode, the child stops itself with SIGSTOP to indicate
       a successful run. In this case, we want to wake it up without forking
       again. */

    if (WIFSTOPPED(status))
      child_stopped = 1;
    else if (unlikely(first_run && is_persistent)) {

      fprintf(stderr, "[AFL] ERROR: no persistent iteration executed\n");
      exit(12);  // Persistent is wrong

    }

    first_run = 0;

    if (write(FORKSRV_FD + 1, &status, 4) != 4) exit(7);

afl_wait_tsl函数return后,waitpid这里去获取子进程的状态,通过wait子进程使其退出,将子进程状态存入status变量,并返回pid,最后write写回管道关于status的值。

标签:afl,status,crash,fsrv,fuzz,child
From: https://www.cnblogs.com/minipython-wldx/p/18443004

相关文章

  • WFUZZ模糊测试
    WFUZZ模糊测试使用指南选项:-h/--help:这个帮助--help:高级帮助--filter-help:过滤语言规范--version:Wfuzz版本详细信息-e<type>:可用编码器/有效负载/迭代器/打印机/......
  • 基于Leaflet和天地图的直箭头标绘实战-源码分析
    目录前言一、Leaflet的特种标绘库1、特种标绘对象的定义2、Plot基类定义3、直线箭头的设计与实现二、在天地图中进行对象绘制1、引入天地图资源2、标绘对象的调用时序3、实际调用过程三、总结前言        在博客中介绍过geoman标绘的具体实现,使用LeafletGeoMan结合天地图......
  • 有问题的达梦客户端导致应用crash
    【问题描述】userapp03su-smbsuserbak安装包有问题的,不带bak包是正确的573Mdamengbak.tgz376Mdameng.tgz /var/log/messages一直报错$DM_HOME/bin/libdmdpc.soerror导致/var/log/messages不断写信息,直到/var文件系统写满Aug2503:40:03userapp03systemd-......
  • metaflow netflix开源的数据科学ML&AI 框架
    metaflownetflix开源的数据科学ML&AI框架,类似的也有kedro,metaflow相比kedro来说对于云原生周边支持的更加友好一张图了解metaflow能力如下图,很清晰的说明了metaflow的能力,而且都是基于代码声明的说明metaflow官方文档比较详细,使用上相比kedro基于项目代码结构的模式......
  • Android14 屏蔽ANR和Crash弹窗
    前言Android系统在应用发生Crash/ANR的时候,总会弹出一个提示对话框,但是现在部分客户不想要这样的对话框,要求移除一、ApplicationCrash表现:程序崩溃或闪退,界面上通常会出现“应用已停止运行”的提示。常见原因(Java异常):错误类型详细描述NullPointerException尝试在需要......
  • Android13 屏蔽ANR和Crash弹窗
    前言Android系统在应用发生Crash/ANR的时候,总会弹出一个提示对话框,但是现在部分客户不想要这样的对话框,要求移除一、ApplicationCrash表现:程序崩溃或闪退,界面上通常会出现“应用已停止运行”的提示。常见原因(Java异常):错误类型详细描述NullPointerException尝试在需要......
  • GIS进阶-Openlayers、Vue+Openlayers、Leaflet、Geoserver、PostGis、Java集成Geotool
    场景作为一名非专业GIS开发者,在日常企业级开发中遇到GIS领域相关业务需求时,参考资料较少,各种体系生态不明确。往往因为错过了好多大神封装好的工具、借口、三方框架、api等白白浪费时间。最主要的是此专栏会持续更新,毕竟GIS的知识体系远不止如此,后续会持续记录、共同积累、共同......
  • [国家集训队] Crash的数字表格 / JZPTAB
    [国家集训队]Crash的数字表格/JZPTAB题目描述今天的数学课上,Crash小朋友学习了最小公倍数(LeastCommonMultiple)。对于两个正整数\(a\)和\(b\),\(\text{lcm}(a,b)\)表示能同时被\(a\)和\(b\)整除的最小正整数。例如,\(\text{lcm}(6,8)=24\)。回到家后,Crash还在想......
  • 题解 P4827【[国家集训队] Crash 的文明世界】
    从阶乘幂到斯特林数-caijianhong-博客园(cnblogs.com)题目描述Crash小朋友最近迷上了一款游戏——文明5(CivilizationV)。在这个游戏中,玩家可以建立和发展自己的国家,通过外交和别的国家交流,或是通过战争征服别的国家。现在Crash已经拥有了一个\(n\)个城市的国家,这......
  • 1.9 Crash(三,Ramdump的分析)
    写在前面前面我们介绍了triggerfullsystemcrash的常见的五种类型。那么接下来我们来分析下,如何从解析Ramdump的产物中来分析为是哪一种类型,进而一步步找出问题的根因。无论是使用QCAP查看TZ_Counters.txt,还是使用qnx_host_ramdump_parser.py解析查看tz_diag.txt中RESETIN......