diff options
| author | Mason Reed <mason@vector35.com> | 2025-12-08 19:21:30 -0500 |
|---|---|---|
| committer | Mason Reed <35282038+emesare@users.noreply.github.com> | 2025-12-10 17:35:19 -0500 |
| commit | bfab4f384e40407b37e79a303bdcca743b081e0e (patch) | |
| tree | f55828a02ee489976da57340600a001c2ebdc1f8 | |
| parent | c8d44056b60c0e790da58fc1cfc22a77a4099023 (diff) | |
[Rust] Add simple architecture tests
Still need to add a custom architecture for unit tests like in python
| -rw-r--r-- | rust/tests/architecture.rs | 77 |
1 files changed, 77 insertions, 0 deletions
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<InstructionTextToken> = 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); +} |
