From c34ac521dd6022d522053712833943c699bedb3f Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Mon, 13 Jan 2020 20:35:50 -0500 Subject: Add registered name to type objects --- binaryninjaapi.h | 1 + binaryninjacore.h | 1 + python/types.py | 13 +++++++++++++ suite/binaries | 2 +- type.cpp | 9 +++++++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 469850fa..ba863efa 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -2481,6 +2481,7 @@ __attribute__ ((format (printf, 1, 2))) Confidence GetAccess() const; Confidence GetStackAdjustment() const; QualifiedName GetStructureName() const; + Ref GetRegisteredName() const; uint64_t GetElementCount() const; uint64_t GetOffset() const; diff --git a/binaryninjacore.h b/binaryninjacore.h index 2d531c33..04793b09 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -3587,6 +3587,7 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI BNMemberAccessWithConfidence BNTypeGetMemberAccess(BNType* type); BINARYNINJACOREAPI BNOffsetWithConfidence BNGetTypeStackAdjustment(BNType* type); BINARYNINJACOREAPI BNQualifiedName BNTypeGetStructureName(BNType* type); + BINARYNINJACOREAPI BNNamedTypeReference* BNGetRegisteredTypeName(BNType* type); BINARYNINJACOREAPI char* BNGetTypeString(BNType* type, BNPlatform* platform); BINARYNINJACOREAPI char* BNGetTypeStringBeforeName(BNType* type, BNPlatform* platform); diff --git a/python/types.py b/python/types.py index 68fc9a76..8b883e6b 100644 --- a/python/types.py +++ b/python/types.py @@ -573,6 +573,16 @@ class Type(object): result = core.BNGetTypeStackAdjustment(self._handle) return SizeWithConfidence(result.value, confidence = result.confidence) + @property + def registered_name(self): + """Name of type registered to binary view, if any (read-only)""" + if self._mutable: + return None + name = core.BNGetRegisteredTypeName(self._handle) + if not name: + return None + return NamedTypeReference(handle = name) + def __len__(self): return self.width @@ -582,6 +592,9 @@ class Type(object): platform = self._platform.handle if self._mutable: return core.BNGetTypeBuilderString(self._handle, platform) + name = self.registered_name + if name is not None: + return self.get_string_before_name() + " " + str(name.name) + self.get_string_after_name() return core.BNGetTypeString(self._handle, platform) def __repr__(self): diff --git a/suite/binaries b/suite/binaries index 24abb8fd..4b3df332 160000 --- a/suite/binaries +++ b/suite/binaries @@ -1 +1 @@ -Subproject commit 24abb8fd8fe00a7188b5255bdcf9df36edc5febc +Subproject commit 4b3df332218479562ca54a8ecff9847d6f416417 diff --git a/type.cpp b/type.cpp index f607f333..58d23767 100644 --- a/type.cpp +++ b/type.cpp @@ -913,6 +913,15 @@ QualifiedName Type::GetStructureName() const } +Ref Type::GetRegisteredName() const +{ + BNNamedTypeReference* name = BNGetRegisteredTypeName(m_object); + if (!name) + return nullptr; + return new NamedTypeReference(name); +} + + Ref Type::WithReplacedStructure(Structure* from, Structure* to) { BNType* result = BNTypeWithReplacedStructure(m_object, from->GetObject(), to->GetObject()); -- cgit v1.3.1