summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
authorRyan Snyder <ryan@vector35.com>2025-02-24 15:14:19 -0500
committerRyan Snyder <ryan@vector35.com>2025-03-17 10:07:02 -0400
commit1652efdc43aa3acbd570c1f042a35da458538bb4 (patch)
tree72c5ec04401432691a78acdd0d29b1fc7ecc07de /binaryninjaapi.h
parent996ad28c29cd242b672041ae3b08e97a0e160a85 (diff)
core: initial union support with C++ API
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 6b1d268e..15b62e25 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -8764,6 +8764,12 @@ namespace BinaryNinja {
{}
};
+ class FieldResolutionInfo : public CoreRefCountObject<BNFieldResolutionInfo, BNNewFieldResolutionInfoReference, BNFreeFieldResolutionInfo>
+ {
+ public:
+ FieldResolutionInfo(BNFieldResolutionInfo* info);
+ };
+
struct QualifiedNameAndType
{
QualifiedName name;
@@ -9313,7 +9319,9 @@ namespace BinaryNinja {
Ref<Type> WithReplacedNamedTypeReference(NamedTypeReference* from, NamedTypeReference* to);
bool AddTypeMemberTokens(BinaryView* data, std::vector<InstructionTextToken>& tokens, int64_t offset,
- std::vector<std::string>& nameList, size_t size = 0, bool indirect = false);
+ std::vector<std::string>& nameList, size_t size = 0, bool indirect = false, FieldResolutionInfo* info = nullptr);
+ bool EnumerateTypesForAccess(BinaryView* data, uint64_t offset, size_t size, uint8_t baseConfidence,
+ const std::function<void(const Confidence<Ref<Type>>& type, FieldResolutionInfo* path)>& terminal);
std::vector<TypeDefinitionLine> GetLines(const TypeContainer& types, const std::string& name,
int paddingCols = 64, bool collapsed = false, BNTokenEscapingType escaping = NoTokenEscapingType);
@@ -11247,6 +11255,11 @@ namespace BinaryNinja {
void CreateForcedVariableVersion(const Variable& var, const ArchAndAddr& location);
void ClearForcedVariableVersion(const Variable& var, const ArchAndAddr& location);
+ void SetFieldResolutionForVariableAt(const Variable& var, const ArchAndAddr& location, FieldResolutionInfo* info);
+ void ClearFieldResolutionForVariableAt(const Variable& var, const ArchAndAddr& location);
+ Ref<FieldResolutionInfo> GetFieldResolutionForVariableAt(const Variable& var, const ArchAndAddr& location);
+ std::map<Variable, std::map<ArchAndAddr, Ref<FieldResolutionInfo>>> GetAllFieldResolutions();
+
void RequestDebugReport(const std::string& name);
/*! Get the name for a given label ID