adds test and bugfix for memoryview support

This commit is contained in:
jesko 2021-11-13 11:32:18 +01:00
parent 28dbf409cf
commit 8bd5dc1a37
2 changed files with 21 additions and 0 deletions

View File

@ -1102,6 +1102,8 @@ class Cs(object):
view = memoryview(code)
if not view.readonly:
code = ctypes.byref(ctypes.c_char.from_buffer(view))
elif not isinstance(code, bytes):
code = view.tobytes()
res = _cs.cs_disasm(self.csh, code, size, offset, count, ctypes.byref(all_insn))
if res > 0:
try:
@ -1131,6 +1133,8 @@ class Cs(object):
view = memoryview(code)
if not view.readonly:
code = ctypes.byref(ctypes.c_char.from_buffer(view))
elif not isinstance(code, bytes):
code = view.tobytes()
res = _cs.cs_disasm(self.csh, code, size, offset, count, ctypes.byref(all_insn))
if res > 0:
try:

View File

@ -81,6 +81,22 @@ def test_cs_disasm_quick():
print()
def test_different_data_formats():
data = bytes.fromhex('4831C948F7E1043B48BB0A2F62696E2F2F736852530A545F5257545E0F05')
mnemonics = ['xor', 'mul', 'add', 'movabs', 'push', 'pop', 'push', 'push', 'push', 'pop', 'syscall']
disassembler = Cs(CS_ARCH_X86, CS_MODE_64)
for name, code in (
('bytearray', bytearray(data)),
('memoryview of bytearray', memoryview(bytearray(data))),
('memoryview of data', memoryview(data)),
('raw data', data)
):
if mnemonics != [op for _, _, op, _ in disassembler.disasm_lite(code, 0)]:
print('failure in disassemble-lite for %s.' % name)
if mnemonics != [instruction.mnemonic for instruction in disassembler.disasm(code, 0)]:
print('failure in disassemble-full for %s.' % name)
# ## Test class Cs
def test_class():
for arch, mode, code, comment, syntax in all_tests:
@ -110,3 +126,4 @@ def test_class():
# print ("*" * 40)
if __name__ == '__main__':
test_class()
test_different_data_formats()