libnyx-fork/config/src/loader.rs
Sergej Schumilo a5ae4c13e1 upgrade libnyx:
- add support for latest QEMU-Nyx backend
	- the size of all SHM buffers are now configurable
	- new aux buffer layout
	- remove dead code (fuzz runner)
	- running multiple instances in parallel works now
	- improved FFI API
	- new rust API
2022-01-21 04:06:17 +01:00

97 lines
2.5 KiB
Rust

use crate::config::*;
use serde_derive::Serialize;
use serde_derive::Deserialize;
use std::time::Duration;
#[derive(Clone, Serialize, Deserialize)]
pub struct QemuKernelConfigLoader {
pub qemu_binary: Option<String>,
pub kernel: Option<String>,
pub ramfs: Option<String>,
pub debug: Option<bool>,
}
#[derive(Clone, Serialize, Deserialize)]
pub struct QemuSnapshotConfigLoader {
pub qemu_binary: Option<String>,
pub hda: Option<String>,
pub presnapshot: Option<String>,
pub snapshot_path: Option<SnapshotPath>,
pub debug: Option<bool>,
}
#[derive(Clone, Serialize, Deserialize)]
pub struct ForkServerConfigLoader {
pub args: Option<Vec<String>>,
pub hide_output: Option<bool>,
pub input_size: Option<usize>,
pub env: Option<Vec<String>>,
}
#[derive(Clone, Serialize, Deserialize)]
pub enum FuzzRunnerConfigLoader {
QemuKernel(QemuKernelConfigLoader),
QemuSnapshot(QemuSnapshotConfigLoader),
}
#[derive(Clone, Serialize, Deserialize)]
pub struct FuzzerConfigLoader {
#[serde(default = "default_write_protected_input_buffer")]
pub write_protected_input_buffer: bool,
#[serde(default = "default_cow_primary_size")]
pub cow_primary_size: u64,
#[serde(default = "default_ipt_filter")]
pub ip0: IptFilter,
#[serde(default = "default_ipt_filter")]
pub ip1: IptFilter,
#[serde(default = "default_ipt_filter")]
pub ip2: IptFilter,
#[serde(default = "default_ipt_filter")]
pub ip3: IptFilter,
pub workdir_path: Option<String>,
pub bitmap_size: Option<usize>,
#[serde(default = "default_input_buffer_size")]
pub input_buffer_size: usize,
pub mem_limit: Option<usize>,
pub time_limit: Option<Duration>,
pub target_binary: Option<String>,
pub threads: Option<usize>,
pub thread_id: Option<usize>,
pub cpu_pin_start_at: Option<usize>,
pub seed_path: Option<String>,
pub dict: Option<Vec<Vec<u8>>>,
pub snapshot_placement: Option<SnapshotPlacement>,
pub dump_python_code_for_inputs: Option<bool>,
pub exit_after_first_crash: Option<bool>,
}
fn default_input_buffer_size() -> usize {
1 << 17
}
fn default_write_protected_input_buffer() -> bool {
false
}
fn default_cow_primary_size() -> u64 {
0
}
fn default_ipt_filter() -> IptFilter {
IptFilter{
a: 0,
b: 0,
}
}
#[derive(Clone, Serialize, Deserialize)]
pub struct ConfigLoader {
pub include_default_config_path: Option<String>,
pub runner: FuzzRunnerConfigLoader,
pub fuzz: FuzzerConfigLoader,
}