【发布时间】:2021-10-04 02:14:26
【问题描述】:
我使用 -fsanitize=address 开关编译我的代码。我有自己想要执行的 llvm 通行证。通行证开始时,我可以看到 ASAN 通行证已完成。是否可以在 ASAN 通行证之前运行我的通行证?
【问题讨论】:
标签: address-sanitizer sanitizer
我使用 -fsanitize=address 开关编译我的代码。我有自己想要执行的 llvm 通行证。通行证开始时,我可以看到 ASAN 通行证已完成。是否可以在 ASAN 通行证之前运行我的通行证?
【问题讨论】:
标签: address-sanitizer sanitizer
我还尝试在 ASAN 通行证之前以不同的方式运行我的通行证,以在 BasicBlock 级别检测我的程序。
这似乎对我有用:
使用EP_EarlyAsPossible 标志注册一个“StandardPasses”,这会使您的通行证早于 ASAN 工作。
static RegisterStandardPasses Y(PassManagerBuilder::EP_EarlyAsPossible,
[](const PassManagerBuilder &Builder,
legacy::PassManagerBase &PM) {
PM.add(new MyPass());
});
将您的通行证编译为“.so”文件。
然后使用clang -Xclang -load -Xclang xxYourPassxx.so -fsanitize=address main.c -o main 编译您的代码。
我还编译了 main.bc & main.ll 进行检查。结果显示我的检测没有出现在 ASAN 的块中(因为我的通行证在 ASAN 之前运行)。
【讨论】: