summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-04-06 14:29:51 -0700
committerRusty Wagner <rusty@vector35.com>2015-04-06 14:29:51 -0700
commita641c5266ad2a55af2bdd277a2b889ced4eb7235 (patch)
treee30a13162d29641d285951df10030c95e73ebef7 /binaryview.cpp
parentd5dc1c2e3169760156ac54c976bbe1ea3d9a8441 (diff)
Implement follow pointer in hex view
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp48
1 files changed, 48 insertions, 0 deletions
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<Architecture> arch = GetDefaultArchitecture();
+ if (arch)
+ return arch->GetEndianness();
+ return LittleEndian;
+}
+
+
+size_t BinaryView::PerformGetAddressSize() const
+{
+ Ref<Architecture> 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);