将array.array的内容放入堆中

时间:2010-07-20 21:02:28

标签: python memory ctypes

我有一个简单的字节数组,我已经填充了x86程序。我需要在运行时执行。

"""
    Produces a simple callable procedure which returns a constant.
"""
from array import array

simple = array('B')

# mov rax, 0x10
simple.extend((0x81, 0xc0, 0x10, 0x0, 0x0, 0x0))
# ret
simple.append(0xc3)

现在,为了让它运行,我需要将它卸载到我的进程中具有PROT_EXEC标志的内存区域。还需要知道该内存区域的地址,以便我可以调用它。我怎么能做我刚才描述的事情?

from ctypes import CFUNCTYPE, c_int

procedure = CFUNCTYPE(c_int)(program.address)
print "result correct: %r" % (procedure() == 0x10)
print "result: %r" % procedure()

此外,执行此操作可能很有用:

program[2] = 15

print "result correct: %r" % (procedure() == 15)
print "result: %r" % procedure()

1 个答案:

答案 0 :(得分:1)