Как я могу переопределить функции C (например, с LD_PRELOAD) во время выполнения?

У меня есть код Python, в котором используется библиотека, реализующая виртуальные файловые системы. Чтобы драйверы для этих виртуальных файловых систем работали, необходимо переопределить/заменить ряд функций C (таких как readdir(), opendir(), fseek()) с заменами, определенными в файле .so/.cpp. Обычно это можно сделать, установив LD_PRELOAD для этого файла .so. Однако мне нужно иметь возможность переопределять эти функции во время выполнения и в идеале возвращаться к незамещенным функциям после выполнения функций Python, использующих эти переопределенные функции. Это возможно?


person false_azure    schedule 20.11.2014    source источник


Ответы (1)


Я предполагаю, что вы хотите ctypes. Вот обсуждение: https://docs.python.org/2/library/ctypes.html

person jim mcnamara    schedule 20.11.2014
comment
Это выглядит очень многообещающе, спасибо. Я отмечу это как ответ, как только выясню, как заставить функции в модуле os в Python использовать библиотеку, которую я импортировал с помощью ctypes! - person false_azure; 20.11.2014
comment
Обычно такие вещи пишутся на C или C++. И связаны с общей библиотекой. - person jim mcnamara; 20.11.2014
comment
Это имеет смысл, но мне нужно работать с существующей кодовой базой Python. У меня есть файл .cpp/.so со всеми переопределениями, которые должны использовать функции ОС Python, который является частью библиотеки C++ с оболочками Python. - person false_azure; 20.11.2014