Отладка и трассировка
Информация о файле
objdump, nm
Пакет elfutils
Пошаговое выполнение
- Аппаратное
- Эмулируемое
Что ещё может быть нужно:
- Исходные тексты
- Debug info (соответствие src ⟷ debuginfo)
Исходные тексты и debuginfo всех библиотек
GDB
- Выполнение
run
continue
next
step
finish
advance
- Точки останова
По номеру строки (оптимизация ) breakpoint
По изменению ячейки (=> выражения) watchpoint
По C++-исключению catchpoint
- syscall
- Просмотр
Ячейки (=> выражения, в т. ч. адресного) print, display
куска исходника вокруг точки останова list
дампа памяти dump
- Стек вызовов
Просмотр backtrace
Переход up, down
- …
Шпаргалка по GDB: gdb-refcard.pdf
Трассировка
- Разделяемые библиотеки и их открытие
dlopen()
ld.so
objdump, nm
- Загрузка библиотеки
ldd
LD_LIBRARY_PATH и LD_PRELOAD
=> ltrace
Особенности glibc и strace
Поиск memory corruption
Перегрузка malloc() и подобных:
DUMA (бывший EFence)
G-Perftools (бывший Google Performance Tools)
Д/З
Найти 10 самых используемых .so-библиотек в каталоге /bin/ (т. е. таких, которые используются наибольшим числом бинарников)
Прощёлкать пример лично от RMS-а
Выполнить задание №1 с сайта course.secsem.ru (источник: http://course.secsem.ru/tasks)
Выполнить примеры ловли утечек с помощью valgrind (как минимум раздел Losing Your Memory)
Найти среди бинарников $PATH какой-нибудь с ошибкой при работе с памятью