summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-07-10 01:35:51 -0400
committerMason Reed <mason@vector35.com>2025-07-15 12:34:43 -0400
commit7a525174fd59204330690a8f9d65fe2a3046cd38 (patch)
treeccaf7971640ad380bf71acdf8da96011084fbfdd /plugins
parent0fcfd654fc35830589613bdf22a39a2980dfcb7d (diff)
[WARP] Add `IsInstructionComputedVariant` API
Was previously not exposed, we want it for unit tests.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/warp/api/python/_warpcore.py19
-rw-r--r--plugins/warp/api/python/warp.py6
-rw-r--r--plugins/warp/api/warp.cpp5
-rw-r--r--plugins/warp/api/warpcore.h1
4 files changed, 31 insertions, 0 deletions
diff --git a/plugins/warp/api/python/_warpcore.py b/plugins/warp/api/python/_warpcore.py
index c53feefa..740072ab 100644
--- a/plugins/warp/api/python/_warpcore.py
+++ b/plugins/warp/api/python/_warpcore.py
@@ -956,6 +956,25 @@ def BNWARPIsLiftedInstructionVariant(
# -------------------------------------------------------
+# _BNWARPIsLowLevelInstructionComputedVariant
+
+_BNWARPIsLowLevelInstructionComputedVariant = core.BNWARPIsLowLevelInstructionComputedVariant
+_BNWARPIsLowLevelInstructionComputedVariant.restype = ctypes.c_bool
+_BNWARPIsLowLevelInstructionComputedVariant.argtypes = [
+ ctypes.POINTER(BNLowLevelILFunction),
+ ctypes.c_ulonglong,
+ ]
+
+
+# noinspection PyPep8Naming
+def BNWARPIsLowLevelInstructionComputedVariant(
+ llilFunction: ctypes.POINTER(BNLowLevelILFunction),
+ idx: int
+ ) -> bool:
+ return _BNWARPIsLowLevelInstructionComputedVariant(llilFunction, idx)
+
+
+# -------------------------------------------------------
# _BNWARPNewContainerReference
_BNWARPNewContainerReference = core.BNWARPNewContainerReference
diff --git a/plugins/warp/api/python/warp.py b/plugins/warp/api/python/warp.py
index e0500215..c761c323 100644
--- a/plugins/warp/api/python/warp.py
+++ b/plugins/warp/api/python/warp.py
@@ -365,6 +365,12 @@ def is_instruction_variant(function: LowLevelILFunction, variant: LowLevelILInst
def is_instruction_blacklisted(function: LowLevelILFunction, variant: LowLevelILInstruction) -> bool:
return warpcore.BNWARPIsLiftedInstructionBlacklisted(function.handle, variant.instr_index)
+def is_instruction_computed_variant(function: LowLevelILFunction, variant: LowLevelILInstruction) -> bool:
+ """
+ Checks to see if the instruction is variant due to some computed value. **Must use LLIL.**
+ """
+ return warpcore.BNWARPIsLowLevelInstructionComputedVariant(function.handle, variant.instr_index)
+
def get_function_guid(function: Function) -> Optional[FunctionGUID]:
guid = warpcore.BNWARPUUID()
if not warpcore.BNWARPGetAnalysisFunctionGUID(function.handle, guid):
diff --git a/plugins/warp/api/warp.cpp b/plugins/warp/api/warp.cpp
index 7d91c6e2..147add8e 100644
--- a/plugins/warp/api/warp.cpp
+++ b/plugins/warp/api/warp.cpp
@@ -319,6 +319,11 @@ bool IsInstructionBlacklisted(const BinaryNinja::LowLevelILFunction &function, B
return BNWARPIsLiftedInstructionBlacklisted(function.m_object, idx);
}
+bool IsInstructionComputedVariant(const BinaryNinja::LowLevelILFunction &function, BinaryNinja::ExprId idx)
+{
+ return BNWARPIsLowLevelInstructionComputedVariant(function.m_object, idx);
+}
+
std::optional<FunctionGUID> Warp::GetAnalysisFunctionGUID(const BinaryNinja::Function &function)
{
FunctionGUID guid;
diff --git a/plugins/warp/api/warpcore.h b/plugins/warp/api/warpcore.h
index d12c6b98..09190126 100644
--- a/plugins/warp/api/warpcore.h
+++ b/plugins/warp/api/warpcore.h
@@ -87,6 +87,7 @@ extern "C"
WARP_FFI_API bool BNWARPGetAnalysisFunctionGUID(BNFunction* analysisFunction, BNWARPFunctionGUID* result);
WARP_FFI_API bool BNWARPIsLiftedInstructionVariant(BNLowLevelILFunction* liftedFunction, size_t idx);
WARP_FFI_API bool BNWARPIsLiftedInstructionBlacklisted(BNLowLevelILFunction* liftedFunction, size_t idx);
+ WARP_FFI_API bool BNWARPIsLowLevelInstructionComputedVariant(BNLowLevelILFunction* llilFunction, size_t idx);
WARP_FFI_API BNWARPFunction* BNWARPGetFunction(BNFunction* analysisFunction);
WARP_FFI_API BNWARPFunction* BNWARPGetMatchedFunction(BNFunction* analysisFunction);