summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2017-01-19 21:15:32 -0500
committerRusty Wagner <rusty@vector35.com>2017-01-19 21:15:32 -0500
commitc6ed1dd374515d0e23a9d627a7dfb659c7981d16 (patch)
tree0d5046cbf1ff9c5ced5920fab95e395102fb344f
parentded271158000d7fa509f513b425d95390a7f2058 (diff)
Add API to find virtual address from file offset
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h1
-rw-r--r--binaryview.cpp6
-rw-r--r--python/binaryview.py6
4 files changed, 14 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index afbff4da..4e3f3d57 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1050,6 +1050,7 @@ namespace BinaryNinja
void RemoveUserSegment(uint64_t start, uint64_t length);
std::vector<Segment> GetSegments();
bool GetSegmentAt(uint64_t addr, Segment& result);
+ bool GetAddressForDataOffset(uint64_t offset, uint64_t& addr);
void AddAutoSection(const std::string& name, uint64_t start, uint64_t length, const std::string& type = "",
uint64_t align = 1, uint64_t entrySize = 0, const std::string& linkedSection = "",
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 02f753cf..7d3bc14c 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1420,6 +1420,7 @@ extern "C"
BINARYNINJACOREAPI BNSegment* BNGetSegments(BNBinaryView* view, size_t* count);
BINARYNINJACOREAPI void BNFreeSegmentList(BNSegment* segments);
BINARYNINJACOREAPI bool BNGetSegmentAt(BNBinaryView* view, uint64_t addr, BNSegment* result);
+ BINARYNINJACOREAPI bool BNGetAddressForDataOffset(BNBinaryView* view, uint64_t offset, uint64_t* addr);
BINARYNINJACOREAPI void BNAddAutoSection(BNBinaryView* view, const char* name, uint64_t start, uint64_t length,
const char* type, uint64_t align, uint64_t entrySize, const char* linkedSection, const char* infoSection,
diff --git a/binaryview.cpp b/binaryview.cpp
index bef23750..cc8bb733 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1645,6 +1645,12 @@ bool BinaryView::GetSegmentAt(uint64_t addr, Segment& result)
}
+bool BinaryView::GetAddressForDataOffset(uint64_t offset, uint64_t& addr)
+{
+ return BNGetAddressForDataOffset(m_object, offset, &addr);
+}
+
+
void BinaryView::AddAutoSection(const string& name, uint64_t start, uint64_t length, const string& type,
uint64_t align, uint64_t entrySize, const string& linkedSection, const string& infoSection, uint64_t infoData)
{
diff --git a/python/binaryview.py b/python/binaryview.py
index f8fe1fde..ba706fe5 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -3052,6 +3052,12 @@ class BinaryView(object):
segment.flags)
return result
+ def get_address_for_data_offset(self, offset):
+ address = ctypes.c_ulonglong()
+ if not core.BNGetAddressForDataOffset(self.handle, offset, address):
+ return None
+ return address.value
+
def add_auto_section(self, name, start, length, type = "", align = 1, entry_size = 1, linked_section = "",
info_section = "", info_data = 0):
core.BNAddAutoSection(self.handle, name, start, length, type, align, entry_size, linked_section,