Skip to content

Commit

Permalink
add function for handling PTRACE_SETOPTIONS nicely
Browse files Browse the repository at this point in the history
  • Loading branch information
droundy authored and carllerche committed Dec 3, 2015
1 parent ecb18ff commit 1ee6634
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/sys/ptrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,27 @@ pub mod ptrace {
pub const PTRACE_INTERRUPT: PtraceRequest = 0x4207;
pub const PTRACE_LISTEN: PtraceRequest = 0x4208;
pub const PTRACE_PEEKSIGINFO: PtraceRequest = 0x4209;

pub type PtraceEvent = c_int;

pub const PTRACE_EVENT_FORK: PtraceEvent = 1;
pub const PTRACE_EVENT_VFORK: PtraceEvent = 2;
pub const PTRACE_EVENT_CLONE: PtraceEvent = 3;
pub const PTRACE_EVENT_EXEC: PtraceEvent = 4;
pub const PTRACE_EVENT_VFORK_DONE: PtraceEvent = 5;
pub const PTRACE_EVENT_EXIT: PtraceEvent = 6;
pub const PTRACE_EVENT_SECCOMP: PtraceEvent = 6;
pub const PTRACE_EVENT_STOP: PtraceEvent = 128;

pub type PtraceOptions = c_int;
pub const PTRACE_O_TRACESYSGOOD: PtraceOptions = 1;
pub const PTRACE_O_TRACEFORK: PtraceOptions = (1 << PTRACE_EVENT_FORK);
pub const PTRACE_O_TRACEVFORK: PtraceOptions = (1 << PTRACE_EVENT_VFORK);
pub const PTRACE_O_TRACECLONE: PtraceOptions = (1 << PTRACE_EVENT_CLONE);
pub const PTRACE_O_TRACEEXEC: PtraceOptions = (1 << PTRACE_EVENT_EXEC);
pub const PTRACE_O_TRACEVFORKDONE: PtraceOptions = (1 << PTRACE_EVENT_VFORK_DONE);
pub const PTRACE_O_TRACEEXIT: PtraceOptions = (1 << PTRACE_EVENT_EXIT);
pub const PTRACE_O_TRACESECCOMP: PtraceOptions = (1 << PTRACE_EVENT_SECCOMP);
}

mod ffi {
Expand Down Expand Up @@ -77,3 +98,13 @@ fn ptrace_other(request: ptrace::PtraceRequest, pid: pid_t, addr: *mut c_void, d
_ => Ok(0)
}
}

/// Set options, as with ptrace(PTRACE_SETOPTIONS,...).
pub fn ptrace_setoptions(pid: pid_t, options: ptrace::PtraceOptions) -> Result<()> {
use self::ptrace::*;
use std::ptr;

try!(ptrace(PTRACE_SETOPTIONS, pid, ptr::null_mut(), options as *mut c_void));
Ok(())
}

0 comments on commit 1ee6634

Please sign in to comment.