Вы можете попробовать использовать управление версиями символов ELF. Посмотрите на ваше определение libc malloc:
$ objdump -T libc.so | grep malloc
0006fef0 g DF .text 000001e7 GLIBC_2.0 malloc
Так что, если вы связываете свой .so файл, используя скрипт связывания, такой как:
GLIBC_2.0 { malloc; };
Вы можете получить то, что вы хотите. Предполагая, конечно, что исполняемая версия malloc
не имеет версии с тем же именем (маловероятно).
ИСПРАВЛЕНИЕ : к сожалению, это не работает! Версия используется при определении символа. Когда вы используете его, он получает версию из экспортированной таблицы. Но тот, что в исполняемом файле, имеет приоритет ....
ПРИМЕЧАНИЕ : Но учтите, что такое поведение предусмотрено стандартом ELF. Это делается для того, чтобы все модули в одном и том же процессе использовали одну и ту же функцию malloc
, и поэтому они могут совместно использовать память, то есть один модуль malloc
, другой модуль free
. Если ваш so терпит крах с программой malloc
, то один из двух: ваш so сломан; или программа не работает. Если это второй, то любой другой модуль, который будет связан, также потерпит крах. Поэтому, возможно, вам стоит проверить свой код ...