静态扫描方法
第1页,此课件共30页哦
控制流与数据流
扫描规则
举例
静态扫描法
第2页,此课件共30页哦
控制流与数据流
有向图
DD图
基本路径树
数据流
第3页,此课件共30页哦
有向图
是否内存被释放后却继续被使用
1) 扫描所有控制路径中局部指针变量的定义使用链,检查指针变量在引用前是否已经释放。
2) 扫描所有控制路径中指针参数变量的定义使用链,如果没有出现变量在引用前已经释放,则查找所有包含函数调用的控制路径,扫描其中指针变量对应的定义使用链,检查变量在引用前是否已经释放。
3) 扫描所有控制路径中全局指针变量的定义使用链,如果没有出现变量在引用前已经释放,则查找所有包含全局指针变量的控制路径,扫描全局指针变量的定义使用链,检查该变量在引用前是否已经释放。
内存使用故障
第11页,此课件共30页哦
是否存在内存泄漏
1) 扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的函数引用,则继续检查调用该变量的函数中的所有控制路径是否释放内存。
2) 扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的返回引用,则继续检查包含返回变量的所有控制路径是否释放内存。
3) 扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的赋值引用,则继续检查包含被赋值变量的所有控制路径是否释放内存。
内存使用故障
第12页,此课件共30页哦
内存是否越界
1) 扫描局部指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。
2) 扫描参数指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。
3) 扫描全局指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。
内存使用故障
第13页,此课件共30页哦
变量是否初始化
1) 扫描所有控制路径中局部变量的定义使用链,检查变量在引用前是否定义。
2) 扫描所有控制路径中参数变量的定义使用链,如果变量在引用前没有定义,则查找所有包含函数调用的控制路径,扫描其中参数变量对应的定义使用链,检查变量在引用前是否定义。
3) 扫描所有控制路径中全局变量的定义使用链,如果变量在引用前没有定义,则查找所有包含全局变量的控制路径,扫描其中全局变量的定义使用链,检查全局变量在引用前是否定义。
变量使用故障
第14页,此课件共30页哦
变量的值是否可能导致异常
1) 扫描所有控制路径中局部变量的定义使用链,检查变量的值是否会导致系统出现异常。
2) 扫描参数变量对应的定义使用链,检查变量的值是否会导致系统出现异常。
3) 扫描所有控制路径中全局变量的定义使用链,检查全局变量的值是否会导致系统出现异常。
变量使用故障
第15页,此课件共30页哦
变量是否发生上溢或下溢
1) 扫描局部数组变量的定义使用链,检查所有的引用位置是否出现上溢或下溢。
2) 如果函数的参数变量是数组,扫描参数变量的定义使用链,检查所有的引用位置是否出现上溢或下溢。
3) 如果全局变量是数组,扫描全局变量在当前函数中的定义使用链,检查所有的引用位置是否出现上溢或下溢。
变量使用故障
第16页,此课件共30页哦
是否对不存在的或者错误的资源进行操作
1) 扫描所有控制路径中资源变量的定义使用链,检查在引用前是否判断变量的有效性。
2) 如果全局变量使用了外部资源,则扫描所有包含全局变量的控制路径,检查在引用前是否判断变量的有效性。
3) 如果参数变量使用了外部资源,并且在一条控制路径中在引用前没有判断其有效性,则扫描所有包含参数变量的控制路径,检查在引用前是否判断变量的有效性。
资源使用故障
第17页,此课件共30页哦
是否正确地释放资源
1) 扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的函数引用,则继续检查调用该变量的函数中的所有控制路径是否释放资源。
2) 扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的返回引用,则继续检查包含返回变量的所有控制路径是否释放资源。
3) 扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的赋值引用,则继续检查包含被赋值变量的所有控制路径是否释放资源。
资
静态扫描方法 来自淘豆网m.daumloan.com转载请标明出处.