Кодирование кода / символов в двоичный файл ELF с динамической связью

Предположим, у меня есть двоичный файл ELF, который динамически связан, и я хочу переопределить / перенаправить определенные вызовы библиотеки. Я знаю, что могу сделать это сLD_PRELOAD, но я хочу решение, которое является постоянным в двоичном, независимом от среды, и работает для двоичных файлов setuid / setgid, ни одно из которыхLD_PRELOAD можно достичь.

То, что я хотел бы сделать, это добавить код из дополнительных объектных файлов (возможно, в новые разделы, если необходимо) и добавить символы из этих объектных файлов в таблицу символов двоичного файла так, чтобы вновь добавленная версия кода использовалась вместо код общей библиотеки. Я считаю, что это должно быть возможно без выполнения каких-либо перемещений в существующем коде; даже если они находятся в одном и том же файле, их можно разрешить во время выполнения обычным способом PLT (для чего стоит заботиться только о функциях, а не о данных).

Пожалуйста, не дайте мне ответы в духе "Вы не хотите этого делать!" или "Это не портативно!" То, над чем я работаю, - это способ взаимодействия двоичных файлов со слегка несовместимыми ABI альтернативными реализациями совместно используемых библиотек. Рассматриваемая платформа - i386-linux (то есть 32-битная), если это имеет значение. Если я не ошибаюсь в том, что возможно, я мог бы написать некоторые инструменты для анализа файлов ELF и выполнения моих хаков, но я подозреваю, что есть причудливый способ использовать компоновщик GNU и другие инструменты для достижения этой цели без написания нового кода.

Ответы на вопрос(4)

Ваш ответ на вопрос