#include "binaryninjaapi.h" using namespace BinaryNinja; using namespace std; TransformSession::TransformSession(const string& filename) { m_object = BNCreateTransformSession(filename.c_str()); } TransformSession::TransformSession(const string& filename, BNTransformSessionMode mode) { m_object = BNCreateTransformSessionWithMode(filename.c_str(), mode); } TransformSession::TransformSession(Ref initialView) { m_object = BNCreateTransformSessionFromBinaryView(initialView->GetObject()); } TransformSession::TransformSession(Ref initialView, BNTransformSessionMode mode) { m_object = BNCreateTransformSessionFromBinaryViewWithMode(initialView->GetObject(), mode); } TransformSession::TransformSession(BNTransformSession* session) { m_object = session; } TransformSession::~TransformSession() { } Ref TransformSession::GetCurrentView() const { return new BinaryView(BNTransformSessionGetCurrentView(m_object)); } Ref TransformSession::GetRootContext() const { return new TransformContext(BNTransformSessionGetRootContext(m_object)); } Ref TransformSession::GetCurrentContext() const { return new TransformContext(BNTransformSessionGetCurrentContext(m_object)); } bool TransformSession::ProcessFrom(Ref context) { return BNTransformSessionProcessFrom(m_object, context->GetObject()); } bool TransformSession::Process() { return BNTransformSessionProcess(m_object); } bool TransformSession::HasAnyStages() const { return BNTransformSessionHasAnyStages(m_object); } bool TransformSession::HasSinglePath() const { return BNTransformSessionHasSinglePath(m_object); } vector> TransformSession::GetSelectedContexts() const { size_t count; BNTransformContext** contexts = BNTransformSessionGetSelectedContexts(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; } void TransformSession::SetSelectedContexts(const vector>& contexts) { BNTransformContext** cContexts = new BNTransformContext*[contexts.size()]; for (size_t i = 0; i < contexts.size(); i++) cContexts[i] = contexts[i]->GetObject(); BNTransformSessionSetSelectedContexts(m_object, cContexts, contexts.size()); delete[] cContexts; }