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

Python ctype directly call a function with raw offset

是否可以在 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 库? 我深入研究了库,但找不到它们如何初始化函数实例。

备注:

如果该函数位于已编译的可执行文件中,那么您不能,在 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>