summaryrefslogtreecommitdiff
path: root/suite
diff options
context:
space:
mode:
authorXusheng <xusheng@vector35.com>2021-02-05 20:28:13 +0800
committerXusheng <xusheng@vector35.com>2021-04-22 10:52:39 +0800
commitc4b1dd712783e7474570705e6d95183a0c02a76e (patch)
tree0393986e0078cb20610c8ad091db061f8f41a08b /suite
parenta355d5c9aa1978d10f378931bfd5f06be60bae98 (diff)
add persistent search result
Diffstat (limited to 'suite')
-rw-r--r--suite/testcommon.py49
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.