summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2022-01-18 09:31:18 -0500
committerPeter LaFosse <peter@vector35.com>2022-01-19 10:52:42 -0500
commit28cdd331752203f771990844699463d47724e840 (patch)
tree778a710d6e9ffba9345efcb74b3d11a48c739c2d
parent5d66fab3c2b36a14f9efd119a818c48c0950394a (diff)
Add getters and setters for syscall number in type objects
-rw-r--r--binaryninjaapi.h6
-rw-r--r--binaryninjacore.h5
-rw-r--r--python/types.py13
-rw-r--r--type.cpp30
4 files changed, 53 insertions, 1 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index a852290d..0fc38edd 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -2790,6 +2790,7 @@ __attribute__ ((format (printf, 1, 2)))
Confidence<bool> IsSigned() const;
Confidence<bool> IsConst() const;
Confidence<bool> IsVolatile() const;
+ bool IsSystemCall() const;
Confidence<Ref<Type>> GetChildType() const;
Confidence<Ref<CallingConvention>> GetCallingConvention() const;
@@ -2803,7 +2804,7 @@ __attribute__ ((format (printf, 1, 2)))
Confidence<int64_t> GetStackAdjustment() const;
QualifiedName GetStructureName() const;
Ref<NamedTypeReference> GetRegisteredName() const;
-
+ uint32_t GetSystemCallNumber() const;
BNIntegerDisplayType GetIntegerTypeDisplayType() const;
uint64_t GetElementCount() const;
@@ -2914,6 +2915,7 @@ __attribute__ ((format (printf, 1, 2)))
Confidence<bool> IsSigned() const;
Confidence<bool> IsConst() const;
Confidence<bool> IsVolatile() const;
+ bool IsSystemCall() const;
void SetIntegerTypeDisplayType(BNIntegerDisplayType displayType);
Confidence<Ref<Type>> GetChildType() const;
@@ -2932,11 +2934,13 @@ __attribute__ ((format (printf, 1, 2)))
TypeBuilder& SetSigned(const Confidence<bool>& vltl);
TypeBuilder& SetTypeName(const QualifiedName& name);
TypeBuilder& SetAlternateName(const std::string& name);
+ TypeBuilder& SetSystemCall(bool sc, uint32_t n = 0);
Confidence<int64_t> GetStackAdjustment() const;
QualifiedName GetStructureName() const;
uint64_t GetElementCount() const;
uint64_t GetOffset() const;
+ uint32_t GetSystemCallNumber() const;
TypeBuilder& SetFunctionCanReturn(const Confidence<bool>& canReturn);
TypeBuilder& SetParameters(const std::vector<FunctionParameter>& params);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index f1353c10..eb6833a4 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -4821,6 +4821,8 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI BNNamedTypeReference* BNGetRegisteredTypeName(BNType* type);
BINARYNINJACOREAPI BNReferenceType BNTypeGetReferenceType(BNType* type);
BINARYNINJACOREAPI char* BNGetTypeAlternateName(BNType* type);
+ BINARYNINJACOREAPI uint32_t BNTypeGetSystemCallNumber(BNType* type);
+ BINARYNINJACOREAPI bool BNTypeIsSystemCall(BNType* type);
BINARYNINJACOREAPI char* BNGetTypeString(BNType* type, BNPlatform* platform);
BINARYNINJACOREAPI char* BNGetTypeStringBeforeName(BNType* type, BNPlatform* platform);
@@ -4843,6 +4845,7 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI void BNTypeBuilderSetTypeName(BNTypeBuilder* type, BNQualifiedName* name);
BINARYNINJACOREAPI void BNTypeBuilderSetAlternateName(BNTypeBuilder* type, const char* name);
BINARYNINJACOREAPI BNTypeClass BNGetTypeBuilderClass(BNTypeBuilder* type);
+ BINARYNINJACOREAPI void BNTypeBuilderSetSystemCallNumber(BNTypeBuilder* type, bool v, uint32_t n);
BINARYNINJACOREAPI uint64_t BNGetTypeBuilderWidth(BNTypeBuilder* type);
BINARYNINJACOREAPI size_t BNGetTypeBuilderAlignment(BNTypeBuilder* type);
BINARYNINJACOREAPI BNBoolWithConfidence BNIsTypeBuilderSigned(BNTypeBuilder* type);
@@ -4869,6 +4872,8 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI BNQualifiedName BNTypeBuilderGetStructureName(BNTypeBuilder* type);
BINARYNINJACOREAPI BNReferenceType BNTypeBuilderGetReferenceType(BNTypeBuilder* type);
BINARYNINJACOREAPI char* BNGetTypeBuilderAlternateName(BNTypeBuilder* type);
+ BINARYNINJACOREAPI bool BNTypeBuilderIsSystemCall(BNTypeBuilder* type);
+ BINARYNINJACOREAPI uint32_t BNTypeBuilderGetSystemCallNumber(BNTypeBuilder* type);
BINARYNINJACOREAPI char* BNGetTypeBuilderString(BNTypeBuilder* type, BNPlatform* platform);
BINARYNINJACOREAPI char* BNGetTypeBuilderStringBeforeName(BNTypeBuilder* type, BNPlatform* platform);
diff --git a/python/types.py b/python/types.py
index 8ca8e260..296380ee 100644
--- a/python/types.py
+++ b/python/types.py
@@ -739,6 +739,19 @@ class TypeBuilder:
core.BNTypeBuilderSetAlternateName(self._handle, name)
@property
+ def system_call_number(self) -> Optional[_int]:
+ if core.BNTypeBuilderIsSystemCall(self._handle):
+ return None
+ return core.BNTypeBuilderGetSystemCallNumber(self._handle)
+
+ @system_call_number.setter
+ def system_call_number(self, value:int) -> None:
+ core.BNTypeBuilderSetSystemCallNumber(self._handle, True, value)
+
+ def clear_system_call(self) -> None:
+ core.BNTypeBuilderSetSystemCallNumber(self._handle, False, 0)
+
+ @property
def type_class(self) -> TypeClass:
return TypeClass(core.BNGetTypeBuilderClass(self._handle).value)
diff --git a/type.cpp b/type.cpp
index e641b130..bb07910d 100644
--- a/type.cpp
+++ b/type.cpp
@@ -934,6 +934,17 @@ QualifiedName Type::GetStructureName() const
}
+bool Type::IsSystemCall() const
+{
+ return BNTypeIsSystemCall(m_object);
+}
+
+
+uint32_t Type::GetSystemCallNumber() const
+{
+ return BNTypeGetSystemCallNumber(m_object);
+}
+
Ref<NamedTypeReference> Type::GetRegisteredName() const
{
BNNamedTypeReference* name = BNGetRegisteredTypeName(m_object);
@@ -1590,6 +1601,25 @@ TypeBuilder& TypeBuilder::SetAlternateName(const string& name)
}
+TypeBuilder& TypeBuilder::SetSystemCall(bool sc, uint32_t n)
+{
+ BNTypeBuilderSetSystemCallNumber(m_object, sc, n);
+ return *this;
+}
+
+
+bool TypeBuilder::IsSystemCall() const
+{
+ return BNTypeBuilderIsSystemCall(m_object);
+}
+
+
+uint32_t TypeBuilder::GetSystemCallNumber() const
+{
+ return BNTypeBuilderGetSystemCallNumber(m_object);
+}
+
+
QualifiedName TypeBuilder::GetStructureName() const
{
BNQualifiedName name = BNTypeBuilderGetStructureName(m_object);