diff options
| author | Peter LaFosse <peter@vector35.com> | 2022-01-18 09:48:47 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2022-01-19 10:53:46 -0500 |
| commit | 6f5fd10c589cd7bf525d91a60a0dc66bc4f93e25 (patch) | |
| tree | cb5d1f10dbc65bd5bd96e5b7eb6551190f8783d7 /python/lineardisassembly.py | |
| parent | 12b55e3265ea0538b911be910b8300af807c4695 (diff) | |
Many type check fixes
Diffstat (limited to 'python/lineardisassembly.py')
| -rw-r--r-- | python/lineardisassembly.py | 67 |
1 files changed, 25 insertions, 42 deletions
diff --git a/python/lineardisassembly.py b/python/lineardisassembly.py index 9c3040c9..f87e8b33 100644 --- a/python/lineardisassembly.py +++ b/python/lineardisassembly.py @@ -246,27 +246,7 @@ class LinearViewObject: next_obj = next_obj.handle count = ctypes.c_ulonglong(0) - lines = core.BNGetLinearViewObjectLines(self.handle, prev_obj, next_obj, count) - assert lines is not None, "core.BNGetLinearViewObjectLines returned None" - - result = [] - for i in range(0, count.value): - func = None - block = None - if lines[i].function: - func = _function.Function(None, core.BNNewFunctionReference(lines[i].function)) - if lines[i].block: - core_block = core.BNNewBasicBlockReference(lines[i].block) - assert core_block is not None, "core.BNNewBasicBlockReference returned None" - block = basicblock.BasicBlock(core_block, None) - color = highlight.HighlightColor._from_core_struct(lines[i].contents.highlight) - addr = lines[i].contents.addr - tokens = _function.InstructionTextToken._from_core_struct(lines[i].contents.tokens, lines[i].contents.count) - contents = _function.DisassemblyTextLine(tokens, addr, color = color) - result.append(LinearDisassemblyLine(lines[i].type, func, block, contents)) - - core.BNFreeLinearDisassemblyLines(lines, count.value) - return result + return LinearViewCursor._make_lines(core.BNGetLinearViewObjectLines(self.handle, prev_obj, next_obj, count), count.value) def ordering_index_for_child(self, child): return core.BNGetLinearViewObjectOrderingIndexForChild(self.handle, child.handle) @@ -570,30 +550,33 @@ class LinearViewCursor: def next(self): return core.BNLinearViewCursorNext(self.handle) + @staticmethod + def _make_lines(lines, count:int) -> List['LinearDisassemblyLine']: + assert lines is not None, "core returned None for LinearDisassembly lines" + try: + result = [] + for i in range(0, count): + func = None + block = None + if lines[i].function: + func = _function.Function(None, core.BNNewFunctionReference(lines[i].function)) + if lines[i].block: + core_block = core.BNNewBasicBlockReference(lines[i].block) + assert core_block is not None, "core.BNNewBasicBlockReference returned None" + block = basicblock.BasicBlock(core_block, None) + color = highlight.HighlightColor._from_core_struct(lines[i].contents.highlight) + addr = lines[i].contents.addr + tokens = _function.InstructionTextToken._from_core_struct(lines[i].contents.tokens, lines[i].contents.count) + contents = _function.DisassemblyTextLine(tokens, addr, color = color) + result.append(LinearDisassemblyLine(lines[i].type, func, block, contents)) + return result + finally: + core.BNFreeLinearDisassemblyLines(lines, count) + @property def lines(self): count = ctypes.c_ulonglong(0) - lines = core.BNGetLinearViewCursorLines(self.handle, count) - assert lines is not None, "core.BNGetLinearViewCursorLines returned None" - - result = [] - for i in range(0, count.value): - func = None - block = None - if lines[i].function: - func = _function.Function(None, core.BNNewFunctionReference(lines[i].function)) - if lines[i].block: - core_block = core.BNNewBasicBlockReference(lines[i].block) - assert core_block is not None, "core.BNNewBasicBlockReference returned None" - block = basicblock.BasicBlock(core_block, None) - color = highlight.HighlightColor._from_core_struct(lines[i].contents.highlight) - addr = lines[i].contents.addr - tokens = _function.InstructionTextToken._from_core_struct(lines[i].contents.tokens, lines[i].contents.count) - contents = _function.DisassemblyTextLine(tokens, addr, color = color) - result.append(LinearDisassemblyLine(lines[i].type, func, block, contents)) - - core.BNFreeLinearDisassemblyLines(lines, count.value) - return result + return LinearViewCursor._make_lines(core.BNGetLinearViewCursorLines(self.handle, count), count.value) def duplicate(self): return LinearViewCursor(None, handle = core.BNDuplicateLinearViewCursor(self.handle)) |
