summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index c818bed6..52fd3dd3 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -4412,6 +4412,9 @@ Ref<Symbol> Relocation::GetSymbol() const
}
+BinaryData::BinaryData(BNBinaryView* view) : BinaryView(view) {}
+
+
BinaryData::BinaryData(FileMetadata* file) : BinaryView(BNCreateBinaryDataView(file->GetObject())) {}
@@ -4435,6 +4438,26 @@ BinaryData::BinaryData(FileMetadata* file, FileAccessor* accessor) :
{}
+Ref<BinaryData> BinaryData::CreateFromFilename(FileMetadata* file, const std::string& path)
+{
+ // This can fail, and throwing an exception in a c++ ctor is Ugly, so now there's a helper method here
+ BNBinaryView* handle = BNCreateBinaryDataViewFromFilename(file->GetObject(), path.c_str());
+ if (!handle)
+ return nullptr;
+ return new BinaryData(handle);
+}
+
+
+Ref<BinaryData> BinaryData::CreateFromFile(FileMetadata* file, FileAccessor* accessor)
+{
+ // This can fail, and throwing an exception in a c++ ctor is Ugly, so now there's a helper method here
+ BNBinaryView* handle = BNCreateBinaryDataViewFromFile(file->GetObject(), accessor->GetCallbacks());
+ if (!handle)
+ return nullptr;
+ return new BinaryData(handle);
+}
+
+
Ref<BinaryView> BinaryNinja::OpenView(const std::string& filename, bool updateAnalysis, std::function<bool(size_t, size_t)> progress, Json::Value options)
{
if (!progress)
@@ -4475,7 +4498,7 @@ Ref<BinaryView> BinaryNinja::OpenView(const std::string& filename, bool updateAn
{
// Open file, read raw contents
Ref<FileMetadata> file = new FileMetadata(filename);
- view = new BinaryData(file, filename);
+ view = BinaryData::CreateFromFilename(file, filename);
}
if (!view)