如何使用 ubsan 来处理 llvm .bc 文件

问题描述 投票:0回答:1

假设我有一个名为 put.bc 的文件。它没有字符串“asan_report”和“ubsan_handles”。 如果我直接使用命令

clang -fsanitize=address -emit-llvm -o put-asan.bc -c put.bc
,“asan_report”将不会出现在put-asan.bc中。 所以,我写了一个pass1.cpp:

for (Function &F : M)
    {
        F.addFnAttr(Attribute::SanitizeAddress);
    }

编译为pass1.so。 我使用命令

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
。 因此,put-asan.bc 有字符串“asan_report”或其他内容。这意味着asan仪器在其上使用成功。我不知道如何使用 ubsan 来检测 put.bc。因为没有像asan那样的
F.addFnAttr(Attribute::SanitizeUndefined);

有没有办法从 put.bc 获取 put-ubsan.bc?我该怎么办?

我使用 llvm 12.0.1。

llvm sanitize ubsan
1个回答
0
投票

与 ASan TSan 和 MSan 不同,它们是可以在任何 LLVM IR 上运行的 LLVM 通行证,UBSan 是 clang 的一项功能,它更改了从原始 C++ 源代码生成的 LLVM IR。这是 UBSan 工作方式的重要组成部分,因为 UBSan 会检测 C++ 语言标准中未定义行为的事物,即使等效的 LLVM IR 具有明确定义的行为也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.