вставка библиотеки с помощью dlsym - PullRequest
2 голосов
/ 25 октября 2009

Я пишу библиотеку вставок для отслеживания использования некоторых библиотечных функций в libc, таких как open (), close (), connect () и т. Д. В большинстве приложений это работает хорошо. Однако, когда я пытаюсь сделать это с PHP, в частности, с использованием PHP-модуля MySQL, ни одна из функций, вызывающих libc внутри этого модуля, не отслеживается (поэтому нет connect (), socket () и т. Д.). 'strace' сказал мне, что системные вызовы socket (), connect () и т. д. произошли. Запуск «file» в модуле и libmysqlclient.so.16.0.0 говорит, что они все динамически связаны. Так что это не должно быть проблемой, вызванной статической связью. В чем может быть проблема?

Я использую 64-битную версию Fedora 11.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 27 октября 2009

Кажется, что это не было вызвано статической связью. На самом деле PHP динамически связан с другими библиотеками. Проблема заключается в том, как PHP загружает расширения.

PHP загружает расширения, вызывая dlopen () с флагами RTLD_LAZY, что означает, что символ будет разрешен только при выполнении ссылки. Это обходит вставку, указанную LD_PRELOAD.

0 голосов
/ 18 мая 2010

Я согласен с ответом выше, что эти библиотеки могут обходить вызовы open (), write () и т. Д. В libc. Другими словами, эти библиотеки могут вызывать системные вызовы напрямую, используя сборку и не используя интерфейс libc .. хотя не так часто можно увидеть приложения, использующие системные вызовы напрямую, это не случайно. Если это так, то вы не увидели бы никакого перехвата в своем эксперименте по вставке библиотек. Тогда у вас есть два пути: быстрый сквозной и более сложный в создании модуля ядра, который будет перехватывать эти вызовы на уровне ядра. и отчитываться перед любой структурой, которую вы строите ..
Повеселись.. ErnestoB

0 голосов
/ 25 октября 2009

Возможно, по какой-то причине библиотека может вызывать системные вызовы напрямую. В этом случае вам нужно будет использовать strace (или ptrace() в вашей собственной программе) для отслеживания этого использования.

...