输入 Input

从形式上看,程序的输入(Input)是指从外部来源获取的影响程序行为的数据。

在我们的抽象模糊器模型中,我们将输入定义为程序输入 (或其一部分) 的内部表示。

在直接的情况下,程序的输入是一个字节数组,在AFL这样的模糊器中,我们正是存储和操作这些字节数组。

但情况并不总是这样。一个程序可能期望的输入不是字节数组 (例如一连串的系统调用),而模糊器并不以程序消耗输入的相同方式来表示。

以语法模糊器为例,输入通常是抽象语法树,因为它是一种数据结构,在保持有效性的同时可以很容易地进行操作,但程序期望输入是一个字节数组,所以在执行之前,树被序列化为一个字节的顺序。

在Rust代码中,Input 是一个 trait,只能由可序列化的结构来实现,并且只有拥有的数据作为字段。