summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2018-05-11 13:37:48 -0400
committerPeter LaFosse <peter@vector35.com>2018-05-11 13:37:48 -0400
commita7524ae957f62fded3991152a360c553c99639b6 (patch)
tree1a6370a9ac9430286929d5dd13e5c387a31599d8
parent40930128dc95f6cb8a9f2c1a4ce098fd15ae02ef (diff)
Simplify relocation handlers
-rw-r--r--binaryninjaapi.h23
-rw-r--r--binaryninjacore.h17
-rw-r--r--binaryview.cpp77
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);
}