diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-02-20 20:51:35 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-02-20 20:51:35 -0500 |
| commit | f3a02f93e175ac5c509aa6e135653a4f58af32ce (patch) | |
| tree | 6c35ca238e6caa56858dc7859b38bb16987d6e1b | |
| parent | f2b794bf897a2e208407bf5f4a13f4f813531e68 (diff) | |
Very early disassembly view rendering
| -rw-r--r-- | architecture.cpp | 5 | ||||
| -rw-r--r-- | binaryninjaapi.h | 10 | ||||
| -rw-r--r-- | binaryview.cpp | 38 | ||||
| -rw-r--r-- | function.cpp | 7 |
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); +} |
