Struct iced_x86::NasmFormatter [−][src]
Nasm formatter
Examples
use iced_x86::*; let bytes = b"\x62\xF2\x4F\xDD\x72\x50\x01"; let mut decoder = Decoder::new(64, bytes, DecoderOptions::NONE); let instr = decoder.decode(); let mut output = String::new(); let mut formatter = NasmFormatter::new(); formatter.options_mut().set_uppercase_mnemonics(true); formatter.format(&instr, &mut output); assert_eq!("VCVTNE2PS2BF16 zmm2{k5}{z},zmm6,[rax+4]{1to16}", output);
Using a symbol resolver
use iced_x86::*; use std::collections::HashMap; let bytes = b"\x48\x8B\x8A\xA5\x5A\xA5\x5A"; let mut decoder = Decoder::new(64, bytes, DecoderOptions::NONE); let instr = decoder.decode(); struct MySymbolResolver { map: HashMap<u64, String> } impl SymbolResolver for MySymbolResolver { fn symbol(&mut self, instruction: &Instruction, operand: u32, instruction_operand: Option<u32>, address: u64, address_size: u32) -> Option<SymbolResult> { if let Some(symbol_string) = self.map.get(&address) { // The 'address' arg is the address of the symbol and doesn't have to be identical // to the 'address' arg passed to symbol(). If it's different from the input // address, the formatter will add +N or -N, eg. '[rax+symbol+123]' Some(SymbolResult::with_str(address, symbol_string.as_str())) } else { None } } } // Hard code the symbols, it's just an example!😄 let mut sym_map: HashMap<u64, String> = HashMap::new(); sym_map.insert(0x5AA55AA5, String::from("my_data")); let mut output = String::new(); let resolver = Box::new(MySymbolResolver { map: sym_map }); let mut formatter = NasmFormatter::with_options(Some(resolver), None); formatter.format(&instr, &mut output); assert_eq!("mov rcx,[rdx+my_data]", output);
Implementations
impl NasmFormatter
[src]
#[must_use]pub fn new() -> Self
[src]
Creates a nasm formatter
#[must_use]pub fn with_options(
symbol_resolver: Option<Box<dyn SymbolResolver>>,
options_provider: Option<Box<dyn FormatterOptionsProvider>>
) -> Self
[src]
symbol_resolver: Option<Box<dyn SymbolResolver>>,
options_provider: Option<Box<dyn FormatterOptionsProvider>>
) -> Self
Creates a nasm formatter
Arguments
symbol_resolver
: Symbol resolver orNone
options_provider
: Operand options provider orNone
Trait Implementations
impl Default for NasmFormatter
[src]
impl Formatter for NasmFormatter
[src]
#[must_use]fn options(&self) -> &FormatterOptions
[src]
#[must_use]fn options_mut(&mut self) -> &mut FormatterOptions
[src]
fn format_mnemonic_options(
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput,
options: u32
)
[src]
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput,
options: u32
)
#[must_use]fn operand_count(&mut self, instruction: &Instruction) -> u32
[src]
fn op_access(
&mut self,
instruction: &Instruction,
operand: u32
) -> Result<Option<OpAccess>, IcedError>
[src]
&mut self,
instruction: &Instruction,
operand: u32
) -> Result<Option<OpAccess>, IcedError>
fn get_instruction_operand(
&mut self,
instruction: &Instruction,
operand: u32
) -> Result<Option<u32>, IcedError>
[src]
&mut self,
instruction: &Instruction,
operand: u32
) -> Result<Option<u32>, IcedError>
fn get_formatter_operand(
&mut self,
instruction: &Instruction,
instruction_operand: u32
) -> Result<Option<u32>, IcedError>
[src]
&mut self,
instruction: &Instruction,
instruction_operand: u32
) -> Result<Option<u32>, IcedError>
fn format_operand(
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput,
operand: u32
) -> Result<(), IcedError>
[src]
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput,
operand: u32
) -> Result<(), IcedError>
fn format_operand_separator(
&mut self,
_instruction: &Instruction,
output: &mut dyn FormatterOutput
)
[src]
&mut self,
_instruction: &Instruction,
output: &mut dyn FormatterOutput
)
fn format_all_operands(
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput
)
[src]
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput
)
fn format(
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput
)
[src]
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput
)
#[must_use]fn format_register(&mut self, register: Register) -> &str
[src]
#[must_use]fn format_i8(&mut self, value: i8) -> &str
[src]
#[must_use]fn format_i16(&mut self, value: i16) -> &str
[src]
#[must_use]fn format_i32(&mut self, value: i32) -> &str
[src]
#[must_use]fn format_i64(&mut self, value: i64) -> &str
[src]
#[must_use]fn format_u8(&mut self, value: u8) -> &str
[src]
#[must_use]fn format_u16(&mut self, value: u16) -> &str
[src]
#[must_use]fn format_u32(&mut self, value: u32) -> &str
[src]
#[must_use]fn format_u64(&mut self, value: u64) -> &str
[src]
#[must_use]fn format_i8_options(
&mut self,
value: i8,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: i8,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_i16_options(
&mut self,
value: i16,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: i16,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_i32_options(
&mut self,
value: i32,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: i32,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_i64_options(
&mut self,
value: i64,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: i64,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_u8_options(
&mut self,
value: u8,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: u8,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_u16_options(
&mut self,
value: u16,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: u16,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_u32_options(
&mut self,
value: u32,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: u32,
number_options: &NumberFormattingOptions<'_>
) -> &str
#[must_use]fn format_u64_options(
&mut self,
value: u64,
number_options: &NumberFormattingOptions<'_>
) -> &str
[src]
&mut self,
value: u64,
number_options: &NumberFormattingOptions<'_>
) -> &str
fn format_mnemonic(
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput
)
[src]
&mut self,
instruction: &Instruction,
output: &mut dyn FormatterOutput
)
Auto Trait Implementations
impl !RefUnwindSafe for NasmFormatter
impl !Send for NasmFormatter
impl !Sync for NasmFormatter
impl Unpin for NasmFormatter
impl !UnwindSafe for NasmFormatter
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,