python - 使用 python 模块 ctypes 和 mmap 在内存中执行汇编代码
问题描述
此代码适用于 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”。
解决方案
推荐阅读
- c# - Ef Core 一对多与连接表
- javascript - javascript 中的三元条件未选择按钮单选
- android-viewpager2 - 与 viewpager2 和异步 diffutilities 一起使用时,Recyclerview 未显示正确的值
- shell - 通过 shell 命令在 Make 中分配宏值
- python-3.x - 弹出 Flask 应用程序上下文时出错
- mysql - 将 MySQL 从 5.7.18 升级到 5.7.30 时,遇到错误
- c++ - 向量中的 Gcov 分支::push_back 函数调用
- node.js - 为什么在 nodejs 中设置不同的键时所有对象键值都设置为相同的值?
- php - 是否有函数也暂停 php 代码执行而不是 sleep()?
- javascript - 拒绝应用样式,因为它的 MIME 类型('text/html')不是受支持的样式表类型