此代码可在linux上运行并打印43,如何编码具有类似功能的脚本以在Windows上运行而不会出现错误?
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()
当我换行时:
buf = mmap.mmap(-1, mmap.PAGESIZE, prot=mmap.PROT_READ | mmap.PROT_WRITE | mmap.PROT_EXEC)
至
buf = mmap.mmap(-1, mmap.PAGESIZE, tagname=None, access=mmap.ACCESS_DEFAULT)
python解释器输出错误:
OSError: exception: access violation writing 0x00EC0000
有谁知道如何更正此代码,使其正常运行?期望的输出应为“ 43”。