summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/architecture.py12
-rw-r--r--python/binaryview.py16
-rw-r--r--python/platform.py12
-rw-r--r--python/types.py18
4 files changed, 42 insertions, 16 deletions
diff --git a/python/architecture.py b/python/architecture.py
index ea97f605..4cd0c597 100644
--- a/python/architecture.py
+++ b/python/architecture.py
@@ -1585,7 +1585,7 @@ class Architecture(object):
"""
core.BNSetBinaryViewTypeArchitectureConstant(self.handle, type_name, const_name, value)
- def parse_types_from_source(self, source, filename=None, include_dirs=[]):
+ def parse_types_from_source(self, source, filename=None, include_dirs=[], auto_type_source=None):
"""
``parse_types_from_source`` parses the source string and any needed headers searching for them in
the optional list of directories provided in ``include_dirs``.
@@ -1593,6 +1593,7 @@ class Architecture(object):
:param str source: source string to be parsed
:param str filename: optional source filename
:param list(str) include_dirs: optional list of string filename include directories
+ :param str auto_type_source: optional source of types if used for automatically generated types
:return: py:class:`TypeParserResult` (a SyntaxError is thrown on parse error)
:rtype: TypeParserResult
:Example:
@@ -1610,7 +1611,8 @@ class Architecture(object):
dir_buf[i] = str(include_dirs[i])
parse = core.BNTypeParserResult()
errors = ctypes.c_char_p()
- result = core.BNParseTypesFromSource(self.handle, source, filename, parse, errors, dir_buf, len(include_dirs))
+ result = core.BNParseTypesFromSource(self.handle, source, filename, parse, errors, dir_buf,
+ len(include_dirs), auto_type_source)
error_str = errors.value
core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte)))
if not result:
@@ -1630,13 +1632,14 @@ class Architecture(object):
core.BNFreeTypeParserResult(parse)
return types.TypeParserResult(type_dict, variables, functions)
- def parse_types_from_source_file(self, filename, include_dirs=[]):
+ def parse_types_from_source_file(self, filename, include_dirs=[], auto_type_source=None):
"""
``parse_types_from_source_file`` parses the source file ``filename`` and any needed headers searching for them in
the optional list of directories provided in ``include_dirs``.
:param str filename: filename of file to be parsed
:param list(str) include_dirs: optional list of string filename include directories
+ :param str auto_type_source: optional source of types if used for automatically generated types
:return: py:class:`TypeParserResult` (a SyntaxError is thrown on parse error)
:rtype: TypeParserResult
:Example:
@@ -1654,7 +1657,8 @@ class Architecture(object):
dir_buf[i] = str(include_dirs[i])
parse = core.BNTypeParserResult()
errors = ctypes.c_char_p()
- result = core.BNParseTypesFromSourceFile(self.handle, filename, parse, errors, dir_buf, len(include_dirs))
+ result = core.BNParseTypesFromSourceFile(self.handle, filename, parse, errors, dir_buf,
+ len(include_dirs), auto_type_source)
error_str = errors.value
core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte)))
if not result:
diff --git a/python/binaryview.py b/python/binaryview.py
index 2cdacb4c..caa5d780 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -3077,6 +3077,22 @@ class BinaryView(object):
new_name = types.QualifiedName(new_name)._get_core_struct()
core.BNRenameAnalysisType(self.handle, old_name, new_name)
+ def register_platform_types(self, platform):
+ """
+ ``register_platform_types`` ensures that the platform-specific types for a :py:Class:`Platform` are available
+ for the current :py:Class:`BinaryView`. This is automatically performed when adding a new function or setting
+ the default platform.
+
+ :param Platform platform: Platform containing types to be registered
+ :rtype: None
+ :Example:
+
+ >>> platform = Platform["linux-x86"]
+ >>> bv.register_platform_types(platform)
+ >>>
+ """
+ core.BNRegisterPlatformTypes(self.handle, platform.handle)
+
def find_next_data(self, start, data, flags = 0):
"""
``find_next_data`` searchs for the bytes in data starting at the virtual address ``start`` either, case-sensitive,
diff --git a/python/platform.py b/python/platform.py
index 04dce587..5d90997d 100644
--- a/python/platform.py
+++ b/python/platform.py
@@ -25,6 +25,7 @@ import _binaryninjacore as core
import startup
import architecture
import callingconvention
+import types
class _PlatformMetaClass(type):
@@ -259,3 +260,14 @@ class Platform(object):
new_addr.value = addr
result = core.BNGetAssociatedPlatformByAddress(self.handle, new_addr)
return Platform(None, handle = result), new_addr.value
+
+ def generate_auto_platform_type_id(self, name):
+ name = types.QualifiedName(name)._get_core_struct()
+ return core.BNGenerateAutoPlatformTypeId(self.handle, name)
+
+ def generate_auto_platform_type_ref(self, type_class, name):
+ type_id = self.generate_auto_platform_type_id(name)
+ return types.NamedTypeReference(type_class, type_id, name)
+
+ def get_auto_platform_type_id_source(self):
+ return core.BNGetAutoPlatformTypeIdSource(self.handle)
diff --git a/python/types.py b/python/types.py
index 1cc02691..f66625f8 100644
--- a/python/types.py
+++ b/python/types.py
@@ -446,14 +446,13 @@ class Type(object):
return core.BNGenerateAutoTypeId(source, name)
@classmethod
- def generate_auto_platform_type_id(self, name):
+ def generate_auto_demangled_type_id(self, name):
name = QualifiedName(name)._get_core_struct()
- return core.BNGenerateAutoTypeId(name)
+ return core.BNGenerateAutoDemangledTypeId(name)
@classmethod
- def generate_auto_demangled_type_id(self, name):
- name = QualifiedName(name)._get_core_struct()
- return core.BNGenerateAutoTypeId(name)
+ def get_auto_demanged_type_id_source(self):
+ return core.BNGetAutoDemangledTypeIdSource()
def __setattr__(self, name, value):
try:
@@ -523,13 +522,8 @@ class NamedTypeReference(object):
return NamedTypeReference(type_class, type_id, name)
@classmethod
- def generate_auto_platform_type_ref(self, type_class, source, name):
- type_id = Type.generate_auto_platform_type_id(source, name)
- return NamedTypeReference(type_class, type_id, name)
-
- @classmethod
- def generate_auto_demangled_type_ref(self, type_class, source, name):
- type_id = Type.generate_auto_demangled_type_id(source, name)
+ def generate_auto_demangled_type_ref(self, type_class, name):
+ type_id = Type.generate_auto_demangled_type_id(name)
return NamedTypeReference(type_class, type_id, name)