4 个版本
0.2.0 | 2020 年 2 月 24 日 |
---|---|
0.1.2 | 2019 年 11 月 8 日 |
0.1.1 | 2019 年 11 月 5 日 |
0.1.0 | 2019 年 11 月 5 日 |
10 in #mutator
每月 31 次下载
用于 clobber
17KB
314 行
byte-mutator
byte-mutator
是一个 crate,用于定义通过一组规则变异字节数组的库。它旨在作为模糊测试工作流程的一部分使用,以配置您希望如何变异输入。例如,您可能想要执行一次不修改消息头的遍历,只变异主体,或者以不同的方式变异它们。
示例
BitFlipper
此示例配置为逐个翻转字节的每一位。
let mut bytes = b"foo".to_vec();
let mut mutator = ByteMutator::new().with_stages(vec![Stage {
count: 0,
max: Some(24),
mutations: vec![Mutation {
range: None,
mutation: MutationType::BitFlipper { width: 1 },
}],
}]);
// Bytes in their original state
assert_eq!(&bytes, b"foo");
// Perform a single mutation
mutator.mutate(&mut bytes);
// We've flipped the first bit (little endian)
// 0b1100110 -> 0b1100111, 103 -> 102, f -> g
assert_eq!(&bytes, b"goo");
从配置加载
这是一个配置为无限翻转位的变异器的示例。
[[stages]]
# Iteration count at which to start the loop (useful for starting over from a future state)
count = 0
# A list of mutations to perform on this stage
[[stages.mutations]]
# Must be a variant of the MutatorTypes enum
mutation = {"BitFlipper" = {width = 1 }}
发布历史
- 0.2.0
- 从 ByteMutator 中移除了数据结构。变异现在需要
&mut [u8]
引用。 - 移除了
Iterations
,只添加了简单的Option<usize>
用于max
。
- 从 ByteMutator 中移除了数据结构。变异现在需要
- 0.1.0
- 初始发布
元数据
Ryan Ragona – @ryanragona – https://github.com/ragona
在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE
。
贡献
总是乐意看到 PR 或问题。
要贡献
- 分叉它 (https://github.com/ragona/yourproject/byte-mutator)
- 创建您的功能分支 (
git checkout -b feature/fooBar
) - 提交您的更改 (
git commit -am 'Add some fooBar'
) - 推送到分支 (
git push origin feature/fooBar
) - 创建新的拉取请求
依赖项
~0.6–1.2MB
~28K SLoC