diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-03-10 03:21:04 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-03-10 03:21:04 -0400 |
| commit | 1c9293031e8b4554756350ccd33363cdd83bfc43 (patch) | |
| tree | 33906522917b26d7894784f75964fbe15392f092 /binaryview.cpp | |
| parent | 55b999c719a33235c46166563df750b2a0fd30aa (diff) | |
Implement make function hotkey and disassembly navigation
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())) { } |
