summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2025-04-05 15:46:16 -0400
committerGlenn Smith <glenn@vector35.com>2025-04-05 15:53:46 -0400
commit3004784707280840879507327117021401615306 (patch)
treebf83ee4c45f5b6f554c7a676777ade4b5c115bf5 /python
parentd222db8bd49f33716a18d0f9fc47833c2f802553 (diff)
Add current_il_expr and current_il_expr_index magic vars
Diffstat (limited to 'python')
-rw-r--r--python/scriptingprovider.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py
index 05017972..74102dc2 100644
--- a/python/scriptingprovider.py
+++ b/python/scriptingprovider.py
@@ -1767,7 +1767,7 @@ PythonScriptingProvider.register_magic_variable(
def _get_current_token(instance: PythonScriptingInstance):
if instance.interpreter.locals["current_ui_token_state"] is not None:
- if instance.interpreter.locals["current_ui_token_state"].valid:
+ if instance.interpreter.locals["current_ui_token_state"].tokenIndex != 0xffffffff: # BN_INVALID_OPERAND
return instance.interpreter.locals["current_ui_token_state"].token
return None
@@ -1809,6 +1809,19 @@ PythonScriptingProvider.register_magic_variable(
)
+def _get_current_il_expr_index(instance: PythonScriptingInstance):
+ if instance.interpreter.locals["current_token"] is not None:
+ return instance.interpreter.locals["current_token"].il_expr_index
+ return None
+
+
+PythonScriptingProvider.register_magic_variable(
+ "current_il_expr_index",
+ _get_current_il_expr_index,
+ depends_on=["current_token"]
+)
+
+
def _get_current_il_function(instance: PythonScriptingInstance):
from binaryninja import FunctionGraphType
if instance.interpreter.locals["current_ui_view_location"] is not None:
@@ -1871,6 +1884,25 @@ PythonScriptingProvider.register_magic_variable(
)
+def _get_current_il_expr(instance: PythonScriptingInstance):
+ if instance.interpreter.locals["current_il_function"] is not None \
+ and instance.interpreter.locals["current_il_expr_index"] is not None:
+ return instance.interpreter.locals["current_il_function"].get_expr(
+ instance.interpreter.locals["current_il_expr_index"]
+ )
+ return None
+
+
+PythonScriptingProvider.register_magic_variable(
+ "current_il_expr",
+ _get_current_il_expr,
+ depends_on=[
+ "current_il_expr_index",
+ "current_il_function"
+ ]
+)
+
+
def _get_current_il_basic_block(instance: PythonScriptingInstance):
if instance.interpreter.locals["current_il_instruction"] is not None:
return instance.interpreter.locals["current_il_instruction"].il_basic_block