summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-12-08 19:21:30 -0500
committerMason Reed <35282038+emesare@users.noreply.github.com>2025-12-10 17:35:19 -0500
commitbfab4f384e40407b37e79a303bdcca743b081e0e (patch)
treef55828a02ee489976da57340600a001c2ebdc1f8
parentc8d44056b60c0e790da58fc1cfc22a77a4099023 (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.rs77
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);
+}