LLVM入门教学——SanitizerCoverage插桩(Linux)

1、介绍

  • LLVM 的 SanitizerCoverage 是一种代码覆盖工具,设计用于支持基于 fuzzing 的测试和其他安全相关工具。SanitizerCoverage 在编译时插桩代码,以在运行时收集覆盖信息,从而帮助识别未覆盖的代码路径,提高测试的有效性和全面性。
  • SanitizerCoverage可以用户自定义桩代码,参考:LLVM入门教学——SanitizerCoverage插桩(自定义桩代码)-CSDN博客。
  • 本文使用的是SanitizerCoverage自带的桩代码

2、步骤

  • 准备一个test.c文件,计算该程序运行时的覆盖率。
    • #include <stdio.h>
       
      int main(int argc, char *argv[])
      {
          int a, b;
          char op;
          int result;
          scanf("%d%c%d", &a, &op, &b);
          switch (op) {
              case '+':
                  result = a + b;
                  break;
              case '-':
                  result = a - b;
                  break;
              case '*':
                  result = a * b;
                  break;
              case '/':
                  result = a / b;
                  break;
              default:
                  return 1;
          }
          printf("%d\n", result);
          return 0;
      }
  • 编译时插入桩代码。
    • clang -fsanitize=address -fsanitize-coverage=trace-pc-guard -o test test.c
  • 执行程序获取覆盖率数据文件。
    • ASAN_OPTIONS=coverage=1 ./test
    • 可能遇到段错误,重新执行即可。
  • .sancov文件是 AddressSanitizer生成的覆盖率文件,这些文件包含了程序在运行时覆盖的代码部分的信息。将该文件转换为覆盖率信息。
    • sancov -symbolize *.sancov ./test > test.symcov
  • 查看覆盖率信息。

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

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

相关文章

详细介绍运算符重载函数,清晰明了

祝各位六一快乐~ 前言 1.为什么要进行运算符重载&#xff1f; C中预定义的运算符的操作对象只能是基本数据类型。但实际上&#xff0c;对于许多用户自定义类型&#xff08;例如类&#xff09;&#xff0c;也需要类似的运算操作。这时就必须在C中重新定义这些运算符&#xff…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024&#xff08;Lightroom Classic 2024&#xff09;是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版&#xff0c;具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

锅炉智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

在制造业快速发展的今天&#xff0c;数字化转型已经成为企业提升竞争力的关键途径。锅炉智能制造工厂工业物联数字孪生平台&#xff0c;作为一种创新的技术解决方案&#xff0c;正以其独特的优势&#xff0c;为制造业的数字化转型提供强大动力。锅炉智能制造工厂工业物联数字孪…

【网络研究观】-20240531

战争揭开美国武器优势的面纱 随着俄军在哈尔科夫地区稳步推进&#xff0c;乌克兰战争对美国国防机器而言是一场灾难&#xff0c;这一点越来越明显&#xff0c;这不仅是因为我们的援助未能挽救乌克兰的撤退和可能的失败。更重要的是&#xff0c;这场战争无情地暴露了我们国防体…

我用大模型校稿出书的经验心得

1. 第一本AI校稿的书 我的新书《云计算行业进阶指南》已经出版&#xff0c;本书使用了大模型进行AI校对书稿。 在本文稿发布前&#xff0c;我问了好几个AI&#xff0c;AI都说“还没有出版书籍宣称自己使用了AI校稿”&#xff0c;因此我可以说&#xff1a; 本书是第一本公开宣称…

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从&#xff0c;俩哨兵&#xff0c;准备两台服务器&#xff0c;分别安装docker 我这里有两台centos服务器 主服务器IP&#xff1a;192.168.252.134 从服务器IP&#xff1a;192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…

编写备份MySQL 脚本

目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本&#xff08;完全备份&#xff09; 星期一运备份脚本&#xff08;增量备份&#xff09; 星期二备份数据&#xff08;其他天--增量备份&#xff09; 星期三备份数据&#xff08;差异备…

cobalt strike基础测试

下载链接4.3&#xff1a;https://pan.baidu.com/s/1E_0t30tFWRiE5aJ7F-ZDPg 链接4.0&#xff1a;https://pan.baidu.com/s/1SkMmDem3l6bePqIDgUz2mA 提取码&#xff1a;burp 一、简介&#xff1a; cobalt strike(简称CS)是一款团队作战渗透测试神器&#xff0c;分为客户端…

C++笔试强训day37

目录 1.旋转字符串 2.合并k个已排序的链表 3.滑雪 1.旋转字符串 链接https://www.nowcoder.com/practice/80b6bb8797644c83bc50ac761b72981c?tpId196&tqId37172&ru/exam/oj 如果 A 字符串能够旋转之后得到 B 字符串的话&#xff0c;在 A 字符串倍增之后的新串中&am…

linux驱动学习(二)之点灯

需要板子一起学习的可以这里购买&#xff08;含资料&#xff09;&#xff1a;点击跳转 如何实现对硬件控制 分析硬件原理图&#xff08;开发板的原理图&#xff09;----> 分析硬件的控制方法 ---> 控制硬件时&#xff0c;所要用到的寄存器 ----> 了解控制硬件寄存器的…

关于如何在Arch Linux上编写自己的第一个module

前一段时间一直想深入学习编写一个module插入到自己的内核当中&#xff0c;但是网上的资料基本上全都针对的Ubuntu和Debian等流行的Linux发行版&#xff0c;这里打算简单的记录一波博客。 啥是Module?(着急可不看) 众所周知&#xff1a;现代宏内核架构的操作系统都会借鉴微内核…

【stableDiffusion】HuggingFace模型下载(只要知道url,就直接开始下载)

一、方法 有人说&#xff0c;那我怎么知道 huggingface 上面我想要的资源的url&#xff0c;去哪儿找啊&#xff1f; 那就涉及到一些魔法手段了&#xff0c;或者你能在其他人的博客或者百度上搜索到合适的url。 我这个办法是用来节约我的魔法的流量的。 1.迅雷 1.1 打开迅雷&…

【Kotlin】简单介绍与使用kotlin

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Kotlin ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 特点 变量和常量 数据类型和类型推断 函数 字符串模板 条件表达式 空安全 when 表达式 循环 我的其他博客 前言 Kotlin是…

PostgreSQL基础(六):PostgreSQL基本操作(二)

文章目录 PostgreSQL基本操作(二) 一、字符串类型 二、日期类型 三、

比较与深浅克隆

1.比较 &#xff08;1&#xff09;Comparable接口&#xff1a;&#xff08;重写compareTo方法&#xff09; 由于它是一个接口&#xff0c;而且在这个接口中只有一个compareTo方法&#xff0c;所以所有实现该接口的类都需要重写。这个compareTo方法相当于制定一个比较标准&…

Raid的全局热备和独立热备

目录 Hot Spare背景: 1.定义与功能 2.数据存储与容量 3.配置模式 4.数量限制&#xff1a; 5.数据重建: 6.管理与维护 实操全局热备和独立热备&#xff1a; 配置全局热备: 配置独立热备: Hot Spare背景: 在RAID配置中&#xff0c;Hot Spare(热备)是一个非常重要的概念…

【数据结构与算法 | 二叉树篇】二叉树的前中后序遍历(递归版本)

1. 二叉树的概念 (1). 二叉树的结构 借用了一下力扣的模板 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.righ…

【C++】list的使用(上)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f308;关于list&#x1f525;默认成员函数构造函数&#xff08;constructor&#xff09;析构函数&#xff08;destructor&#xff09;赋值运算符重载 &#x1…

第十六课,海龟画图:设置画笔颜色、宽度函数,移动画笔函数

一&#xff0c;turtle.color()&#xff1a;画笔颜色函数 这个函数能设置画笔画出来的颜色&#xff0c;当然&#xff0c;使用它之前你需要认识有哪些“颜料”可供你选择&#xff0c;turtle库的color()函数可以选择以下颜色&#xff1a; "white" 白色&#xff08;建议…

进程间通信(27000字超详解)

&#x1f30e;进程间通信 文章目录&#xff1a; 进程间通信 进程间通信简介       进程间通信目的       初识进程间通信       进程间通信的分类 匿名管道通信       认识管道       匿名管道       匿名管道测试       管道的四种…