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

Python ctype directly call a function with raw offset

本文关键字:原始 偏移量 函数 ctype 调用 Python      更新时间:2023-10-16

是否可以在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);

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

笔记:

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

如果函数位于已编译的可执行文件中,则不能,也不能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>