diff options
| author | Peter LaFosse <peter@vector35.com> | 2018-05-07 16:03:13 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2018-05-07 16:03:13 -0400 |
| commit | f3040b9ef97f6dc521a14fa7a12c4a8d9b953e21 (patch) | |
| tree | de2ef3beb56bca7a185bf1efbbd8c085757096b6 /binaryview.cpp | |
| parent | 0ee4eae0a56ecbf949c0661058483b40e81a3d84 (diff) | |
Refactor supporting calling convention like approach
Diffstat (limited to 'binaryview.cpp')
| -rw-r--r-- | binaryview.cpp | 79 |
1 files changed, 62 insertions, 17 deletions
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<Symbol> curSym = new Symbol(sym); - Ref<Segment> curSeg = new Segment(seg); + 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); } @@ -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<Section> curSec = new Section(sec); - Ref<Segment> curSeg = new Segment(seg); + 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); } @@ -715,20 +712,14 @@ 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) { - Ref<BinaryView> 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<Section> sec, uint64_t secOffset, const Ref<Segment> seg, uint64_t segOffset) { - Ref<BinaryView> 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<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 +{ + return BNRelocationGetSegmentOffset(m_object); +} + + +uint64_t Relocation::GetDestAddress() const +{ + return BNRelocationGetDestAddress(m_object); +} + + BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject())) { } |
