c++ - 使用 LLVM 进行静态源代码分析

标签 c++ c static-analysis llvm

我最近发现了 LLVM (low level virtual machine)项目,据我所知,它可用于对源代码进行静态分析。我想知道是否可以在程序中通过函数指针(找到调用者函数和被调用者函数)提取不同的函数调用。

我可以在网站上找到这类信息,所以如果你能告诉我这样的库是否已经存在于 LLVM 中,或者你能给我指出如何自己构建它的好方向(现有源代码、引用、教程、示例...)。

编辑:

通过我的分析,我实际上想提取调用者/被调用者函数调用。在函数指针的情况下,我想返回一组可能的被调用者。调用者和被调用者都必须在源代码中定义(这不包括库中的第三方函数)。

最佳答案

我认为 Clang(LLVM 的一部分的分析器)旨在检测错误,这意味着分析器尝试计算某些表达式的可能值(以减少误报)但有时会放弃(在这种情况下,不会发出警报以避免大量误报)。

如果您的程序仅是 C,我建议您查看 Frama-C 中的值分析.它计算程序每个点的任何 l 值的可能值的超集,在一些详细解释的假设下 here .分析程序中的复杂性仅意味着返回的超集更加近似,但它们仍然包含所有可能的运行时值(只要您保持在上述假设范围内)。

编辑:如果你对函数指针的可能值感兴趣,以便对分析的程序进行切片,你一定要看看现有的dependencies。和 Frama-C 中的切片计算。该网站没有任何好的切片示例,这里是 one from a discussion on the mailing-list

关于c++ - 使用 LLVM 进行静态源代码分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354302/

相关文章:

c - 为什么 Frama-C 的这个使用 scanf() 的程序的依赖图看起来像这样?

c++ - 确定 "unknown evaluation order"

c++ - C++中的双向选择排序

c++ - 如何修改程序使其通过?

java - 尝试更新 cocos OpenSSL 时出错

c++ - 将从套接字接收到的数据写入 C++ 中的文件

c - 如何使用宏在 c 中使用标记粘贴连接两个标记来进行字符串化?

c - scanf() 只有符号和数字

c++ - 如何在三星 galaxy tab 等 Android 设备上运行 c 或 c++ 程序?

static-analysis - 是否有任何静态分析工具将报告遵循SOLID原则的程度?