【问题标题】:How can I override C functions (like with LD_PRELOAD) at runtime?如何在运行时覆盖 C 函数(如使用 LD_PRELOAD)?
【发布时间】:2015-01-17 17:09:37
【问题描述】:

我有一些使用实现虚拟文件系统的库的 Python 代码。为了让这些虚拟文件系统的驱动程序能够工作一堆 C 函数(如 readdir()、opendir()、fseek()),需要覆盖/替换 - 使用 .so/.cpp 文件中定义的替换。通常这可以通过将 LD_PRELOAD 设置为该 .so 文件来完成。但是,我需要能够在运行时覆盖这些函数,并且理想情况下,一旦使用这些覆盖函数的 Python 函数执行完毕,就可以恢复为非覆盖函数。这可能吗?

【问题讨论】:

    标签: python c++ c dynamic-linking ld-preload


    【解决方案1】:

    我猜你想要 ctypes。这是一个讨论:https://docs.python.org/2/library/ctypes.html

    【讨论】:

    • 这看起来很有希望,谢谢。一旦我弄清楚如何使 Python 中的 os 模块中的函数使用我使用 ctypes 导入的库,我会将其标记为答案!
    • 通常这类东西是用 C 或 C++ 编码的。并链接到一个共享库中。
    • 这是有道理的,但我需要使用现有的 Python 代码库。我有一个 .cpp/.so 文件,其中包含 Python os 函数应使用的所有重新定义,它是具有 Python 包装器的 C++ 库的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2011-06-09
    • 2011-08-30
    • 2013-09-07
    • 1970-01-01
    相关资源
    最近更新 更多