Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Static analysis 开源静态代码分析模型_Static Analysis - Fatal编程技术网

Static analysis 开源静态代码分析模型

Static analysis 开源静态代码分析模型,static-analysis,Static Analysis,我正在从事一个项目,我想开发一些静态源代码分析工具。源代码将使用多种相互交互的专有语言。因此,我正在寻找一个项目,该项目定义了一个抽象模型/AST,可以对语言进行一些数据流分析,我可以将每种专有语言转换为模型,并能够分析数据流/树 有这样一个项目吗 我认为对象管理组(OMG)对知识发现元模型(KDM)的规范正是您所寻找的领域。(见附件)。这是OMG架构驱动现代化(ADM)活动的一部分。KDM已由ISO重新发布为ISO/IEC 1956:2012(E) 导言: 本国际标准定义了一个元模型,用于表示

我正在从事一个项目,我想开发一些静态源代码分析工具。源代码将使用多种相互交互的专有语言。因此,我正在寻找一个项目,该项目定义了一个抽象模型/AST,可以对语言进行一些数据流分析,我可以将每种专有语言转换为模型,并能够分析数据流/树


有这样一个项目吗

我认为对象管理组(OMG)对知识发现元模型(KDM)的规范正是您所寻找的领域。(见附件)。这是OMG架构驱动现代化(ADM)活动的一部分。KDM已由ISO重新发布为ISO/IEC 1956:2012(E)

导言:

本国际标准定义了一个元模型,用于表示现有软件资产、它们的关联和 操作环境,称为知识发现元模型(KDM)


您可能需要自己完成大部分繁重的工作,但至少已经提供了元模型。

不是开源的,但经过设计并证明可用于构建处理多个复杂语言的工具:我们的

DMS包含强大的解析机制(能够处理),该机制仅从语法描述自动构建AST,以及支持符号表构造的库,以及各种控制和数据流分析

OP必须提供他专有语言的语法和语义描述,但我认为他是在期待。如果他想对跨语言的流进行建模,他必须组织流分析以使各个语言兼容。事实上,DMS使用统一的基础设施/数据结构来支持所有这些活动,即使是针对不同的语言,也会使这变得更容易


他不应该期望一个涉及多种语言的项目简单或快速,不管他找到了什么样的框架。我们使用DMS的目的是使之实用。

更多的是作为一个旁注:如果您对语法细节不太感兴趣,并且可以自由选择您的平台,那么您也可以分析VM的代码,如.Net字节码。 有针对C#和F#的编译器,也有C++(/CLI)和Visual Basic的编译器(当然,大多数都来自知名的大型软件公司:-)
它们都编译成字节码程序,可以通过Mono.Cecil等工具进行检查,可以构建控制流图等。

我注意到这只是一个标准。如果OP想要在这个标准上取得任何进展,他必须找到一个支持它的工具。目前还不清楚这种工具是否有开源版本。然后他必须将他的语言编码到框架中。这听起来相当令人印象深刻。看起来你在那里做了一些非常有趣的工作,Ira。如果你花20年的时间在上面,你可以做很多事情:-}这非常令人印象深刻,我一定会去看看。我想我太希望我能将这个问题的范围扩大到一个预先存在的模型中,这样就行了。感谢您的指点。这假设OP的语言集已经翻译成定义良好的VM,甚至JVM或CLI。可能是这样,但如果不是这样,它会将一个问题转化为另一个问题:他如何在开始之前获得VM代码?这是真的,有很多先决条件。但是,如果满足这些条件,他可以获得静态分析信息,而不考虑输入语言。这种静态分析工具的一个例子是MS Research的“CodeContracts”或“Clousot”。另一个想法可能是LLVM,但我认为他们的IR没有“统一”的ABI,也就是说,方法调用之类的东西可能会根据语言进行不同的建模。