diff options
| author | Xusheng <xusheng@vector35.com> | 2021-02-05 20:28:13 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2021-04-22 10:52:39 +0800 |
| commit | c4b1dd712783e7474570705e6d95183a0c02a76e (patch) | |
| tree | 0393986e0078cb20610c8ad091db061f8f41a08b /suite | |
| parent | a355d5c9aa1978d10f378931bfd5f06be60bae98 (diff) | |
add persistent search result
Diffstat (limited to 'suite')
| -rw-r--r-- | suite/testcommon.py | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/suite/testcommon.py b/suite/testcommon.py index 43bf934e..48eeccab 100644 --- a/suite/testcommon.py +++ b/suite/testcommon.py @@ -10,7 +10,8 @@ from binaryninja.binaryview import BinaryViewType, BinaryView from binaryninja.filemetadata import FileMetadata, SaveSettings from binaryninja.datarender import DataRenderer from binaryninja.function import InstructionTextToken, DisassemblyTextLine -from binaryninja.enums import InstructionTextTokenType, SaveOption +from binaryninja.enums import InstructionTextTokenType, SaveOption, FindFlag,\ + FunctionGraphType import subprocess import re @@ -1089,6 +1090,52 @@ class TestBuilder(Builder): self.delete_package("type_xref.bndb") return fixOutput(sorted(retinfo)) + def test_search(self): + """Search""" + retinfo = [] + file_name = self.unpackage_file("type_xref.bndb") + if not os.path.exists(file_name): + return retinfo + + with BinaryViewType.get_view_of_file(file_name) as bv: + if bv is None: + return retinfo + + for addr, match in bv.find_all_data(bv.start, bv.end, b'\xc3'): + retinfo.append('byte 0xc3 is found at address 0x%lx with DataBuffer %s' % + (addr, match.escape())) + + for addr, match, line in bv.find_all_text(bv.start, bv.end, 'test'): + retinfo.append('text "test" is found at address 0x%lx with string %s \ + line %s' % (addr, match, line)) + + for addr, line in bv.find_all_constant(bv.start, bv.end, 0x58): + retinfo.append('constant 0x58 is found at address 0x%lx with line' %\ + (addr, line)) + + def data_callback(addr, match): + retinfo.append('match found at address: 0x%lx with DataBuffer %s' % (addr, match.escape())) + + bv.find_all_data(bv.start, bv.end, b'\xc3', FindFlag.FindCaseSensitive, None, + data_callback) + + def string_callback(addr, match, line): + retinfo.append('match found at address: 0x%lx with string %s, line %s' %\ + (addr, match, line)) + + bv.find_all_text(bv.start, bv.end, 'test', None, FindFlag.FindCaseSensitive, None, + string_callback) + + def constant_callback(addr, line): + retinfo.append('match found at address: 0x%lx with constant 0x58, line %s'\ + % (addr, line)) + + bv.find_all_constant(bv.start, bv.end, 0x58, None,\ + FunctionGraphType.NormalFunctionGraph, None, constant_callback) + + self.delete_package("type_xref.bndb") + return fixOutput(sorted(retinfo)) + class VerifyBuilder(Builder): """ The VerifyBuilder is for tests that verify Binary Ninja against expected output. |
