summaryrefslogtreecommitdiff
path: root/plugins/warp/api/python
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/warp/api/python
parent0fcfd654fc35830589613bdf22a39a2980dfcb7d (diff)
[WARP] Add `IsInstructionComputedVariant` API
Was previously not exposed, we want it for unit tests.
Diffstat (limited to 'plugins/warp/api/python')
-rw-r--r--plugins/warp/api/python/_warpcore.py19
-rw-r--r--plugins/warp/api/python/warp.py6
2 files changed, 25 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):