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的修改