yaxpeax_core/memory/reader/
mod.rs1use std::collections::HashMap;
2use std::io::Read;
3
4use memory::repr::FlatMemoryRepr;
5use memory::repr::process::ModuleData;
6
7use std::fs::OpenOptions;
8use std::path::Path;
9
10pub mod hex;
11
12pub enum FileRepr {
13 IntelHEX(HashMap<u8, FlatMemoryRepr>),
14 Executable(ModuleData),
15 Flat(FlatMemoryRepr)
16}
17
18pub fn load_from_path(path: &Path) -> Result<FileRepr, String> {
19 let mut file = OpenOptions::new().read(true).open(path).unwrap();
20
21 let metadata = match file.metadata() {
22 Ok(metadata) => metadata,
23 Err(e) => { return Err(e.to_string()); }
24 };
25 let mut bytes = vec![0; metadata.len() as usize];
26 match file.read(&mut bytes) {
27 Ok(_) => { },
28 Err(e) => { return Err(e.to_string()); }
29 };
30
31 match hex::from_hex(&bytes) {
32 Ok(repr) => Ok(FileRepr::IntelHEX(repr)),
33 Err(e) => {
34 println!("{}", e);
35 match ModuleData::load_from(&bytes, format!("{}", path.display())) {
36 Some(data) => { Ok(FileRepr::Executable(data)) }
37 None => {
38 Ok(FileRepr::Flat({
39 let mut repr = FlatMemoryRepr::of(bytes);
40 if let Some(x) = path.to_str() {
41 repr.name = x.to_owned();
42 };
43 repr
44 }))
45 }
46 }
47 }
48 }
49}