mirror of
https://github.com/facebookexperimental/reverie.git
synced 2025-01-23 05:06:23 +00:00
46 lines
1.4 KiB
Markdown
46 lines
1.4 KiB
Markdown
|
# A safe ptrace interface
|
||
|
|
||
|
This crate provides a safe and Rustic alternative to the infamous `ptrace` API.
|
||
|
There are many extremely subtle aspects of the raw ptrace API and this crate
|
||
|
helps avoid common pitfalls.
|
||
|
|
||
|
Note that this library is still rather low-level and does not claim to solve all
|
||
|
your ptrace problems. You have been warned!
|
||
|
|
||
|
## Features
|
||
|
|
||
|
* Ergonomic interface that provides a state machine for ptrace states. This
|
||
|
avoids the infamous `ESRCH` errors that can happen when you use the ptrace
|
||
|
API incorrectly.
|
||
|
* Provides an interface to read/write guest's memory (see "memory" feature
|
||
|
flag).
|
||
|
* Provides an optional and semi-experimental async interface, which can be used
|
||
|
with `tokio` (see "notifier" feature).
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
Add this to your `Cargo.toml` file:
|
||
|
```
|
||
|
safeptrace = "0.1"
|
||
|
```
|
||
|
|
||
|
## Feature Flags
|
||
|
|
||
|
### `"memory"` (off by default)
|
||
|
|
||
|
Provides access to the guest's memory. Memory can only be safely accessed when
|
||
|
the guest is in a stopped state, thus the `MemoryAccess` trait is only
|
||
|
implemented for the `Stopped` type.
|
||
|
|
||
|
### `"notifier"` (off by default)
|
||
|
|
||
|
Provides an async interface for ptrace using notifier threads. This is
|
||
|
semi-experimental, but testing shows that it has very good performance. It works
|
||
|
by spawning a separate thread for each thread being traced, waiting for ptrace
|
||
|
events in a loop. Thus, there will be 1 thread per guest thread.
|
||
|
|
||
|
Use with:
|
||
|
```
|
||
|
safeptrace = { version = "0.1", features = ["async"] }
|
||
|
```
|