All Projects → rbspy → read-process-memory

rbspy / read-process-memory

Licence: MIT license
Read memory from another process

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to read-process-memory

audria
audria - A Utility for Detailed Ressource Inspection of Applications
Stars: ✭ 35 (-65%)
Mutual labels:  memory, inspection
kstone
Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd data, and intelligent diagnosis.
Stars: ✭ 592 (+492%)
Mutual labels:  inspection
nodejs
Node.js in-process collectors for Instana
Stars: ✭ 66 (-34%)
Mutual labels:  memory
BitPack
BitPack is a practical tool to efficiently save ultra-low precision/mixed-precision quantized models.
Stars: ✭ 36 (-64%)
Mutual labels:  memory
total
Ruby Gem to get total memory size in the system
Stars: ✭ 15 (-85%)
Mutual labels:  memory
mem usage ui
Measuring and graphing memory usage of local processes
Stars: ✭ 124 (+24%)
Mutual labels:  memory
RazorSharp
Low-level utilities and tools for working with the CLR and memory.
Stars: ✭ 31 (-69%)
Mutual labels:  memory
v8-inspector-api
A simple node module to access V8 inspector + some tools to export and read the data.
Stars: ✭ 43 (-57%)
Mutual labels:  memory
cpu monitor
ROS node that publishes all nodes' CPU and memory usage
Stars: ✭ 52 (-48%)
Mutual labels:  memory
OpenAmiga600RamExpansion
Open Hardware 1 MB Chip RAM Expansion for the Commodore Amiga 600 Computer
Stars: ✭ 48 (-52%)
Mutual labels:  memory
nxdk-rdt
Remote Dev Tool is a tool to remote control an Xbox using memory access and RPC
Stars: ✭ 23 (-77%)
Mutual labels:  memory
moneta
Moneta is a live usermode memory analysis tool for Windows with the capability to detect malware IOCs
Stars: ✭ 384 (+284%)
Mutual labels:  memory
looppointer
An analyzer that checks for pointers to enclosing loop variables.
Stars: ✭ 30 (-70%)
Mutual labels:  diagnostics
doc
Get usage and health data about your Node.js process.
Stars: ✭ 17 (-83%)
Mutual labels:  memory
PSMemory
Automation Capable Multi Search 64 Bit Windows Memory Scanner
Stars: ✭ 25 (-75%)
Mutual labels:  memory
bun
DC/OS diagnostics bundle analysis tool
Stars: ✭ 13 (-87%)
Mutual labels:  diagnostics
kvs
Lightweight key-value storage library for Browser, Node.js, and In-Memory.
Stars: ✭ 126 (+26%)
Mutual labels:  memory
jsish
Jsi is a small, C-embeddable javascript interpreter with tightly woven Web and DB support.
Stars: ✭ 32 (-68%)
Mutual labels:  diagnostics
xDscDiagnostics
This module contains cmdlets for analyzing DSC event logs.
Stars: ✭ 29 (-71%)
Mutual labels:  diagnostics
DLL-INJECTOR
I created a dll injector I am going to Open source its Code. But remember one thing that is any one can use it only for Educational purpose .I again say do not use it to damage anyone's Computer.But one thing if you are using it for some good purpose like to help someone who really need help then I permit you to use it.
Stars: ✭ 14 (-86%)
Mutual labels:  memory

GitHub Actions Build status Cirrus CI Build status crates.io

A crate to read memory from another process. Code originally taken from the rbspy project. This crate has now returned home to the rbspy GitHub organization. :)

Example

This example re-executes itself as a child process in order to have a separate process to use for demonstration purposes. If you need to read memory from a process that you are spawning, your usage should look very similar to this:

use std::convert::TryInto;
use std::env;
use std::io::{self, BufReader, BufRead, Read, Result};
use std::process::{Command, Stdio};

use read_process_memory::{
  Pid,
  ProcessHandle,
  CopyAddress,
  copy_address,
};

fn main() -> Result<()> {
    if env::args_os().len() > 1 {
      // We are the child.
      return in_child();
    }
    // Run this executable again so we have a child process to read.
    let mut child = Command::new(env::current_exe()?)
        .stdin(Stdio::piped())
        .stdout(Stdio::piped())
        .arg("child")
        .spawn()?;

    // Get a ProcessHandle to work with.
    let handle: ProcessHandle = (&child).try_into().unwrap();

    // The child process will print the address to read from on stdout.
    let mut stdout = BufReader::new(child.stdout.take().unwrap());
    let mut addr_string = String::new();
    stdout.read_line(&mut addr_string)?;
    let address = usize::from_str_radix(addr_string.trim(), 16).unwrap();

    // Try to read 10 bytes from that address
    let bytes = copy_address(address, 10, &handle)?;
    println!("Read: {:?}", bytes);

    // Tell the child to exit by closing its stdin.
    drop(child.stdin.take());
    // And wait for it to exit.
    child.wait()?;
    Ok(())
}

fn in_child() -> Result<()> {
    // Allocate a 10-byte Vec for the parent to read.
    let readable_bytes: Vec<u8> = vec![
        0xc0, 0x72, 0x80, 0x79, 0xeb, 0xf1, 0xbc, 0x87, 0x06, 0x14,
    ];
    // Print the address of the Vec to stdout so the parent can find it.
    println!("{:x}", readable_bytes.as_ptr() as usize);
    // Now wait to exit until the parent closes our stdin, to give
    // it time to read the memory.
    let mut buf = Vec::new();
    // We don't care if this succeeds.
    drop(io::stdin().read_to_end(&mut buf));
    Ok(())
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].