#![allow(clippy::deprecated_cfg_attr)]
#![cfg_attr(rustfmt, rustfmt_skip)]
#[macro_use]
extern crate json;
extern crate elf;
use std::path::PathBuf;
extern crate bvm_filter;
use bvm_filter::disassembler;
fn to_json(prog: &[u8]) -> String {
let insns = disassembler::to_insn_vec(prog);
let mut json_insns = vec![];
for insn in insns {
json_insns.push(object!(
"opc" => format!("{:#x}", insn.opc), "dst" => format!("{:#x}", insn.dst), "src" => format!("{:#x}", insn.src), "off" => format!("{:#x}", insn.off), "imm" => format!("{:#x}", insn.imm as i32), "desc" => insn.desc
)
);
}
json::stringify_pretty(object!(
"size" => json_insns.len(),
"insns" => json_insns
), 4)
}
fn main() {
let filename = "examples/load_elf__block_a_port.o";
let path = PathBuf::from(filename);
let file = match elf::File::open_path(&path) {
Ok(f) => f,
Err(e) => panic!("Error: {:?}", e),
};
let text_scn = match file.get_section(".classifier") {
Some(s) => s,
None => panic!("Failed to look up .classifier section"),
};
let prog = &text_scn.data;
println!("{}", to_json(prog));
}