发明名称 |
内层变量被外层指针引用错误静态检测方法及装置 |
摘要 |
本发明公开一种内层变量被外层指针引用错误静态检测方法,包括对源代码进行预处理;查找是否存在未被处理的函数;如果存在则在未被处理的函数中查找是否存在未被处理过的取址操作语句;如果存在则根据变量表判断取址操作语句中的地址所对应的第一变量是否是未被处理的函数的内层变量;如果是则在取址操作语句之后和未被处理的函数出口之间的语句中查找是否存在值与取址操作语句中的地址相同的第二变量;如果存在则判断第二变量是否为未被处理的函数的内层变量,如果是则继续查找,否则输出相应的错误信息。本发明可有效节省人力成本,提高效率,提升目标代码稳定性,检测准确性好。本发明还公开了一种内层变量被外层指针引用错误静态检测装置。 |
申请公布号 |
CN102855183B |
申请公布日期 |
2015.04.15 |
申请号 |
CN201210115343.3 |
申请日期 |
2012.04.18 |
申请人 |
清华大学 |
发明人 |
王瑀屏;白杨 |
分类号 |
G06F11/36(2006.01)I |
主分类号 |
G06F11/36(2006.01)I |
代理机构 |
北京清亦华知识产权代理事务所(普通合伙) 11201 |
代理人 |
张大威 |
主权项 |
一种内层变量被外层指针引用错误静态检测方法,其特征在于,包括如下步骤:S1:对源代码进行预处理以将所述源代码中具有指针类型返回值的函数的返回值转换为预定形式,并对所述源代码进行词法分析,语法分析和语义分析,以及生成所述源代码的转换代码,其中,预处理的结果包括生成抽象语法树,所述抽象语法树具有变量表;S2:在所述抽象语法树上查找是否存在未被处理的函数;S3:如果存在,则在所述未被处理的函数中查找是否存在未被处理过的取址操作语句;S4:如果存在,则根据所述变量表判断所述取址操作语句中的地址所对应的第一变量是否是所述未被处理的函数的内层变量;S5:如果是,则在所述取址操作语句之后和所述未被处理的函数出口之间的语句中查找是否存在值与所述取址操作语句中的地址相同的第二变量;以及S6:如果存在所述第二变量,则判断所述第二变量是否为所述未被处理的函数的内层变量,如果是则继续查找,否则判断所述第二变量的类型并输出相应的错误信息,具体包括:判断所述第二变量的类型,如果所述第二变量的类型为所述预定形式,则输出返回错误信息,如果所述第二变量为所述未被处理的函数的参数,则输出所述未被处理的函数中有二维指针参数引用了所述未被处理的函数中的地址的错误信息,否则输出外层指针直接引用了所述未被处理的函数中的地址的错误信息。 |
地址 |
100084 北京市海淀区100084-82信箱 |