这段代码在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”。
1条答案
按热度按时间9udxz4iz1#
您可以使用
VirtualAlloc
或VirtualProtect
并标记为PAGE_EXECUTE_READWRITE
。