From bcbf41603888f03beff805415982cc1d9623e2c1 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Sat, 12 May 2018 20:59:22 -0400 Subject: Add support for symbolic relocations --- binaryview.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 6c4418b8..03821071 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -449,6 +449,7 @@ BinaryView::BinaryView(const std::string& typeName, FileMetadata* file, BinaryVi view.getAddressSize = GetAddressSizeCallback; view.save = SaveCallback; view.defineRelocation = DefineRelocationCallback; + view.defineSymbolRelocation = DefineSymbolRelocationCallback; m_file = file; AddRefForRegistration(); m_object = BNCreateCustomBinaryView(typeName.c_str(), m_file->GetObject(), @@ -621,6 +622,17 @@ void BinaryView::DefineRelocationCallback(void* ctxt, BNArchitecture* arch, BNRe } +void BinaryView::DefineSymbolRelocationCallback(void* ctxt, BNArchitecture* arch, BNRelocationInfo* info, BNSymbol* sym, + uint64_t reloc) +{ + BinaryView* view = (BinaryView*)ctxt; + BNRelocationInfo curInfo = *info; + Architecture* curArch = new CoreArchitecture(arch); + Ref curSymbol = new Symbol(sym); + return view->PerformDefineRelocation(curArch, curInfo, curSymbol, reloc); +} + + bool BinaryView::PerformIsValidOffset(uint64_t offset) { uint8_t val; @@ -700,6 +712,12 @@ void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& i } +void BinaryView::PerformDefineRelocation(Architecture* arch, BNRelocationInfo& info, Ref target, uint64_t reloc) +{ + DefineRelocation(arch, info, target, reloc); +} + + void BinaryView::NotifyDataWritten(uint64_t offset, size_t len) { BNNotifyDataWritten(m_object, offset, len); @@ -885,6 +903,12 @@ void BinaryView::DefineRelocation(Architecture* arch, BNRelocationInfo& info, ui } +void BinaryView::DefineRelocation(Architecture* arch, BNRelocationInfo& info, Ref target, uint64_t reloc) +{ + BNDefineSymbolRelocation(m_object, arch->GetObject(), &info, target->GetObject(), reloc); +} + + void BinaryView::RegisterNotification(BinaryDataNotification* notify) { BNRegisterDataNotification(m_object, notify->GetCallbacks()); -- cgit v1.3.1