From a48ce3f4aa1266d5b8619cf320a703ba4f697854 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Sun, 31 Jan 2016 02:38:32 -0500 Subject: Refactor API to fix design bug that causes use-after-free on many plugin objects --- basicblock.cpp | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'basicblock.cpp') diff --git a/basicblock.cpp b/basicblock.cpp index e27cdfa2..1c86a93b 100644 --- a/basicblock.cpp +++ b/basicblock.cpp @@ -4,51 +4,46 @@ using namespace BinaryNinja; using namespace std; -BasicBlock::BasicBlock(BNBasicBlock* block): m_block(block) +BasicBlock::BasicBlock(BNBasicBlock* block) { -} - - -BasicBlock::~BasicBlock() -{ - BNFreeBasicBlock(m_block); + m_object = block; } Ref BasicBlock::GetFunction() const { - return new Function(BNGetBasicBlockFunction(m_block)); + return new Function(BNGetBasicBlockFunction(m_object)); } Ref BasicBlock::GetArchitecture() const { - return new CoreArchitecture(BNGetBasicBlockArchitecture(m_block)); + return new CoreArchitecture(BNGetBasicBlockArchitecture(m_object)); } uint64_t BasicBlock::GetStart() const { - return BNGetBasicBlockStart(m_block); + return BNGetBasicBlockStart(m_object); } uint64_t BasicBlock::GetEnd() const { - return BNGetBasicBlockEnd(m_block); + return BNGetBasicBlockEnd(m_object); } uint64_t BasicBlock::GetLength() const { - return BNGetBasicBlockLength(m_block); + return BNGetBasicBlockLength(m_object); } vector BasicBlock::GetOutgoingEdges() const { size_t count; - BNBasicBlockEdge* array = BNGetBasicBlockOutgoingEdges(m_block, &count); + BNBasicBlockEdge* array = BNGetBasicBlockOutgoingEdges(m_object, &count); vector result; for (size_t i = 0; i < count; i++) @@ -67,11 +62,11 @@ vector BasicBlock::GetOutgoingEdges() const bool BasicBlock::HasUndeterminedOutgoingEdges() const { - return BNBasicBlockHasUndeterminedOutgoingEdges(m_block); + return BNBasicBlockHasUndeterminedOutgoingEdges(m_object); } void BasicBlock::MarkRecentUse() { - BNMarkBasicBlockAsRecentlyUsed(m_block); + BNMarkBasicBlockAsRecentlyUsed(m_object); } -- cgit v1.3.1