问题标签 [sanitizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
fortran - 是否允许为另一个过程的可选参数传递一个不存在的假定形状数组?
在这个最小的例子中,是否允许传递 的可选虚拟参数可能不是对应的可选虚拟参数的y
实际参数?test_wrapper
present
y
test
UndefinedBehaviourSanitizer 报错,说明不是:https ://godbolt.org/z/nKj1h6G9r
在这个 Fortran 标准文档(第 311 页的第 15.5.2.12 节,“参数存在和参数不存在的限制”)中,它说:
- 不存在的可选虚拟参数受以下限制。
- 如果是数据对象,则不应被引用或定义。如果它是具有默认初始化的类型,则初始化无效。
- [...]
- [...]
- [...]
- 不应将其作为基础对象并带有一个或多个子对象选择器的指示符作为实际参数提供。
- [...]
- 如果它是一个指针,则它不应被分配、解除分配、无效化、指针分配或作为对应于可选非指针虚拟参数的实际参数提供。
- 如果它是可分配的,则不应分配、解除分配或作为与可选的不可分配伪参数相对应的实际参数提供。
- [...]
- 除非在上面的列表中注明,它可以作为与可选的虚拟参数相对应的实际参数提供,然后也被认为不存在。
我正在努力阅读该列表中的标准,所以也许其中一个我不完全理解的项目禁止使用假定形状的数组?但在我看来,这些限制都不适用于这种情况。
但有趣的是,UBSan 似乎只在使用 时引发错误dimension(:)
,即如果y
是假设形状的数组。其他任何东西dimension(2)
,如dimension(n)
添加大小参数n
,allocatable
或pointer
什么都没有似乎不会触发 UBSan。
clang - 使用 LLVM DataFlow Sanitizer 包装函数
我正在尝试使用Clang DataFlowSanitizer,我想定义自定义函数包装器,例如,在示例中,我想包装 memcpy,做一些事情然后调用原始的 memcpy。它应该遵循这个模式:
在文档中,它告诉您必须定义自定义 ABI 列表并以这种方式放置自定义函数:
但是我怎样才能告诉编译器使用这个 ABI 列表呢?我应该把包装函数放在哪里?
c - 如何使用 AddressSanitizer 输出获取行号?
在 gcc 上运行地址清理程序时如何获取行号?
我有一个简单的程序来测试地址过滤器(缓冲区溢出):
运行地址清理程序 (gcc) 时:
我怎样才能输出行号?我尝试了以下问题的答案: 如何使用 clang 的 -fsanitize=address 在调试输出中获取行号? 以及 如何使用 clang 的 -fsanitize=address 在调试输出中获取行号? 但不知道该怎么做,我想打印运行可执行文件时发生溢出的行。
address-sanitizer - 您可以在 ASAN sanitizer 之前运行用户定义的通行证吗?
我使用 -fsanitize=address 开关编译我的代码。我有自己想要执行的 llvm 通行证。当 pass 开始时,我可以看到 ASAN pass 已经完成。是否可以在 ASAN 通行证之前运行我的通行证?
c++ - Clang sanitizers 缺少未初始化内存的读取
我有以下代码,我有信心从垃圾内存中读取,但 clang sanitizers 不会抱怨。
我可以做些什么来让它们触发,或者我应该接受它作为限制/错误?
我曾尝试设置 O0,因为这有时会有所帮助,但这次没有。
我也愿意使用 gcc,但我认为 gcc 没有内存清理器,只有 asan。
clang - -fsanitize-coverage=trace-pc 和 trace-pc-guard 有什么区别?
最近我一直在研究 Clang 消毒剂。我发现标志-fsanitize-coverage
可以是trace-pc
or trace-pc-guard
。根据官方文档(Tracing PCs with guards,Tracing PCs ),两者都可以在每个边缘插入存根函数(__sanitizer_cov_trace_pc()
和)。__sanitizer_cov_trace_pc_guard()
但是,它们之间有什么区别呢?
c++ - 为什么 LLVM 的泄漏消毒剂在与其他启用的消毒剂一起使用时不起作用
我试图从一个简单的程序中找到内存泄漏:
使用以下命令:
clang -g -O0 -Wall -Wextra -std=gnu99 -fsanitize=address,leak -o 3-bracket-parser 3-bracket-parser.c
很明显,在这个程序中,如果close_bracket == NULL
为真,那么程序返回时没有空闲的mutable_copy,所以存在内存泄漏。
但是,当我运行此命令时,它不会报告任何错误,并且我的消毒剂也没有输出。我只启用了泄漏消毒剂再次尝试,这次它起作用了:
我想知道为什么在启用其他消毒剂时泄漏消毒剂不起作用。
我的 clang 版本是 Homebrew clang 版本 12.0.1,我的操作系统是 macOS Big Sur 11.5.2
c - 在 Macos Monterey 12.0.1 上使用 fsanitize 时出现问题
每次执行程序时,我都无法在 Macos 上使用 fsanitize,出现以下消息:
a.out(1003,0x111253600) malloc:由于无法预先分配保留的 vm 空间而放弃了 nano zone。
代码工作,但它不再检测到泄漏。我使用 clang -fsanitize=address main.c 进行编译,其中 main.c 只是一个测试,我不释放使用 malloc 分配的字符串:
这个程序的结果:
a.out(1033,0x1086d8600) malloc:由于无法预先分配保留的 vm 空间而放弃了 nano 区域。测试%
我在互联网上找到的唯一解决方案是将 MallocNanoZone 变量设置为 0,但即使消息没有出现,它仍然没有检测到泄漏。
clang - 如何使用 clang++ 使用内存清理器构建共享库?
我在 ubuntu 18.04 中使用了 clang-10。
我试图用内存清理器构建共享库。
构建的对象:
然后我尝试将它链接到共享库:
在此命令之后,我得到了错误输出:
.so
使用内存清理器构建文件的正确命令是什么?
googletest - Address Sanitizer - 抑制 gtest
是否可以抑制单元测试功能?我的项目中有地址消毒剂,并且我收到了有关堆栈缓冲区溢出信息的报告,我想抑制这些信息。
它已经是一个在这里有类似问题的stackoverflow页面,但是这个问题的解决方案不是我想要的(我不想禁用测试)。
例如
我不想在这个测试中使用地址清理器。应该运行测试,但我不想有任何地址清理报告