From 3004784707280840879507327117021401615306 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Sat, 5 Apr 2025 15:46:16 -0400 Subject: Add current_il_expr and current_il_expr_index magic vars --- python/scriptingprovider.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'python') 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 -- cgit v1.3.1