Главная > Среда и утилиты > nm

nm: Просмотр списка символов объектных файлов

Команда nm отображает список символов (функций, переменных и т. д.) в скомпилированных объектных файлах, статических библиотеках, разделяемых библиотеках и т. д. Это помогает понять структуру программы и использовать ее для отладки.

Обзор

nm анализирует таблицу символов в объектном файле и выводит имя, тип, адрес каждого символа и т. д. Это полезно для диагностики проблем компоновки, проверки содержимого библиотеки и анализа оптимизации кода.

Основные функции

  • Вывод списка символов объектного файла
  • Идентификация типов символов (функция, переменная, определен, не определен и т. д.)
  • Предоставление информации об адресе и размере символа
  • Поддержка декодирования имен C++

Основные опции

Команда nm предоставляет различные опции для фильтрации списка символов и управления форматом вывода.

Фильтрация символов

Формат вывода

Сгенерированная команда:

Комбинируйте команды.

Описание:

`nm` Запускает команду.

Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.

Примеры использования

Рассматриваются различные способы проверки информации о символах объектных файлов с помощью команды nm.

Просмотр списка символов по умолчанию

gcc -c main.c -o main.o
nm main.o

Выводит все символы скомпилированного исполняемого файла или объектного файла в формате по умолчанию.

Просмотр только неопределенных символов

nm -u main.o

Выводит только неопределенные символы, такие как внешние функции или переменные, которые не были связаны. Полезно для диагностики проблем компоновки.

Декодирование символов C++

g++ -c my_class.cpp -o my_class.o
nm -C my_class.o

Преобразует сложные имена символов C++ в удобочитаемый формат.

Вывод с размером символа

nm -S main.o

Выводит размер (в байтах), занимаемый каждым символом, вместе с его адресом.

Советы и примечания

Советы и примечания по эффективному использованию команды nm.

Символы типов символов

Символы, отображаемые рядом с каждым символом в выводе nm, указывают на тип символа. Заглавные буквы означают глобальные символы, строчные буквы - локальные символы.

  • A: Абсолютный символ (Absolute)
  • B/b: Секция неинициализированных данных (BSS)
  • D/d: Секция инициализированных данных
  • T/t: Текстовая (кодовая) секция
  • U: Неопределенный символ (Undefined)
  • W/w: Слабый символ (Weak)

Использование для отладки

nm очень полезен для диагностики ошибок компоновщика или проверки того, правильно ли включены определенные функции или переменные в библиотеку. В частности, опция -u помогает выявлять неопределенные ссылки и решать проблемы компоновки.


Те же команды в категории