0

我使用 -fsanitize=address 开关编译我的代码。我有自己想要执行的 llvm 通行证。当 pass 开始时,我可以看到 ASAN pass 已经完成。是否可以在 ASAN 通行证之前运行我的通行证?

4

1 回答 1

0

我还尝试在 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 之前运行)。

于 2021-12-13T10:49:11.330 回答