2009-10-25 6 views
2

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

Я использую 64-разрядную версию Fedora 11.

Спасибо.

ответ

0

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

+0

, прочитав исходный код клиентской библиотеки mysql, похоже, что он вызывает connect() и т. Д. –

2

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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^