From f3040b9ef97f6dc521a14fa7a12c4a8d9b953e21 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Mon, 7 May 2018 16:03:13 -0400 Subject: Refactor supporting calling convention like approach --- binaryview.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 17 deletions(-) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 22194a58..055608a4 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -423,9 +423,6 @@ bool Section::AutoDefined() const } - - - BinaryView::BinaryView(const std::string& typeName, FileMetadata* file, BinaryView* parentView) { BNCustomBinaryView view; @@ -619,10 +616,10 @@ void BinaryView::DefineRelocationCallback(void* ctxt, BNArchitecture* arch, BNRe uint64_t symOffset, BNSegment* seg, uint64_t segOffset) { BinaryView* view = (BinaryView*)ctxt; - Architecture* curArch = new CoreArchitecture(arch); BNRelocationInfo curInfo = *info; - Ref curSym = new Symbol(sym); - Ref curSeg = new Segment(seg); + Ref curSym = new Symbol(BNNewSymbolReference(sym)); + Ref curSeg = new Segment(BNNewSegmentReference(seg)); + Architecture* curArch = new CoreArchitecture(arch); return view->PerformDefineRelocation(curArch, curInfo, curSym, symOffset, curSeg, segOffset); } @@ -631,10 +628,10 @@ void BinaryView::DefineSectionRelocationCallback(void* ctxt, BNArchitecture* arc uint64_t secOffset, BNSegment* seg, uint64_t segOffset) { BinaryView* view = (BinaryView*)ctxt; - Architecture* curArch = new CoreArchitecture(arch); BNRelocationInfo curInfo = *info; - Ref
curSec = new Section(sec); - Ref curSeg = new Segment(seg); + Ref
curSec = new Section(BNNewSectionReference(sec)); + Ref curSeg = new Segment(BNNewSegmentReference(seg)); + Architecture* curArch = new CoreArchitecture(arch); return view->PerformDefineRelocation(curArch, curInfo, curSec, secOffset, curSeg, segOffset); } @@ -715,20 +712,14 @@ bool BinaryView::PerformSave(FileAccessor* file) void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref sym, uint64_t symOffset, const Ref seg, uint64_t segOffset) { - Ref parent = GetParentView(); - if (parent) - parent->DefineRelocation(arch, info, sym, symOffset, seg, segOffset); - return; + DefineRelocation(arch, info, sym, symOffset, seg, segOffset); } void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref
sec, uint64_t secOffset, const Ref seg, uint64_t segOffset) { - Ref parent = GetParentView(); - if (parent) - parent->DefineRelocation(arch, info, sec, secOffset, seg, segOffset); - return; + DefineRelocation(arch, info, sec, secOffset, seg, segOffset); } @@ -2151,6 +2142,60 @@ void BinaryView::SetMaxFunctionSizeForAnalysis(uint64_t size) } +Relocation::Relocation(BNRelocation* reloc) +{ + m_object = reloc; +} + + +BNRelocationInfo Relocation::GetInfo() const +{ + return BNRelocationGetInfo(m_object); +} + + +Architecture* Relocation::GetArchitecture() const +{ + return new CoreArchitecture(BNRelocationGetArchitecture(m_object)); +} + + +Ref Relocation::GetSymbol() +{ + return new Symbol(BNNewSymbolReference(BNRelocationGetSymbol(m_object))); +} + + +uint64_t Relocation::GetSymbolOffset() const +{ + return BNRelocationGetSymbolOffset(m_object); +} + + +uint64_t Relocation::GetTargetAddress() const +{ + return BNRelocationGetTargetAddress(m_object); +} + + +Ref Relocation::GetSegment() +{ + return new Segment(BNNewSegmentReference(BNRelocationGetSegment(m_object))); +} + + +uint64_t Relocation::GetSegmentOffset() const +{ + return BNRelocationGetSegmentOffset(m_object); +} + + +uint64_t Relocation::GetDestAddress() const +{ + return BNRelocationGetDestAddress(m_object); +} + + BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject())) { } -- cgit v1.3.1