Pho*_*ong 16 c c++ static-analysis llvm
我最近发现了LLVM(低级虚拟机)项目,据我所知,它可用于对源代码执行静态分析.我想知道是否可以通过函数指针(找到调用函数和被调用函数)在程序中提取不同的函数调用.
我可以在网站上找到那种信息,所以如果你能告诉我LLVM中是否已存在这样的库,或者你能指出我自己如何构建它的好方向(现有的源代码,参考资料),那将会非常有用. ,教程,示例......).
编辑:
通过我的分析,我实际上想要提取调用者/被调用者函数调用.在函数指针的情况下,我想返回一组可能的被调用者.必须在源代码中定义调用者和被调用者(这不包括库中的第三方函数).
我认为Clang(作为LLVM一部分的分析器)适用于检测错误,这意味着分析器试图计算某些表达式的可能值(以减少误报)但有时会放弃(在这种情况下,不发出警报以避免大量误报.
如果您的程序仅为C,我建议您查看Frama-C中的值分析.它根据一些在此详细解释的假设,计算程序中每个点的任何l值的可能值的超集.分析程序中的复杂性仅表示返回的超集更接近,但它们仍包含所有可能的运行时值(只要您保持在上述假设中).
编辑:如果您对切片分析程序的函数指针的可能值感兴趣,您一定要看看Frama-C中现有的依赖关系和切片计算.该网站没有任何切片的好例子,这里有一个来自邮件列表的讨论
在我们的项目中,我们通过llc
LLVM 附带的程序将 LLVM 字节码转换为 C 代码来执行静态源代码分析。然后我们用CIL(C Intermediate Language)来分析C代码,但是对于C语言有很多工具可用。缺陷是生成的代码llc
非常糟糕并且精度损失很大。但这仍然是一种方法。
编辑:事实上,我不会推荐任何人这样做。不过,只是为了记录一下……
你应该看看艾尔莎.它相对容易扩展,让您可以非常轻松地解析AST.它处理所有解析,lexing和AST生成,然后让您使用Visitor模式遍历树.
class CallGraphGenerator : public ASTVisitor
{
//...
virtual bool visitFunction(Function *func);
virtual bool visitExpression(Expression *expr);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以检测函数声明,并可能检测函数指针的使用情况.最后,您可以检查函数指针的声明,并生成可以使用该指针调用的声明函数的列表.
归档时间: |
|
查看次数: |
5907 次 |
最近记录: |