disasm_text/
disasm_text.rs1use std::io::Read;
4
5use superh::{DecodeOptions, FormatOptions, ParseEndian, ParseMode, ParsedValue, Parser};
6
7fn main() {
8 let args: Vec<String> = std::env::args().collect();
9 let base_address = args.get(1).map_or(0, |value| {
10 let value = value.strip_prefix("0x").unwrap_or(value);
11 u32::from_str_radix(value, 16).expect("base address must be hexadecimal")
12 });
13
14 let mut bytes = Vec::new();
15 std::io::stdin().read_to_end(&mut bytes).expect("read stdin");
16
17 let format = FormatOptions::default();
18 let mut parser =
19 Parser::new(&bytes, ParseMode::Instruction, ParseEndian::Little, DecodeOptions::default());
20 parser.set_address(base_address);
21
22 for item in parser {
23 match item.value {
24 ParsedValue::Instruction { result, .. } => {
25 println!("{:08x}: {}", item.address, result.display_at(item.address, &format));
26 }
27 ParsedValue::Data(data) => println!("{:08x}: {}", item.address, data.display()),
28 _ => {}
29 }
30 }
31}