LD_PRELOAD может только перегружать функции, которые сами загружаются динамически. Если вы используете двоичный файл python, PyDict_New не загружается динамически, и поэтому у динамического загрузчика нет возможности перехватить разрешение этого символа. Если вместо этого вы создадите свой собственный «python», скомпилировав свой двоичный файл и соединив его с libpython.so, он должен работать. Вот что вам нужно добавить в вашу программу (/tmp/foo.c):
#include "Python.h"
int
main(int argc, char **argv)
{
return Py_Main(argc, argv);
}
И вы можете просто построить его с помощью:
gcc -o foo -I / usr / include / python2.7 foo.c -lpython2.7
После того, как вы это сделаете, LD_PRELOAD on ./foo должен работать.