extern crate keystone; use keystone::{Keystone, Arch, OptionType}; #[test] fn version() { let (major, minor) = keystone::version(); assert_eq!((major, minor), keystone::bindings_version()); } #[test] fn arch_supported() { assert_eq!(keystone::arch_supported(Arch::ARM), true); assert_eq!(keystone::arch_supported(Arch::X86), true); } #[test] fn asm() { let asm = String::from("mov ah, 0x80\n nop\n mov al, 0x81\n"); let engine = Keystone::new(Arch::X86, keystone::MODE_LITTLE_ENDIAN | keystone::MODE_32) .expect("Could not initialize Keystone engine"); engine.option(OptionType::SYNTAX, keystone::OPT_SYNTAX_NASM) .expect("Could not set option to nasm syntax"); let result = engine.asm(asm, 0) .expect("Could not assemble"); print!("{0:?}", result.bytes); assert_eq!(result.bytes,[0xb4,0x80, 0x90, 0xb0, 0x81]); } #[test] fn invalid_asm() { let asm = String::from("invalid asm"); let engine = Keystone::new(Arch::X86, keystone::MODE_32) .expect("Could not initialize Keystone engine"); let result = engine.asm(asm, 0); let err = result.unwrap_err(); assert_eq!(err, keystone::ERR_ASM_MNEMONICFAIL); assert_eq!(err.msg(), "Invalid mnemonic (KS_ERR_ASM_MNEMONICFAIL)"); assert_eq!(format!("{}", err), "Invalid mnemonic (KS_ERR_ASM_MNEMONICFAIL)"); }