一种C/C++代码安全静态检测模型
作者:网络转载 发布时间:[ 2013/12/24 13:14:55 ] 推荐标签:C C++ 代码 静态检测
对于指针或者引用的定义语句,在一张别名表中记录该节点, varorg记录被指向变量名(i), varpointer记录指针/引用变量名(p,a)。在其后的指针变量操作中,通过查表,记录到真正指向的变量链表中(到达定值分析中的链表,进而进行分析)。
4、控制依赖
在编译原理中,控制依赖的概念用于模拟条件分支语句对程序行为的影响,它是程序控制结构的属性,可以根据控制流图来严格地定义。直观地讲,一个语句w 控制依赖于语句u,如果u是一个影响、执行的条件。例如在一个if-then-else结构中,位于条件语句两侧的语句控制依赖于该谓词。
控制依赖图是建立在图论基础上,算法标准,过程复杂。在这里抛开其实现细节,仅结果的应用作讨论。
对于程序段:
void fun ( ) { 1: File f = fopen ( ” c: test. txt” , a + ) ; 2: a: if ( fRet) 3: { 4: b: return; 5: } 6: c: fclose ( f) ; 7: d: return; 8: } |
该程序段控制流图如图3所示。控制依赖图如图4所示。根据图4,可以建立如表3所示的控制依赖表。
显然,根据这张表可以分析出,行号2/4/6均不在同一个分支,行号6 /7在同一个分支。分析同一分支上是否存在配对的fopen/fclose,从而得出此处的fopen函数是否有危险。
此模型是上下文分析的一个简单举例,应用到了编译原理中较为成熟的数据流分析和控制流分析技术,但由于应用环境和目的的复杂程度不同,其得出信息的准确性还有待改进。
此模型可以用于简单的赋值判断,如 a = 1; a ++; 新值计算,如a = ( b* 6) + 10;简单的控制条件理解。而对于一些函数调用,系统调用,则还需要进一步的识别API返回的信息。
总结:关于C/C++语言的代码安全检测也研究了好一段时间,总结的资料比较多,比较杂,这篇内容也是资料中的一部分,根据自己的理解重新提出来,但是否能够真正实用起来,还需要大量的工作。同时,也跪求各位业内人士的指导。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11