diff --git a/libnyx/src/ffi.rs b/libnyx/src/ffi.rs index a92ff35..0c7d83b 100644 --- a/libnyx/src/ffi.rs +++ b/libnyx/src/ffi.rs @@ -202,4 +202,18 @@ pub extern "C" fn nyx_print_aux_buffer(nyx_process: * mut NyxProcess) { _ => {}, } } -} \ No newline at end of file +} + +#[no_mangle] +pub extern "C" fn nyx_get_aux_string(nyx_process: * mut NyxProcess, buffer: *mut u8, size: u32) -> u32 { + + unsafe{ + assert!(!nyx_process.is_null()); + assert!((nyx_process as usize) % std::mem::align_of::() == 0); + assert!((buffer as usize) % std::mem::align_of::() == 0); + + let len = std::cmp::min( (*nyx_process).process.aux.misc.len as usize, size as usize); + std::ptr::copy((*nyx_process).process.aux.misc.data.as_mut_ptr(), buffer, len); + len as u32 + } +} diff --git a/libnyx/src/lib.rs b/libnyx/src/lib.rs index 5dab6a5..6d47d9c 100644 --- a/libnyx/src/lib.rs +++ b/libnyx/src/lib.rs @@ -254,7 +254,12 @@ impl NyxProcess { pub fn aux_tmp_snapshot_created(&self) -> bool { self.process.aux.result.tmp_snapshot_created != 0 } - + + pub fn aux_string(&self) -> String { + let len = self.process.aux.misc.len; + String::from_utf8_lossy(&self.process.aux.misc.data[0..len as usize]).to_string() + } + pub fn exec(&mut self) -> NyxReturnValue { match self.process.send_payload(){ Err(_) => NyxReturnValue::IoError,