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

标签 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注入(inject)到我要调用的进程的函数地址。

最佳答案

如果该函数位于已编译的可执行文件中,那么您不能,在 C++ 中也不能,因为您会遇到访问冲突。您不能从另一个进程调用函数。

如果您具有 C++ 知识,则创建一个 DLL 并将其注入(inject)可执行文件。您将能够调用它。


由于您已经将 DLL 注入(inject)到目标进程中,似乎可以使用 ctypes 实现您想要的。

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

关于Python ctype 直接调用具有原始偏移量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28933290/

相关文章:

c++ - 有类似 is_empty_but_has_virtual_functions 的东西吗?

c++ - c++ 中深层嵌套函数的单个 catch all 语句?

python - 我可以将函数设置为默认参数吗?

c++ - C++中的随机函数

python - Fabric2 中的须藤

python - 使用条件语句 (IF/ELIF/ELSE) 使代码更简洁、更短

python - Django:更改可选 ImageField 的 url

c++ - ‘int main;’ 是有效的 C/C++ 程序吗?

javascript - React Native - this.updateTimeState 不是一个函数。尝试在另一个方法中引用类方法?

python - Scikit - SGDRegressor 不适合