summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-07-11 04:44:55 -0400
committerRusty Wagner <rusty@vector35.com>2016-07-11 04:44:55 -0400
commitae7753487db7e3cbd4d4c5b0f464a6868da42817 (patch)
tree340de6b24c6e2941903866e057f8b8eebf074186
parentca6d082528f1b4c6d8f66bed18fb2e70f4c87a74 (diff)
Add APIs for querying data and code before address, and add settings parameter to linear disassembly position API
-rw-r--r--binaryninjaapi.h5
-rw-r--r--binaryninjacore.h5
-rw-r--r--binaryview.cpp24
-rw-r--r--python/__init__.py17
4 files changed, 44 insertions, 7 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index cc17f56c..a3aba4b5 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -854,8 +854,11 @@ namespace BinaryNinja
uint64_t GetNextFunctionStartAfterAddress(uint64_t addr);
uint64_t GetNextBasicBlockStartAfterAddress(uint64_t addr);
uint64_t GetNextDataAfterAddress(uint64_t addr);
+ uint64_t GetPreviousFunctionStartBeforeAddress(uint64_t addr);
+ uint64_t GetPreviousStartOfDataBeforeAddress(uint64_t addr);
+ uint64_t GetPreviousDataBeforeAddress(uint64_t addr);
- LinearDisassemblyPosition GetLinearDisassemblyPositionForAddress(uint64_t addr);
+ LinearDisassemblyPosition GetLinearDisassemblyPositionForAddress(uint64_t addr, DisassemblySettings* settings);
std::vector<LinearDisassemblyLine> GetPreviousLinearDisassemblyLines(LinearDisassemblyPosition& pos,
DisassemblySettings* settings);
std::vector<LinearDisassemblyLine> GetNextLinearDisassemblyLines(LinearDisassemblyPosition& pos,
diff --git a/binaryninjacore.h b/binaryninjacore.h
index e559ec9a..bed5c0d0 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1394,9 +1394,12 @@ extern "C"
BINARYNINJACOREAPI uint64_t BNGetNextFunctionStartAfterAddress(BNBinaryView* view, uint64_t addr);
BINARYNINJACOREAPI uint64_t BNGetNextBasicBlockStartAfterAddress(BNBinaryView* view, uint64_t addr);
BINARYNINJACOREAPI uint64_t BNGetNextDataAfterAddress(BNBinaryView* view, uint64_t addr);
+ BINARYNINJACOREAPI uint64_t BNGetPreviousFunctionStartBeforeAddress(BNBinaryView* view, uint64_t addr);
+ BINARYNINJACOREAPI uint64_t BNGetPreviousStartOfDataBeforeAddress(BNBinaryView* view, uint64_t addr);
+ BINARYNINJACOREAPI uint64_t BNGetPreviousDataBeforeAddress(BNBinaryView* view, uint64_t addr);
BINARYNINJACOREAPI BNLinearDisassemblyPosition BNGetLinearDisassemblyPositionForAddress(BNBinaryView* view,
- uint64_t addr);
+ uint64_t addr, BNDisassemblySettings* settings);
BINARYNINJACOREAPI void BNFreeLinearDisassemblyPosition(BNLinearDisassemblyPosition* pos);
BINARYNINJACOREAPI BNLinearDisassemblyLine* BNGetPreviousLinearDisassemblyLines(BNBinaryView* view,
BNLinearDisassemblyPosition* pos, BNDisassemblySettings* settings, size_t* count);
diff --git a/binaryview.cpp b/binaryview.cpp
index 437c57a6..03beb3db 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1118,9 +1118,29 @@ uint64_t BinaryView::GetNextDataAfterAddress(uint64_t addr)
}
-LinearDisassemblyPosition BinaryView::GetLinearDisassemblyPositionForAddress(uint64_t addr)
+uint64_t BinaryView::GetPreviousFunctionStartBeforeAddress(uint64_t addr)
{
- BNLinearDisassemblyPosition pos = BNGetLinearDisassemblyPositionForAddress(m_object, addr);
+ return BNGetPreviousFunctionStartBeforeAddress(m_object, addr);
+}
+
+
+uint64_t BinaryView::GetPreviousStartOfDataBeforeAddress(uint64_t addr)
+{
+ return BNGetPreviousStartOfDataBeforeAddress(m_object, addr);
+}
+
+
+uint64_t BinaryView::GetPreviousDataBeforeAddress(uint64_t addr)
+{
+ return BNGetPreviousDataBeforeAddress(m_object, addr);
+}
+
+
+LinearDisassemblyPosition BinaryView::GetLinearDisassemblyPositionForAddress(uint64_t addr,
+ DisassemblySettings* settings)
+{
+ BNLinearDisassemblyPosition pos = BNGetLinearDisassemblyPositionForAddress(m_object, addr,
+ settings ? settings->GetObject() : nullptr);
LinearDisassemblyPosition result;
result.function = pos.function ? new Function(pos.function) : nullptr;
diff --git a/python/__init__.py b/python/__init__.py
index cdced08c..ab45dfc0 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -1551,8 +1551,19 @@ class BinaryView(object):
def get_next_data_after(self, addr):
return core.BNGetNextDataAfterAddress(self.handle, addr)
- def get_linear_disassembly_position_at(self, addr):
- pos = core.BNGetLinearDisassemblyPositionForAddress(self.handle, addr)
+ def get_previous_function_start_before(self, addr):
+ return core.BNGetPreviousFunctionStartBeforeAddress(self.handle, addr)
+
+ def get_previous_start_of_data_before(self, addr):
+ return core.BNGetPreviousStartOfDataBeforeAddress(self.handle, addr)
+
+ def get_previous_data_before(self, addr):
+ return core.BNGetPreviousDataBeforeAddress(self.handle, addr)
+
+ def get_linear_disassembly_position_at(self, addr, settings):
+ if settings is not None:
+ settings = settings.handle
+ pos = core.BNGetLinearDisassemblyPositionForAddress(self.handle, addr, settings)
func = None
block = None
if pos.function:
@@ -1622,7 +1633,7 @@ class BinaryView(object):
self.settings = settings
def __iter__(self):
- pos = self.view.get_linear_disassembly_position_at(self.view.start)
+ pos = self.view.get_linear_disassembly_position_at(self.view.start, self.settings)
while True:
lines = self.view.get_next_linear_disassembly_lines(pos, self.settings)
if len(lines) == 0: