From 812ae2d31a18d6c17cc5d35fe36032bc5d471240 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 17 Jan 2026 22:27:49 +0800 Subject: [PATCH] Fix disasm wrong offset calculate --- src/scripts/entis_gls/csx/v1/disasm.rs | 6 +++--- src/scripts/entis_gls/csx/v1/mod.rs | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/scripts/entis_gls/csx/v1/disasm.rs b/src/scripts/entis_gls/csx/v1/disasm.rs index 650b1c2..e7c4d4c 100644 --- a/src/scripts/entis_gls/csx/v1/disasm.rs +++ b/src/scripts/entis_gls/csx/v1/disasm.rs @@ -396,7 +396,7 @@ impl<'a> ECSExecutionImageDisassembler<'a> { self.addr )); } - let catch_addr = self.stream.read_u32()? + self.stream.pos as u32; + let catch_addr = self.stream.read_i32()? as i64 + self.stream.pos as i64; self.line(&format!("Enter \"{}\" Try-Catch {:08x}", name, catch_addr))?; } Ok(()) @@ -408,14 +408,14 @@ impl<'a> ECSExecutionImageDisassembler<'a> { } fn command_jump(&mut self) -> Result<()> { - let target_addr = self.stream.read_u32()? as u64 + self.stream.pos as u64; + let target_addr = self.stream.read_i32()? as i64 + self.stream.pos as i64; self.line(&format!("Jump {:08x}", target_addr))?; Ok(()) } fn command_cjump(&mut self) -> Result<()> { let cond = self.stream.read_u8()?; - let target_addr = self.stream.read_u32()? as u64 + self.stream.pos as u64; + let target_addr = self.stream.read_i32()? as i64 + self.stream.pos as i64; self.line(&format!("CJump {} {:08x}", cond, target_addr))?; Ok(()) } diff --git a/src/scripts/entis_gls/csx/v1/mod.rs b/src/scripts/entis_gls/csx/v1/mod.rs index 3c90535..503b9d6 100644 --- a/src/scripts/entis_gls/csx/v1/mod.rs +++ b/src/scripts/entis_gls/csx/v1/mod.rs @@ -111,6 +111,7 @@ impl Script for CSXScript { fn custom_export(&self, filename: &std::path::Path, encoding: Encoding) -> Result<()> { if self.disasm { let file = crate::utils::files::write_file(filename)?; + let file = std::io::BufWriter::new(file); self.img.disasm(Box::new(file))?; } else { let messages = self.img.export_all()?;