diff options
| author | Josh Ferrell <josh@vector35.com> | 2023-11-10 17:52:21 -0500 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2023-11-10 17:53:16 -0500 |
| commit | d211211ac87d30e4774c01e6765c2419dce3fe1f (patch) | |
| tree | 01f3becef2bfab16bcd4736cf78652ce076bbade /python/settings.py | |
| parent | a39efb484087474fdf18a40249bf0bb5b608b6f3 (diff) | |
Add support for object settings
Diffstat (limited to 'python/settings.py')
| -rw-r--r-- | python/settings.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/python/settings.py b/python/settings.py index fee8a755..f7bee686 100644 --- a/python/settings.py +++ b/python/settings.py @@ -20,6 +20,8 @@ import ctypes +from typing import Dict + # Binary Ninja components from . import _binaryninjacore as core from .enums import SettingsScope @@ -333,6 +335,18 @@ class Settings: core.BNFreeStringList(result, length) return out_list + def get_string_object(self, key, view=None): + if view is not None: + view = view.handle + length = ctypes.c_ulonglong() + result = core.BNSettingsGetStringObject(self.handle, key, view, None, ctypes.byref(length)) + assert result is not None, "core.BNSettingsGetStringObject returned None" + out_dict = {} + for i in range(length.value): + out_dict[result[i][0].decode('utf8')] = (result[i][1].decode('utf8')) + core.BNFreeStringObject(result, length) + return out_dict + def get_json(self, key, view=None): if view is not None: view = view.handle @@ -379,6 +393,19 @@ class Settings: core.BNFreeStringList(result, length) return (out_list, SettingsScope(c_scope.value)) + def get_string_object_with_scope(self, key, view=None, scope=SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + c_scope = core.SettingsScopeEnum(scope) + length = ctypes.c_ulonglong() + result = core.BNSettingsGetStringObject(self.handle, key, view, ctypes.byref(c_scope), ctypes.byref(length)) + assert result is not None, "core.BNSettingsGetStringObject returned None" + out_dict = {} + for i in range(length.value): + out_dict[result[i][0].decode('utf8')] = (result[i][1].decode('utf8')) + core.BNFreeStringObject(result, length) + return (out_dict, SettingsScope(c_scope.value)) + def get_json_with_scope(self, key, view=None, scope=SettingsScope.SettingsAutoScope): if view is not None: view = view.handle @@ -416,6 +443,19 @@ class Settings: string_list[i] = value[i].encode('charmap') return core.BNSettingsSetStringList(self.handle, view, scope, key, string_list, length) + def set_string_object(self, key, value: Dict[str, str], view=None, scope=SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + length = ctypes.c_ulonglong() + length.value = len(value) + entry_val = (ctypes.c_char_p * 2) + string_obj = (ctypes.POINTER(ctypes.c_char_p) * len(value))() + for i,entry in enumerate(value.items()): + string_obj[i] = entry_val() + string_obj[i][0] = entry[0].encode('charmap') + string_obj[i][1] = entry[1].encode('charmap') + return core.BNSettingsSetStringObject(self.handle, view, scope, key, string_obj, length) + def set_json(self, key, value, view=None, scope=SettingsScope.SettingsAutoScope): if view is not None: view = view.handle |
