Исправление кода / символов в динамическом- связанный двоичный файл ELF

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

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

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

9
задан R.. 27 October 2010 в 04:19
поделиться