#include "binaryninjaapi.h" using namespace BinaryNinja; using namespace std; Function::Function(BNFunction* func): m_func(func) { } Function::~Function() { BNFreeFunction(m_func); } Ref Function::GetArchitecture() const { return new CoreArchitecture(BNGetFunctionArchitecture(m_func)); } uint64_t Function::GetStart() const { return BNGetFunctionStart(m_func); } Ref Function::GetSymbol() const { return new Symbol(BNGetFunctionSymbol(m_func)); } vector> Function::GetBasicBlocks() const { size_t count; BNBasicBlock** blocks = BNGetFunctionBasicBlockList(m_func, &count); vector> result; for (size_t i = 0; i < count; i++) result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i]))); BNFreeBasicBlockList(blocks, count); return result; } void Function::MarkRecentUse() { BNMarkFunctionAsRecentlyUsed(m_func); } Ref Function::GetLowLevelIL() const { return new LowLevelILFunction(BNGetFunctionLowLevelIL(m_func)); } vector> Function::GetLowLevelILBasicBlocks() const { size_t count; BNBasicBlock** blocks = BNGetFunctionLowLevelILBasicBlockList(m_func, &count); vector> result; for (size_t i = 0; i < count; i++) result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i]))); BNFreeBasicBlockList(blocks, count); return result; } Ref Function::CreateFunctionGraph() { BNFunctionGraph* graph = BNCreateFunctionGraph(m_func); return new FunctionGraph(graph); }