diff options
| author | Xusheng <xusheng@vector35.com> | 2021-05-05 17:23:49 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2021-05-26 17:46:13 +0800 |
| commit | 7c9ada78241e08bf36bd04d989f742a6de721575 (patch) | |
| tree | 4134fd2f12a504ab17cc0b9acc1fb8d27552490f /suite | |
| parent | fd1974b407be042fd84f0267a328a5adabce28e1 (diff) | |
Add the ability to automatically create struct members
Diffstat (limited to 'suite')
| m--------- | suite/binaries | 0 | ||||
| -rw-r--r-- | suite/testcommon.py | 39 |
2 files changed, 39 insertions, 0 deletions
diff --git a/suite/binaries b/suite/binaries -Subproject 922461236a4b7fbe761821ae80d8a550939b69d +Subproject 37a3fa26e79b78d60e41fcbb3708840e7a79fdf diff --git a/suite/testcommon.py b/suite/testcommon.py index 0d65c8b8..47dfb70e 100644 --- a/suite/testcommon.py +++ b/suite/testcommon.py @@ -1136,6 +1136,45 @@ class TestBuilder(Builder): self.delete_package("type_xref.bndb") return fixOutput(sorted(retinfo)) + def test_auto_create_struct(self): + """Automatically create a structure""" + retinfo = [] + file_name = self.unpackage_file("auto_create_members.bndb") + if not os.path.exists(file_name): + return retinfo + + with BinaryViewType.get_view_of_file(file_name) as bv: + if bv is None: + return retinfo + + test_types = ['struct_1', 'struct_2', 'struct_3'] + 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)) + + 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)) + + 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)) + + struct = bv.create_structure_from_offset_access(test_type) + for member in struct.members: + retinfo.append('type %s, member: %s' % (test_type, member)) + + self.delete_package("auto_create_members.bndb") + return fixOutput(sorted(retinfo)) + def test_hlil_arrays(self): """HLIL array resolution failure""" |
