From 577f0be832d9ae1ce033724ac30932c655733576 Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Thu, 15 Sep 2022 21:46:33 +0100 Subject: [PATCH] [AFLplusplus/LibAFL] dump registers on OpenBSD amd64 (PR #787) * dump registers on openbsd * write_crash implementations --- libafl/src/bolts/minibsod.rs | 71 +++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/libafl/src/bolts/minibsod.rs b/libafl/src/bolts/minibsod.rs index e048f4753c..918e68c524 100644 --- a/libafl/src/bolts/minibsod.rs +++ b/libafl/src/bolts/minibsod.rs @@ -216,13 +216,42 @@ pub fn dump_registers( Ok(()) } +/// Write the content of all important registers +#[cfg(all(target_os = "openbsd", target_arch = "x86_64"))] +#[allow(clippy::similar_names)] +pub fn dump_registers( + writer: &mut BufWriter, + ucontext: &ucontext_t, +) -> Result<(), std::io::Error> { + write!(writer, "r8 : {:#016x}, ", ucontext.sc_r8)?; + write!(writer, "r9 : {:#016x}, ", ucontext.sc_r9)?; + write!(writer, "r10 : {:#016x}, ", ucontext.sc_r10)?; + write!(writer, "r11 : {:#016x}, ", ucontext.sc_r11)?; + write!(writer, "r12 : {:#016x}, ", ucontext.sc_r12)?; + write!(writer, "r13 : {:#016x}, ", ucontext.sc_r13)?; + write!(writer, "r14 : {:#016x}, ", ucontext.sc_r14)?; + write!(writer, "r15 : {:#016x}, ", ucontext.sc_r15)?; + write!(writer, "rdi : {:#016x}, ", ucontext.sc_rdi)?; + write!(writer, "rsi : {:#016x}, ", ucontext.sc_rsi)?; + write!(writer, "rbp : {:#016x}, ", ucontext.sc_rbp)?; + write!(writer, "rbx : {:#016x}, ", ucontext.sc_rbx)?; + write!(writer, "rdx : {:#016x}, ", ucontext.sc_rdx)?; + write!(writer, "rax : {:#016x}, ", ucontext.sc_rax)?; + write!(writer, "rcx : {:#016x}, ", ucontext.sc_rcx)?; + write!(writer, "rsp : {:#016x}, ", ucontext.sc_rsp)?; + write!(writer, "rflags : {:#016x}, ", ucontext.sc_rflags)?; + write!(writer, "cs : {:#016x}, ", ucontext.sc_cs)?; + Ok(()) +} + #[allow(clippy::unnecessary_wraps)] #[cfg(not(any( target_vendor = "apple", target_os = "linux", target_os = "android", target_os = "freebsd", - target_os = "netbsd" + target_os = "netbsd", + target_os = "openbsd" )))] fn dump_registers( writer: &mut BufWriter, @@ -326,7 +355,45 @@ fn write_crash( Ok(()) } -#[cfg(not(any(target_vendor = "apple", target_os = "linux", target_os = "android")))] +#[cfg(target_os = "freebsd")] +#[allow(clippy::similar_names)] +fn write_crash( + writer: &mut BufWriter, + signal: Signal, + ucontext: &ucontext_t, +) -> Result<(), std::io::Error> { + writeln!( + writer, + "Received signal {} at{:016x}, fault address: 0x{:016x}", + signal, ucontext.uc_mcontext.mc_rip, ucontext.uc_mcontext.mc_fs + )?; + + Ok(()) +} + +#[cfg(target_os = "openbsd")] +#[allow(clippy::similar_names)] +fn write_crash( + writer: &mut BufWriter, + signal: Signal, + ucontext: &ucontext_t, +) -> Result<(), std::io::Error> { + writeln!( + writer, + "Received signal {} at{:016x}, fault address: 0x{:016x}", + signal, ucontext.sc_rip, ucontext.sc_fs + )?; + + Ok(()) +} + +#[cfg(not(any( + target_vendor = "apple", + target_os = "linux", + target_os = "android", + target_os = "freebsd", + target_os = "openbsd" +)))] fn write_crash( writer: &mut BufWriter, signal: Signal,