process_memory/
process_memory.rs

1use dma_rs::Dma;
2
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    let dma = Dma::new("fpga://algo=0")?;
5
6    let process = dma.attach("explorer.exe")?;
7    let info = process.info()?;
8
9    println!("Attached to {} (PID: {})", info.name, info.pid);
10    println!("Path: {}\n", info.path);
11
12    let modules = process.list_modules()?;
13    println!("Loaded modules: {}", modules.len());
14
15    for module in modules.iter().take(5) {
16        println!("  {} @ 0x{:X} (size: 0x{:X})",
17            module.name, module.base, module.size);
18    }
19
20    if let Some(kernel32) = modules.iter().find(|m| m.name.eq_ignore_ascii_case("kernel32.dll")) {
21        println!("\nkernel32.dll base: 0x{:X}", kernel32.base);
22
23        let bytes = process.read_bytes(kernel32.base, 64)?;
24        println!("First 64 bytes:");
25        for (i, chunk) in bytes.chunks(16).enumerate() {
26            print!("  {:04X}: ", i * 16);
27            for byte in chunk {
28                print!("{:02X} ", byte);
29            }
30            println!();
31        }
32    }
33
34    Ok(())
35}