summaryrefslogtreecommitdiff
path: root/python/binaryview.py
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2021-09-29 21:54:06 -0400
committerBrian Potchik <brian@vector35.com>2021-09-29 21:54:06 -0400
commit670993d8e8559eff92d6d47cbf0a7c3a5a3ac998 (patch)
treee2e71678f51321757998b042d1ae44060336717d /python/binaryview.py
parent949f7c7481395619d2a74cfc6ae7c0a713c89d1c (diff)
Improved Universal (FAT) architecture preference selection.
Diffstat (limited to 'python/binaryview.py')
-rw-r--r--python/binaryview.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/python/binaryview.py b/python/binaryview.py
index f7f253c5..d02aace3 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -832,23 +832,29 @@ class BinaryViewType(metaclass=_BinaryViewTypeMetaclass):
load_settings = None
if isDatabase:
load_settings = view.get_load_settings(bvt.name)
+ if options is None:
+ options = {}
if load_settings is None:
- # FIXME:
if universal_bvt is not None and "files.universal.architecturePreference" in options:
load_settings = universal_bvt.get_load_settings_for_data(view)
if load_settings is None:
- raise Exception(f"Could not load {options['files.universal.architecturePreference'][0]} from Universal image. Entry not found!")
+ raise Exception(f"Could not load entry from Universal image. No load settings!")
arch_list = json.loads(load_settings.get_string('loader.universal.architectures'))
- arch_entry = [entry for entry in arch_list if entry['architecture'] == options['files.universal.architecturePreference'][0]]
+ arch_entry = None
+ for arch_pref in options['files.universal.architecturePreference']:
+ arch_entry = [entry for entry in arch_list if entry['architecture'] == arch_pref]
+ if arch_entry:
+ break
if not arch_entry:
- raise Exception(f"Could not load {options['files.universal.architecturePreference'][0]} from Universal image. Entry not found!")
+ arch_names = [entry['architecture'] for entry in arch_list if entry['architecture']]
+ raise Exception(f"Could not load any of: {options['files.universal.architecturePreference']} from Universal image. Entry not found! Available entries: {arch_names}")
load_settings = settings.Settings(core.BNGetUniqueIdentifierString())
load_settings.deserialize_schema(arch_entry[0]['loadSchema'])
else:
load_settings = bvt.get_load_settings_for_data(view)
if load_settings is None:
- raise Exception(f"Could not get load settings for binary view of type `{bvt.name}`")
+ raise Exception(f"Could not get load settings for binary view of type '{bvt.name}'")
load_settings.set_resource_id(bvt.name)
view.set_load_settings(bvt.name, load_settings)