diff options
| author | Brian Potchik <brian@vector35.com> | 2020-08-08 20:22:23 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2020-08-08 20:22:23 -0400 |
| commit | e5e4fe424ca345b8bba1200b9cac8a9765bc7c9d (patch) | |
| tree | ce5db88124f7b4e4403c5e0997369e3542dea093 | |
| parent | 895c2a325a8e5c874cf56e75c72ba77789b3f0f9 (diff) | |
Add Universal loader unit tests.
| -rw-r--r-- | suite/testcommon.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/suite/testcommon.py b/suite/testcommon.py index 6db1234a..d81f263b 100644 --- a/suite/testcommon.py +++ b/suite/testcommon.py @@ -1030,3 +1030,47 @@ class VerifyBuilder(Builder): return ok finally: self.delete_package("helloworld") + + def test_univeral_loader(self): + """Universal Mach-O Loader Tests""" + file_name = self.unpackage_file("fat_macho_9arch") + save_setting_value = binja.Settings().get_string_list("files.universal.architecturePreference") + binja.Settings().reset("files.universal.architecturePreference") + try: + bv = binja.BinaryViewType.get_view_of_file(file_name) + assert(bv.view_type == "Mach-O") + assert(bv.arch.name == "x86") + assert(bv.start == 0x1000) + load_setting_keys = bv.get_load_settings("Mach-O") + assert(load_setting_keys is not None) + assert(len(bv.get_load_settings("Mach-O").keys()) == 1) + assert(bv.get_load_settings("Mach-O").get_integer("loader.macho.universalImageOffset") == 0x1000) + bv.file.close() + + binja.Settings().set_string_list("files.universal.architecturePreference", ["arm64"]) + bv = binja.BinaryViewType.get_view_of_file(file_name) + assert(bv.view_type == "Mach-O") + assert(bv.arch.name == "aarch64") + assert(bv.start == 0x100000000) + load_setting_keys = bv.get_load_settings("Mach-O") + assert(load_setting_keys is not None) + assert(len(bv.get_load_settings("Mach-O").keys()) == 1) + assert(bv.get_load_settings("Mach-O").get_integer("loader.macho.universalImageOffset") == 0x4c000) + bv.file.close() + + binja.Settings().set_string_list("files.universal.architecturePreference", ["x86_64", "arm64"]) + bv = binja.BinaryViewType.get_view_of_file_with_options(file_name, options={'loader.imageBase': 0xfffffff0000}) + assert(bv.view_type == "Mach-O") + assert(bv.arch.name == "x86_64") + assert(bv.start == 0xfffffff0000) + load_setting_keys = bv.get_load_settings("Mach-O") + assert(load_setting_keys is not None) + assert(len(bv.get_load_settings("Mach-O").keys()) == 8) + assert(bv.get_load_settings("Mach-O").get_integer("loader.macho.universalImageOffset") == 0x8000) + bv.file.close() + + binja.Settings().set_string_list("files.universal.architecturePreference", save_setting_value) + return True + finally: + binja.Settings().set_string_list("files.universal.architecturePreference", save_setting_value) + self.delete_package("fat_macho_9arch") |
