From 565dd968745465d3ab939303056431bf9fa2f924 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Thu, 14 Dec 2017 15:13:54 -0500 Subject: Fix multi-line execution in python console --- python/scriptingprovider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'python/scriptingprovider.py') diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index f9758cc9..8645c96c 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -547,7 +547,7 @@ class PythonScriptingInstance(ScriptingInstance): self.locals["current_llil"] = self.active_func.low_level_il self.locals["current_mlil"] = self.active_func.medium_level_il - self.interpreter.runsource(code) + self.interpreter.runcode(code) if self.locals["here"] != self.active_addr: if not self.active_view.file.navigate(self.active_view.file.view, self.locals["here"]): -- cgit v1.3.1 From ae5ce4da4c1f6ea3a071a4eec1a5da3e6e2a3305 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Thu, 14 Dec 2017 18:38:57 -0500 Subject: Fix multi-line insertion and single expression evalutation --- python/scriptingprovider.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'python/scriptingprovider.py') diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index 8645c96c..761b359c 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -457,7 +457,7 @@ class PythonScriptingInstance(ScriptingInstance): super(PythonScriptingInstance.InterpreterThread, self).__init__() self.instance = instance self.locals = {"__name__": "__console__", "__doc__": None, "binaryninja": sys.modules[__name__]} - self.interpreter = code.InteractiveInterpreter(self.locals) + self.interpreter = code.InteractiveConsole(self.locals) self.event = threading.Event() self.daemon = True @@ -484,7 +484,7 @@ class PythonScriptingInstance(ScriptingInstance): self.code = None self.input = "" - self.interpreter.runsource("from binaryninja import *\n") + self.interpreter.push("from binaryninja import *\n") def execute(self, code): self.code = code @@ -547,7 +547,8 @@ class PythonScriptingInstance(ScriptingInstance): self.locals["current_llil"] = self.active_func.low_level_il self.locals["current_mlil"] = self.active_func.medium_level_il - self.interpreter.runcode(code) + for line in code.split("\n"): + self.interpreter.push(line) if self.locals["here"] != self.active_addr: if not self.active_view.file.navigate(self.active_view.file.view, self.locals["here"]): -- cgit v1.3.1 From 4862340bc92c7bcde9d377cbf7cff1417a39509e Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Fri, 15 Dec 2017 09:56:59 -0500 Subject: Make multi-line python input more robust --- python/scriptingprovider.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'python/scriptingprovider.py') diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index 761b359c..6b03d49e 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -42,14 +42,14 @@ class _ThreadActionContext(object): def __init__(self, func): self.func = func self.interpreter = None - if "value" in dir(PythonScriptingInstance._interpreter): + if hasattr(PythonScriptingInstance._interpreter, "value"): self.interpreter = PythonScriptingInstance._interpreter.value self.__class__._actions.append(self) self.callback = ctypes.CFUNCTYPE(None, ctypes.c_void_p)(lambda ctxt: self.execute()) def execute(self): old_interpreter = None - if "value" in dir(PythonScriptingInstance._interpreter): + if hasattr(PythonScriptingInstance._interpreter, "value"): old_interpreter = PythonScriptingInstance._interpreter.value PythonScriptingInstance._interpreter.value = self.interpreter try: @@ -380,7 +380,7 @@ class _PythonScriptingInstanceOutput(object): def write(self, data): interpreter = None - if "value" in dir(PythonScriptingInstance._interpreter): + if hasattr(PythonScriptingInstance._interpreter, "value"): interpreter = PythonScriptingInstance._interpreter.value if interpreter is None: @@ -419,7 +419,7 @@ class _PythonScriptingInstanceInput(object): def read(self, size): interpreter = None - if "value" in dir(PythonScriptingInstance._interpreter): + if hasattr(PythonScriptingInstance._interpreter, "value"): interpreter = PythonScriptingInstance._interpreter.value if interpreter is None: @@ -434,7 +434,7 @@ class _PythonScriptingInstanceInput(object): def readline(self): interpreter = None - if "value" in dir(PythonScriptingInstance._interpreter): + if hasattr(PythonScriptingInstance._interpreter, "value"): interpreter = PythonScriptingInstance._interpreter.value if interpreter is None: @@ -548,7 +548,7 @@ class PythonScriptingInstance(ScriptingInstance): self.locals["current_mlil"] = self.active_func.medium_level_il for line in code.split("\n"): - self.interpreter.push(line) + self.interpreter.push(line + "\n") if self.locals["here"] != self.active_addr: if not self.active_view.file.navigate(self.active_view.file.view, self.locals["here"]): -- cgit v1.3.1 From 0963fc9e3623f9758afb63b4b089a0fa7873c395 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Mon, 18 Dec 2017 11:43:43 -0500 Subject: Remove newline from split lines as it breaks more than it fixes --- python/scriptingprovider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'python/scriptingprovider.py') diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index 6b03d49e..c92c249a 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -548,7 +548,7 @@ class PythonScriptingInstance(ScriptingInstance): self.locals["current_mlil"] = self.active_func.medium_level_il for line in code.split("\n"): - self.interpreter.push(line + "\n") + self.interpreter.push(line) if self.locals["here"] != self.active_addr: if not self.active_view.file.navigate(self.active_view.file.view, self.locals["here"]): -- cgit v1.3.1