From 51d0f18eb4df16263867ef157b5293bb1b44f77a Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Wed, 27 Jan 2021 16:03:02 -0500 Subject: Finish HLIL expression mapping APIs. --- python/highlevelil.py | 10 +++++++++- python/lowlevelil.py | 10 +++++++++- python/mediumlevelil.py | 19 ++++++++++++++++++- 3 files changed, 36 insertions(+), 3 deletions(-) (limited to 'python') diff --git a/python/highlevelil.py b/python/highlevelil.py index 164be0e1..1dc8a077 100644 --- a/python/highlevelil.py +++ b/python/highlevelil.py @@ -531,7 +531,7 @@ class HighLevelILInstruction(object): @property def mlils(self): - exprs = self.function.get_medium_level_il_expr_indexes(self._expr_index) + exprs = self._function.get_medium_level_il_expr_indexes(self._expr_index) result = [] for expr in exprs: result.append(mediumlevelil.MediumLevelILInstruction(self._function.medium_level_il.ssa_form, expr)) @@ -549,6 +549,14 @@ class HighLevelILInstruction(object): """Alias for low_level_il""" return self.low_level_il + @property + def llils(self): + result = set() + for mlil_expr in self.mlils: + for llil_expr in mlil_expr.llils: + result.add(llil_expr) + return list(result) + @property def il_basic_block(self): """ diff --git a/python/lowlevelil.py b/python/lowlevelil.py index 1ef13fa4..310d9d79 100644 --- a/python/lowlevelil.py +++ b/python/lowlevelil.py @@ -1017,7 +1017,7 @@ class LowLevelILInstruction(object): @property def mlils(self): - exprs = self.function.get_medium_level_il_expr_indexes(self.expr_index) + exprs = self._function.get_medium_level_il_expr_indexes(self.expr_index) result = [] for expr in exprs: result.append(binaryninja.mediumlevelil.MediumLevelILInstruction(self._function.medium_level_il, expr)) @@ -1046,6 +1046,14 @@ class LowLevelILInstruction(object): def hlil(self): return self.high_level_il + @property + def hlils(self): + result = set() + for mlil_expr in self.mlils: + for hlil_expr in mlil_expr.hlils: + result.add(hlil_expr) + return list(result) + @property def value(self): """Value of expression if constant or a known value (read-only)""" diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index ac11db96..65b90177 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -471,7 +471,7 @@ class MediumLevelILInstruction(object): @property def llils(self): - exprs = self.function.get_low_level_il_expr_indexes(self.expr_index) + exprs = self._function.get_low_level_il_expr_indexes(self.expr_index) result = [] for expr in exprs: result.append(lowlevelil.LowLevelILInstruction(self._function.low_level_il.ssa_form, expr)) @@ -490,6 +490,14 @@ class MediumLevelILInstruction(object): """Alias for high_level_il""" return self.high_level_il + @property + def hlils(self): + exprs = self._function.get_high_level_il_expr_indexes(self.expr_index) + result = [] + for expr in exprs: + result.append(binaryninja.highlevelil.HighLevelILInstruction(self._function.high_level_il, expr)) + return result + @property def ssa_memory_version(self): """Version of active memory contents in SSA form for this instruction""" @@ -1197,6 +1205,15 @@ class MediumLevelILFunction(object): return None return result + def get_high_level_il_expr_indexes(self, expr): + count = ctypes.c_ulonglong() + exprs = core.BNGetHighLevelILExprIndexes(self.handle, expr, count) + result = [] + for i in range(0, count.value): + result.append(exprs[i]) + core.BNFreeILInstructionList(exprs) + return result + def create_graph(self, settings = None): if settings is not None: settings_obj = settings.handle -- cgit v1.3.1