summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-05-10 19:24:35 -0400
committerMason Reed <35282038+emesare@users.noreply.github.com>2025-05-12 17:45:24 -0400
commit7e32ee8b629e3e4f8d061cbe0729ff961b3502d7 (patch)
treeb33eedcd9afb5422aefd1a42e95f4a9ab2e7cca0 /plugins
parent4180c31fda63b6ccb9ce4ee543031fe4a5060d5f (diff)
[Rust] Remove `NonSSAVariant` bound from `LowLevelILFunction`
We don't do enough with the lifted il != non lifted il to justify the bound. This makes modifying IL much less work as the historical lifted il bound is gone.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/warp/src/cache.rs14
-rw-r--r--plugins/warp/src/lib.rs16
-rw-r--r--plugins/warp/src/plugin/workflow.rs3
3 files changed, 14 insertions, 19 deletions
diff --git a/plugins/warp/src/cache.rs b/plugins/warp/src/cache.rs
index 7219b547..cc8dfded 100644
--- a/plugins/warp/src/cache.rs
+++ b/plugins/warp/src/cache.rs
@@ -3,10 +3,8 @@ use crate::{build_function, function_guid};
use binaryninja::binary_view::{BinaryView, BinaryViewExt};
use binaryninja::confidence::MAX_CONFIDENCE;
use binaryninja::function::Function as BNFunction;
-use binaryninja::low_level_il::function::{
- FunctionMutability, LowLevelILFunction, NonSSA, RegularNonSSA,
-};
-use binaryninja::low_level_il::RegularLowLevelILFunction;
+use binaryninja::low_level_il::function::{FunctionMutability, LowLevelILFunction, NonSSA};
+use binaryninja::low_level_il::LowLevelILRegularFunction;
use binaryninja::rc::Guard;
use binaryninja::rc::Ref as BNRef;
use binaryninja::symbol::Symbol as BNSymbol;
@@ -67,7 +65,7 @@ pub fn try_cached_function_match(function: &BNFunction) -> Option<Function> {
.to_owned()
}
-pub fn cached_function(function: &BNFunction, llil: &RegularLowLevelILFunction) -> Function {
+pub fn cached_function(function: &BNFunction, llil: &LowLevelILRegularFunction) -> Function {
let view = function.view();
let view_id = ViewID::from(view.as_ref());
let function_cache = FUNCTION_CACHE.get_or_init(Default::default);
@@ -120,7 +118,7 @@ where
pub fn cached_function_guid<M: FunctionMutability>(
function: &BNFunction,
- llil: &LowLevelILFunction<M, NonSSA<RegularNonSSA>>,
+ llil: &LowLevelILFunction<M, NonSSA>,
) -> FunctionGUID {
let view = function.view();
let view_id = ViewID::from(view);
@@ -198,7 +196,7 @@ pub struct FunctionCache {
}
impl FunctionCache {
- pub fn function(&self, function: &BNFunction, llil: &RegularLowLevelILFunction) -> Function {
+ pub fn function(&self, function: &BNFunction, llil: &LowLevelILRegularFunction) -> Function {
let function_id = FunctionID::from(function);
match self.cache.get(&function_id) {
Some(function) => function.value().to_owned(),
@@ -325,7 +323,7 @@ impl GUIDCache {
pub fn function_guid<M: FunctionMutability>(
&self,
function: &BNFunction,
- llil: &LowLevelILFunction<M, NonSSA<RegularNonSSA>>,
+ llil: &LowLevelILFunction<M, NonSSA>,
) -> FunctionGUID {
let function_id = FunctionID::from(function);
match self.cache.get(&function_id) {
diff --git a/plugins/warp/src/lib.rs b/plugins/warp/src/lib.rs
index 3d68b402..62af0102 100644
--- a/plugins/warp/src/lib.rs
+++ b/plugins/warp/src/lib.rs
@@ -10,9 +10,7 @@ use binaryninja::binary_view::BinaryViewExt;
use binaryninja::confidence::MAX_CONFIDENCE;
use binaryninja::function::{Function as BNFunction, NativeBlock};
use binaryninja::low_level_il::expression::{ExpressionHandler, LowLevelILExpressionKind};
-use binaryninja::low_level_il::function::{
- FunctionMutability, LowLevelILFunction, NonSSA, RegularNonSSA,
-};
+use binaryninja::low_level_il::function::{FunctionMutability, LowLevelILFunction, NonSSA};
use binaryninja::low_level_il::instruction::{
InstructionHandler, LowLevelILInstruction, LowLevelILInstructionKind,
};
@@ -46,7 +44,7 @@ pub fn user_signature_dir() -> PathBuf {
pub fn build_function<M: FunctionMutability>(
func: &BNFunction,
- llil: &LowLevelILFunction<M, NonSSA<RegularNonSSA>>,
+ llil: &LowLevelILFunction<M, NonSSA>,
) -> Function {
let bn_fn_ty = func.function_type();
Function {
@@ -78,7 +76,7 @@ pub fn sorted_basic_blocks(func: &BNFunction) -> Vec<BNRef<BNBasicBlock<NativeBl
pub fn function_guid<M: FunctionMutability>(
func: &BNFunction,
- llil: &LowLevelILFunction<M, NonSSA<RegularNonSSA>>,
+ llil: &LowLevelILFunction<M, NonSSA>,
) -> FunctionGUID {
let basic_blocks = sorted_basic_blocks(func);
let basic_block_guids = basic_blocks
@@ -90,7 +88,7 @@ pub fn function_guid<M: FunctionMutability>(
pub fn basic_block_guid<M: FunctionMutability>(
basic_block: &BNBasicBlock<NativeBlock>,
- llil: &LowLevelILFunction<M, NonSSA<RegularNonSSA>>,
+ llil: &LowLevelILFunction<M, NonSSA>,
) -> BasicBlockGUID {
let func = basic_block.function();
let view = func.view();
@@ -98,7 +96,7 @@ pub fn basic_block_guid<M: FunctionMutability>(
let max_instr_len = arch.max_instr_len();
// NOPs and useless moves are blacklisted to allow for hot-patchable functions.
- let is_blacklisted_instr = |instr: &LowLevelILInstruction<M, NonSSA<RegularNonSSA>>| {
+ let is_blacklisted_instr = |instr: &LowLevelILInstruction<M, NonSSA>| {
match instr.kind() {
LowLevelILInstructionKind::Nop(_) => true,
LowLevelILInstructionKind::SetReg(op) => {
@@ -126,8 +124,8 @@ pub fn basic_block_guid<M: FunctionMutability>(
}
};
- let is_variant_instr = |instr: &LowLevelILInstruction<M, NonSSA<RegularNonSSA>>| {
- let is_variant_expr = |expr: &LowLevelILExpressionKind<M, NonSSA<RegularNonSSA>>| {
+ let is_variant_instr = |instr: &LowLevelILInstruction<M, NonSSA>| {
+ let is_variant_expr = |expr: &LowLevelILExpressionKind<M, NonSSA>| {
// TODO: Checking the section here is slow, we should gather all section ranges outside of this.
match expr {
LowLevelILExpressionKind::ConstPtr(op)
diff --git a/plugins/warp/src/plugin/workflow.rs b/plugins/warp/src/plugin/workflow.rs
index 9f7c4d0d..f5763116 100644
--- a/plugins/warp/src/plugin/workflow.rs
+++ b/plugins/warp/src/plugin/workflow.rs
@@ -3,7 +3,6 @@ use crate::matcher::cached_function_matcher;
use binaryninja::background_task::BackgroundTask;
use binaryninja::binary_view::{BinaryView, BinaryViewExt};
use binaryninja::command::Command;
-use binaryninja::low_level_il::function::RegularNonSSA;
use binaryninja::workflow::{Activity, AnalysisContext, Workflow};
use std::time::Instant;
@@ -74,7 +73,7 @@ pub fn insert_workflow() {
let guid_activity = |ctx: &AnalysisContext| {
let function = ctx.function();
// TODO: Returning RegularNonSSA means we cant modify the il (the lifting code was written just for lifted il, that needs to be fixed)
- if let Some(llil) = unsafe { ctx.llil_function::<RegularNonSSA>() } {
+ if let Some(llil) = unsafe { ctx.llil_function() } {
cached_function_guid(&function, &llil);
}
};