2023-9-28讨论班
History-Driven JVM Fuzz Driver
我们要测的是JVM,因此需要改变java byte code文件内容
已有的工作
Classming:基于Byte Code的mutation,例如在活动的数据流/控制流跳转之类,缺点:覆盖率低/执行掉率
History Driven:保留可能触发bug的代码片段
从history-bug中提取代码片段,插入到一段程序中
challenge:
- bug代码段的粒度,更多语义(粗)/更多交互(细)
- 如何定位bug代码段
- 特定的类型片段,Sequential/If..else/switch/try-catch等
- 插入后如何修复代码?用已有的同类型可复用变量/递归地new对象(因为可能要递归new出类属性)
- 基于CFG,考察关联的代码段
最后在OpenJ9上找了10个bug(可能在挑软柿子捏)
WADIFF: A Differential Testing Framework for WebAssembly Runtimes (ASE’23)
差分测试wasm的runtime
wasm:
- stack based指令集,无寄存器指令
- 设计初衷是为了摆脱缓慢的js
- 执行流:先用high level语言(例如C++等)编写代码,然后编译为wasm字节码,最后放到runtime中执行。在runtime中要先过validator验证合法性
wasm runtime bug:behavior和wasm描述的不一样
由于不知道理想情况是什么,所以也是用的差分测试。
首先用正则规则把wasm的语言转为formal的语言(看起来类似AST),然后把所有的路径case生成代码段。
mutate:插入/删除等一个byte的修改