Files
pwn-learning/PwnCollege/KernelSecurity/common.py

30 lines
1.4 KiB
Python

from pwn import asm, disasm, util
import struct
def i2f(x):
return struct.unpack('!d', struct.pack('!Q', x))[0]
def f2i(x):
return struct.unpack('!Q', struct.pack('!d', x))[0]
def dump_machine_code(assembly: str):
machine_code = asm(assembly)
print("Assembly:")
print(assembly)
print("Byte Array:", list(machine_code))
padding = b"\xcc" * ((4 - len(machine_code)) % 4)
unpacked_signed_array = util.packing.unpack_many(machine_code + padding, 32, endian='little', sign=True)
unpacked_unsigned_array = util.packing.unpack_many(machine_code + padding, 32, endian='little', sign=False)
print("Signed DWord Array:", unpacked_signed_array)
print("Unsigned DWord Array:", unpacked_unsigned_array)
print("Hex DWord Array:", list(map(hex, unpacked_unsigned_array)))
padding = b"\xcc" * ((8 - len(machine_code)) % 8)
unpacked_signed_array = util.packing.unpack_many(machine_code + padding, 64, endian='little', sign=True)
unpacked_unsigned_array = util.packing.unpack_many(machine_code + padding, 64, endian='little', sign=False)
print("Signed QWord Array:", unpacked_signed_array)
print("Unsigned QWord Array:", unpacked_unsigned_array)
print("Hex QWord Array:", list(map(hex, unpacked_unsigned_array)))
print("Double Array:", list(map(i2f, unpacked_unsigned_array)))
print("Disassembled-assembly:")
print(disasm(machine_code))
return machine_code