Skip to content

Commit

Permalink
add MediumLevelILFunction::generate_ssa_form
Browse files Browse the repository at this point in the history
  • Loading branch information
rbran committed May 21, 2024
1 parent e9a480b commit 47ed0c2
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions rust/src/mlil/function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,51 @@ impl MediumLevelILFunction {
pub fn finalize(&self) {
unsafe { BNFinalizeMediumLevelILFunction(self.handle) }
}

/// Generate SSA form given the current MLIL
///
/// * `analyze_conditionals` - whether or not to analyze conditionals
/// * `handle_aliases` - whether or not to handle aliases
/// * `known_not_aliases` - optional list of variables known to be not aliased
/// * `known_aliases` - optional list of variables known to be aliased
pub fn generate_ssa_form<V1, V2>(
&self,
analyze_conditionals: bool,
handle_aliases: bool,
known_not_aliases: Option<V1>,
known_aliases: Option<V2>,
) where
V1: IntoIterator<Item = Variable>,
V2: IntoIterator<Item = Variable>,
{
let mut known_not_aliases: Box<[_]> = known_not_aliases
.map(|x| x.into_iter().map(|x| x.raw()).collect())
.unwrap_or_default();
let mut known_aliases: Box<[_]> = known_aliases
.map(|x| x.into_iter().map(|x| x.raw()).collect())
.unwrap_or_default();
let (known_not_aliases_ptr, known_not_aliases_len) = if known_not_aliases.is_empty() {
(core::ptr::null_mut(), 0)
} else {
(known_not_aliases.as_mut_ptr(), known_not_aliases.len())
};
let (known_aliases_ptr, known_aliases_len) = if known_not_aliases.is_empty() {
(core::ptr::null_mut(), 0)
} else {
(known_aliases.as_mut_ptr(), known_aliases.len())
};
unsafe {
BNGenerateMediumLevelILSSAForm(
self.handle,
analyze_conditionals,
handle_aliases,
known_not_aliases_ptr,
known_not_aliases_len,
known_aliases_ptr,
known_aliases_len,
)
}
}
}

impl ToOwned for MediumLevelILFunction {
Expand Down

0 comments on commit 47ed0c2

Please sign in to comment.