From 22fee005cd1429d3fc44ba49234b24f4caa29af2 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Sat, 26 Aug 2023 17:34:54 +0300 Subject: [PATCH] implement find_str and find_str_backwards --- src/fot/raw.rs | 11 ++++++++--- src/fot/save.rs | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) 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;