Предоставление другой библиотеки / функции во время соединения - PullRequest
0 голосов
/ 14 апреля 2011

Если я хочу клонировать библиотеку и изменить только одну функцию, например, memcpy или memmove, и иметь уже созданную исполняемую ссылку на нее для целей отладки / исследования, каков правильный способ сделать это?

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

Меня интересуют решения для Mac и Linux. В Linux я использовал LD_LIBRARY_PATH раньше - это все, что мне нужно сделать, кроме того, чтобы имена библиотек были одинаковыми? Как бы я сделал это на Mac?

Для тех, кому интересно, почему я хочу это сделать, цель - экспериментальная музыка. Я делаю это, чтобы обработать ультразвуком операции с памятью, поэтому memcpy / memmove будет работать как обычно, но данные, к которым осуществляется доступ, также будут отправлены на звуковую карту. Я знаю, что есть другие способы сделать это (я уже сделал несколько других методов), но в настоящее время мне интересно сосредоточиться на memcpy / memmove, поэтому я буду признателен, если вы сможете ограничить свои ответы этим фокусом.

1 Ответ

1 голос
/ 17 апреля 2011

Вы можете использовать LD_LIBRARY_PATH, чтобы программа загружала библиотеку общих объектов, отличную от обычной.Но если вы хотите заменить только одну функцию (или несколько), а не целую библиотеку, вы можете использовать LD_PRELOAD, чтобы заставить компоновщик (ld.so) загружать определенный общий объект на раннем этапе, и ваша программа будет использоватьсимволы (функции) там, а не искать их в обычных местах.

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