1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
extern crate libc; #[cfg(unix)] use libc::{c_uint, ptrace, waitpid, pid_t, c_int, pwrite}; #[cfg(target_pointer_width="64")] pub struct Transaction{ pub adress : u64, pub data : Vec<u8>, } #[cfg(target_pointer_width="32")] pub struct Transaction{ pub adress : u32, pub data : Vec<u8>, } #[cfg(unix)] #[allow(dead_code)] pub struct Transactions{ transactions : Vec<Transaction>, targetpid : u32, } #[cfg(unix)] impl Transactions{ pub fn make_transactions(&self){ unsafe{ let ptrace_attach : c_uint = 0x10; let mut status : c_int = 0; let option : c_int = 0; ptrace(ptrace_attach, self.targetpid as pid_t); waitpid(self.targetpid as pid_t, &mut status, option); } for transaction in &self.transactions{ unsafe{ pwrite(0, transaction.data.as_ptr() as *const libc::c_void, transaction.data.len(), transaction.adress as i64); } } } }