From a7524ae957f62fded3991152a360c553c99639b6 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Fri, 11 May 2018 13:37:48 -0400 Subject: Simplify relocation handlers --- binaryview.cpp | 77 +++++++++------------------------------------------------- 1 file changed, 11 insertions(+), 66 deletions(-) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 055608a4..6c4418b8 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -449,7 +449,6 @@ BinaryView::BinaryView(const std::string& typeName, FileMetadata* file, BinaryVi view.getAddressSize = GetAddressSizeCallback; view.save = SaveCallback; view.defineRelocation = DefineRelocationCallback; - view.defineSectionRelocation = DefineSectionRelocationCallback; m_file = file; AddRefForRegistration(); m_object = BNCreateCustomBinaryView(typeName.c_str(), m_file->GetObject(), @@ -612,27 +611,13 @@ bool BinaryView::SaveCallback(void* ctxt, BNFileAccessor* file) } -void BinaryView::DefineRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSymbol* sym, - uint64_t symOffset, BNSegment* seg, uint64_t segOffset) +void BinaryView::DefineRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, uint64_t target, + uint64_t reloc) { BinaryView* view = (BinaryView*)ctxt; BNRelocationInfo curInfo = *info; - 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); -} - - -void BinaryView::DefineSectionRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSection* sec, - uint64_t secOffset, BNSegment* seg, uint64_t segOffset) -{ - BinaryView* view = (BinaryView*)ctxt; - BNRelocationInfo curInfo = *info; - 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); + return view->PerformDefineRelocation(curArch, curInfo, target, reloc); } @@ -709,17 +694,9 @@ bool BinaryView::PerformSave(FileAccessor* file) } -void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref sym, - uint64_t symOffset, const Ref seg, uint64_t segOffset) -{ - 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) +void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, uint64_t target, uint64_t reloc) { - DefineRelocation(arch, info, sec, secOffset, seg, segOffset); + DefineRelocation(arch, info, target, reloc); } @@ -902,17 +879,9 @@ bool BinaryView::Save(const string& path) } -void BinaryView::DefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref sym, - uint64_t symOffset, const Ref seg, uint64_t segOffset) -{ - BNDefineRelocation(m_object, arch->GetObject(), &info, sym->GetObject(), symOffset, seg->GetObject(), segOffset); -} - - -void BinaryView::DefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref
sec, - uint64_t secOffset, const Ref seg, uint64_t segOffset) +void BinaryView::DefineRelocation(Architecture* arch, BNRelocationInfo& info, uint64_t target, uint64_t reloc) { - BNDefineSectionRelocation(m_object, arch->GetObject(), &info, sec->GetObject(), secOffset, seg->GetObject(), segOffset); + BNDefineRelocation(m_object, arch->GetObject(), &info, target, reloc); } @@ -2160,39 +2129,15 @@ Architecture* Relocation::GetArchitecture() const } -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 +uint64_t Relocation::GetTarget() const { - return BNRelocationGetSegmentOffset(m_object); + return BNRelocationGetTarget(m_object); } -uint64_t Relocation::GetDestAddress() const +uint64_t Relocation::GetReloc() const { - return BNRelocationGetDestAddress(m_object); + return BNRelocationGetReloc(m_object); } -- cgit v1.3.1