函数调用静态分析源码_开源静态代码分析工具

hacker|
126

文章目录:

函数调用关系图可以提供哪些与测试有关的信息

绘制函数调用关系图对理解大型程序大有帮助。我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历。如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力。

不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了。如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具。

函数调用关系图(call graph)是图(graph),而且是有向图,多半还是无环图(无圈图)——如果代码中没有直接或间接的递归的话。Graphviz是专门绘制有向图和无向图的工具,所以很多call graph分析工具都以它为后端(back end)。那么前端呢?就看各家各显神通了。

调用图的分析分析大致可分为“静态”和“动态”两种,所谓静态分析是指在不运行待分析的程序的前提下进行分析,那么动态分析自然就是记录程序实际运行时的函数调用情况了。

静态分析又有两种方法,一是分析源码,二是分析编译后的目标文件。

分析源码获得的调用图的质量取决于分析工具对编程语言的理解程度,比如能不能找出正确的C++重载函数。Doxygen是源码文档化工具,也能绘制调用图,它似乎是自己分析源码获得函数调用关系的。GNU cflow也是类似的工具,不过它似乎偏重分析流程图(flowchart)。

对编程语言的理解程度最好的当然是编译器了,所以有人想出给编译器打补丁,让它在编译时顺便记录函数调用关系。CodeViz(其灵感来自Martin Devera (Devik) 的工具)就属于此类,它(1.0.9版)给GCC 3.4.1打了个补丁。

另外一个工具egypt的思路更巧妙,不用大动干戈地给编译器打补丁,而是让编译器自己dump出调用关系,然后分析分析,交给Graphviz去绘图。不过也有人另起炉灶,自己写个C语言编译器(ncc),专门分析调用图,勇气可嘉。不如要是对C++语言也这么干,成本不免太高了。分析C++的调用图,还是借助编译器比较实在。

公共函数中如何调用静态方法

静态方法只能直接访问静态成员,无法访问非静态成员,如果想要访问非静态方法,则实例化该类对象,使用对象名.非静态方法()的方式来访问! static是一种访问修饰符,在java中可以修饰代码块、方法和属性 1、静态块:用于在类加载之前完成一些初始化操作,仅会执行一次 2、静态方法:可以使用类名和对象调用,只能直接访问静态成员,无法访问非静态成员 3、静态属性:可以使用类名和对象名调用,多个对象共享

静态分析是指?

经济领域概念

静态分析是一种分析经济现象的均衡状态以及有关的经济变量达到均衡状态所需要条件的分析方法。[1]而不考虑经济现象达到均衡状态的过程,它完全抽象掉了时间因素和具体的变化过程,是一种静止地、孤立地考察某种经济事物的方法。

百科

静态分析

经济领域概念

静态分析是一种分析经济现象的均衡状态以及有关的经济变量达到均衡状态所需要条件的分析方法。[1]而不考虑经济现象达到均衡状态的过程,它完全抽象掉了时间因素和具体的变化过程,是一种静止地、孤立地考察某种经济事物的方法。

中文名

静态分析

外文名

static analysis

指标

总量指标、相对指标、平均指标、标志变异指标等

应用

静态计算机科学、经济学、工程、力学、机械

释义

根据既定的外生变量值求得内生变量的分析方法

内涵

静态分析法是根据既定的外生变量值求得内生变量的分析方法,是对已发生的经济活动成果,进行综合性的对比分析的一种分析方法。

如研究均衡价格时,舍掉时间、地点等因素,并假定影响均衡价格的其他因素,如消费者偏好、收入及相关商品的价格等静止不变,单纯分析该商品的供求达于均衡状态的产量和价格的决定。简单地说就是抽象了时间因素和具体变动的过程,静止地孤立地考察某些经济现象。它一般用于分析经济现象的均衡状态以及有关经济变量达到均衡状态所需要的条件。

常用的静态分析法有:相对数分析法、平均数分析法、比较分析法、结构分析法、因素替换分析法、综合计算分析法、价值系数分析法等。

指标

c语言静态函数调用问题

楼上只说对一半,这里能调用a和b两个函数确实是因为使用include把a.cpp和b.cpp加入到了main.cpp里面,使用include实际是把对应代码加到include的位置。真正做项目没有这样做的,都是使用头文件的方式;

static修饰的函数和变量在别的文件是绝对不可见的,这是楼上错误的地方,即使使用extern声明函数导出,也不可以,编译时根本就不能通过,会报static类型错误,不能导出。。。

在你原来文件结构上加入头文件:

//a.h

#include iostream

using namespace std;

void a();

//b.h

void b();

然后把main.cpp里面的2个include分别改成a.h和b.h,编译:g++ main.cpp a.cpp b.cpp会发现报错误:

a.cpp: In function ‘void a()’:

a.cpp:3: error: ‘void a()’ was declared ‘extern’ and later ‘static’

a.h:3: error: previous declaration of ‘void a()’

这里就是因为a函数是static类型,不能导出,把static去掉这里就可以编译通过了。。。。

这也是static其中一个用法

程序静态分析的分析技术及实践

程序静态分析(Program Static Analysis)可以帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞等问题,从而保证软件的整体质量。还可以用于帮助软件开发人员快速理解文档残缺的大规模软件系统以及系统业务逻辑抽取等系统文档化等领域。 如开发20年以上的金融核心COBOL系统,动辄上千万行代码的系统规模。对于理解这样规模的系统,基于程序静态分析的辅助理解工具就能发挥积极作用。

本文首先对程序静态分析的特点、常用静态分析技术、静态分析实现方式进行描述,然后通过一个实例讲解了程序静态分析的执行过程。 程序静态分析是与程序动态分析相对应的代码分析技术,它通过对代码的自动扫描发现隐含的程序问题,主要具有以下特点:

(1)不实际执行程序。动态分析是通过在真实或模拟环境中执行程序进行分析的方法,多用于性能测试、功能测试、内存泄漏测试等方面。与之相反,静态分析不运行代码只是通过对代码的静态扫描对程序进行分析。

(2)执行速度快、效率高。目前成熟的代码静态分析工具每秒可扫描上万行代码,相对于动态分析,具有检测速度快、效率高的特点。

(3)误报率较高。代码静态分析是通过对程序扫描找到匹配某种规则模式的代码从而发现代码中存在的问题,例如可以定位strcpy()这样可能存在漏洞的函数,这样有时会造成将一些正确代码定位为缺陷的问题,因此静态分析有时存在误报率较高的缺陷,可结合动态分析方法进行修正。 (1)词法分析:从左至右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token) 流,生成相关符号列表,Lex为常用词法分析工具。

(2)语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树, Yacc为常用工具。

(3)抽象语法树分析:将程序组织成树形结构,树中相关节点代表了程序中的相关代码,目前已有javacc/ Antlra等抽象语法树生成工具。

(4)语义分析:对结构上正确的源程序进行上下文有关性质的审查。

(5)控制流分析:生成有向控制流图,用节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。

(6)数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息。

(7)污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。

(8)无效代码分析,根据控制流图可分析孤立的节点部分为无效代码。

程序静态分析是在不执行程序的情况下对其进行分析的技术,简称为静态分析。而程序动态分析则是另外一种程序分析策略,需要实际执行程序。大多数情况下,静态分析的输入都是源程序代码,只有极少数情况会使用目标代码。静态分析这一术语一般用来形容自动化工具的分析,而人工分析则往往叫做程序理解。

静态分析越来越多地被应用到程序优化、软件错误检测和系统理解领域。Coverity Inc.的软件质量检测产品就是利用静态分析技术进行错误检测的成功代表。国内某软件公司的闪蝶(BlueMropho)代码分析平台,是利用程序静态分析技术专注于大型机遗留系统的代码理解领域,尤其擅长分析千万行代码规模级的COBOL系统。

5条大神的评论

  • avatar
    访客 2022-07-02 下午 06:03:52

    掉了时间因素和具体的变化过程,是一种静止地、孤立地考察某种经济事物的方法。中文名静态分析外文名static analysis指标总量指标、相对指标、平均指标、标志变异指标等应用静态计算机科学、经济学、工程、力学、机械释义根据既定的外生变量值求得内生变量

  • avatar
    访客 2022-07-02 上午 08:47:45

    了时间因素和具体的变化过程,是一种静止地、孤立地考察某种经济事物的方法。百科静态分析经济领域概念静态分析是一种分析经济现象的均衡状态以及有关的经济变量达到均衡状态所需要条件的分析方法。[1]而不考虑经济现象达到均衡状态的过程

  • avatar
    访客 2022-07-02 下午 05:58:59

    系统业务逻辑抽取等系统文档化等领域。 如开发20年以上的金融核心COBOL系统,动辄上千万行代码的系统规模。对于理解这样规模的系统,基于程序静态分析的辅助理解工具就能发挥积极作用。本文首先对程序静态分析的特点、常用静态分析技术、静态分析实

  • avatar
    访客 2022-07-02 下午 02:59:59

    文章目录:1、函数调用关系图可以提供哪些与测试有关的信息2、公共函数中如何调用静态方法3、静态分析是指?4、c语言静态函数调用问题5、程序静态分析的分析技术及实践函数调用关系图可以提供哪些与测试有关的

  • avatar
    访客 2022-07-02 下午 07:11:06

    通过对程序扫描找到匹配某种规则模式的代码从而发现代码中存在的问题,例如可以定位strcpy()这样可能存在漏洞的函数,这样有时会造成将一些正确代码定位为缺陷的问题,因此静态分析有时存在误报率较高的缺陷,可结合动态分析方法进行修正。 (1)词法分析:从左至右一个字符一个字符的

发表评论