Address Sanitizer 可以在检测到错误后立即中止吗?

2023-12-09

我正在结合使用系统调用检查器-fsanitize=address当 ASAN 发现错误时,它会调用一些系统调用(ioctl(ISATTY)等)打印报告时。系统调用检查器中断了 ASAN 的 ioctl,并且未正确收集错误报告。

我希望 ASAN 能够简单地中止而不打印报告,或者失败,这是一种确定(可能使用 libasan4 API 调用)ASAN 发现错误的方法,这样我就可以阻止系统调用检查器拦截系统调用。

很遗憾__asan_error_report, __sanitizer_set_death_callback and __asan_set_error_report_callback来自 libasan4 的所有操作均在 ASAN 收集报告后开始:

0 __asan_error_report()
1 syscall_checker()
2 ioctl(ISATTY)
3 asan::PrintReport()
4 app_code_that_crashes()

并且系统调用检查器不处理 ASANioctl()正确调用,因此它正常退出(),而我希望保持 ASAN 的行为abort()ing.


您应该能够在通过重写打印报告之前进行拦截__asan_on_error(声明于asan_interface.h,默认为空):

// User may provide function that would be called right when ASan detects
// an error. This can be used to notice cases when ASan detects an error, but
// the program crashes before ASan report is printed.
void __asan_on_error();

请注意,由于奇怪的 Asan 回调接口,您最好在主二进制文件中实现此回调(共享库中的定义可能无法拦截来自libasan.a).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Address Sanitizer 可以在检测到错误后立即中止吗? 的相关文章

  • 如何更改 Xcode 中的编译器

    我正在 Xcode 4 6 3 中编译 C 代码 但我不知道我正在使用哪个编译器 我需要使用 gcc 4 2 提前致谢 If you really需要更改为 gcc 您可以在构建设置中执行此操作
  • 如何BSWAP 64位寄存器的低32位?

    我一直在寻找如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案 例如 0x0123456789abcdef位于 RAX 寄存器内 我想将其更改为0x01234567efcdab89用一条指令 因为性能 所以我尝试了以下内联
  • 在 Ubuntu 上用 C 项目编译和链接 GTK 3

    我相信这不是重复的问题 在发布此问题之前我已经看过所有问题 答案 我想我这里的情况有所不同 我使用Ubuntu 12 04并下载GTK 2 和 3 我从 GNOME 网站复制了一个简单的 GTK 源代码 但是当我在终端中使用这个命令时 gc
  • XCode 4.2 编译器错误

    当我使用 XCode 4 2 创建新项目 例如 单视图 iOS 应用程序 时 支持文件 文件夹中的 main m 文件如下所示 import
  • 链接 llvm 库

    我正在开发一个基于 llvm 的编译器 当我尝试生成可执行文件时 会发生以下错误 bin llvmcode s 35 对 operator new unsigned long 的未定义引用 请注意 在生成的 IR 中 调用了位于 llvm
  • `printf()` 中格式说明符“%qd”的用途是什么?

    我看到格式说明符 qd浏览时github https github com Microsoft clang blob master test Sema format strings c代码 然后我检查了 GCC 编译器 它工作正常 incl
  • 使用 OpenMP 编译会导致内存泄漏

    根据 valgrind 的说法 使用 OpenMP 编译简单的 hello world 程序时可能会导致内存泄漏 这是没有意义的 因为 hello world 程序并没有有意使用任何 OpenMP 功能 假设下面的程序名为hi c并根据 g
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • 带有适用于 MS-Windows 的工具链的预构建 MIPS 交叉编译器

    我在我的 Linux 机器上使用 MIPS 交叉编译器 效果很好 现在我需要在 Windows 上编译相同的应用程序 我正在网上搜索一些适用于 MS Windows 的预构建 MIPS 交叉编译器 带有工具链 但没有成功 由于我不确定该怎么
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • C99 中数组的静态大小[重复]

    这个问题在这里已经有答案了 一个非常简单的 C 程序 include
  • 为什么是 ”\?” C/C++ 中的转义序列?

    C C 中有四种特殊的非字母字符需要转义 单引号 双引号 反斜杠 和问号 显然是因为它们有特殊的含义 对于单身char 对于字符串文字 对于转义序列 但为什么是 其中之一 我今天读了教科书上的转义序列表 我意识到我已经never逃脱了 以前
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • C++11 Geany 设置

    我正在学习 C 我需要在 Geany 中为 C 11 正确设置编译和构建命令 我以为我的理解是正确的 但是当使用时auto 我收到以下错误 warning auto will change meaning in C 0x please re
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get

随机推荐

  • 在 blueimp/jquery-file-upload 上向 mysql 插入添加更多自定义变量

    我目前正在通过 mysql 在 blueimp jquery file upload 脚本内插入标题和描述 我用了this但是 我需要添加另一个变量 该变量是当前登录用户的session ID SESSION userid 我想将其插入到我
  • MVC3 - 只有第一行链接适用于 Jquery 模态对话框

    使用 MVC3 Razor Jquery Javascript 下面的代码循环并显示带有字段和链接的表结构 每行上的链接都会触发一个 Jquery 模态对话框 该对话框将部分视图页面显示为弹出窗口 但弹出对话框仅适用于第一行 第二行及其下方
  • 云函数-获取超过10MB的文件内容

    Google Cloud Functions 配额页面 https cloud google com functions quotas表示 HTTP 响应中 HTTP 函数发送的最大数据量为 10 MB 我在 Google 存储桶中有 10
  • 用于算术运算的 BFS

    用最少的运算将数字 m 转换为 n 允许的运算为减 1 和乘 2 例如 4 和 6 答案是 2 第一个操作 1 gt 4 1 3 第二次操作 gt 3 2 6 我对特定输入 src 26 dst 5 使用 BFS 方法 这需要很长时间 难道
  • 使用 Lua 评估数学表达式

    In my 上一个问题我一直在寻找一种在 C 语言中评估复杂数学表达式的方法 大多数建议都需要实现某种类型的解析器 However 一个答案 建议使用 Lua 来计算表达式 我对这种方法很感兴趣 但我对Lua一无所知 有 Lua 经验的人可
  • 将给定坐标处的饼图添加到 cartopy 投影

    我是数据可视化的初学者 对于 cartopy 更是如此 我知道对于大多数人来说我的问题是显而易见的 我正在尝试熟悉 cartopy 并且成功地绘制了文本和点 但我无法实现饼图 我只想在特定投影上绘制饼图 但我真的很困惑 尽管有 cartop
  • 使用 PyAudio 防止 ALSA 欠载

    我编写了一个小程序 它记录麦克风的声音并将其通过网络发送并在那里播放 我正在使用 PyAudio 来完成此任务 它工作得几乎很好 但在两台计算机上我都从 ALSA 收到错误 表明发生了欠载 我在谷歌上搜索了很多相关内容 现在我知道什么是欠载
  • 如何通过网络使用命名管道?

    我正在尝试通过命名管道创建网络连接 我正在按照它所说的那样做msdn 我用函数创建管道服务器端 CreateNamedPipe pipe myNamedPipe DUPLEX FILE FLAG OVERLAPPED 0 255 BUFFE
  • 等待其他期货提出的期货

    我正在使用 Lawndart 库访问浏览器数据 并希望收集一组查询的结果 这是我认为应该起作用的 numberOfRecordsPerSection callback var map new Map db sections keys for
  • 使用 LINQ 计算与前一项的差异

    我正在尝试使用 LINQ 为图表准备数据 我无法解决的问题是如何计算 与之前的差异 我期望的结果是 ID 1 日期 现在 DiffToPrev 0 ID 1 日期 现在 1 DiffToPrev 3 ID 1 日期 现在 2 DiffToP
  • nltk 无法解释斯坦福解析器输出的语法类别 PRP$

    我想从斯坦福解析器检索的语法生成句子 但 NLTK 无法解释 PRP from nltk parse stanford import StanfordParser from nltk grammar import CFG from nltk
  • 在大端机器中对小端整数进行简单的按位操作?

    对于特定需求 我正在用四个一字节字符构建一个四字节整数 没有使用任何特别的东西 在我的小端平台上 return v1 lt lt 24 v2 lt lt 16 v3 lt lt 8 v4 我知道存储在大端机器中的整数看起来像AB BC CD
  • 单击 JPanel 绘制形状

    我有一个包含 3 个 JPanel 的 JFrame 选项 菜单 画布 在选项中有许多代表形状的 JButton 目的是单击形状的 JButton 例如矩形 然后单击画布上的任意位置 形状将绘制在那里 由于某种原因 形状并不总是被绘制 只有
  • C# 打开文件并传递参数给关联的应用程序

    我正在尝试启动为指定附加参数的扩展注册的默认应用程序 ProcessStartInfo p new ProcessStartInfo p Arguments myargument p FileName file ext Process St
  • Symfony2 - 覆盖模板包

    我想覆盖默认的 SonataAdmin 模板 我在我的命名空间 bundle resources views中创建了一个standard layout html twig 相同结构 相同文件名 相同内容 我将源模板的所有内容复制到目标模板中
  • MongoDB:有没有办法使用聚合来检测价值趋势?

    我正在尝试检测集合中值的 趋势 假设我有以下内容 created at 2014 12 01 value 1015 created at 2014 12 01 value 1015 created at 2014 12 01 value 1
  • 处理 IE 中的跨帧按键

    我一直在努力处理onkeydown通过 JavaScript 跨多个框架的事件 不 不幸的是我无法摆脱框架 请参阅我之前的问题here 我正在另一个框架中获取文档的句柄 并将其设置为onkeydown处理程序等于我的函数 没有抛出错误 但是
  • 如何在联结表中进行编辑

    在连接表中进行编辑的最佳实践是什么 Items ItemId Name Price Shops ShopId Name Address ItemsInShops ItemId ShopId DeliveryDate 现在我一家店里有30件商
  • Javascript - 如何检查 window.open(url) 是否成功?

    如何检查状态和 或等待连接成功window open 或者建议更好的选择 var url https www google com var newWindow window open url main if newWindow succes
  • Address Sanitizer 可以在检测到错误后立即中止吗?

    我正在结合使用系统调用检查器 fsanitize address当 ASAN 发现错误时 它会调用一些系统调用 ioctl ISATTY 等 打印报告时 系统调用检查器中断了 ASAN 的 ioctl 并且未正确收集错误报告 我希望 ASA