chore: show raw pointer value in disasm
This commit is contained in:
@@ -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(),
|
||||
}),
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user