Linux: ldd, starce, ltrace. Как работают утилиты. Трассировка вызовов.
Linux: ldd, starce, ltrace. Как работают утилиты. Трассировка вызовов.
libc - корневая библиотека языка C (В Linux мы ее видим по пути - /lib64/libc.so.6) 6 - номер версии библиотеки
По сути является ссылкой на библиотеку libc-2.17.so:
# ls -l /lib64/libc.so.6 lrwxrwxrwx. 1 root root 12 Jan 30 04:27 /lib64/libc.so.6 -> libc-2.17.so
Что будем использовать для примера?
ldd - выводит список разделяемых библиотек, используемых указанной утилитой или разделяемой библиотекой
Разделяемые библиотеки содержат реализации функций, необходимых для работы приложений, разделяемых библиотек
Разделяемые библиотеки имеют расширение - ".so" ( аналоги динамических библиотек ".dll" Windows )
Опция -v выводит информацию о версиях используемых разделяемых библиотек
Опция -u выводит список связанных, но не используемых разделяемых библиотек
strace - system trace (трассировка системных вызовов)
Посмотрим, что использует утилита date:
# which date | xargs ldd linux-vdso.so.1 => (0x00007ffd3d3d8000) libc.so.6 => /lib64/libc.so.6 (0x00007f931f97d000) /lib64/ld-linux-x86-64.so.2 (0x00007f931fd4b000)
Кратко из вывода strace (набора вызовов к ядру операционной системы) мы видим: execve - системный вызов, указывает, что для работы команды date необходимо загрузить утилиту по пути /bin/date open - системные вызовы, которые загружают указанные библиотеки и файлы, в которых есть зависимость (вывод ldd) read - системные вызовы, осуществляющме чтение оных
Так-же в выводе присутствует ряд действий Пример: "open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3" - считывается файл с зоной write - собственно вывод результата работы утилиты (вывод на экран)
Из вывода ltrace мы видим: clock_gettime - по сути функция, получающая время системы strftime - форматирование в нужном формате fwrite и fputc - функции вывода
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!