summaryrefslogtreecommitdiff
path: root/rust/tests
diff options
context:
space:
mode:
authorMason Reed <35282038+emesare@users.noreply.github.com>2025-12-10 17:18:28 -0500
committerGitHub <noreply@github.com>2025-12-10 17:18:28 -0500
commit59b73aa1834d5f558595a888411c70a4fac31a3f (patch)
treebd19185a3f8c421ea11d1df20ea41bd00c078045 /rust/tests
parent0ec8e7d31dcd5c38498ac473db46e3b55883edd2 (diff)
[Rust] Add `LowLevelILSSARegister` type (#7745)
Diffstat (limited to 'rust/tests')
-rw-r--r--rust/tests/low_level_il.rs29
1 files changed, 26 insertions, 3 deletions
diff --git a/rust/tests/low_level_il.rs b/rust/tests/low_level_il.rs
index 79a79964..e6f8d8ff 100644
--- a/rust/tests/low_level_il.rs
+++ b/rust/tests/low_level_il.rs
@@ -259,13 +259,19 @@ fn test_llil_ssa() {
LowLevelILInstructionKind::SetRegSsa(op) => {
assert_eq!(op.size(), 4);
match op.dest_reg() {
- LowLevelILSSARegisterKind::Full { kind, version } => {
- assert_eq!(kind.name(), "edi");
- assert_eq!(version, 1);
+ LowLevelILSSARegisterKind::Full(reg) => {
+ assert_eq!(reg.name(), "edi");
+ assert_eq!(reg.version, 1);
}
_ => panic!("Expected LowLevelILSSARegisterKind::Full"),
}
assert_eq!(op.source_expr().index, LowLevelExpressionIndex(0));
+
+ // Verify dest_reg does not have a use, so let's verify the ssa register definition.
+ let dest_reg_def = llil_ssa_function
+ .get_ssa_register_definition(op.dest_reg())
+ .expect("Valid ssa reg def");
+ assert_eq!(dest_reg_def.address(), ssa_instr_0.address());
}
_ => panic!("Expected SetRegSsa"),
}
@@ -287,6 +293,23 @@ fn test_llil_ssa() {
let dest_memory_version = op.dest_memory_version();
assert_eq!(dest_memory_version, 1);
assert_eq!(dest_expr.index, LowLevelExpressionIndex(4));
+
+ // Grab the SP register so we can verify its use.
+ let dest_expr_kind = dest_expr.kind();
+ let sub_expr = dest_expr_kind.as_binary_op().unwrap();
+ match sub_expr.left().kind() {
+ LowLevelILExpressionKind::RegSsa(reg) => {
+ // Verify esp#0 has a single use in the next instruction (same address however).
+ let sp_0_uses = llil_ssa_function.get_ssa_register_uses(reg.source_reg());
+ println!("{:?}", sp_0_uses);
+ assert_eq!(sp_0_uses.len(), 2);
+ let _next_instr_use = sp_0_uses
+ .iter()
+ .find(|inst| inst.index != ssa_instr_1.index)
+ .expect("Failed to get next instructions use of sp");
+ }
+ _ => panic!("Expected RegSsa"),
+ }
}
_ => panic!("Expected StoreSsa"),
}