chore: show raw pointer value in disasm

This commit is contained in:
2025-05-25 10:27:32 +09:00
parent 90fb88aec6
commit 6762195378
2 changed files with 18 additions and 2 deletions

View File

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

View File

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