summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-03-10 03:21:04 -0400
committerRusty Wagner <rusty@vector35.com>2015-03-10 03:21:04 -0400
commit1c9293031e8b4554756350ccd33363cdd83bfc43 (patch)
tree33906522917b26d7894784f75964fbe15392f092 /binaryview.cpp
parent55b999c719a33235c46166563df750b2a0fd30aa (diff)
Implement make function hotkey and disassembly navigation
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp64
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()))
{
}