diff options
Diffstat (limited to 'architecture.cpp')
| -rw-r--r-- | architecture.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/architecture.cpp b/architecture.cpp index 22bf6fc3..22045ee2 100644 --- a/architecture.cpp +++ b/architecture.cpp @@ -24,6 +24,7 @@ #include <inttypes.h> #include <vector> #include "binaryninjaapi.h" +#include "lowlevelilinstruction.h" #include "ffi.h" using namespace BinaryNinja; @@ -327,6 +328,15 @@ bool Architecture::GetInstructionLowLevelILCallback( } +void Architecture::AnalyzeBasicBlocksCallback(void *ctxt, BNFunction* function, + BNBasicBlockAnalysisContext* context) +{ + CallbackRef<Architecture> arch(ctxt); + Ref<Function> func(new Function(BNNewFunctionReference(function))); + arch->AnalyzeBasicBlocks(*func, *context); +} + + char* Architecture::GetRegisterNameCallback(void* ctxt, uint32_t reg) { CallbackRef<Architecture> arch(ctxt); @@ -817,6 +827,7 @@ void Architecture::Register(Architecture* arch) callbacks.getInstructionText = GetInstructionTextCallback; callbacks.freeInstructionText = FreeInstructionTextCallback; callbacks.getInstructionLowLevelIL = GetInstructionLowLevelILCallback; + callbacks.analyzeBasicBlocks = AnalyzeBasicBlocksCallback; callbacks.getRegisterName = GetRegisterNameCallback; callbacks.getFlagName = GetFlagNameCallback; callbacks.getFlagWriteTypeName = GetFlagWriteTypeNameCallback; @@ -945,6 +956,12 @@ bool Architecture::GetInstructionLowLevelIL(const uint8_t*, uint64_t, size_t&, L } +void Architecture::AnalyzeBasicBlocks(Function& function, BasicBlockAnalysisContext& context) +{ + DefaultAnalyzeBasicBlocks(function, context); +} + + string Architecture::GetRegisterName(uint32_t reg) { return fmt::format("r{}", reg); @@ -1505,6 +1522,12 @@ bool CoreArchitecture::GetInstructionLowLevelIL(const uint8_t* data, uint64_t ad } +void CoreArchitecture::AnalyzeBasicBlocks(Function& function, BasicBlockAnalysisContext& context) +{ + BNArchitectureAnalyzeBasicBlocks(m_object, function.GetObject(), &context); +} + + string CoreArchitecture::GetRegisterName(uint32_t reg) { char* name = BNGetArchitectureRegisterName(m_object, reg); |
