【问题标题】:Can you run a user-defined pass before ASAN sanitizer?您可以在 ASAN sanitizer 之前运行用户定义的通行证吗?
【发布时间】:2021-10-04 02:14:26
【问题描述】:

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

【问题讨论】:

    标签: address-sanitizer sanitizer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 2017-09-05
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多