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}