From bfab4f384e40407b37e79a303bdcca743b081e0e Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Mon, 8 Dec 2025 19:21:30 -0500 Subject: [Rust] Add simple architecture tests Still need to add a custom architecture for unit tests like in python --- rust/tests/architecture.rs | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 rust/tests/architecture.rs diff --git a/rust/tests/architecture.rs b/rust/tests/architecture.rs new file mode 100644 index 00000000..07a33364 --- /dev/null +++ b/rust/tests/architecture.rs @@ -0,0 +1,77 @@ +use binaryninja::architecture::{Architecture, CoreArchitecture}; +use binaryninja::disassembly::{ + InstructionTextToken, InstructionTextTokenContext, InstructionTextTokenKind, +}; +use binaryninja::headless::Session; + +#[test] +fn test_architecture_info() { + let _session = Session::new().expect("Failed to initialize session"); + let arch = CoreArchitecture::by_name("x86_64").expect("Failed to get architecture"); + assert_eq!(arch.name(), "x86_64"); + assert_eq!(arch.endianness(), binaryninja::Endianness::LittleEndian); + assert_eq!(arch.address_size(), 8); +} + +#[test] +fn test_architecture_disassembly() { + let _session = Session::new().expect("Failed to initialize session"); + let arch = CoreArchitecture::by_name("x86_64").expect("Failed to get architecture"); + + // mov rax, 0x10 + let data = b"\x48\xC7\xC0\x10\x00\x00\x00"; + let address = 0x1000; + + let (instr_len, tokens) = arch + .instruction_text(data, address) + .expect("Failed to disassemble instruction"); + assert_eq!(instr_len, 7); + + let expected_tokens: Vec = vec![ + InstructionTextToken { + address: 0, + text: "mov".to_string(), + confidence: 255, + context: InstructionTextTokenContext::Normal, + expr_index: None, + kind: InstructionTextTokenKind::Instruction, + }, + InstructionTextToken { + address: 0, + text: " ".to_string(), + confidence: 255, + context: InstructionTextTokenContext::Normal, + expr_index: None, + kind: InstructionTextTokenKind::Text, + }, + InstructionTextToken { + address: 0, + text: "rax".to_string(), + confidence: 255, + context: InstructionTextTokenContext::Normal, + expr_index: None, + kind: InstructionTextTokenKind::Register, + }, + InstructionTextToken { + address: 0, + text: ", ".to_string(), + confidence: 255, + context: InstructionTextTokenContext::Normal, + expr_index: None, + kind: InstructionTextTokenKind::OperandSeparator, + }, + InstructionTextToken { + address: 0, + text: "0x10".to_string(), + confidence: 255, + context: InstructionTextTokenContext::Normal, + expr_index: None, + kind: InstructionTextTokenKind::PossibleAddress { + value: 16, + size: Some(8), + }, + }, + ]; + + assert_eq!(tokens, expected_tokens); +} -- cgit v1.3.1