本发明专利技术公开一种内层变量被外层指针引用错误静态检测方法,包括对源代码进行预处理;查找是否存在未被处理的函数;如果存在则在未被处理的函数中查找是否存在未被处理过的取址操作语句;如果存在则根据变量表判断取址操作语句中的地址所对应的第一变量是否是未被处理的函数的内层变量;如果是则在取址操作语句之后和未被处理的函数出口之间的语句中查找是否存在值与取址操作语句中的地址相同的第二变量;如果存在则判断第二变量是否为未被处理的函数的内层变量,如果是则继续查找,否则输出相应的错误信息。本发明专利技术可有效节省人力成本,提高效率,提升目标代码稳定性,检测准确性好。本发明专利技术还公开了一种内层变量被外层指针引用错误静态检测装置。
【技术实现步骤摘要】
本专利技术涉及计算机及电子信息
,特别涉及一种内层变量被外层指针引用错误静态检测方法及装置。
技术介绍
以函数体的域为界,内层变量是指作用域在该函数体内的变量,外层变量是指作用域处于该函数被调用的域里或者更上层域里的变量,例如在被递归调用的另一个函数体内,或者在全局域内的变量。“内层”和“外层”的概念是相对的,如下代码所示, 权利要求1.一种内层变量被外层指针引用错误静态检测方法,其特征在于,包括如下步骤 Si:对源代码进行预处理以将所述源代码中具有指针类型返回值的函数的返回值转换为预定形式,其中,预处理的结果包括生成抽象语法树,所述抽象语法树具有变量表; 52:在所述抽象语法树上查找是否存在未被处理的函数; 53:如果存在,则在所述未被处理的函数中查找是否存在未被处理过的取址操作语句; S4:如果存在,则根据所述变量表判断所述取址操作语句中的地址所对应的第一变量是否是所述未被处理的函数的内层变量; 55:如果是,则在所述取址操作语句之后和所述未被处理的函数出口之间的语句中查找是否存在值与所述取址操作语句中的地址相同的第二变量;以及 56:如果存在所述第二变量,则判断所述第二变量是否为所述未被处理的函数的内层变量,如果是则继续查找,否则判断所述第二变量的类型并输出相应的错误信息。2.如权利要求I所述的内层变量被外层指针引用错误静态检测方法,其特征在于,所述步骤SI进一步包括 对所述源代码进行词法分析,语法分析和语义分析;以及 生成所述源代码的转换代码。3.如权利要求I所述的内层变量被外层指针引用错误静态检测方法,其特征在于,所述预定形式为全局属性的字符串。4.如权利要求I所述的内层变量被外层指针引用错误静态检测方法,其特征在于,所述判断第二变量的类型并输出相应的错误信息,进一步包括 判断所述第二变量的类型,如果所述第二变量的类型为所述预定形式,则输出返回错误信息; 如果所述第二变量为所述未被处理的函数的参数,则输出所述未被处理的函数中有二维指针参数引用了所述未被处理的函数中的地址的错误信息; 否则输出外层指针直接引用了所述未被处理的函数中的地址的错误信息。5.一种内层变量被外层指针引用错误静态检测装置,其特征在于,包括 预处理模块,所述预处理模块用于对源代码进行预处理,其中,预处理的结果包括生成抽象语法树,所述抽象语法树具有变量表,所述预处理模块包括返回值类型设定模块,所述返回值类型设定模块用于将所述源代码中具有指针类型返回值的函数的返回值转换为预定形式; 未被处理函数查找模块,所述未被处理函数查找模块用于在所述抽象语法树上查找是否存在未被处理的函数; 第一地址查找模块,所述第一地址查找模块用于在所述抽象语法树上存在未被处理的函数时,在所述未被处理的函数中查找是否存在未被处理过的取址操作语句; 第一地址判断模块,所述第一地址判断模块用于在所述未被处理的函数中存在未被处理过的取址操作语句时,根据所述变量表判断所述取址操作语句中的地址所对应的第一变量是否是所述未被处理的函数的内层变量; 第二地址查找模块,所述第二地址查找模块用于在所述取址操作语句中的地址所对应的第一变量为所述未被处理的函数的内层变量时,在所述取址操作语句之后和所述未被处理的函数出口之间的语句中查找是否存在值与所述取址操作语句中的地址相同的第二变量; 第二变量判断模块,所述第二变量判断模块用于判断所述第二变量是否为所述未被处理的函数的内层变量,如果是则继续查找;以及 错误信息模块,所述错误信息模块用于在所述第二变量不是所述未被处理的函数的内层变量时,判断错误类型并输出相应的错误信息。6.如权利要求5所述的内层变量被外层指针引用错误静态检测装置,其特征在于,所述预处理模块还包括 分析模块,所述分析模块用于对所述源代码进行词法分析,语法分析和语义分析;以及 转换代码模块,所述转换代码模块用于生成所述源代码的转换代码。7.如权利要求5所述的内层变量被外层指针引用错误静态检测装置,其特征在于,所述预定形式为全局属性的字符串。8.如权利要求5所述的内层变量被外层指针引用错误静态检测装置,其特征在于,错误信息模块包括 错误类型判断模块,所述错误类型判断模块用于判断所述错误类型,如果所述第二变量的类型为所述预定形式,则所述错误类型为函数返回错误,如果所述第二变量为所述未被处理的函数的参数,则所述错误类型为二维指针参数引用所述未被处理的函数中的地址,否则所述错误类型为外层指针直接引用所述未被处理的函数中的地址; 错误信息输出模块,所述错误信息输出模块用于输出所述错误信息,其中所述错误信息包括所述错误类型。全文摘要本专利技术公开一种内层变量被外层指针引用错误静态检测方法,包括对源代码进行预处理;查找是否存在未被处理的函数;如果存在则在未被处理的函数中查找是否存在未被处理过的取址操作语句;如果存在则根据变量表判断取址操作语句中的地址所对应的第一变量是否是未被处理的函数的内层变量;如果是则在取址操作语句之后和未被处理的函数出口之间的语句中查找是否存在值与取址操作语句中的地址相同的第二变量;如果存在则判断第二变量是否为未被处理的函数的内层变量,如果是则继续查找,否则输出相应的错误信息。本专利技术可有效节省人力成本,提高效率,提升目标代码稳定性,检测准确性好。本专利技术还公开了一种内层变量被外层指针引用错误静态检测装置。文档编号G06F11/36GK102855183SQ20121011534公开日2013年1月2日 申请日期2012年4月18日 优先权日2012年4月18日专利技术者王瑀屏, 白杨 申请人:清华大学本文档来自技高网...
【技术保护点】
一种内层变量被外层指针引用错误静态检测方法,其特征在于,包括如下步骤:S1:对源代码进行预处理以将所述源代码中具有指针类型返回值的函数的返回值转换为预定形式,其中,预处理的结果包括生成抽象语法树,所述抽象语法树具有变量表;S2:在所述抽象语法树上查找是否存在未被处理的函数;S3:如果存在,则在所述未被处理的函数中查找是否存在未被处理过的取址操作语句;S4:如果存在,则根据所述变量表判断所述取址操作语句中的地址所对应的第一变量是否是所述未被处理的函数的内层变量;S5:如果是,则在所述取址操作语句之后和所述未被处理的函数出口之间的语句中查找是否存在值与所述取址操作语句中的地址相同的第二变量;以及S6:如果存在所述第二变量,则判断所述第二变量是否为所述未被处理的函数的内层变量,如果是则继续查找,否则判断所述第二变量的类型并输出相应的错误信息。
【技术特征摘要】
【专利技术属性】
技术研发人员:王瑀屏,白杨,
申请(专利权)人:清华大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。