一种C/C++代码安全静态检测模型

发表于:2011-11-30 10:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:jicao    来源:TaoBao QA Team

分享:

  对于指针或者引用的定义语句,在一张别名表中记录该节点, 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++语言的代码安全检测也研究了好一段时间,总结的资料比较多,比较杂,这篇内容也是资料中的一部分,根据自己的理解重新提出来,但是否能够真正实用起来,还需要大量的工作。同时,也跪求各位业内人士的指导。

55/5<12345
价值129的会员专享直播免费赠送,添加微信领取听课名额哦~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号