CN106354630A - 一种基于动态符号执行的软件缺陷检测方法 - Google Patents
一种基于动态符号执行的软件缺陷检测方法 Download PDFInfo
- Publication number
- CN106354630A CN106354630A CN201610709221.5A CN201610709221A CN106354630A CN 106354630 A CN106354630 A CN 106354630A CN 201610709221 A CN201610709221 A CN 201610709221A CN 106354630 A CN106354630 A CN 106354630A
- Authority
- CN
- China
- Prior art keywords
- instruction
- function
- pile
- insert
- pile function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于动态符号执行的软件缺陷检测方法。其包括下列步骤:对待检测的软件的源程序中的变量添加符号化标识,然后对源程序进行编译处理得到底层虚拟机LLVM中间码;根据指令类型,对LLVM中间码进行分类插桩处理,插入符号执行和缺陷检测指令;将插桩处理后的LLVM中间码编译生成可执行文件;基于生成的可执行文件,进行动态符号执行与缺陷检测:基于动态符号执行对源程序的各个分支进行软件缺陷检测。本发明的实施,能全面地检测程序中各个分支中潜在的缺陷,且缺陷检测效率高。
Description
技术领域
本发明属于计算机领域,具体涉及一种基于动态符号执行的软件缺陷检测方法。
背景技术
源程序经过编译器clang编译可以生成LLVM(底层虚拟机)中间码,根据不同的LLVM中间码指令类型进行分类插桩,插桩操作需要使用LLVM官方源码的API接口。其中,插桩即利用LLVM官方源码的API接口在源程序编译得到的LLVM中间码中插入预设指令,通常包括符号执行和缺陷提取指令等。
符号执行技术包括传统符号执行、选择性符号执行和动态符号执行。传统的符号执行技术通过使用符号变量代替真实变量模拟程序的执行,目标程序并不真实运行,因此符号执行得到的程序中的约束条件信息不够精确;选择性符号执行可以只对程序员感兴趣的代码进行符号执行,其它地方都使用真实值执行,因此选择性符号执行具有更高的灵活性;动态符号执行技术与前两者都有所不同,动态符号执行是在程序真实执行的过程中同时进行符号执行,符号执行是在插桩后的桩函数内执行完成,即在真实执行的过程中通过桩函数收集约束相关信息生成路径约束条件,然后通过约束求解器(如SMT(Satisfiability Modulo Theories)求解器)对其中一条约束条件取非构造出一条新的程序执行路径并求解得到满足这条新路径的输入案例,其中,使用约束求解器求解,即求解得到满足对应约束条件的程序输入变量值。由于动态符号执行是在程序真实执行过程中收集约束条件,因此,收集到的约束条件更加精确,生成的测试案例有效性更高。
软件质量问题在软件使用非常普遍的今天已经越来越受到人们的重视,软件缺陷检测也日益被越来越多的研究者和软件厂商关注,由于软件质量问题造成重大损失的事件也是不胜枚举。常见的软件开发工具如visual studio、eclipse等可以检查出一些软件程序中存在的语法错误和一些简单的逻辑错误,无法深入准确地分析程序执行过程中所有可能存在的错误,就算是专业的程序缺陷检测工具如valgrind也只能检测程序一次运行过程中所在路径上的错误,无法更加全面地检测程序中各个分支中潜在的缺陷。常规的软件测试也很难发现程序中隐藏较深的缓冲区溢出和内存泄露等错误,由于生成的测试案例对程序分支覆盖度的限制也无法非常全面高效地检测程序中的缺陷。
发明内容
本发明基于动态符号执行,在动态符号执行生成的测试案例对应的每条分支路径上进行缺陷检测。因此,本发明的基于动态符号执行的软件缺陷检测方法包括以下步骤:
步骤1:对待检测的软件的源程序中的变量添加符号化标识,然后对源程序进行编译处理得到底层虚拟机LLVM中间码;
步骤2:根据指令类型,对LLVM中间码进行分类插桩处理,插入符号执行和缺陷检测指令;
步骤3:将插桩处理后的LLVM中间码编译生成可执行文件;
步骤4:基于生成的可执行文件,进行动态符号执行与缺陷检测:
401:基于测试案例运行可执行文件(每次运行可执行文件中的对应程序的一条分支路径)生成执行结果,即生成对应的条件表达式,包括符号执行约束条件表达式集合、缺陷检测条件表达式集合。其中,测试案例的初始值为随机输入。
在基于测试案例运行可执行文件时,可能只生成符号执行约束条件表达式集合,也可能同时生成符号执行约束条件表达式集合和缺陷检测条件表达式集合;若当前执行结果存在缺陷检测条件表达式集合,则将当前生成的符号执行约束条件表达式集合和缺陷检测条件表达式集合作为一个队列元素存入预设队列L中(队列L用于软件缺陷判定),实现队列L的更新;
在生成执行结果后,并行执行步骤402、403,即基于生成的符号执行约束条件表达式集合执行步骤402;在执行步骤403时,若队列L有更新,则基于更新后的队列L执行步骤403;若无更新,则直接基于原有的队列L执行步骤403;
402:判断所有生成的符号执行约束条件表达式是否均已取非,若是,则测试案例生成结束,并设置软件检测结束标识;否则,将其中一个符号执行约束条件表达式取非并通过第一约束求解器进行测试案例求解,若有解,则将当前求解结果作为测试案例并执行步骤401;若无解,则继续执行步骤402;
403:判断队列L是否为空,若为空,则检测是否存在软件检测结束标识,若是,则结束软件缺陷检测;若否,则继续执行步骤403;
若队列L不为空,则从队列L中取出一个队列元素A并执行步骤404,其中队列元素A包括符号执行约束条件表达式集合S和缺陷条件表达式集和R;
步骤404:从集合R中取出一个未被求解的缺陷条件表达式r,将r与集合S合并得到新的条件表达式集合(r∩S)并通过第二约束求解器进行缺陷判定求解,若有解,则显示对应r的缺陷类型;若无解,则判断集合R是否为空,若是,则执行步骤403;否则,执行步骤404。
本发明基于动态符号执行,在动态符号执行生成的测试案例对应的每条分支路径上进行缺陷检测,能全面地检测程序中各个分支中潜在的缺陷。同时,由于程序执行一条路径上很多个地方都可能存在缺陷,所以一次符号执行求解可能会得到很多个缺陷检测条件表达式,因此在符号执行的基础上缺陷约束条件表达式的求解又会花费很多时间。为了解决这个问题,本发明采用多线程技术将符号执行约束条件表达式求解和缺陷检测条件表达式求解分离,分别在两个不同的线程(本发明的第一约束求解器和第二约束求解器)上并行执行,从而大大提高求解效率,提高软件缺陷检测效率。
进一步的,本发明中对LLVM中间码进行分类插桩处理具体为:
若当前指令是主函数入口的第一条指令,则在当前指令之前插入第一桩函数,第一桩函数用于读入符号化变量的值;
若当前指令为主函数的最后一条指令,则在当前指令之前插入第二桩函数,第二桩函数用于检测内存泄漏;
若当前指令为非主函数(普通函数)的第一条指令,则在当前指令之前插入第三桩函数,第三桩函数用于标记所述普通函数;
若当前指令为分配指令,则判断分配指令是否用于申请数组空间,若是,则插入第四桩函数,第四桩函数用于传递数组信息;
若当前指令为加载指令,则插入第五桩函数,第五桩函数用于获取加载指令参数的地址;
若当前指令为存储指令,则插入第六桩函数,第六桩函数用于提取存储指令的参数、并存储符号执行产生的新的符号变量;
若当前指令为二元运算指令,则插入第七桩函数,第七桩函数用于加载二元运算指令的参数,用符号值模拟二元指令运算;
若当前指令为比较指令,则插入第八桩函数,第八桩函数用于加载比较指令的参数,模拟比较指令的比较运算;
若当前指令为分支指令,则插入第九桩函数,第九桩函数用于标记当前程序分支;
若当前指令为返回指令,则插入第十桩函数,第十桩函数用于加载返回指令的参数、并处理返回指令的返回结果;
若当前指令为函数调用指令,则判断调用函数是否为分配内存或释放内存,若是,则插入第十一桩函数,第十一桩函数用于检测内存多次释放;否则插入第十二桩函数,第十二桩函数用于加载调用函数的参数并对函数返回结果做处理;
若当前指令为转换指令,则插入第十三桩函数,第十三桩函数用于描述转换关系;
若当前指令为取元素指令,则插入第十四桩函数,第十四桩函数用于检测所取元素是否存在数组或指针越界。即根据取元素指令的参数获取访问空间的范围和当前访问的位置然后比较当前访问的空间是否在合法的区域,如果是则没有发生越界,否则发生越界。
综上所述,由于采用了上述方案,本发明的有益效果是:能全面地检测程序中各个分支中潜在的缺陷,且缺陷检测效率高。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合实施方式,对本发明作进一步地详细描述。
实施例
以待检测软件为C/C++语言编写的源程序为例,采用本发明的基于动态符号执行的软件缺陷检测方法完成待检测软件的缺陷检测,其具体包括下列步骤:
步骤1:在C/C++语言源程序中添加符号化标识,被标识的变量在程序执行过程中会作为符号变量,由它们赋值得到的变量也会成为符号化变量。可以支持标识的变量类型包括:short int;int;unsigned int;char;unsigned char;float;float;double等。
然后基于编译工具clang对符号化标识处理后的源程序进行编译处理,生成LLVM中间码。
步骤2:对生成的LLVM中间码,根据指令类型进行分类插桩处理:
若当前指令是main函数(主函数)入口的第一条指令,则在当前指令之前插入用于读入符号化变量的值的桩函数;若当前指令为主函数的最后一条指令,则在当前指令之前插入用于检测内存泄漏的桩函数;然后逐条判断LLVM中间码的各指令类型并插入对应桩函数:
若当前指令为AllocaInst指令(分配指令),则继续判断当前指令是否为申请数组空间,若是,则获取所申请数组空间大小,并插入传递数组信息的桩函数;若否,则跳过当前指令,继续处理下一条指令;
若当前指令为StoreInst指令(存储指令),则插入桩函数,该桩函数用于提取存储指令的参数,并存储符号执行产生的新的符号变量加载存储指令的参数;
若当前指令为LoadInst指令(加载指令),则插入用于获取LoadInst指令参数的地址的桩函数;
若当前指令为CmpInst指令(比较指令),则插入桩函数,该桩函数用于加载CmpInst指令的参数,模拟CmpInst指令的比较运算;
若当前指令为BranchInst指令(分支指令),则插入用于标记当前程序分支的桩函数;
若当前指令为CastInst指令(转换指令),则插入用于存储CastInst指令相关的参数关系的桩函;
若当前指令为GetElementPtrInst指令(取元素指令),根据GetElementPtrInst指令的参数插入用于检测是否存在数组或者指针的越界的桩函数;
若当前指令为BinaryOperator(二元运算指令)指令,则插入桩函数,该桩函数用于加载二元运算指令的参数,用符号值模拟二元指令运算的桩函数;
若当前指令为ReturnInst指令(返回指令),则插入桩函数,该桩函数用于加载ReturnInst指令的参数,处理ReturnInst指令的返回结果。
若当前指令为CallInst指令(函数调用指令),则判断所调用的是否为分配内存或释放内存的函数,即是否为malloc或free函数,若是,则插入用于检测所调用函数是否存在内存多次释放的桩函数;否则插入用于加载所调用函数的参数并对函数返回结果做处理的桩函数。
即在本实施例中,若当前指令为上述AllocaInst指令、StoreInst指令、CmpInst指令、BranchInst指令、LoadInst指令、CastInst指令、GetElementPtrInst指令、CallInst指令、BinaryOperator指令、ReturnInst指令中的任一一类时,则插入对应的桩函数;若当前指令为其他类型时,则直接跳过,即不处理。
步骤3:将插桩处理后的LLVM中间码编译生成可执行文件test。
步骤4:基于生成的可执行文件test,进行动态符号执行与缺陷检测。
步骤4-1:基于测试案例通过系统调用命令调用可执行文件test运行,生成执行结果,test首次运行使用随机输入,假设产生的随机值大于8,则生成符号执行约束条件表达式i≥8,并将其传递给第一约束求解器,跳转到步骤4-2;
步骤4-2:同时执行4-2-1和4-2-2;
步骤4-2-1:第一约束求解器得到符号执行约束条件表达式后求解,由于约束条件i≥8未被标记为已经取非过,取非后得到i<8,并通过第一约束求解器进行测试案例求解,假设求解出的结果是7,然后基于当前求解结果执行可执行文件test,即跳转步骤步骤4-1.1;
步骤4-2-2:当前不存在软件检测结束标识,即符号执行未结束,对于i≥8,由于没有生成任何缺陷检测相关的约束条件,所以此次符号执行对应路径上没有缺陷检测可检测的地方。跳转到步骤4-2-3;
步骤4-2-3:预设队列L为空,跳转到步骤4-2-2执行,等待L不为空或者系统运行结束(L为空且符号执行结束);
步骤4-1.1:输入测试案例值7,让可执行文件test读取此测试案例值并执行,然后会生成新的符号执行约束条件表达式i<8和缺陷检测条件表达式i≥5;因当前执行结果存在缺陷检测条件表达式,则将i<8和i≥5作为一个队列元素存入队列L中。跳转到步骤4-2.1;
步骤4-2.1:同时执行4-2-1.1和4-2-2.1;
步骤4-2-1.1:由于符号执行没有发现新的约束条件,所以符号执行结束,设置软件检测结束标识;
步骤4-2-2.1:符号执行已经结束但队列不为空,跳转到步骤4-2-3.1;
步骤4-2-3.1:L不为空,从队列中取出队列元素:i≥5和i<8,跳转到步骤4-2-4;
步骤4-2-4:由于缺陷检测条件表达式i≥5未被求解,因此将i≥5和i<8合并得到5≤i<8,然后对5≤i<8通过第二约束求解器进行缺陷判定求解,当前有解,则转至步骤4-2-5;
步骤4-2-5:显示对应i≥5的缺陷类型,如程序第9行存在越界。跳转到步骤4-2-4.1;
步骤4-2-4.1:所有的缺陷条件表达式已经求解完,跳转到步骤4-2-3.2;
步骤4-2-3.2:队列L为空,跳转到步骤4-2-2.2;
步骤4-2-2.2:队列L为空且符号执行已经结束,所以缺陷求检查结束,软件缺陷检测完毕。
以上所述,仅为本发明的具体实施方式,本说明书中所公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换;所公开的所有特征、或所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以任何方式组合。
Claims (2)
1.一种基于动态符号执行的软件缺陷检测方法,其特征在于,包括下列步骤:
步骤1:对待检测的软件的源程序中的变量添加符号化标识,然后对源程序进行编译处理得到底层虚拟机LLVM中间码;
步骤2:根据指令类型,对LLVM中间码进行分类插桩处理,插入符号执行和缺陷检测指令;
步骤3:将插桩处理后的LLVM中间码编译生成可执行文件;
步骤4:基于生成的可执行文件,进行动态符号执行与缺陷检测:
401:基于测试案例运行可执行文件,生成符号执行约束条件表达式集合,或符号执行约束条件表达式集合和缺陷检测条件表达式集合,其中测试案例的初始值为随机输入;
若存在缺陷检测条件表达式集合,则将当前生成的符号执行约束条件表达式集合和缺陷检测条件表达式集合作为一个队列元素存入预设队列L中;
402:判断所有生成的符号执行约束条件表达式是否均已取非,若是,则测试案例生成结束,并设置软件检测结束标识;否则,将其中一个符号执行约束条件表达式取非并通过第一约束求解器进行测试案例求解,若有解,则将当前求解结果作为测试案例并执行步骤401;若无解,则继续执行步骤402;
403:判断队列L是否为空,若为空,则检测是否存在软件检测结束标识,若是,则结束软件缺陷检测;若否,则继续执行步骤403;
若队列L不为空,则从队列L中取出一个队列元素A并执行步骤404,其中队列元素A包括符号执行约束条件表达式集合S和缺陷条件表达式集和R;
步骤404:从集合R中取出一个未被求解的缺陷条件表达式r,将r与集合S合并得到新的条件表达式集合并通过第二约束求解器进行缺陷判定求解,若有解,则显示对应r的缺陷类型;若无解,则判断集合R是否为空,若是,则执行步骤403;否则,执行步骤404。
2.如权利要求1所述的方法,其特征在于,步骤2中,对LLVM中间码进行分类插桩处理具体为:
若当前指令是主函数入口的第一条指令,则在当前指令之前插入第一桩函数,第一桩函数用于读入符号化变量的值;
若当前指令为主函数的最后一条指令,则在当前指令之前插入第二桩函数,第二桩函数用于检测内存泄漏;
若当前指令为非主函数的第一条指令,则在当前指令之前插入第三桩函数,第三桩函数用于标记所述普通函数;
若当前指令为分配指令,则判断分配指令是否用于申请数组空间,若是,则插入第四桩函数,第四桩函数用于传递数组信息;
若当前指令为加载指令,则插入第五桩函数,第五桩函数用于获取加载指令参数的地址;
若当前指令为存储指令,则插入第六桩函数,第六桩函数用于提取存储指令的参数、并存储符号执行产生的新的符号变量;
若当前指令为二元运算指令,则插入第七桩函数,第七桩函数用于加载二元运算指令的参数,用符号值模拟二元指令运算;
若当前指令为比较指令,则插入第八桩函数,第八桩函数用于加载比较指令的参数,模拟比较指令的比较运算;
若当前指令为分支指令,则插入第九桩函数,第九桩函数用于标记当前程序分支;
若当前指令为返回指令,则插入第十桩函数,第十桩函数用于加载返回指令的参数、并处理返回指令的返回结果;
若当前指令为函数调用指令,则判断调用函数是否为分配内存或释放内存,若是,则插入第十一桩函数,第十一桩函数用于检测内存多次释放;否则插入第十二桩函数,第十二桩函数用于加载调用函数的参数并对函数返回结果做处理;
若当前指令为转换指令,则插入第十三桩函数,第十三桩函数用于描述转换关系;
若当前指令为取元素指令,则插入第十四桩函数,第十四桩函数用于检测所取元素是否存在数组或指针越界。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610709221.5A CN106354630B (zh) | 2016-08-23 | 2016-08-23 | 一种基于动态符号执行的软件缺陷检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610709221.5A CN106354630B (zh) | 2016-08-23 | 2016-08-23 | 一种基于动态符号执行的软件缺陷检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106354630A true CN106354630A (zh) | 2017-01-25 |
CN106354630B CN106354630B (zh) | 2018-11-13 |
Family
ID=57844640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610709221.5A Active CN106354630B (zh) | 2016-08-23 | 2016-08-23 | 一种基于动态符号执行的软件缺陷检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106354630B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304320A (zh) * | 2018-01-05 | 2018-07-20 | 西北工业大学 | 基于动态符号执行的Java程序错误检测方法 |
CN110032425A (zh) * | 2019-03-22 | 2019-07-19 | 北京智游网安科技有限公司 | 一种动态链接库文件虚拟化方法、系统及存储介质 |
CN110059009A (zh) * | 2018-04-13 | 2019-07-26 | 百度(美国)有限责任公司 | 用于测试代码文件的方法和装置 |
CN110221973A (zh) * | 2019-05-22 | 2019-09-10 | 湖南泛联新安信息科技有限公司 | 面向c程序缺陷检测的靶向式并行符号执行方法 |
WO2020227883A1 (zh) * | 2019-05-13 | 2020-11-19 | 云图有限公司 | 一种数据处理方法、装置及系统 |
CN112580024A (zh) * | 2019-09-30 | 2021-03-30 | 奇安信安全技术(珠海)有限公司 | 虚拟机的模拟方法及装置、存储介质、计算机设备 |
CN113297069A (zh) * | 2021-04-30 | 2021-08-24 | 中国科学院信息工程研究所 | 一种基于目标驱动的软件测试方法和装置 |
CN113722218A (zh) * | 2021-08-23 | 2021-11-30 | 南京审计大学 | 一种基于编译器中间表示的软件缺陷预测模型构建方法 |
CN114036072A (zh) * | 2022-01-06 | 2022-02-11 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114510429A (zh) * | 2022-02-28 | 2022-05-17 | 中国人民解放军国防科技大学 | 一种基于动态符号执行的调试方法、系统和介质 |
CN114510429B (zh) * | 2022-02-28 | 2024-05-07 | 中国人民解放军国防科技大学 | 一种基于动态符号执行的调试方法、系统和介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784553A (en) * | 1996-01-16 | 1998-07-21 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs |
CN102360334A (zh) * | 2011-10-17 | 2012-02-22 | 中国人民解放军信息工程大学 | 一种动静态结合的软件安全性测试方法 |
CN102841844A (zh) * | 2012-07-13 | 2012-12-26 | 北京航空航天大学 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
CN104008053A (zh) * | 2014-05-28 | 2014-08-27 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
US20150339217A1 (en) * | 2014-05-23 | 2015-11-26 | Carnegie Mellon University | Methods and systems for automatically testing software |
CN105117341A (zh) * | 2015-09-06 | 2015-12-02 | 电子科技大学 | 一种基于动态符号执行的分布式自动测试案例生成方法 |
-
2016
- 2016-08-23 CN CN201610709221.5A patent/CN106354630B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784553A (en) * | 1996-01-16 | 1998-07-21 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs |
CN102360334A (zh) * | 2011-10-17 | 2012-02-22 | 中国人民解放军信息工程大学 | 一种动静态结合的软件安全性测试方法 |
CN102841844A (zh) * | 2012-07-13 | 2012-12-26 | 北京航空航天大学 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
US20150339217A1 (en) * | 2014-05-23 | 2015-11-26 | Carnegie Mellon University | Methods and systems for automatically testing software |
CN104008053A (zh) * | 2014-05-28 | 2014-08-27 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
CN105117341A (zh) * | 2015-09-06 | 2015-12-02 | 电子科技大学 | 一种基于动态符号执行的分布式自动测试案例生成方法 |
Non-Patent Citations (1)
Title |
---|
黄晖 等: "基于动态符号执行的二进制程序缺陷发现系统", 《计算机应用研究》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304320A (zh) * | 2018-01-05 | 2018-07-20 | 西北工业大学 | 基于动态符号执行的Java程序错误检测方法 |
CN110059009A (zh) * | 2018-04-13 | 2019-07-26 | 百度(美国)有限责任公司 | 用于测试代码文件的方法和装置 |
CN110032425A (zh) * | 2019-03-22 | 2019-07-19 | 北京智游网安科技有限公司 | 一种动态链接库文件虚拟化方法、系统及存储介质 |
WO2020227883A1 (zh) * | 2019-05-13 | 2020-11-19 | 云图有限公司 | 一种数据处理方法、装置及系统 |
CN110221973B (zh) * | 2019-05-22 | 2022-12-16 | 湖南泛联新安信息科技有限公司 | 面向c程序缺陷检测的靶向式并行符号执行方法 |
CN110221973A (zh) * | 2019-05-22 | 2019-09-10 | 湖南泛联新安信息科技有限公司 | 面向c程序缺陷检测的靶向式并行符号执行方法 |
CN112580024A (zh) * | 2019-09-30 | 2021-03-30 | 奇安信安全技术(珠海)有限公司 | 虚拟机的模拟方法及装置、存储介质、计算机设备 |
CN112580024B (zh) * | 2019-09-30 | 2023-08-01 | 奇安信安全技术(珠海)有限公司 | 虚拟机的模拟方法及装置、存储介质、计算机设备 |
CN113297069A (zh) * | 2021-04-30 | 2021-08-24 | 中国科学院信息工程研究所 | 一种基于目标驱动的软件测试方法和装置 |
CN113722218B (zh) * | 2021-08-23 | 2022-06-03 | 南京审计大学 | 一种基于编译器中间表示的软件缺陷预测模型构建方法 |
CN113722218A (zh) * | 2021-08-23 | 2021-11-30 | 南京审计大学 | 一种基于编译器中间表示的软件缺陷预测模型构建方法 |
CN114036072B (zh) * | 2022-01-06 | 2022-04-08 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114036072A (zh) * | 2022-01-06 | 2022-02-11 | 湖南泛联新安信息科技有限公司 | 一种支持自动化检测程序缺陷的方法和系统 |
CN114510429A (zh) * | 2022-02-28 | 2022-05-17 | 中国人民解放军国防科技大学 | 一种基于动态符号执行的调试方法、系统和介质 |
CN114510429B (zh) * | 2022-02-28 | 2024-05-07 | 中国人民解放军国防科技大学 | 一种基于动态符号执行的调试方法、系统和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106354630B (zh) | 2018-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106354630B (zh) | 一种基于动态符号执行的软件缺陷检测方法 | |
CN103530228B (zh) | 一种基于模型的软件测试方法 | |
Lakhotia et al. | An empirical investigation into branch coverage for C programs using CUTE and AUSTIN | |
CN105955889A (zh) | 一种图形界面自动化测试方法 | |
CN104375941B (zh) | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 | |
CN105302719B (zh) | 一种变异测试方法及装置 | |
CN106557413A (zh) | 基于代码覆盖率获取测试用例的方法和设备 | |
CN103678110A (zh) | 提供修改相关信息的方法和装置 | |
CN104850411B (zh) | 存储系统基准评测程序生成方法及装置 | |
CN104035873A (zh) | 测试代码生成方法及生成装置 | |
CN103294596B (zh) | 一种基于程序不变量的合约式软件故障预警方法 | |
Li et al. | Practical symbolic race checking of GPU programs | |
CN104156311B (zh) | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 | |
CN109145534B (zh) | 针对软件虚拟机保护的反混淆系统及方法 | |
US9134979B2 (en) | Convergence analysis in multithreaded programs | |
US20190258803A1 (en) | Guiding automated testing of binary programs | |
CN107710166A (zh) | 利用符号快速错误检测的硅后验证和调试 | |
CN103678747B (zh) | 适用于多类型cpu的联合仿真工具 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
CN102087629A (zh) | 一种基于Agent嵌入式软件的不变量测试方法与工具 | |
CN104536880B (zh) | 基于符号执行的gui程序测试用例扩增方法 | |
CN102495795B (zh) | 一种基于中间语言分析的软件脆弱性测试方法 | |
US10546080B1 (en) | Method and system for identifying potential causes of failure in simulation runs using machine learning | |
Bernardi et al. | Model checking to improve precision of design pattern instances identification in OO systems | |
US20210318946A1 (en) | Generation of code coverage information during testing of a code sequence |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |