libfuzzer_libpng wrappers
This commit is contained in:
parent
1c8cdc76a8
commit
8d2713c4d9
@ -3,11 +3,17 @@ use std::env;
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = env::args().collect();
|
let args: Vec<String> = env::args().collect();
|
||||||
ClangWrapper::new("clang", "clang++")
|
if args.len() > 1 {
|
||||||
|
let mut dir = env::current_exe().unwrap();
|
||||||
|
dir.pop();
|
||||||
|
ClangWrapper::new("clang", "clang++")
|
||||||
.from_args(&args)
|
.from_args(&args)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add_arg("-fsanitize=trace-pc-guard".into())
|
.add_arg("-fsanitize-coverage=trace-pc-guard".into())
|
||||||
|
.unwrap()
|
||||||
|
.add_link_arg(dir.join("liblibfuzzer_libpng.a").display().to_string())
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.run()
|
.run()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
20
fuzzers/libfuzzer_libpng/src/bin/cxx.rs
Normal file
20
fuzzers/libfuzzer_libpng/src/bin/cxx.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
if args.len() > 1 {
|
||||||
|
let mut dir = env::current_exe().unwrap();
|
||||||
|
dir.pop();
|
||||||
|
ClangWrapper::new("clang", "clang++")
|
||||||
|
.is_cpp()
|
||||||
|
.from_args(&args)
|
||||||
|
.unwrap()
|
||||||
|
.add_arg("-fsanitize-coverage=trace-pc-guard".into())
|
||||||
|
.unwrap()
|
||||||
|
.add_link_arg(dir.join("liblibfuzzer_libpng.a").display().to_string())
|
||||||
|
.unwrap()
|
||||||
|
.run()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
use std::{string::String, vec::Vec};
|
use std::{process::Command, string::String, vec::Vec};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
InvalidArguments(String),
|
InvalidArguments(String),
|
||||||
|
IOError(std::io::Error),
|
||||||
Unknown(String),
|
Unknown(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,9 +29,18 @@ pub trait CompilerWrapper {
|
|||||||
|
|
||||||
/// Run the compiler
|
/// Run the compiler
|
||||||
fn run(&mut self) -> Result<(), Error> {
|
fn run(&mut self) -> Result<(), Error> {
|
||||||
// TODO subproc
|
|
||||||
let args = self.command()?;
|
let args = self.command()?;
|
||||||
println!("{:?}", args);
|
dbg!(&args);
|
||||||
|
if args.len() < 1 {
|
||||||
|
return Err(Error::InvalidArguments(
|
||||||
|
"The number of arguments cannot be 0".into(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
let status = match Command::new(&args[0]).args(&args[1..]).status() {
|
||||||
|
Ok(s) => s,
|
||||||
|
Err(e) => return Err(Error::IOError(e)),
|
||||||
|
};
|
||||||
|
dbg!(status);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,12 +73,7 @@ impl CompilerWrapper for ClangWrapper {
|
|||||||
|
|
||||||
self.name = args[0].clone();
|
self.name = args[0].clone();
|
||||||
// Detect C++ compiler looking at the wrapper name
|
// Detect C++ compiler looking at the wrapper name
|
||||||
self.is_cpp = self.name.ends_with("++");
|
self.is_cpp = self.is_cpp || self.name.ends_with("++");
|
||||||
if self.is_cpp {
|
|
||||||
new_args.push(self.wrapped_cxx.clone());
|
|
||||||
} else {
|
|
||||||
new_args.push(self.wrapped_cc.clone());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sancov flag
|
// Sancov flag
|
||||||
// new_args.push("-fsanitize-coverage=trace-pc-guard".into());
|
// new_args.push("-fsanitize-coverage=trace-pc-guard".into());
|
||||||
@ -122,7 +127,13 @@ impl CompilerWrapper for ClangWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn command(&mut self) -> Result<Vec<String>, Error> {
|
fn command(&mut self) -> Result<Vec<String>, Error> {
|
||||||
let mut args = self.base_args.clone();
|
let mut args = vec![];
|
||||||
|
if self.is_cpp {
|
||||||
|
args.push(self.wrapped_cxx.clone());
|
||||||
|
} else {
|
||||||
|
args.push(self.wrapped_cc.clone());
|
||||||
|
}
|
||||||
|
args.extend_from_slice(self.base_args.as_slice());
|
||||||
if self.linking {
|
if self.linking {
|
||||||
if self.x_set {
|
if self.x_set {
|
||||||
args.push("-x".into());
|
args.push("-x".into());
|
||||||
@ -163,6 +174,11 @@ impl ClangWrapper {
|
|||||||
self.optimize = false;
|
self.optimize = false;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_cpp<'a>(&'a mut self) -> &'a mut Self {
|
||||||
|
self.is_cpp = true;
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user