0

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

例如:

ctypes.windll.kernel32.GetModuleHandleA(None)

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

我不能只导出该函数,因为它位于已编译的可执行文件上,但我希望能够执行以下操作:

为了清楚起见......在 C++ 中,我可以使用以下方式调用 RAW 函数:

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

myfunction(1, 2, 3);

我 python 我想做类似的东西,也许使用 ctypes 库?我已经在库中进行了挖掘,但找不到它们如何初始化函数实例。

笔记:

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

1 回答 1

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>
于 2015-03-08T23:57:05.337 回答