From df48a9ee65c4fa3b60f3bfebb36aa03d8dd40f2d Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Sat, 21 Nov 2020 17:55:26 -0500 Subject: Add improved instruction mapping APIs. --- python/highlevelil.py | 17 +++++++++++++++++ python/lowlevelil.py | 17 +++++++++++++++++ python/mediumlevelil.py | 17 +++++++++++++++++ 3 files changed, 51 insertions(+) (limited to 'python') diff --git a/python/highlevelil.py b/python/highlevelil.py index e1d26f62..164be0e1 100644 --- a/python/highlevelil.py +++ b/python/highlevelil.py @@ -529,6 +529,14 @@ class HighLevelILInstruction(object): """Alias for medium_level_il""" return self.medium_level_il + @property + def mlils(self): + 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)) + return result + @property def low_level_il(self): """Low level IL form of this expression""" @@ -924,6 +932,15 @@ class HighLevelILFunction(object): return None return result + def get_medium_level_il_expr_indexes(self, expr): + count = ctypes.c_ulonglong() + exprs = core.BNGetMediumLevelILExprIndexesFromHighLevelIL(self.handle, expr, count) + result = [] + for i in range(0, count.value): + result.append(exprs[i]) + core.BNFreeILInstructionList(exprs) + return result + def get_label(self, label_idx): result = core.BNGetHighLevelILExprIndexForLabel(self.handle, label_idx) if result >= core.BNGetHighLevelILExprCount(self.handle): diff --git a/python/lowlevelil.py b/python/lowlevelil.py index 870b787a..5f09d06c 100644 --- a/python/lowlevelil.py +++ b/python/lowlevelil.py @@ -1015,6 +1015,14 @@ class LowLevelILInstruction(object): def mlil(self): return self.medium_level_il + @property + def mlils(self): + 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)) + return result + @property def mapped_medium_level_il(self): """Gets the mapped medium level IL expression corresponding to this expression""" @@ -2994,6 +3002,15 @@ class LowLevelILFunction(object): return None return result + def get_medium_level_il_expr_indexes(self, expr): + count = ctypes.c_ulonglong() + exprs = core.BNGetMediumLevelILExprIndexes(self.handle, expr, count) + result = [] + for i in range(0, count.value): + result.append(exprs[i]) + core.BNFreeILInstructionList(exprs) + return result + def get_mapped_medium_level_il_instruction_index(self, instr): med_il = self.mapped_medium_level_il if med_il is None: diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index 68da31f3..acfc7478 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -469,6 +469,14 @@ class MediumLevelILInstruction(object): """Alias for low_level_il""" return self.low_level_il + @property + def llils(self): + 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)) + return result + @property def high_level_il(self): """High level IL form of this expression""" @@ -1162,6 +1170,15 @@ class MediumLevelILFunction(object): return None return result + def get_low_level_il_expr_indexes(self, expr): + count = ctypes.c_ulonglong() + exprs = core.BNGetLowLevelILExprIndexes(self.handle, expr, count) + result = [] + for i in range(0, count.value): + result.append(exprs[i]) + core.BNFreeILInstructionList(exprs) + return result + def get_high_level_il_instruction_index(self, instr): high_il = self.high_level_il if high_il is None: -- cgit v1.3.1