C++代码静态分析工具-Prefast

转载 2006年05月16日 22:22:00

1. 什么是Prefast

Prefast是一种代码分析工具,它能够帮助你找到编译器不能找到的错误或者缺陷。Prefast首次被微软集成到Visual Studio 2005 Team Suite中去,使用起来非常方便。

2.怎么使用Prefast
在vs2005 Team Suite中,使用Prefast非常简单。修改你的工程属性,设置Enable Code Analysis For C/C++为Yes.

prefast1.jpg

效果:
prefast2.jpg

注意到有可能错误的地方以浅灰色显示在编辑器中了。

3.Prefast能帮你找到哪些错误

1)没有初始化

// no initial
void  defect1()
{
        
int  a;
        
int  b;

        b 
=  a;
}

会报: d:/test/testcode/testcode.cpp(18) : warning C6001: Using uninitialized memory 'a': Lines: 15, 16, 18

2)空指针取值

// one path dereference NULL
void  defect4( int  b,  int  c)
{
        
int   * =  NULL;
        
int  a  =   1 ;

        
if  (b  ==   1 ) {
                
if  (c  ==   1 ) {
                        p 
=   & a;
                }
                
else  {
                                                
                }
        }
        
else  {
                
if  (c  ==   1 ) {

                }
                
else  {
                        p 
=   & a;
                }
        }

        
* p;

        
return ;
}    

会报:d:/test/testcode/testcode.cpp(65) : warning C6011: Dereferencing NULL pointer 'p': Lines: 45, 46, 48, 57, 65

3)可能错误的运算符优先级

void  defect5()
{
        
int  a  =   1 ;
        
int  b  =   1 ;
        
int  c  =   1 ;

        
if  (a  &  b  ==  c)
                
return ;
}

会报: d:/test/testcode/testcode.cpp(76) : warning C6281: Incorrect order of operations: relational operators have higher precedence than bitwise operators

4)可能的buffer overrun

void  defect8()
{
        
char  buf[ 100 ];
        
char  buf2[ 200 ];
        
int  i  =   100 ;

        sprintf(buf, 
" hello world %d " , i);
        strcpy(buf, buf2);
}

会报: d:/test/testcode/testcode.cpp(133) : warning C6202: Buffer overrun for 'buf', which is possibly stack allocated, in call to 'strcpy': length '200' exceeds buffer size '100'

5)可能的无穷循环

// infinite loop
void  defect14()
{
        signed 
char  i;

        
for  (i  =   100 ; i  >=   0 ; i ++ ) {
                ; 
        }
}

会报: d:/test/testcode/testcode.cpp(198) : warning C6292: Ill-defined for-loop: counts up from maximum

6)格式字符串错误

// Format string mismatch
void  defect21()
{
        
char  buff[ 5 ];
        sprintf(buff, 
" %s %s " " a " );
}

会报: d:/test/testcode/testcode.cpp(277) : warning C6063: Missing string argument to 'sprintf' that corresponds to conversion specifier '2'

7)安全问题

void  defect27()
{
        CreateProcess(NULL,
               
" c://program files//Project.exe arg1 " // correct "/"c://program files//Project.exe/" arg1",
               NULL,
               NULL,
               
false ,
               
0 ,
               NULL,
               NULL,
               NULL,
               NULL);               
}

会报: d:/test/testcode/testcode.cpp(327) : warning C6277: NULL application name with an unquoted path in call to 'CreateProcessA': results in a security vulnerability if the path contains spaces

8)=和==误用

void  defect32()
{
        
int  a  =   1 ;

        
if  (a  =   2 )
                
return ;
}

会报: d:/test/testcode/testcode.cpp(405) : warning C6282: Incorrect operator: assignment of constant in Boolean context. Consider using '==' instead

9)逻辑运算问题

// always false
void  defect45()
{
        
int  x;

        
if  ( 0   &&  x ++ ) {
                ;
        }
}

会报: d:/test/testcode/testcode.cpp(564) : warning C6237: (<zero> && <expression>) is always zero. <expression> is never evaluated and might have side effects

10)其他

相关文章推荐

安全编码实践三:C/C++静态代码分析工具Prefast

概述 在前面的安全编码实践的文章里,我们讨论了GS编译选项和数据执行保护DEP功能。 结论是GS和DEP可以有效的缓解缓存溢出类型的安全漏洞的危害。关于这个结论,有两个大家需要值得注意的地方...

安全编码实践三:C/C++静态代码分析工具Prefast

《程序员》5月文章。申明。文章仅代表个人观点,与所在公司无任何联系。 概述   在前面的安全编码实践的文章里,我们讨论了GS编译选项和数据执行保护DEP功能。 结论是GS和DEP可以有效的缓解缓存溢出...

代码静态分析工具PC Lint

  • 2012-04-09 22:38
  • 16.39MB
  • 下载

代码静态分析工具——splint的学习与使用

引言 最近在项目中使用了静态程序分析工具PC-Lint,体会到它在项目实施中带给开发人员的方便。PC-Lint是一款针对C/C++语言、windows平台的静态分析工具,FlexeLint是针对其他...

pmd Java代码静态分析工具

  • 2013-10-10 13:36
  • 4.29MB
  • 下载

代码静态分析工具 --- CppCheck

1. 概述静态程序分析是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,有助于在项目早期发现以下问题:变量声明...

代码静态分析工具

  • 2017-07-19 15:32
  • 7.14MB
  • 下载

splint c代码静态分析工具

  • 2011-11-11 21:33
  • 2.18MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)