From af05063f05b0b126a15b996d1954b90d0d17c05a Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Wed, 9 Feb 2022 23:40:54 -0500 Subject: OpenView for 2 more argument types: data and bv --- binaryview.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 13e9f439..d5390ddc 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -3842,6 +3842,10 @@ Ref BinaryNinja::OpenView(const std::string& filename, bool updateAn if (!progress) progress = [](size_t, size_t) { return true; }; + // Loading will surely fail if the file does not exist, so exit early + if (!BNPathExists(filename.c_str())) + return nullptr; + // Detect bndb bool isDatabase = false; Ref view = nullptr; @@ -3864,18 +3868,28 @@ Ref BinaryNinja::OpenView(const std::string& filename, bool updateAn Ref file = new FileMetadata(filename); view = file->OpenDatabaseForConfiguration(filename); - isDatabase = true; + return OpenView(view, updateAnalysis, progress, options, true); } else { // Open file, read raw contents Ref file = new FileMetadata(filename); view = new BinaryData(file, filename); + return OpenView(view, updateAnalysis, progress, options, false); } +} - if (!view) - return nullptr; +Ref BinaryNinja::OpenView(const DataBuffer& rawData, bool updateAnalysis, std::function progress, Json::Value options) +{ + Ref file = new FileMetadata(); + Ref view = new BinaryData(file, rawData); + return OpenView(view, updateAnalysis, progress, options, false); +} + + +Ref BinaryNinja::OpenView(Ref view, bool updateAnalysis, std::function progress, Json::Value options, bool isDatabase) +{ Ref bvt; Ref universalBvt; for (auto available : BinaryViewType::GetViewTypesForData(view)) @@ -4017,10 +4031,10 @@ Ref BinaryNinja::OpenView(const std::string& filename, bool updateAn Ref bv; if (isDatabase) { - view = view->GetFile()->OpenExistingDatabase(filename, progress); + view = view->GetFile()->OpenExistingDatabase(view->GetFile()->GetFilename(), progress); if (!view) { - LogError("Unable to open existing database with filename %s", filename.c_str()); + LogError("Unable to open existing database with filename %s", view->GetFile()->GetFilename().c_str()); return nullptr; } bv = view->GetFile()->GetViewOfType(bvt->GetName()); -- cgit v1.3.1