diff --git a/src/fot/raw.rs b/src/fot/raw.rs index da26de2..d6cadc2 100644 --- a/src/fot/raw.rs +++ b/src/fot/raw.rs @@ -25,10 +25,15 @@ impl Raw { search.search_in(&self.mem[offset..]) } - pub fn find_all_str(&self, str: &str) -> Vec { - let mut offsets: Vec = Vec::new(); + pub fn find_str_backwards(&self, str: &str) -> Option { + for i in (0..self.mem.len()-str.len()).step_by(1024).rev() { + match self.find_str(str, i) { + Some(offset) => return Some(i+offset), + None => continue + }; + } - offsets + None } pub fn assemble_file(&self, path: &Path, blocks: Vec) -> Result<()> { diff --git a/src/fot/save.rs b/src/fot/save.rs index 21105b1..24b13e4 100644 --- a/src/fot/save.rs +++ b/src/fot/save.rs @@ -80,6 +80,8 @@ impl Save { pub fn save(&self, path: &Path) -> Result<()> { let raw = Raw { offset: 0, size: self.raw.len(), mem: self.raw.clone() }; + println!("found world at {:x}", raw.find_str_backwards("").unwrap()); + const START: usize = 0x99A84; const END: usize = 0xD1B1E; //0xD1B1E;