Fix disasm wrong offset calculate

This commit is contained in:
2026-01-17 22:27:49 +08:00
parent 5822fbee71
commit 812ae2d31a
2 changed files with 4 additions and 3 deletions

View File

@@ -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(())
}

View File

@@ -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()?;