diff options
| author | Peter LaFosse <peter@vector35.com> | 2018-05-11 13:37:48 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2018-05-11 13:37:48 -0400 |
| commit | a7524ae957f62fded3991152a360c553c99639b6 (patch) | |
| tree | 1a6370a9ac9430286929d5dd13e5c387a31599d8 | |
| parent | 40930128dc95f6cb8a9f2c1a4ce098fd15ae02ef (diff) | |
Simplify relocation handlers
| -rw-r--r-- | binaryninjaapi.h | 23 | ||||
| -rw-r--r-- | binaryninjacore.h | 17 | ||||
| -rw-r--r-- | binaryview.cpp | 77 |
3 files changed, 20 insertions, 97 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index b753455b..54e98ad5 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1123,10 +1123,7 @@ namespace BinaryNinja virtual size_t PerformGetAddressSize() const; virtual bool PerformSave(FileAccessor* file); - void PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref<Symbol> sym, uint64_t symOffset, - const Ref<Segment> seg, uint64_t segOffset); - void PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref<Section> sec, uint64_t secOffset, - const Ref<Segment> seg, uint64_t segOffset); + void PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, uint64_t target, uint64_t reloc); void NotifyDataWritten(uint64_t offset, size_t len); void NotifyDataInserted(uint64_t offset, size_t len); void NotifyDataRemoved(uint64_t offset, uint64_t len); @@ -1153,10 +1150,7 @@ namespace BinaryNinja static bool IsRelocatableCallback(void* ctxt); static size_t GetAddressSizeCallback(void* ctxt); static bool SaveCallback(void* ctxt, BNFileAccessor* file); - static void DefineRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSymbol* sym, - uint64_t symOffset, BNSegment* seg, uint64_t segOffset); - static void DefineSectionRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSection* sec, - uint64_t secOffset, BNSegment* seg, uint64_t segOffset); + static void DefineRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, uint64_t target, uint64_t reloc); public: BinaryView(BNBinaryView* view); @@ -1229,10 +1223,7 @@ namespace BinaryNinja bool Save(FileAccessor* file); bool Save(const std::string& path); - void DefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref<Symbol> sym, uint64_t symOffset, - const Ref<Segment> seg, uint64_t segOffset); - void DefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref<Section> sec, uint64_t secOffset, - const Ref<Segment> seg, uint64_t segOffset); + void DefineRelocation(Architecture* arch, BNRelocationInfo& info, uint64_t target, uint64_t reloc); void RegisterNotification(BinaryDataNotification* notify); void UnregisterNotification(BinaryDataNotification* notify); @@ -1391,12 +1382,8 @@ namespace BinaryNinja Relocation(BNRelocation* reloc); BNRelocationInfo GetInfo() const; Architecture* GetArchitecture() const; - Ref<Symbol> GetSymbol(); - uint64_t GetSymbolOffset() const; - uint64_t GetTargetAddress() const; - Ref<Segment> GetSegment(); - uint64_t GetSegmentOffset() const; - uint64_t GetDestAddress() const; + uint64_t GetTarget() const; + uint64_t GetReloc() const; }; diff --git a/binaryninjacore.h b/binaryninjacore.h index 202684a8..f3b34a1d 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -1052,10 +1052,7 @@ extern "C" bool (*isRelocatable)(void* ctxt); size_t (*getAddressSize)(void* ctxt); bool (*save)(void* ctxt, BNFileAccessor* accessor); - void (*defineRelocation) (void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSymbol* sym, - uint64_t symOffset, BNSegment* seg, uint64_t segOffset); - void (*defineSectionRelocation) (void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSection* sec, - uint64_t secOffset, BNSegment* seg, uint64_t segOffset); + void (*defineRelocation) (void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, uint64_t target, uint64_t reloc); }; struct BNCustomBinaryViewType @@ -1995,9 +1992,7 @@ extern "C" BINARYNINJACOREAPI bool BNSaveToFile(BNBinaryView* view, BNFileAccessor* file); BINARYNINJACOREAPI bool BNSaveToFilename(BNBinaryView* view, const char* filename); BINARYNINJACOREAPI void BNDefineRelocation(BNBinaryView* view, BNArchitecture* arch, BNRelocationInfo* info, - BNSymbol* sym, uint64_t symOffset, BNSegment* seg, uint64_t segOffset); - BINARYNINJACOREAPI void BNDefineSectionRelocation(BNBinaryView* view, BNArchitecture* arch, BNRelocationInfo* info, - BNSection* sec, uint64_t secOffset, BNSegment* seg, uint64_t segOffset); + uint64_t target, uint64_t reloc); BINARYNINJACOREAPI void BNRegisterDataNotification(BNBinaryView* view, BNBinaryDataNotification* notify); BINARYNINJACOREAPI void BNUnregisterDataNotification(BNBinaryView* view, BNBinaryDataNotification* notify); @@ -3516,12 +3511,8 @@ extern "C" BINARYNINJACOREAPI void BNFreeRelocation(BNRelocation* reloc); BINARYNINJACOREAPI BNRelocationInfo BNRelocationGetInfo(BNRelocation* reloc); BINARYNINJACOREAPI BNArchitecture* BNRelocationGetArchitecture(BNRelocation* reloc); - BINARYNINJACOREAPI BNSymbol* BNRelocationGetSymbol(BNRelocation* reloc); - BINARYNINJACOREAPI uint64_t BNRelocationGetSymbolOffset(BNRelocation* reloc); - BINARYNINJACOREAPI uint64_t BNRelocationGetTargetAddress(BNRelocation* reloc); - BINARYNINJACOREAPI BNSegment* BNRelocationGetSegment(BNRelocation* reloc); - BINARYNINJACOREAPI uint64_t BNRelocationGetSegmentOffset(BNRelocation* reloc); - BINARYNINJACOREAPI uint64_t BNRelocationGetDestAddress(BNRelocation* reloc); + BINARYNINJACOREAPI uint64_t BNRelocationGetTarget(BNRelocation* reloc); + BINARYNINJACOREAPI uint64_t BNRelocationGetReloc(BNRelocation* reloc); // Segment object methods BINARYNINJACOREAPI BNSegment* BNCreateSegment(uint64_t start, uint64_t length, uint64_t dataOffset, uint64_t dataLength, uint32_t flags, 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<Symbol> curSym = new Symbol(BNNewSymbolReference(sym)); - Ref<Segment> 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<Section> curSec = new Section(BNNewSectionReference(sec)); - Ref<Segment> 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<Symbol> sym, - uint64_t symOffset, const Ref<Segment> seg, uint64_t segOffset) -{ - DefineRelocation(arch, info, sym, symOffset, seg, segOffset); -} - - -void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, const Ref<Section> sec, - uint64_t secOffset, const Ref<Segment> 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<Symbol> sym, - uint64_t symOffset, const Ref<Segment> 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<Section> sec, - uint64_t secOffset, const Ref<Segment> 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<Symbol> 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<Segment> 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); } |
