summaryrefslogtreecommitdiff
path: root/suite/api_test.py
diff options
context:
space:
mode:
authorrose <47357290+rose4096@users.noreply.github.com>2022-05-20 13:30:17 -0400
committerrose <47357290+rose4096@users.noreply.github.com>2022-05-31 12:47:49 -0400
commit6df2db145bdcc7e541c71d5843d270ecebbd6143 (patch)
tree27d14a802655e31c9f593c37fb64fe8ad90bd276 /suite/api_test.py
parentd03f3e58fcdd548c788eeff51d7507e07ed799ed (diff)
Increase coverage of architecture.py
Diffstat (limited to 'suite/api_test.py')
-rw-r--r--suite/api_test.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/suite/api_test.py b/suite/api_test.py
index 5b087034..7291b8c1 100644
--- a/suite/api_test.py
+++ b/suite/api_test.py
@@ -2989,3 +2989,35 @@ class TestBinaryViewType(unittest.TestCase):
with BinaryViewType.get_view_of_file(filename) as bv:
assert bvt2.is_valid_for_data(bv.parent_view)
assert isinstance(bvt2.parse(bv.parent_view), BinaryView)
+
+
+class TestArchitecture(TestWithBinaryView):
+ def test_available_patches_x86(self):
+ x86 = binaryninja.Architecture["x86"]
+
+ je_0 = x86.assemble("je 0")
+ call_0 = x86.assemble("call 0")
+ jmp_eax = x86.assemble("jmp eax")
+
+ assert x86.is_never_branch_patch_available(je_0, 0) == True
+ assert x86.is_never_branch_patch_available(call_0, 0) == False
+
+ assert x86.is_always_branch_patch_available(je_0, 0) == True
+ assert x86.is_always_branch_patch_available(call_0, 0) == False
+
+ assert x86.is_invert_branch_patch_available(je_0, 0) == True
+ assert x86.is_invert_branch_patch_available(call_0, 0) == False
+
+ assert x86.is_skip_and_return_zero_patch_available(call_0, 0) == True
+ assert x86.is_skip_and_return_zero_patch_available(jmp_eax, 0) == False
+
+ assert x86.is_skip_and_return_value_patch_available(call_0, 0) == True
+ assert x86.is_skip_and_return_value_patch_available(jmp_eax, 0) == False
+
+ assert x86.convert_to_nop(je_0, 0) == b'\x90\x90\x90\x90\x90\x90'
+ assert x86.always_branch(je_0, 0) == b'\x90\xe9\xfa\xff\xff\xff'
+ assert x86.invert_branch(je_0, 0) == b'\x0f\x85\xfa\xff\xff\xff'
+ assert x86.skip_and_return_value(je_0, 0, 0) == b'\xb8\x00\x00\x00\x00\x90'
+
+ def test_available_typelibs(self):
+ assert len(self.bv.arch.type_libraries) > 0