【发布时间】:2022-12-24 23:24:19
【问题描述】:
this link 给出了一个在 Linux 平台上用 Python 执行 asm 的好例子,但我不知道如何在 Windows 上调用带有返回值的 asm func,你能告诉我怎么做或者给我一个例子吗?
import ctypes
import mmap
buf = mmap.mmap(-1, mmap.PAGESIZE, prot=mmap.PROT_READ | mmap.PROT_WRITE | mmap.PROT_EXEC)
ftype = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)
fpointer = ctypes.c_void_p.from_buffer(buf)
f = ftype(ctypes.addressof(fpointer))
buf.write(
b'\x8b\xc7' # mov eax, edi
b'\x83\xc0\x01' # add eax, 1
b'\xc3' # ret
)
r = f(42)
print(r)
del fpointer
buf.close()
【问题讨论】:
-
如果这是纯粹的好奇心,那很好,但请说出来。如果您尝试使用 Python“内联”程序集解决潜在问题,请直接询问该问题。否则你的问题将只是XY problem。
-
PROT_READ、PROT_WRITE和PROT_EXEC是特定于 Unix 的。对于 Windows 系统,使用 alternative constructor 和access参数。
标签: python windows assembly x86-64