extern crate unicorn; use unicorn::{Cpu, CpuARM}; fn main() { let (major, minor) = unicorn::unicorn_version(); println!("version : {}.{}", major, minor); println!( "Support for:\n\t x86: {}\n\t arm: {}\n\t mips: {}", unicorn::arch_supported(unicorn::Arch::X86), unicorn::arch_supported(unicorn::Arch::ARM), unicorn::arch_supported(unicorn::Arch::MIPS) ); let emu = CpuARM::new(unicorn::Mode::THUMB).expect("failed to create emulator"); let page_size = emu .query(unicorn::Query::PAGE_SIZE) .expect("failed to query page size"); println!("page size : {}", page_size); let hardware_mode = emu .query(unicorn::Query::MODE) .expect("failed to query hardware mode"); println!("hardware mode : {}", hardware_mode); println!("Sample error message : {}", unicorn::Error::HOOK.msg()); emu.mem_map(0x10000, 0x4000, unicorn::Protection::ALL) .expect("failed to map first memory region"); emu.mem_map(0x20000, 0x4000, unicorn::Protection::ALL) .expect("failed to map second memory region"); let regions = emu .mem_regions() .expect("failed to retrieve memory mappings"); println!("Regions : {}", regions.len()); for region in ®ions { println!("{:?}", region); } }