diff --git a/libafl_bolts/src/minibsod.rs b/libafl_bolts/src/minibsod.rs index 5b05f1812f..491c31080a 100644 --- a/libafl_bolts/src/minibsod.rs +++ b/libafl_bolts/src/minibsod.rs @@ -50,6 +50,33 @@ pub fn dump_registers( Ok(()) } +/// Write the content of all important registers +#[cfg(all(any(target_os = "linux", target_os = "android"), target_arch = "x86"))] +#[allow(clippy::similar_names)] +pub fn dump_registers( + writer: &mut BufWriter, + ucontext: &ucontext_t, +) -> Result<(), std::io::Error> { + use libc::{ + REG_EAX, REG_EBP, REG_EBX, REG_ECX, REG_EDI, REG_EDX, REG_EFL, REG_EIP, REG_ESI, REG_ESP, + }; + + let mcontext = &ucontext.uc_mcontext; + + write!(writer, "eax: {:#016x}, ", mcontext.gregs[REG_EAX as usize])?; + write!(writer, "ebx: {:#016x}, ", mcontext.gregs[REG_EBX as usize])?; + write!(writer, "ecx: {:#016x}, ", mcontext.gregs[REG_ECX as usize])?; + writeln!(writer, "edx: {:#016x}, ", mcontext.gregs[REG_EDX as usize])?; + write!(writer, "edi: {:#016x}, ", mcontext.gregs[REG_EDI as usize])?; + write!(writer, "esi: {:#016x}, ", mcontext.gregs[REG_ESI as usize])?; + write!(writer, "esp: {:#016x}, ", mcontext.gregs[REG_ESP as usize])?; + writeln!(writer, "ebp: {:#016x}, ", mcontext.gregs[REG_EBP as usize])?; + write!(writer, "eip: {:#016x}, ", mcontext.gregs[REG_EIP as usize])?; + writeln!(writer, "efl: {:#016x}, ", mcontext.gregs[REG_EFL as usize])?; + + Ok(()) +} + /// Write the content of all important registers #[cfg(all( any(target_os = "linux", target_os = "android"), @@ -478,7 +505,7 @@ fn write_crash( "Received signal {} at {:#08x}, fault address: {:#08x}", signal, ucontext.uc_mcontext.gregs[libc::REG_EIP as usize], - ucontext.uc_mcontext.gregs[libc::REG_ERR as usize] + ucontext.uc_mcontext.cr2 )?; Ok(())