Помогите с использованием LD_PRELOAD - PullRequest
1 голос
/ 07 ноября 2008

Я хочу создать библиотеку с измененной версией printf, а затем вызвать LD_PRELOAD, поэтому, когда моя программа вызывает printf, она использует мою версию. Может кто-нибудь объяснить мне, как использовать LD_PRELOAD, и если есть что-то особенное, что мне нужно сделать в моем коде или моей библиотеке?

Ответы [ 3 ]

5 голосов
/ 07 ноября 2008

Вы просто устанавливаете переменную среды LD_PRELOAD на полный путь к библиотеке замены. Поскольку все программы, которые вы запускаете после этой точки, будут пытаться использовать эту библиотеку, вы можете создать скрипт-обертку, который устанавливает LD_PRELOAD, а затем вызывает программу, которую вы хотите запустить.

2 голосов
/ 19 апреля 2009
  1. Насколько я знаю, в первую очередь программа не смогла изменить evective uid или gid (так называемые программы suid или guid).
  2. Он должен использоваться только для определенных целей, таких как отладка. Насколько я помню, вы можете использовать теневые функции в C (в elf?). Однако обе техники - LD_PRELOAD и слежка должны быть связаны с экстремальным уходом. Я помню, как обнаружил ошибку в затенении g_malloc в коде gpgme (или другом, связанном с gpg) при изменении внутренних компонентов GLib.

Простой ответ - не делай этого. Сложнее - делайте это тогда и только тогда, когда вам нужно - и обычно этого не происходит (если вы не пишете какое-либо программное обеспечение для отладки).

0 голосов
/ 07 ноября 2008

Это кажется плохой идеей. Почему бы не назвать свою версию printf чем-то другим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...