read_write/
read_write.rs

1use dma_rs::Dma;
2
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    let dma = Dma::new("fpga://algo=0")?;
5    let process = dma.attach("explorer.exe")?;
6
7    let modules = process.list_modules()?;
8    let module = modules.first()
9        .ok_or("No modules found")?;
10
11    println!("Reading from {} @ 0x{:X}", module.name, module.base);
12
13    let value_u32: u32 = process.read(module.base)?;
14    println!("u32 value: 0x{:08X}", value_u32);
15
16    let value_u64: u64 = process.read(module.base)?;
17    println!("u64 value: 0x{:016X}", value_u64);
18
19    let bytes = process.read_bytes(module.base, 16)?;
20    print!("Bytes: ");
21    for byte in &bytes {
22        print!("{:02X} ", byte);
23    }
24    println!();
25
26    #[repr(C)]
27    #[derive(Copy, Clone, Debug)]
28    struct DosHeader {
29        e_magic: u16,
30        e_cblp: u16,
31        e_cp: u16,
32        e_crlc: u16,
33    }
34
35    let dos_header: DosHeader = process.read(module.base)?;
36    println!("\nDOS Header:");
37    println!("  Magic: 0x{:04X} ({}{})",
38        dos_header.e_magic,
39        (dos_header.e_magic as u8) as char,
40        (dos_header.e_magic >> 8) as u8 as char
41    );
42
43    Ok(())
44}