summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjacore.h6
-rw-r--r--python/scriptingprovider.py17
-rw-r--r--ui/flowgraphwidget.h2
-rw-r--r--ui/linearview.h2
-rw-r--r--ui/viewframe.h2
5 files changed, 29 insertions, 0 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index ae918cd5..246918fc 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2793,6 +2793,12 @@ extern "C"
uint64_t end;
} BNAddressRange;
+ typedef struct BNILIndexRange
+ {
+ size_t start;
+ size_t end;
+ } BNILIndexRange;
+
typedef struct BNSystemCallInfo
{
uint32_t number;
diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py
index 0a0f9ffa..10f97f0e 100644
--- a/python/scriptingprovider.py
+++ b/python/scriptingprovider.py
@@ -680,6 +680,7 @@ class PythonScriptingInstance(ScriptingInstance):
"current_il_index",
"current_il_function",
"current_il_instruction",
+ "current_il_instructions",
"current_il_basic_block"
}
self.locals = BlacklistedDict(
@@ -709,6 +710,7 @@ class PythonScriptingInstance(ScriptingInstance):
self.active_file_offset = None
self.active_dbg = None
self.active_il_index = 0
+ self.selection_start_il_index = 0
self.active_il_function = None
self.locals.blacklist_enabled = False
@@ -899,6 +901,9 @@ from binaryninja import *
elif action_handler is not None:
action_context = action_handler.actionContext()
+ if view is not None:
+ self.selection_start_il_index = view.getSelectionStartILInstructionIndex()
+
token_state = None
token = None
var = None
@@ -935,15 +940,26 @@ from binaryninja import *
except:
self.locals["current_il_instruction"] = None
+ invalid_il_index = 0xffffffffffffffff
+ if invalid_il_index not in (self.active_il_index, self.selection_start_il_index):
+ il_start = min(self.active_il_index, self.selection_start_il_index)
+ il_end = max(self.active_il_index, self.selection_start_il_index)
+ self.locals["current_il_instructions"] = (self.active_il_function[i] for i in \
+ range(il_start, il_end + 1))
+ else:
+ self.locals["current_il_instructions"] = None
+
if self.locals["current_il_instruction"]:
self.locals["current_il_basic_block"] = self.locals["current_il_instruction"].il_basic_block
else:
self.locals["current_il_instruction"] = None
+ self.locals["current_il_instructions"] = None
self.locals["current_il_basic_block"] = None
else:
self.locals["current_il_index"] = None
self.locals["current_il_function"] = None
self.locals["current_il_instruction"] = None
+ self.locals["current_il_instructions"] = None
self.locals["current_il_basic_block"] = None
self.active_il_function = None
@@ -971,6 +987,7 @@ from binaryninja import *
self.locals["current_il_index"] = None
self.locals["current_il_function"] = None
self.locals["current_il_instruction"] = None
+ self.locals["current_il_instructions"] = None
self.locals["current_il_basic_block"] = None
self.locals.blacklist_enabled = True
diff --git a/ui/flowgraphwidget.h b/ui/flowgraphwidget.h
index 392e8dd9..1fcb120d 100644
--- a/ui/flowgraphwidget.h
+++ b/ui/flowgraphwidget.h
@@ -279,6 +279,8 @@ class BINARYNINJAUIAPI FlowGraphWidget :
virtual MediumLevelILFunctionRef getCurrentMediumLevelILFunction() override;
virtual HighLevelILFunctionRef getCurrentHighLevelILFunction() override;
virtual size_t getCurrentILInstructionIndex() override;
+ virtual size_t getSelectionStartILInstructionIndex() override;
+ virtual BNILIndexRange getILIndexRange() override;
void scrollToCursor(bool center = false);
bool isUpdating();
diff --git a/ui/linearview.h b/ui/linearview.h
index 969dcd5f..bb99ce19 100644
--- a/ui/linearview.h
+++ b/ui/linearview.h
@@ -408,6 +408,8 @@ public:
virtual BasicBlockRef getCurrentBasicBlock() override;
virtual ArchitectureRef getCurrentArchitecture() override;
virtual size_t getCurrentILInstructionIndex() override;
+ virtual size_t getSelectionStartILInstructionIndex() override;
+ virtual BNILIndexRange getILIndexRange() override;
virtual bool navigate(uint64_t offset) override;
virtual bool navigateToFunction(FunctionRef func, uint64_t offset) override;
virtual bool navigateToViewLocation(const ViewLocation& viewLocation, bool center = false) override;
diff --git a/ui/viewframe.h b/ui/viewframe.h
index 4bf704e1..b835170d 100644
--- a/ui/viewframe.h
+++ b/ui/viewframe.h
@@ -228,6 +228,8 @@ class BINARYNINJAUIAPI View
virtual BNFunctionGraphType getILViewType() { return InvalidILViewType; }
virtual void setILViewType(BNFunctionGraphType ilViewType) {}
virtual size_t getCurrentILInstructionIndex() { return BN_INVALID_EXPR; }
+ virtual size_t getSelectionStartILInstructionIndex() { return BN_INVALID_EXPR; }
+ virtual BNILIndexRange getILIndexRange() { return {BN_INVALID_EXPR, BN_INVALID_EXPR}; }
virtual QFont getFont() = 0;
virtual DisassemblySettingsRef getDisassemblySettings();