一种源代码中值计算错误的自动检测和定位方法技术

技术编号:10943751 阅读:235 留言:0更新日期:2015-01-22 20:14
本发明专利技术公开了一种源代码中值计算错误的自动检测和定位方法,属于计算机软件测试领域,该方法利用编译器对源代码进行语法分析,构造抽象语法树,通过遍历抽象语法树,基于表达式类型和用户指定检测的值计算错误类型,判断是否存在值计算错误的潜在风险;对可能产生值计算错误的表达式进行源代码变换,加入值计算错误检测和源代码定位的机制;编译执行变换后的源代码,执行后的源代码程序会自动判断值计算错误的发生,并准确报告错误对应的源代码位置。本方法可以在软件运行过程中自动检测和定位软件中的值计算错误,以实现更准确的错误定位功能,更好的平台普适性,更高的运行时性能和效率,从而克服现有的检测方法中存在的技术问题。

【技术实现步骤摘要】

本专利技术涉及一种源代码中值计算错误的自动检测和定位方法,属于计算机软件测试领域。
技术介绍
值计算错误是一种普遍存在的软件安全漏洞,尤其是在C和C++程序中。值计算错误包括:(1)除数为0;(2)值溢出,包括值上溢、值下溢和精度丢失;(3)变量使用前未初始化等。这些错误可能导致软件异常或系统崩溃,与缓冲区漏洞等技术结合可以被黑客用来执行恶意代码。例如,1996年阿丽亚娜5号火箭的发射失败就是由于一个浮点数转换为整数的精度丢失错误;Flash 0day漏洞和IE 0day漏洞允许黑客获得最高权限;在MITRE2011年发布的报告中,值溢出漏洞被列为“25种最危险的软件错误”之一。对于安全关键系统或安全关键应用,如果值计算错误引起系统错误或被黑客利用,将会造成巨大损失。所以,实现值计算错误的高效自动检测和源代码定位,能够极大提高软件开发的质量和维护的效率。目前,值计算错误的检测方法主要分为两类:静态检测和动态检测。静态检测是指在不运行软件的前提下,分析软件的设计模型、源代码或者二进制代码,寻找可能导致软件失效的错误。其优点在于,通过对软件进行建模,保证了检测软件行为的完备性。其缺点在于:(1)形式化验证会带来状态空间爆炸问题,检测时对系统资源的要求较高,甚至无法在合理时间内完成验证;(2)由于使用模型抽象,检测结果存在误报和漏报的可能性。动态检测是指利用软件运行过程中的输出等信息判断错误的发生,例如软件测试技术和虚拟机技术。软件测试的优点在于,实现了测试用例管理和执行的自动化。其缺点在于:(1)没有实现对错误发生位置的自动源代码定位;(2)开发人员需要重新手动调试运行测试用例,效率较低。虚拟机技术通过对源代码的解释执行,在执行过程中对值计算错误进行监控。其缺点在于:(1)依赖于特定的虚拟机环境,不具有普遍适用性;(2)虚拟机的解释执行导致软件的性能和效率大幅度降低,不能被安全关键应用所接受。因此,有必要提供一种新的值计算错误的自动检测和源代码定位方法,以实现更准确的错误定位功能,更好的平台普适性,更高的运行时性能和效率,从而克服现有的检测方法中存在的技术问题。
技术实现思路
专利技术目的:为了克服上述已有技术存在的不足,本专利技术的目的旨在提供一种源代码中值计算错误的自动检测和定位方法,该方法通过使用源代码变换技术,将源代码变换为带有自动检测和错误定位功能的源代码,使得可以在软件运行过程中自动检测和定位软件中的值计算错误,以实现更准确的错误定位功能,更好的平台普适性,更高的运行时性能和效率,从而克服现有的检测方法中存在的技术问题。为实现上述目的,本专利技术采用的技术方案为:一种源代码中值计算错误的自动检测和定位方法,利用编译器对源代码进行语法分析,构造抽象语法树,通过遍历抽象语法树,基于表达式类型和用户指定检测的值计算错误类型,判断是否存在值计算错误的潜在风险;对可能产生值计算错误的表达式进行源代码变换,加入值计算错误检测和源代码定位的机制;编译执行变换后的源代码,执行后的源代码程序会自动判断值计算错误的发生,并准确报告错误对应的源代码位置。本专利技术的具体步骤如下:包括以下步骤:步骤S1,选择需要变换的源代码目录,或者单个源代码文件;步骤S2,指定需要检测的值计算错误类型:除数为0、值溢出、量使用前未初始化中的一种或他们之间两种以上的组合;步骤S3,将选择的源代码目录或文件复制到源代码变换的工作目录中;步骤S4,对工作目录中的所有源文件进行宏扩展处理,并保存扩展结果到相应的源文件中;步骤S5,遍历工作目录中的所有源文件,利用编译器生成符号表和抽象语法树;步骤S6,如果指定需要检测的值计算错误类型中包括除数为0错误,则进行除数为0错误分析和源代码变换计算;步骤S7,如果指定需要检测的值计算错误类型中包括值溢出错误,则进行值溢出错误分析和源代码变换计算;步骤S8,如果指定需要检测的值计算错误类型中包括变量使用前未初始化错误,则进行变量使用前未初始化错误分析和源代码变换计算;步骤S9,将步骤S6、S7或/和S8中所有替换修改写回到相应的源文件中,并根据本次修改文件更新已处理文件列表;步骤S10,将经过变换的源代码目录或源代码文件按原有方式进行编译,生成可执行文件;步骤S11,将可执行文件部署在目标平台上并运行,当出现值计算错误时,插入的代码可以自动检测到错误的发生,并准确定位和报告值计算错误在源代码中的位置。经过上述步骤的操作,即可自动检测软件运行过程中的的值计算错误并定位。本专利技术提供的一种源代码中值计算错误的自动检测和定位方法,相比现有技术,具有以下有益效果:1.与传统检测技术相比,本专利技术提供的值计算错误的自动检测和定位方法通过对源代码的抽象语法树进行分析,具有充分的语义信息来判断潜在的值计算错误所在的源文件和代码行,并相应地进行源代码变换,使得在错误检测中可以使用这些位置信息,因此具有更准确的错误定位功能。2.本专利技术通过源代码变换技术,使得变换后的源代码可以使用原有编译器进行编译和部署,因此具有更好的平台普适性。3.本专利技术通过对源代码的抽象语法树进行分析,具有充分的语义信息来判断潜在的值计算错误的类型,并相应地进行源代码变换,减少了插入代码段的规模,简化了插入代码段的复杂程度,从而获得了更高的运行时效率和性能。综上所述,本专利技术可以解决安全关键系统、安全关键应用及常用软件系统中值计算错误检测和定位的难题,能够准确地自动检测和定位错误,实现更好的平台普适性,和更高的运行时性能和效率,从而提高软件开发的质量和软件维护的效率,有良好的社会效益。附图说明图1为本专利技术的流程图。具体实施方式下面结合具体实施例对本专利技术技术方案进行详细描述,但不作为本专利技术的限定。本实施例采用本专利技术方法对一段C语言源代码进行检测和错误定位,进一步具体说明本发明的有关方法、流程及相关步骤。一种源代码中值计算错误的自动检测和定位方法,如图1所示,利用编译器对源代码进行语法分析,构造抽象语法树,通过遍历抽象语法树,基于表达式类型和用户指定检测的值计算错误类型,判断是否存在值计算错误的潜在风险;对可能产生值计算错误的表达式进行源代码变换,加入值计算错误检测和源代码定位的机制;编译执行变换后的源代码,执行后的源代码程序会自动判断值计算错误的发生,并准确报告错误对应的源代码位置。本实施例采用本专利技术方法对一段C语言源代码进行检测和错误定本文档来自技高网
...
一种源代码中值计算错误的自动检测和定位方法

【技术保护点】
一种源代码中值计算错误的自动检测和定位方法,其特征在于:利用编译器对源代码进行语法分析,构造抽象语法树,通过遍历抽象语法树,基于表达式类型和用户指定检测的值计算错误类型,判断是否存在值计算错误的潜在风险;对可能产生值计算错误的表达式进行源代码变换,加入值计算错误检测和源代码定位的机制;编译执行变换后的源代码,执行后的源代码程序会自动判断值计算错误的发生,并准确报告错误对应的源代码位置。

【技术特征摘要】
1.一种源代码中值计算错误的自动检测和定位方法,其特征在于:利用编译器对源代
码进行语法分析,构造抽象语法树,通过遍历抽象语法树,基于表达式类型和用户
指定检测的值计算错误类型,判断是否存在值计算错误的潜在风险;对可能产生值
计算错误的表达式进行源代码变换,加入值计算错误检测和源代码定位的机制;编
译执行变换后的源代码,执行后的源代码程序会自动判断值计算错误的发生,并准
确报告错误对应的源代码位置。
2.根据权利要求1所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
包括以下步骤:
步骤S1,选择需要变换的源代码目录,或者单个源代码文件;
步骤S2,指定需要检测的值计算错误类型:除数为0、值溢出、变量使用前未初始
化中的一种或他们之间两种以上的组合;
步骤S3,将选择的源代码目录或文件复制到源代码变换的工作目录中;
步骤S4,对工作目录中的所有源文件进行宏扩展处理,并保存扩展结果到相应的源
文件中;
步骤S5,遍历工作目录中的所有源文件,利用编译器生成符号表和抽象语法树;
步骤S6,如果指定需要检测的值计算错误类型中包括除数为0错误,则进行除数为
0错误分析和源代码变换计算;
步骤S7,如果指定需要检测的值计算错误类型中包括值溢出错误,则进行值溢出错
误分析和源代码变换计算;
步骤S8,如果指定需要检测的值计算错误类型中包括变量使用前未初始化错误,则
进行变量使用前未初始化错误分析和源代码变换计算;
步骤S9,将步骤S6、S7或/和S8中所有替换修改写回到相应的源文件中,并根据
本次修改文件更新已处理文件列表;
步骤S10,将经过变换的源代码目录或源代码文件按原有方式进行编译,生成可执
行文件;
步骤S11,将可执行文件部署在目标平台上并运行,当出现值计算错误时,插入的
代码可以自动检测到错误的发生,并准确定位和报告值计算错误在源代码中的位置。
3.根据权利要求2所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
所述步骤S4中的宏扩展处理包括:
S41,利用编译器的词法分析器对文件进行词法分析,词法分析器返回经过宏扩展
处理之后的词法单元;
S42,针对扩展自宏的词法单元,其属性中包括宏扩展之后的内容和宏扩展的位置,
用扩展之后的内容替换宏扩展位置的原有内容。
4.根据权利要求3所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
所述步骤S6中除数为0错误分析和源代码变换计算的方法如下:利用函数调用,
在返回除数给除法表达式之前,对除数进行检查,如果除数为0,则报告错误发生
的源代码位置并结束程序,如果除数不为0,则正常地将除数返回给除法表达式。
5.根据权利要求4所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
所述步骤S7中值溢出错误分析和源代码变换计算的方法如下:将可能产生值溢出
错误的表达式的操作数进行类型提升,然后将类型提升后的表达式值和原表达式值
进行比较,如果相同则说明未发生溢出,将原表达式值返回,如果不相同则说明发
生溢出,报告错误发生的源代码位置并结束程序。
6.根据权利要求5所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
所述步骤S8中变量使用前未初始化错误分析和源代码变换计算的方法如下:记录
每一个非全局且声明时未赋初值的变量的赋值状态,检查对于变量的引用,如果是
对变量的赋值,则更新该变量的赋值状态记录,如果是对变量值的使用,则检查该
变量的赋值状态记录,未赋值则表示出现变量使用前未初始化的错误,已赋值则表
示没有出现该错误。
7.根据权利要求6所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
所述步骤S6中除数为0错误分析和源代码变换计算的方法包括以下步骤:
步骤S61,遍历编译器生成的抽象语法树,如果当前节点s所在文件路径不在工作
目录下,或已经存在于已处理文件列表中,则忽略该节点,不进行处理;
步骤S6101,如果当前节点s为除法表达式a6101/b6101,则从符号表中获取表达
式b6101的类型typeB6101,然后将表达式“a6101/b6101”替换为如下函数调用:
a6101/(typeB6101)check_zero(b6101,fileNameS,lineS,columnS)
其中check_zero为除0检测函数名,fileNameS,lineS,columnS分别为节点s所在文
件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加入
到检测函数声明插入位置集合declLocSet,表示此文件需要除0检测相关函数的声明;
步骤S6102,如果当前节点s为复合除赋值表达式a6102/=b6102,则从符号表中获
取表达式b6102的类型typeB6102,然后将表达式“a6102/=b6102”替换为如下函数调
用:
a6102/=(typeB6102)check_zero(b6102,fileNameS,lineS,columnS)
其中check_zero为除0检测函数名,fileNameS,lineS,columnS分别为节点s所在文
件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加入
到检测函数声明插入位置集合declLocSet,表示此文件需要除0检测相关函数的声明;
步骤S62,对于包含主函数声明的文件,在文件开始位置插入检测函数long double 
check_zero(long double num,const char*fileName,unsigned line,unsigned column)
的定义,其中参数num代表除数,参数fileName,line,column分别代表运算发生位
置所在文件名,行号和列号;检测函数check_zero判断表示除数的参数num是否为0,
如果为0,则报告除0错误发生位置的文件名,行号和列号,并结束程序运行,否则将
除数作为函数的返回值返回;
步骤S63,根据检测函数声明插入位置集合declLocSet,在相应位置插入检测函数
long double check_zero(long double num,const char*fileName,unsigned line,
unsigned column)的声明;其中,参数num代表除数,参数fileName,line,column
分别代表运算发生位置所在文件名,行号和列号;然后,将检测函数声明插入位置集合
declLocSet重置为空。
8.根据权利要求7所述的源代码中值计算错误的自动检测和定位方法,其特征在于:
所述步骤S7中值溢出错误分析和源代码变换计算的方法包括以下步骤:
步骤S71,遍历编译器生成的抽象语法树,如果当前节点s所在文件路径不在工作
目录下,或已经存在于已处理文件列表中,则忽略该节点,不进行处理;
步骤S7101,如果当前节点s为后自增表达式a7101++,则从符号表中获取表达式
a7101的类型typeA7101;如果typeA7101为指针类型,则忽略节点s,不进行处理,否
则将表达式“a7101++”替换为如下逗号表达式:
(pOverflowTemp=&(a7101),
check_overflow(*(typeA7101*)pOverflowTemp+(typeA7101)1,
*(typeA7101*)pOverflowTemp+(long double)1,fileNameS,lineS,columnS),
((*(typeA7101*)pOverflowTemp))++)
其中pOverflowTemp为空类型指针,用来存储表达式a7101的地址,check_overflow
为值溢出检测函数名,fileNameS,lineS,columnS分别为节点s所在文件名,行号和
列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加入到检测函数声
明插入位置集合declLocSet,表示此文件需要值溢出检测相关函数的声明;
步骤S7102,如果当前节点s为后自减表达式a7102--,则从符号表中获取表达式
a7102的类型typeA7102;如果typeA7102为指针类型,则忽略节点s,不进行处理,否
则将表达式“a7102--”替换为如下逗号表达式:
(pOverflowTemp=&(a7102),
check_overflow(*(typeA7102*)pOverflowTemp-(typeA7102)1,
*(typeA7102*)pOverflowTemp-(long double)1,fileNameS,lineS,columnS),
((*(typeA7102*)pOverflowTemp))--)
其中pOverflowTemp为空类型指针,用来存储表达式a7102的地址,check_overflow
为值溢出检测函数名,fileNameS,lineS,columnS分别为节点s所在文件名,行号和
列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加入到检测函数声
明插入位置集合declLocSet,表示此文件需要值溢出检测相关函数的声明;
步骤S7103,如果当前节点s为前自增表达式++a7103,则从符号表中获取表达式
a7103的类型typeA7103;如果typeA7103为指针类型,则忽略节点s,不进行处理,否
则将表达式“++a7103”替换为如下逗号表达式:
(pOverflowTemp=&(a7103),
check_overflow(*(typeA7103*)pOverflowTemp+(typeA7103)1,
*(typeA7103*)pOverflowTemp+(long double)1,fileNameS,lineS,columnS),
(++(*(typeA7103*)pOverflowTemp)))
其中pOverflowTemp为空类型指针,用来存储表达式a7103的地址,check_overflow
为值溢出检测函数名,fileNameS,lineS,columnS分别为节点s所在文件名,行号和
列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加入到检测函数声
明插入位置集合declLocSet,表示此文件需要值溢出检测相关函数的声明;
步骤S7104,如果当前节点s为前自减表达式—a7104,则从符号表中获取表达式
a7104的类型typeA7104;如果typeA7104为指针类型,则忽略节点s,不进行处理,否
则将表达式“--a7104”替换为如下逗号表达式:
(pOverflowTemp=&(a7104),
check_overflow(*(typeA7104*)pOverflowTemp-(typeA7104)1,
*(typeA7104*)pOverflowTemp-(long double)1,fileNameS,lineS,columnS),
(--(*(typeA7104*)pOverflowTemp)))
其中pOverflowTemp为空类型指针,用来存储表达式a7104的地址,check_overflow
为值溢出检测函数名,fileNameS,lineS,columnS分别为节点s所在文件名,行号和
列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加入到检测函数声
明插入位置集合declLocSet,表示此文件需要值溢出检测相关函数的声明;
步骤S7105,如果当前节点s为取负表达式-a7105,则从符号表中获取表达式a7105
的类型typeA7105,将表达式“-a7105”替换为如下逗号表达式:
(overflowTemp1=(a7105),
check_overflow(-(typeA7105)overflowTemp1,
-overflowTemp1,fileNameS,lineS,columnS),
-(typeA7105)overflowTemp1)
其中overflowTemp1为long double类型变量,用来记录表达式a7105的值,
check_overflow为值溢出检测函数名,fileNameS,lineS,columnS分别为节点s所在
文件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的开始位置locS,加
入到检测函数声明插入位置集合declLocSet,表示此文件需要值溢出检测相关函数的声
明;
步骤S7106,如果当前节点s为乘法表达式a7106*b7106,则从符号表中获取表达
式a7106的类型typeA7106,b7106的类型typeB7106,将表达式“a7106*b7106”替换
为如下逗号表达式:
(overflowTemp1=(a7106),
overflowStackPush(overflowTemp1),
overflowTemp2=(b7106),
overflowTemp1=overflowStackPop(),
check_overflow((typeA7106)overflowTemp1*(typeB7106)overflowTemp2,
             overflowTemp1*overflowTemp2,fileNameS,lineS,columnS),
(typeA7106)overflowTemp1*(typeB7106)overflowTemp2)
其中overflowTemp1和overflowTemp2为long double类型变量,分别用来记录表
达式a7106和表达式b7106的值,overflowStackPush和overflowStackPop分别为栈结
构的压栈和出栈操作,check_overflow为值溢出检测函数名,fileNameS,lineS,columnS
分别为节点s所在文件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的
开始位置locS,加入到检测函数声明插入位置集合declLocSet,表示此文件需要值溢
出检测相关函数的声明;
步骤S7107,如果当前节点s为除法表达式a7107/b7107,则从符号表中获取表达
式a7107的类型typeA7107,b7107的类型typeB7107,将表达式“a7107/b7107”替换
为如下逗号表达式:
(overflowTemp1=(a7107),
overflowStackPush(overflowTemp1),
overflowTemp2=(b7107),
overflowTemp1=overflowStackPop(),
check_overflow((typeA7107)overflowTemp1/(typeB7107)overflowTemp2,
             overflowTemp1/overflowTemp2,fileNameS,lineS,columnS),
(typeA7107)overflowTemp1/(typeB7107)overflowTemp2)
其中overflowTemp1和overflowTemp2为long double类型变量,分别用来记录表
达式a7107和表达式b7107的值,overflowStackPush和overflowStackPop分别为栈结
构的压栈和出栈操作,check_overflow为值溢出检测函数名,fileNameS,lineS,columnS
分别为节点s所在文件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的
开始位置locS,加入到检测函数声明插入位置集合declLocSet,表示此文件需要值溢
出检测相关函数的声明;
步骤S7108,如果当前节点s为加法表达式a7108+b7108,则从符号表中获取表达
式a7108的类型typeA7108,b7108的类型typeB7108;如果typeA7108或typeB7108
为指针类型,则忽略节点s,不进行处理,否则将表达式“a7108+b7108”替换为如下逗
号表达式:
(overflowTemp1=(a7108),
overflowStackPush(overflowTemp1),
overflowTemp2=(b7108),
overflowTemp1=overflowStackPop(),
check_overflow((typeA7108)overflowTemp1+(typeB7108)overflowTemp2,
             overflowTemp1+overflowTemp2,fileNameS,lineS,columnS),
(typeA7108)overflowTemp1+(typeB7108)overflowTemp2)
其中overflowTemp1和overflowTemp2为long double类型变量,分别用来记录表
达式a7108和表达式b7108的值,overflowStackPush和overflowStackPop分别为栈结
构的压栈和出栈操作,check_overflow为值溢出检测函数名,fileNameS,lineS,columnS
分别为节点s所在文件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的
开始位置locS,加入到检测函数声明插入位置集合declLocSet,表示此文件需要值溢
出检测相关函数的声明;
步骤S7109,如果当前节点s为减法表达式a7109-b7109,则从符号表中获取表达
式a7109的类型typeA7109,b7109的类型typeB7109;如果typeA7109或typeB7109
为指针类型,则忽略节点s,不进行处理,否则将表达式“a7109-b7109”替换为如下逗
号表达式:
(overflowTemp1=(a7109),
overflowStackPush(overflowTemp1),
overflowTemp2=(b7109),
overflowTemp1=overflowStackPop(),
check_overflow((typeA7109)overflowTemp1-(typeB7109)overflowTemp2,
             overflowTemp1-overflowTemp2,fileNameS,lineS,columnS),
(typeA7109)overflowTemp1-(typeB7109)overflowTemp2)
其中overflowTemp1和overflowTemp2为long double类型变量,分别用来记录表
达式a7109和表达式b7109的值,overflowStackPush和overflowStackPop分别为栈结
构的压栈和出栈操作,check_overflow为值溢出检测函数名,fileNameS,lineS,columnS
分别为节点s所在文件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的
开始位置locS,加入到检测函数声明插入位置集合declLocSet,表示此文件需要值溢
出检测相关函数的声明;
步骤S7110,如果当前节点s为位左移表达式a7110<<b7110,则从符号表中获取表
达式a7110的类型typeA7110,b7110的类型typeB7110,将表达式“a7110<<b7110”替

\t换为如下逗号表达式:
(overflowTemp1=(a7110),
overflowStackPush(overflowTemp1),
overflowTemp2=(b7110),
overflowTemp1=overflowStackPop(),
check_overflow((typeA7110)overflowTemp1<<(typeB7110)overflowTemp2,
       (long long int)overflowTemp1<<(long long int)overflowTemp2,
       fileNameS,lineS,columnS),
(typeA7110)overflowTemp1<<(typeB7110)overflowTemp2)
其中overflowTemp1和overflowTemp2为long double类型变量,分别用来记录表
达式a7110和表达式b7110的值,overflowStackPush和overflowStackPop分别为栈结
构的压栈和出栈操作,check_overflow为值溢出检测函数名,fileNameS,lineS,columnS
分别为节点s所在文件名,行号和列号;然后,从抽象语法树中获得节点s所在文件的
开始位置locS,加入到检测函数声明插入位置集合declLocSet,表示此文件需要值溢
出检测相关函数的声明;
步骤S7111,如果当前节点s为位右移表达式a7111>>b7111,则从符号表中获取表
达式a7111的类型typeA7111,b7111的类型typeB7111,将表达式“a7111>>b7111”替
换为如下逗号表达式:
(overflowTemp1=(a7111),
overflowStackPush(overflowTemp1),
overflowTemp2=(b7111),
overflowTemp1=overflowStackPop(),
check_overflow((typeA7111)overflowTem...

【专利技术属性】
技术研发人员:陈哲朱云龙魏欧黄志球
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1