nm - Полезная утилита исследования библиотек
На модерации
Отложенный
По долгу службы пришлось искать правды в одном старом проекте нашей конторы. Проблема была в том, что проект собирался только при наличии продуктового исходного кода, но его было не собрать в проектном окружении. Продуктовый код - это исходные тексты ядра и библиотек системы, а проектное окружение - это когда у вас в наличии только собранные библиотеки.
В общем дело двигалось медленно, пока я не открыл прокладки с крылышками утилиту, которая может получить список составных частей динамической библиотеки (shared object). Зовут утилиту - nm. Она может разбирать следующие запчасти:
- "A" - Значение символа является абсолютным и не будет изменено путем дальнейшего связывания;
- "B","b" - Неинициализированные данные, BSS;
- "C" - Общие неинициализированные данные. Если символ не определяется внутри модуля, то он представлен в виде ссылки;
- "D", "d" - инициализированные данные;
- "G", "g" - секция для инициализированных объектов небольшого размера;
- "i" - GNU расширение для ELF файлов. Используется при перемещении объектов во время исполнения;
- "N" - отладочный символ;
- "p" - символы в распаковывающейся части стека;
- "R", "r" - неизменяемый символ (только для чтения);
- "S", "s" - секция для неинициализированных объектов небольшого размера;
- "T", "t" - секция кода;
- "U" - неопределённый (undefined) символ;
- "u" - GNU расширение для ELF файлов. Уникальный глобальный (в пределах процесса) символ;
- "V", "v" - Слабо связанный объект, отмеченный как таковой;
- "W", "w" - Слабо связанный объект, который не отмечен как таковой;
- "-" - отладочные запчасти;
- "?" - неизвестный символ;
- "a" - имя объектного файла, который использован при сборке библиотеки
Подробнее об утилите лучше смотреть в man.
Я использовал утилиту nm для поиска объектных файлов, содержащих нужные мне функции и потратил на поиск необходимого один рабочий день. Если бы её не было, то мне пришлось бы разбираться с процессом построения системы из исходных текстов, что было бы существенно дольше.
Выводы: годная утилита для разбора библиотек, исходного кода которых у вас нет или библиотек, в исходном коде которых вам не охота разбираться.
Комментарии