30 lines
1.4 KiB
Python
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 |