我使用 -fsanitize=address 开关编译我的代码。我有自己想要执行的 llvm 通行证。当 pass 开始时,我可以看到 ASAN pass 已经完成。是否可以在 ASAN 通行证之前运行我的通行证?
user11746929
问问题
38 次
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 回答