input length and read input pointer
This commit is contained in:
parent
b812e994a6
commit
decae09931
@ -81,6 +81,14 @@ pub fn fuzz() {
|
|||||||
let input_addr = virt2phys(input_addr,&elf) as GuestPhysAddr;
|
let input_addr = virt2phys(input_addr,&elf) as GuestPhysAddr;
|
||||||
println!("FUZZ_INPUT @ {:#x}", input_addr);
|
println!("FUZZ_INPUT @ {:#x}", input_addr);
|
||||||
|
|
||||||
|
let test_length_ptr = elf
|
||||||
|
.resolve_symbol("FUZZ_LENGTH", 0);
|
||||||
|
let test_length_ptr = Option::map_or(test_length_ptr, None, |x| Some(virt2phys(x,&elf) as u32));
|
||||||
|
|
||||||
|
let input_counter_ptr = elf
|
||||||
|
.resolve_symbol(&env::var("FUZZ_POINTER").unwrap_or_else(|_| "FUZZ_POINTER".to_owned()), 0);
|
||||||
|
let input_counter_ptr = Option::map_or(input_counter_ptr, None, |x| Some(virt2phys(x,&elf) as u32));
|
||||||
|
|
||||||
let main_addr = elf
|
let main_addr = elf
|
||||||
.resolve_symbol(&env::var("FUZZ_MAIN").unwrap_or_else(|_| "FUZZ_INPUT".to_owned()), 0)
|
.resolve_symbol(&env::var("FUZZ_MAIN").unwrap_or_else(|_| "FUZZ_INPUT".to_owned()), 0)
|
||||||
.expect("Symbol main not found");
|
.expect("Symbol main not found");
|
||||||
@ -145,6 +153,9 @@ pub fn fuzz() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
emu.write_phys_mem(input_addr, buf);
|
emu.write_phys_mem(input_addr, buf);
|
||||||
|
if let Some(s) = test_length_ptr {
|
||||||
|
emu.write_phys_mem(s as u64, &len.to_le_bytes())
|
||||||
|
}
|
||||||
|
|
||||||
emu.run();
|
emu.run();
|
||||||
|
|
||||||
@ -211,7 +222,7 @@ pub fn fuzz() {
|
|||||||
let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective);
|
let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective);
|
||||||
let mut hooks = QemuHooks::new(&emu,
|
let mut hooks = QemuHooks::new(&emu,
|
||||||
tuple_list!(QemuEdgeCoverageHelper::default(),QemuStateRestoreHelper::new(),
|
tuple_list!(QemuEdgeCoverageHelper::default(),QemuStateRestoreHelper::new(),
|
||||||
QemuSystemStateHelper::new(svh,curr_tcb_pointer,task_queue_addr,0,app_range)));
|
QemuSystemStateHelper::new(svh,curr_tcb_pointer,task_queue_addr,input_counter_ptr,app_range)));
|
||||||
|
|
||||||
// Create a QEMU in-process executor
|
// Create a QEMU in-process executor
|
||||||
let executor = QemuExecutor::new(
|
let executor = QemuExecutor::new(
|
||||||
|
@ -238,12 +238,13 @@ where
|
|||||||
{
|
{
|
||||||
let observer = observers.match_name::<QemuSystemStateObserver>("systemstate")
|
let observer = observers.match_name::<QemuSystemStateObserver>("systemstate")
|
||||||
.expect("QemusystemstateObserver not found");
|
.expect("QemusystemstateObserver not found");
|
||||||
|
let names : Vec<String> = observer.last_run.iter().map(|x| x.current_task.task_name.clone()).collect();
|
||||||
match &self.dumpfile {
|
match &self.dumpfile {
|
||||||
Some(s) => {
|
Some(s) => {
|
||||||
std::fs::write(s,ron::to_string(&observer.last_run).expect("Error serializing hashmap")).expect("Can not dump to file");
|
std::fs::write(s,ron::to_string(&observer.last_run).expect("Error serializing hashmap")).expect("Can not dump to file");
|
||||||
self.dumpfile = None
|
self.dumpfile = None
|
||||||
},
|
},
|
||||||
None => if !self.dump_metadata {println!("{:?}",observer.last_run);}
|
None => if !self.dump_metadata {println!("{:?}\n{:?}",observer.last_run,names);}
|
||||||
};
|
};
|
||||||
if self.dump_metadata {self.last_trace=Some(observer.last_run.clone());}
|
if self.dump_metadata {self.last_trace=Some(observer.last_run.clone());}
|
||||||
Ok(!self.dump_metadata)
|
Ok(!self.dump_metadata)
|
||||||
|
@ -36,7 +36,7 @@ pub struct QemuSystemStateHelper {
|
|||||||
kerneladdr: u32,
|
kerneladdr: u32,
|
||||||
tcb_addr: u32,
|
tcb_addr: u32,
|
||||||
ready_queues: u32,
|
ready_queues: u32,
|
||||||
input_counter: u32,
|
input_counter: Option<u32>,
|
||||||
app_range: Range<u32>,
|
app_range: Range<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ impl QemuSystemStateHelper {
|
|||||||
kerneladdr: u32,
|
kerneladdr: u32,
|
||||||
tcb_addr: u32,
|
tcb_addr: u32,
|
||||||
ready_queues: u32,
|
ready_queues: u32,
|
||||||
input_counter: u32,
|
input_counter: Option<u32>,
|
||||||
app_range: Range<u32>,
|
app_range: Range<u32>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
QemuSystemStateHelper {
|
QemuSystemStateHelper {
|
||||||
@ -94,7 +94,10 @@ where
|
|||||||
(*c.raw_ptr()).can_do_io = can_do_io;
|
(*c.raw_ptr()).can_do_io = can_do_io;
|
||||||
}
|
}
|
||||||
let mut buf : [u8; 4] = [0,0,0,0];
|
let mut buf : [u8; 4] = [0,0,0,0];
|
||||||
// unsafe { emulator.read_mem(h.input_counter.into(), &mut buf) };
|
match h.input_counter {
|
||||||
|
Some(s) => unsafe { emulator.read_mem(s, &mut buf); },
|
||||||
|
None => (),
|
||||||
|
};
|
||||||
systemstate.input_counter = u32::from_le_bytes(buf);
|
systemstate.input_counter = u32::from_le_bytes(buf);
|
||||||
|
|
||||||
let curr_tcb_addr : freertos::void_ptr = freertos::emu_lookup::lookup(emulator, h.tcb_addr);
|
let curr_tcb_addr : freertos::void_ptr = freertos::emu_lookup::lookup(emulator, h.tcb_addr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user