summaryrefslogtreecommitdiff
path: root/suite
diff options
context:
space:
mode:
authorXusheng <xusheng@vector35.com>2021-05-05 17:23:49 +0800
committerXusheng <xusheng@vector35.com>2021-05-26 17:46:13 +0800
commit7c9ada78241e08bf36bd04d989f742a6de721575 (patch)
tree4134fd2f12a504ab17cc0b9acc1fb8d27552490f /suite
parentfd1974b407be042fd84f0267a328a5adabce28e1 (diff)
Add the ability to automatically create struct members
Diffstat (limited to 'suite')
m---------suite/binaries0
-rw-r--r--suite/testcommon.py39
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"""