diff options
Diffstat (limited to 'binaryview.cpp')
| -rw-r--r-- | binaryview.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/binaryview.cpp b/binaryview.cpp index d274acb7..82fcdc6d 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -300,6 +300,24 @@ uint64_t BinaryView::GetEntryPoint() const } +Ref<Architecture> BinaryView::GetDefaultArchitecture() const +{ + BNArchitecture* arch = BNGetDefaultArchitecture(m_view); + if (!arch) + return nullptr; + return new CoreArchitecture(arch); +} + + +void BinaryView::SetDefaultArchitecture(Architecture* arch) +{ + if (arch) + BNSetDefaultArchitecture(m_view, arch->GetArchitectureObject()); + else + BNSetDefaultArchitecture(m_view, nullptr); +} + + bool BinaryView::IsExecutable() const { return BNIsExecutableView(m_view); @@ -359,6 +377,29 @@ Ref<Function> BinaryView::GetAnalysisFunction(Architecture* arch, uint64_t addr) } +Ref<Function> BinaryView::GetRecentAnalysisFunctionForAddress(uint64_t addr) +{ + BNFunction* func = BNGetRecentAnalysisFunctionForAddress(m_view, addr); + if (!func) + return nullptr; + return new Function(func); +} + + +vector<Ref<Function>> BinaryView::GetAnalysisFunctionsForAddress(uint64_t addr) +{ + size_t count; + BNFunction** list = BNGetAnalysisFunctionsForAddress(m_view, addr, &count); + + vector<Ref<Function>> result; + for (size_t i = 0; i < count; i++) + result.push_back(new Function(BNNewFunctionReference(list[i]))); + + BNFreeFunctionList(list, count); + return result; +} + + Ref<Function> BinaryView::GetAnalysisEntryPoint() { BNFunction* func = BNGetAnalysisEntryPoint(m_view); @@ -368,6 +409,29 @@ Ref<Function> BinaryView::GetAnalysisEntryPoint() } +Ref<BasicBlock> BinaryView::GetRecentBasicBlockForAddress(uint64_t addr) +{ + BNBasicBlock* block = BNGetRecentBasicBlockForAddress(m_view, addr); + if (!block) + return nullptr; + return new BasicBlock(block); +} + + +vector<Ref<BasicBlock>> BinaryView::GetBasicBlocksForAddress(uint64_t addr) +{ + size_t count; + BNBasicBlock** blocks = BNGetBasicBlocksForAddress(m_view, addr, &count); + + vector<Ref<BasicBlock>> result; + for (size_t i = 0; i < count; i++) + result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i]))); + + BNFreeBasicBlockList(blocks, count); + return result; +} + + BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetFileObject())) { } |
