python - 使用 python 运行未导出的 .dll 函数

标签 python memory ctypes

这似乎是一个奇怪的问题,但我想知道如何从内存“签名”运行 .dll 中的函数。我不太了解它的实际工作原理,但我非常需要它。如果您知道它的内存签名和地址,它是一种从 .dll 中运行未导出函数的方法。 例如,我有这些:

respawn_f "_ZN9CCSPlayer12RoundRespawnEv"
respawn_sig "568BF18B06FF90B80400008B86E80D00"
respawn_mask "xxxxx?xxx??xxxx?"

并且使用一些漂亮的 C++ 代码,您可以使用它从 .dll 中运行函数。

这里有一篇很好解释的文章: http://wiki.alliedmods.net/Signature_Scanning

那么,是否可以使用 Ctypes 或任何其他方式在 python 中执行此操作?

最佳答案

如果您已经可以使用 C++ 运行它们,那么您可以尝试使用 SWIG 为您编写的 C++ 代码生成 python 包装器,使其可以从 python 调用。

http://www.swig.org/

我在使用 SWIG 时发现的一些注意事项:

Swig 根据字符串值查找类型。例如 Python 中的整数类型 (int) 将确保 cpp 类型是“int”,否则 swig 会提示 关于类型不匹配。没有自动转换。

Swig 逐字复制源代码,因此即使是同一命名空间中的对象 将需要完全限定,以便 cxx 文件能够正确编译。

希望对您有所帮助。

关于python - 使用 python 运行未导出的 .dll 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421223/

相关文章:

Python/Ctypes - 访问指针(数组)时出现段错误

python - 如何为每个句子(行)创建标记化单词(列)的数据框?

memory - Julia:高效的内存分配

通过 ctypes 使用 pcap 的 python 段错误

memory - 32 位程序能否在 64 位操作系统上使用超过 4GB 的内存?

arrays - 段树 2 * 2 ^(ceil(log(n))) - 1 的数组的内存如何?

python - 将 ctypes 与 typedef 一起使用

python - 在同一页面中利用 Sage 和 IPython notebook?或者,更确切地说,将它们结合起来?

Python字符串删除十六进制代码,如 'president trump\\xe2\\x80\\x99s'

python - 如何在 CentOS 7 中将 IDLE 3.6.2 与 Python 3.6.2 关联