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

news/2024/10/1 17:33:54

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 indicatea successful run. In this case, we want to wake it up without forkingagain. */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的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

谷歌收录批量查询,教你批量查询谷歌收录的方法

批量查询谷歌收录是网站管理员和SEO人员常见的需求,以下是一些实用的方法和步骤来实现这一目标: 一、使用Google Search Console(谷歌搜索控制台) 注册并验证网站:首先,在Google Search Console中注册并验证你的网站。这是获取网站在谷歌搜索结果中详细数据的基础。 下载…

修改Nacos2.4.1源码-适配达梦数据库麒麟ARM系统(国产XC化)

前言:应集团公司现在推广XC化,其中基础环境需要用麒麟ARM操作系统和达梦数据库,而官网的nacos默认适配mysql,需要重新编译源码来适配需要对接的数据库,2.4.2试验了一把,安装启动后 nacos 控制台出现 “创建命名空间失败 / 数据库语法问题”,经分析,问题出在源码的sql语…

怎么查看网站是否被谷歌收录,你会查看网站被谷歌收录的方法吗

查看网站是否被谷歌收录是一个相对简单的过程,以下是几种常用的方法,可以帮助你确定网站或其特定页面是否已被谷歌搜索引擎索引: 一、使用“site:”搜索指令 打开谷歌搜索引擎(Google)。 在搜索框中输入“site:你的网站域名”(注意使用英文冒号,并将“你的网站域名”替换…

操作系统:保护模式(二)内存模型

平坦内存模型 现代操作系统一般不会使用过于复杂的分段机制,而是采用平坦内存模型 + 分页模型来管理内存。 平坦内存模型(Flat Memory Model),这是现代操作系统(如 Linux 和 Windows)常用的内存模型。在这种模型中,所有段的段基址都为 0,段界限为 4GB,使得整个内存空间…

操作系统:保护模式(五)特权

特权机制 特权特权级数值越大,级别越小。通常,因为操作系统是为所有程序服务的,可靠性最高,而且必须对软硬件有完全的控制权,所以它的主体部分必须拥有特权级0,并处于整个环形结构的中心。也正是因为这样,操作系统的主体部分通常又被称做内核(Kernel、 Core)。 特权级1和…

操作系统:保护模式(一)GDT 与分段机制

GDT 与分段机制 CPU开机时运行于实模式,寻址方式是段寄存器 \(\times\) 10+偏移寄存器=物理地址,主要原因是因为 8086 地址线和数据线不匹配导致的。但是这种寻址方式既不安全也不支持现代操作系统所需的、多任务支持、cpu 特权模式等。 在实模式下,对于基址,变址寻址的寄存…

CSP2024-30

A 题意:将一个圆等分为 \(K\) 分,给出其中 \(n\) 个等分点的编号,\(x_i < x_{i + 1}\)。 有向边 \(i \to j\) 存在,当且仅当 \(j\) 是距离 \(i\) 最大的点(不唯一),且与图中其他边无交点(端点不算)。 求图中最多有多少条边。\(3 \le K \le 10^9, 3 \le n \le \min(…

小白上手Arcgis—用于结合Netlogo、matlab等进行复杂网络操作

小白上手Arcgis(Netlogo复杂网络数据预处理) 1.前言废话:昨天突然想到可以写一下博客,用来记录一下自己的工作,主要是涉及复杂网络方面。情况简介:本人Arcgis小白,之前只是略微知道有这么个软件,以及知道怎么打开软件。学渣一个,而且不是学gis方向的,但由于工作需要,要…