diff options
| author | rose <47357290+rose4096@users.noreply.github.com> | 2022-05-20 13:30:17 -0400 |
|---|---|---|
| committer | rose <47357290+rose4096@users.noreply.github.com> | 2022-05-31 12:47:49 -0400 |
| commit | 6df2db145bdcc7e541c71d5843d270ecebbd6143 (patch) | |
| tree | 27d14a802655e31c9f593c37fb64fe8ad90bd276 /suite/api_test.py | |
| parent | d03f3e58fcdd548c788eeff51d7507e07ed799ed (diff) | |
Increase coverage of architecture.py
Diffstat (limited to 'suite/api_test.py')
| -rw-r--r-- | suite/api_test.py | 32 |
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 |
