关于serde_json我希望大家都能知道这些事
我最近一直在用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)
}
该帖子下还有其他网友分享的一些细节。
Reddit: https://libreddit.spike.codes/r/rust/comments/w3q1oq/things_i_wish_i_had_known_about_serde_json/
LibAFL 一个模糊器发布0.8.0版本
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,以及基于资源的仪器化的多个编译通道。当然,添加自定义的仪器化后端也很容易。
Github: https://github.com/AFLplusplus/LibAFL/releases/tag/0.8.0
From 日报小组 Cupnfish
社区学习交流平台订阅:
- Rust.cc 论坛: 支持 rss
- 微信公众号:Rust 语言中文社区