diff options
| -rw-r--r-- | binaryninjacore.h | 6 | ||||
| -rw-r--r-- | python/scriptingprovider.py | 17 | ||||
| -rw-r--r-- | ui/flowgraphwidget.h | 2 | ||||
| -rw-r--r-- | ui/linearview.h | 2 | ||||
| -rw-r--r-- | ui/viewframe.h | 2 |
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(); |
