我有一个简单的字节数组,我已经填充了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()
答案 0 :(得分:1)