summaryrefslogtreecommitdiff
path: root/binaryninjacore.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2023-03-16 19:54:07 -0400
committerRusty Wagner <rusty.wagner@gmail.com>2023-03-30 18:05:12 -0400
commitd811fffd69ffba789b960edd4fa31cc3d3f5905e (patch)
tree09d036bc3cedc4b93f9fc45b77ebf86659ee0aec /binaryninjacore.h
parent1113603311856740654617341767562218182618 (diff)
Add support for deriving structures from other structures
Diffstat (limited to 'binaryninjacore.h')
-rw-r--r--binaryninjacore.h38
1 files changed, 37 insertions, 1 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 3e0f4f06..ce9ec90f 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -43,7 +43,7 @@
// will require rebuilding. The minimum version is increased when there are
// incompatible changes that break binary compatibility, such as changes to
// existing types or functions.
-#define BN_MINIMUM_CORE_ABI_VERSION 33
+#define BN_MINIMUM_CORE_ABI_VERSION 34
#ifdef __GNUC__
#ifdef BINARYNINJACORE_LIBRARY
@@ -349,6 +349,8 @@ extern "C"
UnknownMemoryToken = 34,
EnumerationMemberToken = 35,
OperationToken = 36,
+ BaseStructureNameToken = 37,
+ BaseStructureSeparatorToken = 38,
// The following are output by the analysis system automatically, these should
// not be used directly by the architecture plugins
CodeSymbolToken = 64,
@@ -1621,6 +1623,8 @@ extern "C"
BNType* type;
BNType* rootType;
char* rootTypeName;
+ BNNamedTypeReference* baseType;
+ uint64_t baseOffset;
uint64_t offset;
size_t fieldIndex;
};
@@ -1792,6 +1796,7 @@ extern "C"
GotoLabelColor,
CommentColor,
OperationColor,
+ BaseStructureNameColor,
// Script console colors
ScriptConsoleOutputColor,
@@ -2098,6 +2103,21 @@ extern "C"
BNMemberScope scope;
};
+ struct BNInheritedStructureMember
+ {
+ BNNamedTypeReference* base;
+ uint64_t baseOffset;
+ BNStructureMember member;
+ size_t memberIndex;
+ };
+
+ struct BNBaseStructure
+ {
+ BNNamedTypeReference* type;
+ uint64_t offset;
+ uint64_t width;
+ };
+
struct BNEnumerationMember
{
char* name;
@@ -4038,6 +4058,8 @@ extern "C"
BNBinaryView* view, BNQualifiedName* type, uint64_t offset, size_t* count);
BINARYNINJACOREAPI uint64_t* BNGetDataReferencesForTypeField(
BNBinaryView* view, BNQualifiedName* type, uint64_t offset, size_t* count);
+ BINARYNINJACOREAPI uint64_t* BNGetDataReferencesFromForTypeField(
+ BNBinaryView* view, BNQualifiedName* type, uint64_t offset, size_t* count);
BINARYNINJACOREAPI BNTypeReferenceSource* BNGetTypeReferencesForTypeField(
BNBinaryView* view, BNQualifiedName* type, uint64_t offset, size_t* count);
@@ -5465,11 +5487,18 @@ extern "C"
BINARYNINJACOREAPI void BNFreeStructureMember(BNStructureMember* s);
BINARYNINJACOREAPI BNStructureMember* BNGetStructureMembers(BNStructure* s, size_t* count);
BINARYNINJACOREAPI void BNFreeStructureMemberList(BNStructureMember* members, size_t count);
+ BINARYNINJACOREAPI BNInheritedStructureMember* BNGetStructureMembersIncludingInherited(
+ BNStructure* s, BNBinaryView* view, size_t* count);
+ BINARYNINJACOREAPI void BNFreeInheritedStructureMemberList(BNInheritedStructureMember* members, size_t count);
BINARYNINJACOREAPI uint64_t BNGetStructureWidth(BNStructure* s);
+ BINARYNINJACOREAPI int64_t BNGetStructurePointerOffset(BNStructure* s);
BINARYNINJACOREAPI size_t BNGetStructureAlignment(BNStructure* s);
BINARYNINJACOREAPI bool BNIsStructurePacked(BNStructure* s);
BINARYNINJACOREAPI bool BNIsStructureUnion(BNStructure* s);
+ BINARYNINJACOREAPI bool BNStructurePropagatesDataVariableReferences(BNStructure* s);
BINARYNINJACOREAPI BNStructureVariant BNGetStructureType(BNStructure* s);
+ BINARYNINJACOREAPI BNBaseStructure* BNGetBaseStructuresForStructure(BNStructure* s, size_t* count);
+ BINARYNINJACOREAPI void BNFreeBaseStructureList(BNBaseStructure* bases, size_t count);
BINARYNINJACOREAPI BNStructure* BNStructureWithReplacedStructure(
BNStructure* s, BNStructure* from, BNStructure* to);
@@ -5484,13 +5513,20 @@ extern "C"
BINARYNINJACOREAPI BNStructureMember* BNGetStructureBuilderMembers(BNStructureBuilder* s, size_t* count);
BINARYNINJACOREAPI uint64_t BNGetStructureBuilderWidth(BNStructureBuilder* s);
BINARYNINJACOREAPI void BNSetStructureBuilderWidth(BNStructureBuilder* s, uint64_t width);
+ BINARYNINJACOREAPI int64_t BNGetStructureBuilderPointerOffset(BNStructureBuilder* s);
+ BINARYNINJACOREAPI void BNSetStructureBuilderPointerOffset(BNStructureBuilder* s, int64_t offset);
BINARYNINJACOREAPI size_t BNGetStructureBuilderAlignment(BNStructureBuilder* s);
BINARYNINJACOREAPI void BNSetStructureBuilderAlignment(BNStructureBuilder* s, size_t align);
BINARYNINJACOREAPI bool BNIsStructureBuilderPacked(BNStructureBuilder* s);
BINARYNINJACOREAPI void BNSetStructureBuilderPacked(BNStructureBuilder* s, bool packed);
BINARYNINJACOREAPI bool BNIsStructureBuilderUnion(BNStructureBuilder* s);
BINARYNINJACOREAPI void BNSetStructureBuilderType(BNStructureBuilder* s, BNStructureVariant type);
+ BINARYNINJACOREAPI bool BNStructureBuilderPropagatesDataVariableReferences(BNStructureBuilder* s);
+ BINARYNINJACOREAPI void BNSetStructureBuilderPropagatesDataVariableReferences(BNStructureBuilder* s, bool value);
BINARYNINJACOREAPI BNStructureVariant BNGetStructureBuilderType(BNStructureBuilder* s);
+ BINARYNINJACOREAPI BNBaseStructure* BNGetBaseStructuresForStructureBuilder(BNStructureBuilder* s, size_t* count);
+ BINARYNINJACOREAPI void BNSetBaseStructuresForStructureBuilder(
+ BNStructureBuilder* s, BNBaseStructure* bases, size_t count);
BINARYNINJACOREAPI void BNAddStructureBuilderMember(BNStructureBuilder* s, const BNTypeWithConfidence* const type,
const char* name, BNMemberAccess access, BNMemberScope scope);