From 6762195378dbc9f92dfa7226fbe6d17ad7d7742f Mon Sep 17 00:00:00 2001 From: Marco Thomas Date: Sun, 25 May 2025 10:27:32 +0900 Subject: [PATCH] chore: show raw pointer value in disasm --- src/disasm.rs | 16 +++++++++++++++- src/operands.rs | 4 +++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/disasm.rs b/src/disasm.rs index 705b907..37b8aa1 100644 --- a/src/disasm.rs +++ b/src/disasm.rs @@ -1,7 +1,9 @@ //! The main dissembling logic. use crate::aout::Aout; -use crate::operands::{Displacement, IByte, IWord, MemoryIndex, ModRmTarget, Operand, Pointer}; +use crate::operands::{ + DWord, Displacement, IByte, IWord, MemoryIndex, ModRmTarget, Operand, Pointer, +}; use crate::register::{Register, RegisterId, SegmentRegister}; use crate::{ Args, @@ -541,6 +543,12 @@ impl Disassembler { 0x99 => Mnemonic::CWD, 0x9A => Mnemonic::CALL_p(Pointer { + raw: DWord::from_le_bytes([ + self.text[self.offset], + self.text[self.offset + 1], + self.text[self.offset + 2], + self.text[self.offset + 3], + ]), segment: self.parse_word(), offset: self.parse_word(), }), @@ -657,6 +665,12 @@ impl Disassembler { 0xE9 => Mnemonic::JMP_v(self.parse_j_word()), 0xEA => Mnemonic::JMP_p(Pointer { + raw: DWord::from_le_bytes([ + self.text[self.offset], + self.text[self.offset + 1], + self.text[self.offset + 2], + self.text[self.offset + 3], + ]), segment: self.parse_word(), offset: self.parse_word(), }), diff --git a/src/operands.rs b/src/operands.rs index 318579f..7e85868 100644 --- a/src/operands.rs +++ b/src/operands.rs @@ -8,6 +8,7 @@ pub type Byte = u8; // b pub type IByte = i8; // used for displacements of memory access pub type Word = u16; // w or v pub type IWord = i16; // used for displacement of memory access +pub type DWord = u32; #[derive(Debug, Clone)] #[allow(dead_code)] @@ -130,12 +131,13 @@ impl fmt::Display for MemoryIndex { #[derive(Debug, Clone)] /// 32-bit segment:offset pointer (e.g. for CALL instruction) pub struct Pointer { + pub raw: DWord, pub segment: Word, pub offset: Word, } impl std::fmt::Display for Pointer { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}:{}", self.segment, self.offset) + write!(f, "[{:#04x}] ({}:{})", self.raw, self.segment, self.offset) } }