PtraceState

Struct PtraceState 

Source
pub struct PtraceState {
    pub core_state: PtraceCoreState,
    pub tracee_waiters: WaitQueue,
    pub last_signal: Option<SignalInfo>,
    pub last_signal_waitable: bool,
    pub event_data: Option<PtraceEventData>,
    pub stop_status: PtraceStatus,
    pub last_syscall_was_error: bool,
}
Expand description

Per-task ptrace-related state

Fields§

§core_state: PtraceCoreState

The core state of the tracer, which can be shared between processes

§tracee_waiters: WaitQueue

The tracee waits on this WaitQueue to find out when it should stop or wake for ptrace-related shenanigans.

§last_signal: Option<SignalInfo>

The signal that caused the task to enter the given state (for signal-delivery-stop)

§last_signal_waitable: bool

Whether waitpid() will return the last signal. The presence of last_signal can’t be used for that, because that needs to be saved for GETSIGINFO.

§event_data: Option<PtraceEventData>

Data about the PTRACE_EVENT that caused the most recent stop (if any).

§stop_status: PtraceStatus

Indicates whether the last ptrace call put this thread into a state with special semantics for stopping behavior.

§last_syscall_was_error: bool

For SYSCALL_INFO_EXIT

Implementations§

Source§

impl PtraceState

Source

pub fn new( pid: pid_t, attach_type: PtraceAttachType, options: PtraceOptions, ) -> Box<Self>

Source

pub fn get_pid(&self) -> pid_t

Source

pub fn set_pid(&mut self, pid: pid_t)

Source

pub fn is_seized(&self) -> bool

Source

pub fn get_attach_type(&self) -> PtraceAttachType

Source

pub fn is_waitable(&self, stop: StopState, options: &WaitingOptions) -> bool

Source

pub fn set_last_signal(&mut self, signal: Option<SignalInfo>)

Source

pub fn set_last_event(&mut self, event: Option<PtraceEventData>)

Source

pub fn get_last_signal( &mut self, keep_signal_waitable: bool, ) -> Option<SignalInfo>

Source

pub fn has_option(&self, option: PtraceOptions) -> bool

Source

pub fn set_options_from_bits(&mut self, option: u32) -> Result<(), Errno>

Source

pub fn get_options(&self) -> PtraceOptions

Source

pub fn get_core_state(&self) -> PtraceCoreState

Returns enough of the ptrace state to propagate it to a fork / clone / vforked task.

Source

pub fn tracer_waiters(&self) -> &Arc<WaitQueue>

Source

pub fn get_target_syscall( &self, target: &Task, state: &TaskMutableState, ) -> Result<(i32, ptrace_syscall_info), Errno>

Returns an (i32, ptrace_syscall_info) pair. The ptrace_syscall_info is the info associated with the syscall that the target task is currently blocked on, The i32 is (per ptrace(2)) “the number of bytes available to be written by the kernel. If the size of the data to be written by the kernel exceeds the size specified by the addr argument, the output data is truncated.”; ptrace(PTRACE_GET_SYSCALL_INFO) returns that value“

Source

pub fn get_core_state_for_clone( &self, clone_args: &clone_args, ) -> (PtraceOptions, Option<PtraceCoreState>)

Gets the core state for this ptrace if the options set on this ptrace match |trace_kind|. Returns a pair: the trace option you should use (sometimes this is different from the one that the caller thinks it should use), and the core state.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> InstanceFromServiceTransport<T> for T

§

fn from_service_transport(handle: T) -> T

Converts the given service transport handle of type T to [Self]
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> Into32<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_32(self) -> U

Source§

impl<T, U> Into64<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_64(self) -> U

Source§

impl<T> IntoAny for T
where T: 'static + Send + Sync,

Source§

fn into_any(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Cast the given object into a dyn std::any::Any.
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T, U> IntoExt<U> for T
where U: FromExt<T>,

§

fn into_ext(self) -> U

Performs the conversion.
Source§

impl<T, U> IntoFidl<U> for T
where U: FromFidl<T>,

Source§

fn into_fidl(self) -> U

Source§

impl<T, U> MultiArchFrom<T> for U
where U: From<T>,

Source§

fn from_64(value: T) -> U

Source§

fn from_32(value: T) -> U

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T, U> TryIntoExt<U> for T
where U: TryFromExt<T>,

§

type Error = <U as TryFromExt<T>>::Error

§

fn try_into_ext(self) -> Result<U, <T as TryIntoExt<U>>::Error>

Tries to perform the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<St> WithTag for St

§

fn tagged<T>(self, tag: T) -> Tagged<T, St>

Produce a new stream from this one which yields item tupled with a constant tag
Source§

impl<B, A> LockBefore<B> for A
where B: LockAfter<A>,

Source§

impl<B, A> LockEqualOrBefore<B> for A
where A: LockBefore<B>,

§

impl<E> RunsTransport<Mpsc> for E

§

impl<E> RunsTransport<Mpsc> for E
where E: RunsTransport<Mpsc>,