我最近一直在用Rust解析大量的json,这里有一些细节我想和大家分享。
与有标签的 unions相比,无标签的unions解析起来非常慢。如果你关心性能,最好是有一个可以区分unions变量的属性。你可以通过解析到一个使用 &str字段的数据结构来避免对字符串的分配。有一种类型 serde_json::Number可以避免转换为数字格式,直到你真正想要花费处理时间。如果你使用标签 union来区分json属性值,你不需要使用枚举变量的名称,你可以使用:#[serde(tag="animal_type")]
enum Animal { #[serde(alias="crab")]
Crab(MyCrabStruct) #[serde(alias="gopher")]
Gopher(MyGopherStruct)
}
LibAFL为你提供了许多现成的模糊器的优点,同时可以完全定制。目前的一些亮点功能包括:
快速:我们在编译时做了所有能做的事情,使运行时的开销最小。用户在手机上的frida-mode中达到12万次/秒的执行率(使用所有内核)。 可扩展性:低水平消息传递,简称LLMP,允许LibAFL在核心上几乎线性地扩展,并通过TCP传输到多台机器。 可适应性强:你可以替换LibAFL的每个部分。例如,BytesInput只是一个潜在的表单输入:可以随意添加一个基于AST的输入,用于结构化的模糊测试,以及更多。 多平台:LibAFL被证实可以在Windows、MacOS、Linux和Android的x86_64和arch64上工作。LibAFL可以在no_std模式下构建,将LibAFL注入到不知名的目标中,如嵌入式设备和管理程序。 你自己的 target:我们支持纯二进制模式,如Frida-Mode,以及基于资源的仪器化的多个编译通道。当然,添加自定义的仪器化后端也很容易。
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。