[发明专利]用于符号执行的复杂类型输入变量懒符号化方法及系统在审
申请号: | 202210453325.X | 申请日: | 2022-04-27 |
公开(公告)号: | CN114896145A | 公开(公告)日: | 2022-08-12 |
发明(设计)人: | 陈睿;杨帆;江云松;刘亚威;贾春鹏;施兰兰;车小鹏 | 申请(专利权)人: | 北京轩宇信息技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 中国航天科技专利中心 11009 | 代理人: | 马全亮 |
地址: | 100190 北京市海淀区科学院*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 符号 执行 复杂 类型 输入 变量 符号化 方法 系统 | ||
1.一种用于符号执行的复杂类型输入变量懒符号化方法,其特征在于包括:
生成输入驱动文件,通过入口函数指定输入变量和驱动被测函数;
分配符号内存:通过解释执行驱动符号执行的方式从入口函数开始执行,先进行内存分配,记录如下3个映射关系:变量分配地址映射表var_addr_map、实际值映射表value_map和符号值映射表sym_map;
当执行到一条语句时,解释执行和符号执行分别对同一地址上的实际值和符号值进行操作;一个变量或表达式在实际值映射表value_map和符号值映射表sym_map中的地址完全一致;
在执行过程中对内存地址访问时,解释执行直接读写实际值映射表value_map中的内容;符号执行需先检查符号值映射表sym_map中该地址上是否存在符号值,若存在则直接读写;若不存在则创建一个新符号值,符号值映射表sym_map中新增一条地址与符号值的映射,然后进行正常读写操作;当执行到分支节点时由解释执行决定下一个待执行语句,符号执行把该分支节点判定语句的符号值添加到约束中;
一次符号执行结束后对收集的约束取反以及求解,得到符号值对应的值,进一步得到内存地址与值的对应关系,然后转换为输入表达式与值的映射关系,生成用例数据文件;
执行过程结束。
2.根据权利要求1所述的一种用于符号执行的复杂类型输入变量懒符号化方法,其特征在于:生成输入驱动文件时,直接把变量整体指定为输入,复杂类型变量不展开为子表达式。
3.根据权利要求1所述的一种用于符号执行的复杂类型输入变量懒符号化方法,其特征在于:变量分配地址映射表var_addr_map中包括代表变量或函数名的Var和表示地址的整型Addr;实际值映射表value_map中包括表示地址的整型Addr和实际值模型Value;符号值映射表sym_map中包括表示地址的整型Addr和符号值模型Sym。
4.根据权利要求3所述的一种用于符号执行的复杂类型输入变量懒符号化方法,其特征在于:变量分配地址映射表var_addr_map和实际值映射表value_map在内存分配时完成初始化,所有变量的地址和值记录在其中;符号值映射表sym_map初始化为空,在执行过程中动态添加符号值记录。
5.根据权利要求3所述的一种用于符号执行的复杂类型输入变量懒符号化方法,其特征在于:所述转换为输入表达式与值的映射关系,具体包括:
根据所述变量分配地址映射表var_addr_map确定该地址处于哪个变量的内存范围,如果是标量类型则直接确定地址对应的变量;如果是复杂类型则递归展开和二分查找,找到该地址对应的输入表达式;
把所有求解的结果转换为表达式与值的映射关系,生成用例数据文件。
6.根据权利要求5所述的一种用于符号执行的复杂类型输入变量懒符号化方法,其特征在于:所述标量类型是指:基本类型或不含成员的类型,基本类型包括int型,不含成员的类型包括枚举、指针;
所述复杂类型是指:包含成员的类型;所述包含成员的类型包括结构体、联合体、数组。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京轩宇信息技术有限公司,未经北京轩宇信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210453325.X/1.html,转载请声明来源钻瓜专利网。