私信  •  关注

user7610

user7610 最近创建的主题
user7610 最近回复了
6 年前
回复了 user7610 创建的主题 » 如何在python中使用程序集[duplicate]

作为一个具体的例子,下面是如何调用一个函数,该函数将获取一个int并返回递增的一。

要获取设置了可执行标志的内存, mmap 使用模块。

要调用函数, ctypes 使用模块。

要将机器代码放入内存,有硬编码字节字符串。

代码将打印43。

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()