From 28ff277a2a7693d5a9ab1929bc459049c2e52b27 Mon Sep 17 00:00:00 2001 From: Mark Rowe Date: Mon, 11 Aug 2025 10:42:07 -0700 Subject: [Rust] Add LowLevelILFunction::{get_ssa_register_value, get_ssa_flag_value} These are available on `LowLevelILFunction`. --- rust/src/low_level_il/function.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'rust/src/low_level_il/function.rs') diff --git a/rust/src/low_level_il/function.rs b/rust/src/low_level_il/function.rs index 1955c147..177b2a1a 100644 --- a/rust/src/low_level_il/function.rs +++ b/rust/src/low_level_il/function.rs @@ -18,11 +18,12 @@ use std::marker::PhantomData; use binaryninjacore_sys::*; -use crate::architecture::CoreArchitecture; +use crate::architecture::{CoreArchitecture, CoreFlag}; use crate::basic_block::BasicBlock; use crate::function::Function; use crate::low_level_il::block::LowLevelILBlock; use crate::rc::*; +use crate::variable::RegisterValue; use super::*; @@ -297,6 +298,37 @@ impl Ref> { }; self.instruction_from_index(LowLevelInstructionIndex(instr_idx)) } + + /// Returns the value of the given SSA register. + #[must_use] + pub fn get_ssa_register_value( + &self, + reg: &LowLevelILSSARegisterKind, + ) -> Option { + let register_id = match reg { + LowLevelILSSARegisterKind::Full { kind, .. } => kind.id(), + LowLevelILSSARegisterKind::Partial { partial_reg, .. } => partial_reg.id(), + }; + let value = unsafe { + BNGetLowLevelILSSARegisterValue(self.handle, register_id.into(), reg.version() as usize) + }; + if value.state == BNRegisterValueType::UndeterminedValue { + return None; + } + Some(value.into()) + } + + /// Returns the value of the given SSA flag. + #[must_use] + pub fn get_ssa_flag_value(&self, flag: &LowLevelILSSAFlag) -> Option { + let value = unsafe { + BNGetLowLevelILSSAFlagValue(self.handle, flag.flag.id().0, flag.version as usize) + }; + if value.state == BNRegisterValueType::UndeterminedValue { + return None; + } + Some(value.into()) + } } impl ToOwned for LowLevelILFunction -- cgit v1.3.1