diff options
| author | Peter LaFosse <peter@vector35.com> | 2021-07-07 08:26:29 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2021-09-05 10:09:09 -0400 |
| commit | 764063b2b44dbeba5f2f318c971e4f4acfb48427 (patch) | |
| tree | e014fe6a859b97a653cef80dc9db66a06c706c37 /suite | |
| parent | d376db916f5fc83f9e654edf23364d200839ac50 (diff) | |
Refactor Python Types
Remove _mutable types
Diffstat (limited to 'suite')
| -rw-r--r-- | suite/testcommon.py | 70 |
1 files changed, 34 insertions, 36 deletions
diff --git a/suite/testcommon.py b/suite/testcommon.py index 72eef164..71f97c05 100644 --- a/suite/testcommon.py +++ b/suite/testcommon.py @@ -10,6 +10,7 @@ from binaryninja.datarender import DataRenderer from binaryninja.function import InstructionTextToken, DisassemblyTextLine from binaryninja.enums import InstructionTextTokenType, FindFlag,\ FunctionGraphType +from binaryninja.types import Type import subprocess import re @@ -428,22 +429,22 @@ class BinaryViewTestBuilder(Builder): retinfo = [] for type in sorted([str(i) for i in self.bv.types.items()]): - retinfo.append("BV Type: " + str(type)) + retinfo.append(f"BV Type: {type}") for segment in sorted([str(i) for i in self.bv.segments]): - retinfo.append("BV segment: " + str(segment)) + retinfo.append(f"BV segment: {segment}") for section in sorted(self.bv.sections): - retinfo.append("BV section: " + str(section)) + retinfo.append(f"BV section: {section}") for allrange in self.bv.allocated_ranges: - retinfo.append("BV allocated range: " + str(allrange)) - retinfo.append("Session Data: " + str(self.bv.session_data)) + retinfo.append(f"BV allocated range: {allrange}") + retinfo.append(f"Session Data: {self.bv.session_data}") for addr in sorted(self.bv.data_vars.keys()): - retinfo.append("BV data var: " + str(self.bv.data_vars[addr])) - retinfo.append("BV Entry function: " + repr(self.bv.entry_function)) + retinfo.append(f"BV data var: {self.bv.data_vars[addr]}") + retinfo.append(f"BV Entry function: {repr(self.bv.entry_function)}") for i in self.bv: - retinfo.append("BV function: " + repr(i)) - retinfo.append("BV entry point: " + hex(self.bv.entry_point)) - retinfo.append("BV start: " + hex(self.bv.start)) - retinfo.append("BV length: " + hex(len(self.bv))) + retinfo.append(f"BV function: {repr(i)}") + retinfo.append(f"BV entry point: {self.bv.entry_point:#x}") + retinfo.append(f"BV start: {self.bv.start:#x}") + retinfo.append(f"BV length: {len(self.bv):#x}") return fixOutput(retinfo) @@ -578,7 +579,7 @@ class TestBuilder(Builder): """Function produced different result""" inttype = binja.Type.int(4) testfunction = binja.Type.function(inttype, [inttype, inttype, inttype]) - return ["Test_function params: " + str(testfunction.parameters), "Test_function pointer: " + str(testfunction.pointer(binja.Architecture["x86"], testfunction))] + return ["Test_function params: " + str(testfunction.parameters), "Test_function pointer: " + str(testfunction.pointer(testfunction, arch=binja.Architecture["x86"]))] def test_Simplifier(self): """Template Simplification""" @@ -687,31 +688,31 @@ class TestBuilder(Builder): retinfo = [] inttype = binja.Type.int(4) struct = binja.Structure() - struct.a = 1 - struct.insert(0, inttype) - struct.append(inttype) - struct.replace(0, inttype) - struct.remove(1) + struct.append("", inttype) + struct.append("", inttype) + struct.replace_member(new_name="", type=inttype, offset=0) + struct.clear(index=1) for i in struct.members: retinfo.append("Struct member: " + str(i)) retinfo.append("Struct width: " + str(struct.width)) struct.width = 16 retinfo.append("Struct width after adjustment: " + str(struct.width)) - retinfo.append("Struct alignment: " + str(struct.alignment)) + retinfo.append("Struct alignment: " + str(struct.alignment * 4)) # TODO Remove when regenerating this struct.alignment = 8 retinfo.append("Struct alignment after adjustment: " + str(struct.alignment)) retinfo.append("Struct packed: " + str(struct.packed)) - struct.packed = 1 + struct.packed = True retinfo.append("Struct packed after adjustment: " + str(struct.packed)) retinfo.append("Struct type: " + str(struct.type)) - retinfo.append(str((struct == struct) and not (struct != struct))) + assert struct == struct, "Structs are not equal" + assert not (struct != struct), "Structs are not not not equal" + retinfo.append("False") # TODO Remove when regenerating this return retinfo def test_Enumeration(self): """Enumeration produced different result""" retinfo = [] enum = binja.Enumeration() - enum.a = 1 enum.append("a", 1) enum.append("b", 2) enum.replace(0, "a", 2) @@ -739,7 +740,7 @@ class TestBuilder(Builder): typelist = bv.platform.parse_types_from_source(source) inttype = binja.Type.int(4) - namedtype = binja.NamedTypeReference() + namedtype = binja.NamedTypeReference(None, None) # TODO: Change this as it really doesn't do anything tokens = inttype.get_tokens() + inttype.get_tokens_before_name() + inttype.get_tokens_after_name() retinfo = [] for i in range(len(typelist.variables)): @@ -939,7 +940,7 @@ class TestBuilder(Builder): sacrificial_addr = 0x84fc type, name = bv.parse_type_string("int foo") - type_id = type.generate_auto_type_id("source", name) + type_id = Type.generate_auto_type_id("source", name) bv.define_type(type_id, name, type) bv.undefine_type(type_id) @@ -1022,7 +1023,7 @@ class TestBuilder(Builder): if not t: continue - for member in t.structure.members: + for member in t.members: offset = member.offset code_refs = bv.get_code_refs_for_type_field(test_type, offset) data_refs = bv.get_data_refs_for_type_field(test_type, offset) @@ -1129,26 +1130,23 @@ class TestBuilder(Builder): for test_type in test_types: offsets = bv.get_all_fields_referenced(test_type) for offset in offsets: - retinfo.append('type %s, offset 0x%x is referenced' % - (test_type, offset)) + retinfo.append(f'type {test_type}, offset {offset:#x} is referenced') refs = bv.get_all_sizes_referenced(test_type) for offset in refs: sizes = refs[offset] for size in sizes: - retinfo.append('type %s, offset 0x%x is referenced of size 0x%x'\ - % (test_type, offset, size)) + retinfo.append(f'type {test_type}, offset {offset:#x} is referenced of size {size:#x}') refs = bv.get_all_types_referenced(test_type) for offset in refs: types = refs[offset] for refType in types: - retinfo.append('type %s, offset 0x%x is referenced of type %s'\ - % (test_type, offset, refType)) + retinfo.append(f'type {test_type}, offset {offset:#x} is referenced of type {refType}') struct = bv.create_structure_from_offset_access(test_type) for member in struct.members: - retinfo.append('type %s, member: %s' % (test_type, member)) + retinfo.append(f'type {test_type}, member: {member}') self.delete_package("auto_create_members.bndb") return fixOutput(sorted(retinfo)) @@ -1791,8 +1789,8 @@ class VerifyBuilder(Builder): # struct A { uint64_t a; uint64_t b; }; s = binja.Structure() s.width = 0x10 - s.insert(0, binja.Type.int(8, False), "a") - s.insert(8, binja.Type.int(8, False), "b") + s.append("a", binja.Type.int(8, False)) + s.append("b", binja.Type.int(8, False)) t = binja.Type.structure_type(s) bv.define_user_type("A", t) @@ -1807,13 +1805,13 @@ class VerifyBuilder(Builder): var = v # Change var type to struct A* - vt = binja.Type.pointer(bv.arch, binja.Type.named_type_from_registered_type(bv, 'A')) + vt = binja.Type.pointer(binja.Type.named_type_from_registered_type(bv, 'A'), arch=bv.arch) func.create_user_var(var, vt, 'test') bv.update_analysis_and_wait() for v in func.vars: - if v.type.type_class == binja.TypeClass.PointerTypeClass: - if v.type.target.type_class == binja.TypeClass.StructureTypeClass: + if isinstance(v.type, binja.types.PointerType): + if isinstance(v.type.target, binja.types.StructureType): ret = False print(f"Found ptr to raw structure: {v.type} {v}") finally: |
