diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-07-11 04:44:55 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-07-11 04:44:55 -0400 |
| commit | ae7753487db7e3cbd4d4c5b0f464a6868da42817 (patch) | |
| tree | 340de6b24c6e2941903866e057f8b8eebf074186 | |
| parent | ca6d082528f1b4c6d8f66bed18fb2e70f4c87a74 (diff) | |
Add APIs for querying data and code before address, and add settings parameter to linear disassembly position API
| -rw-r--r-- | binaryninjaapi.h | 5 | ||||
| -rw-r--r-- | binaryninjacore.h | 5 | ||||
| -rw-r--r-- | binaryview.cpp | 24 | ||||
| -rw-r--r-- | python/__init__.py | 17 |
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: |
