summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/metadata.py2
-rw-r--r--python/typelibrary.py49
2 files changed, 28 insertions, 23 deletions
diff --git a/python/metadata.py b/python/metadata.py
index 4cd9d55b..a4a0d79f 100644
--- a/python/metadata.py
+++ b/python/metadata.py
@@ -30,7 +30,7 @@ MetadataValueType = Union['Metadata', int, bool, str, bytes, float, List['Metada
class Metadata:
def __init__(
- self, value: MetadataValueType = None, signed: Optional[bool] = None, raw: Optional[bool] = None,
+ self, value: Optional[MetadataValueType] = None, signed: Optional[bool] = None, raw: Optional[bool] = None,
handle: Optional[core.BNMetadata] = None
):
"""
diff --git a/python/typelibrary.py b/python/typelibrary.py
index bd5b950f..57af8a8a 100644
--- a/python/typelibrary.py
+++ b/python/typelibrary.py
@@ -19,7 +19,7 @@
# IN THE SOFTWARE.
import ctypes
-from typing import Optional, List, Dict
+from typing import Optional, List, Dict, Union
# Binary Ninja components
import binaryninja
@@ -52,8 +52,7 @@ class TypeLibrary:
:param str name:
:rtype: TypeLibrary
"""
- handle: core.BNTypeLibraryHandle = core.BNNewTypeLibrary(arch.handle, name)
- return TypeLibrary(handle)
+ return TypeLibrary(core.BNNewTypeLibrary(arch.handle, name))
@staticmethod
def load_from_file(path: str) -> Optional['TypeLibrary']:
@@ -162,7 +161,7 @@ class TypeLibrary:
assert names is not None, "core.BNGetTypeLibraryAlternateNames returned None"
try:
for i in range(count.value):
- result.append(names[i])
+ result.append(names[i].decode("utf-8"))
return result
finally:
core.BNFreeStringList(names, count.value)
@@ -184,10 +183,12 @@ class TypeLibrary:
result = []
platforms = core.BNGetTypeLibraryPlatforms(self.handle, count)
assert platforms is not None, "core.BNGetTypeLibraryPlatforms returned None"
- for i in range(0, count.value):
- result.append(platforms[i].decode("utf-8"))
- core.BNFreeStringList(platforms, count.value)
- return result
+ try:
+ for i in range(0, count.value):
+ result.append(platforms[i].decode("utf-8"))
+ return result
+ finally:
+ core.BNFreeStringList(platforms, count.value)
def add_platform(self, plat: platform.Platform) -> None:
"""
@@ -318,7 +319,7 @@ class TypeLibrary:
"""
core.BNAddTypeLibraryNamedTypeSource(self.handle, types.QualifiedName(name)._to_core_struct(), source)
- def get_named_object(self, name: str) -> Optional[types.Type]:
+ def get_named_object(self, name: Union[types.QualifiedName, str]) -> Optional[types.Type]:
"""
`get_named_object` direct extracts a reference to a contained object -- when
attempting to extract types from a library into a BinaryView, consider using
@@ -334,7 +335,7 @@ class TypeLibrary:
return None
return types.Type.create(core.BNNewTypeReference(t))
- def get_named_type(self, name: str) -> Optional[types.Type]:
+ def get_named_type(self, name: Union[str, types.QualifiedName]) -> Optional[types.Type]:
"""
`get_named_type` direct extracts a reference to a contained type -- when
attempting to extract types from a library into a BinaryView, consider using
@@ -351,7 +352,7 @@ class TypeLibrary:
return types.Type.create(core.BNNewTypeReference(t))
@property
- def named_objects(self) -> Dict[str, types.Type]:
+ def named_objects(self) -> Dict[types.QualifiedName, types.Type]:
"""
A dict containing all named objects (functions, exported variables) provided by a type library (read-only)
"""
@@ -359,14 +360,16 @@ class TypeLibrary:
result = {}
named_types = core.BNGetTypeLibraryNamedObjects(self.handle, count)
assert named_types is not None, "core.BNGetTypeLibraryNamedObjects returned None"
- for i in range(0, count.value):
- name = types.QualifiedName._from_core_struct(named_types[i].name)
- result[name] = types.Type.create(core.BNNewTypeReference(named_types[i].type))
- core.BNFreeQualifiedNameAndTypeArray(named_types, count.value)
- return result
+ try:
+ for i in range(0, count.value):
+ name = types.QualifiedName._from_core_struct(named_types[i].name)
+ result[name] = types.Type.create(core.BNNewTypeReference(named_types[i].type))
+ return result
+ finally:
+ core.BNFreeQualifiedNameAndTypeArray(named_types, count.value)
@property
- def named_types(self) -> Dict[str, types.Type]:
+ def named_types(self) -> Dict[types.QualifiedName, types.Type]:
"""
A dict containing all named types provided by a type library (read-only)
"""
@@ -374,8 +377,10 @@ class TypeLibrary:
result = {}
named_types = core.BNGetTypeLibraryNamedTypes(self.handle, count)
assert named_types is not None, "core.BNGetTypeLibraryNamedTypes returned None"
- for i in range(0, count.value):
- name = types.QualifiedName._from_core_struct(named_types[i].name)
- result[name] = types.Type.create(core.BNNewTypeReference(named_types[i].type))
- core.BNFreeQualifiedNameAndTypeArray(named_types, count.value)
- return result
+ try:
+ for i in range(0, count.value):
+ name = types.QualifiedName._from_core_struct(named_types[i].name)
+ result[name] = types.Type.create(core.BNNewTypeReference(named_types[i].type))
+ return result
+ finally:
+ core.BNFreeQualifiedNameAndTypeArray(named_types, count.value)