6

为了更好地防止 UB 案例,例如:

#include <stdio.h>
int f(){
  int x;
  return x;
}
int main()
{
   f();
   while(1);
   return 0;
}

我今天更新了我的 GCC,所以我可以使用ubsan。我当前的版本是 5.3.0 根据gcc --version. 我以为ubsan会被这个更新添加,但似乎不是因为用C:\Users\my_name\Desktop>gcc -fsanitize=undefined a.c这个编译后得到的是:

c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: 找不到-lubsan

现在,我已经看过这篇文章,但是操作系统是Ubuntu 15.04并且我使用的是Win 8.1所以这对我没有帮助。这里的评论之一说:

您将需要安装 libubsan 软件包。

但我不知道它是否适用于windows/ubuntu,即使它适用于windows用户,我也不知道该怎么做。

编辑:我也尝试过编译(这里gcc -fno-sanitize=all a.c有很多选项)并且编译时没有警告,所以我猜想以某种方式识别消毒剂(因为它编译好)但由于某种原因拒绝了我的原始编译尝试GCC

4

1 回答 1

1

对于 x86_64 sanitizer 运行时库(包括-lubsan)的 GCC,仅 Linux、OSX、FreeBSD 和 Solaris 支持(有关详细信息,请参阅https://github.com/gcc-mirror/gcc/blob/master/libsanitizer/configure.tg)。所以不幸的是,你还不能在 Windows 上使用 UBsan。

于 2021-12-28T09:29:24.590 回答