The invention discloses a method and a device for converting program code into data constraint. The program code into an intermediate instruction set, and then the intermediate instruction set to refine the split, split the original refined definition of variables involved in the complex instruction type variable refinement is divided into several simple type variables, then the simple type variables further refined into a simple pointer type address pointer variable and simple type to the variable, then the corresponding variable definition instruction refinement split into simple type for pointer address pointer variables and simple type to the variable memory allocation and initialization command data storage instructions, and then extract the intermediate detailed instructions after the split of centralized access instructions, arithmetic instructions and comparison instruction as the data constraint.
【技术实现步骤摘要】
本专利技术涉及程序代码的分析验证技术,特别涉及将程序代码转换成数据约束后,通过数据约束分析程序代码是否存在错误的问题。
技术介绍
在应用软件飞速发展的今天,软件的安全性和可靠性已经成为了一个至关重要的问题,代码的分析验证测试是在相关领域的常用手段。代码分析、测试、验证等均经常需要为程序抽取出对应约束,并在约束集合上判断软件代码的安全性。在这个过程中,约束抽取扮演了非常重要的角色。现有方法之一是通过编译器先将代码转化成中间代码,然以此为基础对原代码进行约束的抽取。例如,LLVM的项目是一个模块化和可重复使用的编译器和工具技术的集合,它可以对多类代码,如C,C++,Java等进行编译分析,将其转化为统一的中间指令。但是在利用类似的中间指令来进行约束抽取的过程中,大量由代码中的指针操作转化而来的中间指令给约束的抽取带来了极大的困难。
技术实现思路
本专利技术所要解决的问题:现有技术下,中间指令的复杂程度高,导致数据约束抽取困难。为解决上述问题,本专利技术采用的方案如下:根据本专利技术的一种将程序代码转换成数据约束的方法,该方法包括以下步骤:S1:将用户输入的源代码转换成中间指令集;S2:对中间指令集中的中间指令进行细化拆分,拆分后得到细化的中间指令集;S3:从细化的中间指令集中提取简单类型的指针指向变量和数值的对应关系作为第一约束;S4:从细化的中间指令集中提取算术和比较指令作为第二约束;S5:合并第一约束和第二约束组成最终的数据约束;所述步骤S2包括以下两个步骤:S21:将原变量定义指令中涉及的复杂类型的变量细化拆分成多个简单类型的变量,然后将简单类型的变量再进 ...
【技术保护点】
一种将程序代码转换成数据约束的方法,其特征在于,该方法包括以下步骤:S1:将用户输入的源代码转换成中间指令集;S2:对中间指令集中的中间指令进行细化拆分,拆分后得到细化的中间指令集;S3:从细化的中间指令集中提取简单类型的指针指向变量和数值的对应关系作为第一约束;S4:从细化的中间指令集中提取算术和比较指令作为第二约束;S5:合并第一约束和第二约束组成最终的数据约束;所述步骤S2包括以下两个步骤:S21:将原变量定义指令中涉及的复杂类型的变量细化拆分成多个简单类型的变量,然后将简单类型的变量再进一步细化成简单类型的地址指针变量和简单类型的指针指向变量,最后再将相应的变量定义指令细化拆分成针对简单类型的地址指针变量和简单类型的指针指向变量的内存分配指令和初始化数据存储指令;S22:创建地址指针寄存器,然后将原地址移位存取指令细化拆分成将地址移位赋值给该地址指针寄存器的指令和针对该地址指针寄存器的数据存取指令。
【技术特征摘要】
1.一种将程序代码转换成数据约束的方法,其特征在于,该方法包括以下步骤:S1:将用户输入的源代码转换成中间指令集;S2:对中间指令集中的中间指令进行细化拆分,拆分后得到细化的中间指令集;S3:从细化的中间指令集中提取简单类型的指针指向变量和数值的对应关系作为第一约束;S4:从细化的中间指令集中提取算术和比较指令作为第二约束;S5:合并第一约束和第二约束组成最终的数据约束;所述步骤S2包括以下两个步骤:S21:将原变量定义指令中涉及的复杂类型的变量细化拆分成多个简单类型的变量,然后将简单类型的变量再进一步细化成简单类型的地址指针变量和简单类型的指针指向变量,最后再将相应的变量定义指令细化拆分成针对简单类型的地址指针变量和简单类型的指针指向变量的内存分配指令和初始化数据存储指令;S22:创建地址指针寄存器,然后将原地址移位存取指令细化拆分成将地址移位赋值给该地址指针寄存器的指令和针对该地址指针寄存器的数据存取指令。2.如权利要求1所述的将程序代码转换成数据约束的方法,其特征在于,该方法还包括从中间指令集中找出一条路径;然后选取该路径上的指令构成路径指令集,然后将该路径指令集作为中间指令集执行所述的步骤S2,S3,S4,S5。3...
【专利技术属性】
技术研发人员:卜磊,李一超,陶昱天,闾乐成,梁东隽,沈大川,赵建华,李宣东,
申请(专利权)人:南京大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。