直接在 bitcode 文件上使用 Clang Static Analyzer
Using Clang Static Analyzer directly on bitcode files
我想知道是否可以让 clang 分析器直接在 bitcode (*.bc
) 文件上工作? 下面 this post 关于整数变量的识别只能有值 0
或 1
,我已经开始探索 clang 分析器,它给了我很好的结果。
例如,当我使用以下 C
代码时:
$ scan-build clang -O3 ./main.c
发现除以零确实不行:
int should_expand(char *s)
{
int tmp = 0;
int ret = 0;
char *p;
for (p = s; p && *p; p++)
{
if (*p == '\') { p++; }
else if (*p == '&') { ret = 1; }
}
if (!((0 <= ret) && (ret <= 1)))
{
int j = 0;
ret = 5 / j;
}
return ret;
}
int main(int argc, char **argv)
{
if (should_expand(argv[1]))
{
return -1;
}
return 0;
}
我想我应该插入一个 if (!((0 <= _) && (_ <= 1)))
语句
对于每个整数变量,然后提供生成的位码文件
到 clang 分析器。问题是,我似乎无法找到它是否可以处理
位码文件还是 c 源文件?非常感谢任何帮助,谢谢!
clang 静态分析器适用于 clang AST。它不能使用位码作为输入——它对分析器来说是低级的。
我想知道是否可以让 clang 分析器直接在 bitcode (*.bc
) 文件上工作? 下面 this post 关于整数变量的识别只能有值 0
或 1
,我已经开始探索 clang 分析器,它给了我很好的结果。
例如,当我使用以下 C
代码时:
$ scan-build clang -O3 ./main.c
发现除以零确实不行:
int should_expand(char *s)
{
int tmp = 0;
int ret = 0;
char *p;
for (p = s; p && *p; p++)
{
if (*p == '\') { p++; }
else if (*p == '&') { ret = 1; }
}
if (!((0 <= ret) && (ret <= 1)))
{
int j = 0;
ret = 5 / j;
}
return ret;
}
int main(int argc, char **argv)
{
if (should_expand(argv[1]))
{
return -1;
}
return 0;
}
我想我应该插入一个 if (!((0 <= _) && (_ <= 1)))
语句
对于每个整数变量,然后提供生成的位码文件
到 clang 分析器。问题是,我似乎无法找到它是否可以处理
位码文件还是 c 源文件?非常感谢任何帮助,谢谢!
clang 静态分析器适用于 clang AST。它不能使用位码作为输入——它对分析器来说是低级的。