summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-07-27 02:51:23 -0400
committerRusty Wagner <rusty@vector35.com>2016-07-27 03:31:06 -0400
commit9a40763268a7859288875e1ab59a7cf7592529f6 (patch)
treec49016ef209ea9f33097e37631e7d9501b71edd2 /python
parentdb64a9d125fee897a461fc2dcc26c5f680afa390 (diff)
Add APIs to add user types
Diffstat (limited to 'python')
-rw-r--r--python/__init__.py42
1 files changed, 37 insertions, 5 deletions
diff --git a/python/__init__.py b/python/__init__.py
index 4d7e7fb8..da8abd02 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -751,7 +751,7 @@ class BinaryView(object):
"""Binary View long name"""
_registered = False
_registered_cb = None
- view_type = None
+ registered_view_type = None
"""Binary View type"""
def __init__(self, file_metadata = None, handle = None):
@@ -806,7 +806,7 @@ class BinaryView(object):
cls._registered_cb.context = 0
cls._registered_cb.create = cls._registered_cb.create.__class__(cls._create)
cls._registered_cb.isValidForData = cls._registered_cb.isValidForData.__class__(cls._is_valid_for_data)
- cls.view_type = BinaryViewType(core.BNRegisterBinaryViewType(cls.name, cls.long_name, cls._registered_cb))
+ cls.registered_view_type = BinaryViewType(core.BNRegisterBinaryViewType(cls.name, cls.long_name, cls._registered_cb))
cls._registered = True
@classmethod
@@ -1003,13 +1003,13 @@ class BinaryView(object):
return result
@property
- def type(self):
+ def view_type(self):
"""View type (read-only)"""
return core.BNGetViewType(self.handle)
@property
- def available_types(self):
- """Available types (read-only)"""
+ def available_view_types(self):
+ """Available view types (read-only)"""
count = ctypes.c_ulonglong(0)
types = core.BNGetBinaryViewTypesForData(self.handle, count)
result = []
@@ -1056,6 +1056,17 @@ class BinaryView(object):
core.BNFreeDataVariables(var_list, count.value)
return result
+ @property
+ def types(self):
+ """List of defined types (read-only)"""
+ count = ctypes.c_ulonglong(0)
+ type_list = core.BNGetAnalysisTypeList(self.handle, count)
+ result = {}
+ for i in xrange(0, count.value):
+ result[type_list[i].name] = Type(core.BNNewTypeReference(type_list[i].type))
+ core.BNFreeTypeList(type_list, count.value)
+ return result
+
def __len__(self):
return int(core.BNGetViewLength(self.handle))
@@ -1745,6 +1756,27 @@ class BinaryView(object):
core.BNFreeNameAndType(result)
return type_obj, name
+ def get_type_by_name(self, name):
+ obj = core.BNGetAnalysisTypeByName(self.handle, name)
+ if not obj:
+ return None
+ return Type(obj)
+
+ def is_type_auto_defined(self, name):
+ return core.BNIsAnalysisTypeAutoDefined(self.handle, name)
+
+ def define_type(self, name, type_obj):
+ core.BNDefineAnalysisType(self.handle, name, type_obj.handle)
+
+ def define_user_type(self, name, type_obj):
+ core.BNDefineUserAnalysisType(self.handle, name, type_obj.handle)
+
+ def undefine_type(self, name):
+ core.BNUndefineAnalysisType(self.handle, name)
+
+ def undefine_user_type(self, name):
+ core.BNUndefineUserAnalysisType(self.handle, name)
+
def __setattr__(self, name, value):
try:
object.__setattr__(self,name,value)