From a641c5266ad2a55af2bdd277a2b889ced4eb7235 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Mon, 6 Apr 2015 14:29:51 -0700 Subject: Implement follow pointer in hex view --- binaryview.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'binaryview.cpp') diff --git a/binaryview.cpp b/binaryview.cpp index 8d75e7a7..02f0501b 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -143,6 +143,8 @@ BinaryView::BinaryView(FileMetadata* file) view.getLength = GetLengthCallback; view.getEntryPoint = GetEntryPointCallback; view.isExecutable = IsExecutableCallback; + view.getDefaultEndianness = GetDefaultEndiannessCallback; + view.getAddressSize = GetAddressSizeCallback; view.save = SaveCallback; m_file = file; @@ -233,6 +235,20 @@ bool BinaryView::IsExecutableCallback(void* ctxt) } +BNEndianness BinaryView::GetDefaultEndiannessCallback(void* ctxt) +{ + BinaryView* view = (BinaryView*)ctxt; + return view->GetDefaultEndianness(); +} + + +size_t BinaryView::GetAddressSizeCallback(void* ctxt) +{ + BinaryView* view = (BinaryView*)ctxt; + return view->GetAddressSize(); +} + + bool BinaryView::SaveCallback(void* ctxt, BNFileAccessor* file) { BinaryView* view = (BinaryView*)ctxt; @@ -248,6 +264,26 @@ bool BinaryView::PerformIsValidOffset(uint64_t offset) } +BNEndianness BinaryView::PerformGetDefaultEndianness() const +{ + Ref arch = GetDefaultArchitecture(); + if (arch) + return arch->GetEndianness(); + return LittleEndian; +} + + +size_t BinaryView::PerformGetAddressSize() const +{ + Ref arch = GetDefaultArchitecture(); + if (arch) + return arch->GetAddressSize(); + if (GetEnd() > (1LL << 32)) + return 8; + return 4; +} + + void BinaryView::NotifyDataWritten(uint64_t offset, size_t len) { BNNotifyDataWritten(m_view, offset, len); @@ -443,6 +479,18 @@ void BinaryView::SetDefaultArchitecture(Architecture* arch) } +BNEndianness BinaryView::GetDefaultEndianness() const +{ + return BNGetDefaultEndianness(m_view); +} + + +size_t BinaryView::GetAddressSize() const +{ + return BNGetViewAddressSize(m_view); +} + + bool BinaryView::IsExecutable() const { return BNIsExecutableView(m_view); -- cgit v1.3.1