- 博客(9)
- 收藏
- 关注
原创 SMT简介
首先,通过一篇中文综述,我们简单了解 SMT 的名词解释, SMT 的应用场景。应用场景中,我们重点关注了测试用例的自动生成:通过动态符号执行获取执行路径;对前缀路径的最后一个节点取非操作;使用求解器查看是否有满足解,如果有,则为新的测试用例。简单了解 SMT 之后,我们尝试使用其中一种 SMT 求解器 z3 。大多数 SMT Solver都支持SMT-LIB。SMT-LIB其中一个目标便是促进SMT求解器采用通用语言。所以我们有必要了解下 SMT-LIB 标准。
2021-02-27 16:20:43 9784 1
原创 追踪信息流
crash并不是程序的存在bug的唯一标志。在本章中,我们将深入探索如何在Python中跟踪信息流,以及如何使用这些信息流来确定程序是否按预期运行。
2021-02-18 23:24:08 375
原创 LL语法分析简介
本文先简单介绍自顶向下的分析方法。我们会指出这种方法存在的两个个问题:左递归问题,回溯问题。针对左递归问题,可以通过文法的实用限制和扩充的 BNF 方法得到解决。针对回溯问题可以通过左提公共终结符和First集合来进行确定性选择,以避免回溯。同时介绍Follow集合,从而可以判断其下面的非终结符能否产生当前需要的终结符,以排除当前字符串出错的可能。另外,First 集和 Follow 集不能有交集,否则会带来不确定性。而LL(1)文法是满足上面三个条件(文法不存在左递归、没有回溯,相同非终结符的 F
2021-02-07 23:27:59 6377
原创 使用文法的模糊测试2
本文采用树状结构,存储语法树。树状结构,在语法树的生长过程中,相对于字符串匹配替换,更加高效。在语法树的不同生长时期,采用不同的扩展方式。语法树的生长初期,尽可能大范围的拓展节点,直到树中包含,至少min_nonterminals个非终结符。接着,语法树进入生长中期,使用随机的方式拓展节点。此阶段,最多包含max_nonterminals个非终结符。最后,语法树进入生长末期,在拓展的时候,尽可能小范围的拓展节点。这些策略,解决了无限循环和字符串的生成过程无法控制等问题。
2021-02-05 15:30:03 219
原创 graphviz的初次使用
首先介绍DOT语言。接着,演示使用plantuml和python这两个工具渲染DOT语言描述的图。(好像都是使用的graphviz)最后讲解下fuzzing book中使用DOT语言,图像化展示分析树的实现代码。本质:DOT语言描述图+渲染
2021-02-03 22:55:55 790
原创 使用文法的模糊测试
程序的有效输入集合称为语言。语言的范围从简单到复杂。之前,我们随机输入的字符串(语言),很容易用正则表达式生成。为了形式化的描述语言,这里我们使用文法。通过文法,生成语句(言),作为模糊测试的输入。本文使用python,实现一个BNF的算数表达式文法。并使用该文法生成测试用例。本文不包含(但Fuzzing with Grammars 大部分包含):文法的铁路图生成、EBNF、将EBNF转换成BNF(通过增加新的非终结符,先去括号,再去运算符)、给每个表达式添加参数、文法的合法性检查(开始符号不能出现
2021-02-01 23:21:01 515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人