Python ctype直接调用具有原始偏移量的函数

时间:2015-03-08 23:48:06

标签: python c++ function raw-pointer

是否可以在python中调用RAW函数指针?

例如:

ctypes.windll.kernel32.GetModuleHandleA(None)

将调用API,Python解析DLL + Function指针使其工作。但是如果我有一个原始函数指针,例如0xDEADBEEF(对应于函数头),我该如何创建一个传递这个原始指针的函数实例?

我不能只导出函数,因为它位于已编译的可执行文件中,但我希望能够做到这样的事情:

为了说清楚......在C ++中我可以用这样的东西调用RAW函数:

#define myfunction ((void(*)(int a, int b, int c)) 0x00402383)

myfunction(1, 2, 3);

我是python我想做类似的东西,也许使用ctypes库? 我已经深入了解库,但我找不到它们如何初始化函数实例。

注意:

  • python引擎嵌入在DLL中。
  • 将DLL注入到我想调用函数地址的进程中。

1 个答案:

答案 0 :(得分:1)

如果函数位于已编译的可执行文件中,则不能在C ++中,因为您将获得访问冲突。您无法从其他进程调用函数。

如果您具有C ++知识,则创建DLL并将其注入可执行文件。你可以打电话给它。


由于您已经将DLL注入目标进程,因此似乎可以使用ctypes实现您想要的功能。

>>> functype = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_int)
>>> func = functype(raw_address)
>>> func
<CFunctionType object at 0x1006816d0>