提问人:user22906126 提问时间:11/13/2023 最后编辑:user22906126 更新时间:11/17/2023 访问量:28
如何使用 ubsan for llvm .bc 文件
How to use ubsan for llvm .bc file
问:
假设我有一个名为 put.bc 的文件。它没有字符串“asan_report”和“ubsan_handles”。
如果我直接使用命令,“asan_report”将不会出现在 put-asan.bc 中。
所以,我写了一个pass1.cpp:clang -fsanitize=address -emit-llvm -o put-asan.bc -c put.bc
for (Function &F : M)
{
F.addFnAttr(Attribute::SanitizeAddress);
}
将其编译为 pass1.so。
我使用命令.
还有comand .
因此,put-asan.bc 有字符串“asan_report”或其他内容。这意味着 asan 检测已成功用于它。我不知道如何使用 ubsan 来检测 put.bc。因为没有像 asan 这样的。clang -Xclang -load -Xclang pass1.so -emit-llvm -o put-tem.bc -c put.bc
clang -fsanitize=address -emit-llvm -o put-asan.bc -c put-tem.bc
F.addFnAttr(Attribute::SanitizeUndefined);
有没有办法从 put.bc 获取 put-ubsan.bc?我该怎么办?
我使用 llvm 12.0.1。
答:
与 ASan TSan 和 MSan 不同,它们是可以在任何 LLVM IR 上运行的 LLVM 通道,UBSan 是 clang 的一个功能,它改变了从原始 C++ 源代码生成的 LLVM IR。这是UBSan工作方式的重要组成部分,因为UBSan可以检测C++语言标准中未定义的行为,即使等效的LLVM IR具有明确定义的行为。
上一个:格式错误的约束表达式
评论