summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-02-20 20:51:35 -0500
committerRusty Wagner <rusty@vector35.com>2015-02-20 20:51:35 -0500
commitf3a02f93e175ac5c509aa6e135653a4f58af32ce (patch)
tree6c35ca238e6caa56858dc7859b38bb16987d6e1b
parentf2b794bf897a2e208407bf5f4a13f4f813531e68 (diff)
Very early disassembly view rendering
-rw-r--r--architecture.cpp5
-rw-r--r--binaryninjaapi.h10
-rw-r--r--binaryview.cpp38
-rw-r--r--function.cpp7
4 files changed, 60 insertions, 0 deletions
diff --git a/architecture.cpp b/architecture.cpp
index 0d010d0e..576a14e3 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -20,6 +20,11 @@ void InstructionInfo::AddBranch(BNBranchType type, uint64_t target)
}
+InstructionTextToken::InstructionTextToken(): type(TextToken), value(0)
+{
+}
+
+
InstructionTextToken::InstructionTextToken(BNInstructionTextTokenType t, const std::string& txt, uint64_t val) :
type(t), text(txt), value(val)
{
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 98a481de..21d46554 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -280,6 +280,7 @@ namespace BinaryNinja
};
class Architecture;
+ class Function;
class BinaryView: public RefCountObject
{
@@ -362,7 +363,12 @@ namespace BinaryNinja
void UnregisterNotification(BinaryDataNotification* notify);
void AddFunctionForAnalysis(Architecture* arch, uint64_t addr);
+ void AddEntryPointForAnalysis(Architecture* arch, uint64_t start);
void UpdateAnalysis();
+
+ std::vector<Ref<Function>> GetAnalysisFunctionList();
+ Ref<Function> GetAnalysisFunction(Architecture* arch, uint64_t addr);
+ Ref<Function> GetAnalysisEntryPoint();
};
class BinaryData: public BinaryView
@@ -649,6 +655,8 @@ namespace BinaryNinja
std::vector<BNBasicBlockEdge> GetOutgoingEdges() const;
};
+ class FunctionGraph;
+
class Function: public RefCountObject
{
BNFunction* m_func;
@@ -663,6 +671,8 @@ namespace BinaryNinja
uint64_t GetStart() const;
std::vector<Ref<BasicBlock>> GetBasicBlocks() const;
+
+ Ref<FunctionGraph> CreateFunctionGraph();
};
struct FunctionGraphTextLine
diff --git a/binaryview.cpp b/binaryview.cpp
index e99ed738..6a218730 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -318,12 +318,50 @@ void BinaryView::AddFunctionForAnalysis(Architecture* arch, uint64_t addr)
}
+void BinaryView::AddEntryPointForAnalysis(Architecture* arch, uint64_t addr)
+{
+ BNAddEntryPointForAnalysis(m_view, arch->GetArchitectureObject(), addr);
+}
+
+
void BinaryView::UpdateAnalysis()
{
BNUpdateAnalysis(m_view);
}
+vector<Ref<Function>> BinaryView::GetAnalysisFunctionList()
+{
+ size_t count;
+ BNFunction** list = BNGetAnalysisFunctionList(m_view, &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::GetAnalysisFunction(Architecture* arch, uint64_t addr)
+{
+ BNFunction* func = BNGetAnalysisFunction(m_view, arch->GetArchitectureObject(), addr);
+ if (!func)
+ return nullptr;
+ return new Function(func);
+}
+
+
+Ref<Function> BinaryView::GetAnalysisEntryPoint()
+{
+ BNFunction* func = BNGetAnalysisEntryPoint(m_view);
+ if (!func)
+ return nullptr;
+ return new Function(func);
+}
+
+
BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetFileObject()))
{
}
diff --git a/function.cpp b/function.cpp
index db99b97d..a57c90f6 100644
--- a/function.cpp
+++ b/function.cpp
@@ -39,3 +39,10 @@ vector<Ref<BasicBlock>> Function::GetBasicBlocks() const
BNFreeBasicBlockList(blocks, count);
return result;
}
+
+
+Ref<FunctionGraph> Function::CreateFunctionGraph()
+{
+ BNFunctionGraph* graph = BNCreateFunctionGraph(m_func);
+ return new FunctionGraph(graph);
+}