From 796932b62e7d007a46d8ad31cdb618e8125073ab Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Tue, 30 Sep 2025 15:09:48 -0400 Subject: Initial support for opening container formats. --- transformcontext.cpp | 186 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 transformcontext.cpp (limited to 'transformcontext.cpp') diff --git a/transformcontext.cpp b/transformcontext.cpp new file mode 100644 index 00000000..186b24b9 --- /dev/null +++ b/transformcontext.cpp @@ -0,0 +1,186 @@ +#include "binaryninjaapi.h" + +using namespace BinaryNinja; +using namespace std; + + +TransformContext::TransformContext(BNTransformContext* context) +{ + m_object = context; +} + + +TransformContext::~TransformContext() +{ +} + + +string TransformContext::GetTransformName() const +{ + char* name = BNTransformContextGetTransformName(m_object); + string result = name; + BNFreeString(name); + return result; +} + + +string TransformContext::GetFileName() const +{ + char* name = BNTransformContextGetFileName(m_object); + string result = name; + BNFreeString(name); + return result; +} + + +Ref TransformContext::GetInput() const +{ + return new BinaryView(BNTransformContextGetInput(m_object)); +} + + +Ref TransformContext::GetMetadata() const +{ + return new Metadata(BNTransformContextGetMetadata(m_object)); +} + + +Ref TransformContext::GetParent() const +{ + BNTransformContext* parent = BNTransformContextGetParent(m_object); + if (!parent) + return nullptr; + return new TransformContext(BNNewTransformContextReference(parent)); +} + + +size_t TransformContext::GetChildCount() const +{ + return BNTransformContextGetChildCount(m_object); +} + + +vector> TransformContext::GetChildren() const +{ + size_t count; + BNTransformContext** contexts = BNTransformContextGetChildren(m_object, &count); + + vector> result; + result.reserve(count); + + for (size_t i = 0; i < count; i++) + result.push_back(new TransformContext(BNNewTransformContextReference(contexts[i]))); + + BNFreeTransformContextList(contexts, count); + return result; +} + + +Ref TransformContext::GetChild(const string& filename) const +{ + BNTransformContext* child = BNTransformContextGetChild(m_object, filename.c_str()); + if (!child) + return nullptr; + return new TransformContext(BNNewTransformContextReference(child)); +} + + +Ref TransformContext::CreateChild(const DataBuffer& data, const string& filename) +{ + BNTransformContext* child = BNTransformContextCreateChild(m_object, data.GetBufferObject(), filename.c_str()); + if (!child) + return nullptr; + return new TransformContext(BNNewTransformContextReference(child)); +} + + +bool TransformContext::IsLeaf() const +{ + return BNTransformContextIsLeaf(m_object); +} + + +bool TransformContext::IsRoot() const +{ + return BNTransformContextIsRoot(m_object); +} + + +vector TransformContext::GetAvailableFiles() const +{ + size_t count; + char** files = BNTransformContextGetAvailableFiles(m_object, &count); + + vector result; + result.reserve(count); + + for (size_t i = 0; i < count; i++) + { + result.push_back(files[i]); + } + + BNFreeStringList(files, count); + return result; +} + + +void TransformContext::SetAvailableFiles(const vector& files) +{ + const char** cFiles = new const char*[files.size()]; + for (size_t i = 0; i < files.size(); i++) + { + cFiles[i] = files[i].c_str(); + } + + BNTransformContextSetAvailableFiles(m_object, cFiles, files.size()); + delete[] cFiles; +} + + +bool TransformContext::HasAvailableFiles() const +{ + return BNTransformContextHasAvailableFiles(m_object); +} + + +vector TransformContext::GetRequestedFiles() const +{ + size_t count; + char** files = BNTransformContextGetRequestedFiles(m_object, &count); + + vector result; + result.reserve(count); + + for (size_t i = 0; i < count; i++) + { + result.push_back(files[i]); + } + + BNFreeStringList(files, count); + return result; +} + + +void TransformContext::SetRequestedFiles(const vector& files) +{ + const char** cFiles = new const char*[files.size()]; + for (size_t i = 0; i < files.size(); i++) + { + cFiles[i] = files[i].c_str(); + } + + BNTransformContextSetRequestedFiles(m_object, cFiles, files.size()); + delete[] cFiles; +} + + +bool TransformContext::HasRequestedFiles() const +{ + return BNTransformContextHasRequestedFiles(m_object); +} + + +bool TransformContext::IsDatabase() const +{ + return BNTransformContextIsDatabase(m_object); +} -- cgit v1.3.1