Поиск по сайту:

Учебное пособие по командам Linux nm для начинающих (10 примеров)


На этой странице

  1. Команда Linux nm
  2. Q1. Как работает команда nm?
  3. Вопрос 2. Как сделать так, чтобы имена файлов предшествовали каждому символу в выводе?
  4. Вопрос 3. Как заставить nm отображать символы отладчика?
  5. Q4. Как заставить nm декодировать низкоуровневые имена символов?
  6. В5. Как заставить nm отображать только динамические символы?
  7. Q6. Как использовать разные форматы вывода nm?
  8. Q7. Как заставить nm отображать только внешние символы?
  9. Q8. Какие все варианты сортировки предоставляет nm?
  10. Q9. Как заставить nm отображать только неопределенные символы?
  11. Q10. Как заставить nm отображать только определенные символы?
  12. Заключение

Если вы являетесь пользователем Linux, который также занимается кодированием и разработкой программного обеспечения на системном уровне, вы можете столкнуться с ситуациями, когда вам нужна информация, связанная с символами в объектном файле. Вы будете рады узнать, что существует утилита командной строки, названная nm, которую вы можете использовать в таких ситуациях.

В этом уроке мы обсудим основы этого инструмента, используя несколько простых для понимания примеров. Но прежде чем мы это сделаем, стоит упомянуть, что все приведенные здесь примеры были протестированы на компьютере с Ubuntu 22.04 LTS.

Nm-команда Linux

Утилита командной строки nm в основном выводит список символов из объектных файлов. Вот синтаксис инструментов:

nm [OPTIONS] OBJECT-FILENAME

И вот как это объясняет справочная страница команд:

       GNU nm lists the symbols from object files objfile....  If no object
       files are listed as arguments, nm assumes the file a.out.

Ниже приведены несколько примеров в стиле вопросов и ответов, которые дадут вам лучшее представление о том, как работает nm.

Q1. Как работает команда nm?

Основное использование этой команды очень простое — все, что вам нужно сделать, это запустить команду nm и передать ей имя объектного файла в качестве входных данных. Например, я использовал команду nm с бинарным файлом apl:

nm apl

На следующем снимке экрана показан тип вывода, созданного вышеуказанной командой:

Три столбца, созданные на выходе, представляют значение символа, тип символа и имя символа соответственно. Существует несколько типов символов — чтобы узнать все подробности, перейдите на справочную страницу команды nm.

Q2. Как сделать так, чтобы имена файлов предшествовали каждому символу в выводе?

Это можно сделать с помощью параметра командной строки -A.

nm -A [obj-file]

Например:

nm -A apl

Таким образом, вы можете видеть, что имя файла было добавлено в начале каждой строки.

Q3. Как заставить nm отображать символы отладчика?

Чтобы в выходных данных nm также отображал символы отладчика, используйте параметр командной строки -a.

nm -a [obj-filename]

Например:

nm -a apl

Приведенная выше команда отобразит все символы, включая символы только для отладчика, которые обычно не отображаются.

Q4. Как заставить nm декодировать низкоуровневые имена символов?

Если вы хотите, вы даже можете заставить nm декодировать низкоуровневые имена символов в имена пользовательского уровня. Это можно сделать с помощью параметра командной строки -C.

nm -C [obj-file]

Например:

nm -C apl

Вот что справочная страница говорит об этой опции:

           Besides removing any initial underscore prepended by the system,
           this makes C++ function names readable. Different compilers have
           different mangling styles. The optional demangling style argument
           can be used to choose an appropriate demangling style for your
           compiler.

Q5. Как заставить nm отображать только динамические символы?

Если вы хотите, чтобы nm отображал только динамические символы, а не обычные символы, используйте параметр командной строки -D.

nm -D [obj-file]

Например:

nm -D apl

Итак, вы можете видеть, что команда nm выводит только динамические символы.

Q6. Как использовать разные форматы вывода nm?

Чтобы включить различные форматы вывода, используйте параметр командной строки -f. По умолчанию вывод производится в формате bsd, однако при желании вы также можете включить форматы sysv и posix.

nm -f [format] [obj-filename]

Например:

nm -f posix apl

Обратите внимание на изменение формата.

Q7. Как заставить nm отображать только внешние символы?

Этого можно добиться с помощью параметра командной строки -g.

nm -g [obj-file]

Например:

nm -g  apl

Q8. Какие все варианты сортировки предоставляет nm?

По умолчанию символы сортируются в алфавитном порядке. Однако, если вы хотите, вы можете отсортировать их численно по их адресам, используя опцию командной строки -n.

nm -n [objfile]

Например:

nm -n apl

Итак, вы можете видеть, что вывод теперь отсортирован по адресам.

Если вы не хотите, чтобы nm применял какую-либо сортировку (включая сортировку по умолчанию), используйте параметр командной строки -p. Двигаясь дальше, чтобы отменить любую существующую сортировку, используйте параметр командной строки -r.

Q9. Как заставить nm отображать только неопределенные символы?

Это можно сделать с помощью параметра командной строки -u.

nm -u [obj-file]

Например:

nm -u apl

Q10. Как заставить nm отображать только определенные символы?

Чтобы заставить nm отображать только определенные символы, используйте параметр командной строки --defined-only.

nm --defined-only [obj-file]

Например:

nm --defined-only apl

Заключение

Согласен, у команды nm есть нишевая аудитория, но мой личный опыт говорит, что даже если вы не считаете себя частью этой аудитории, имейте в виду, что такой инструмент существует. А для тех, кто хочет использовать эту утилиту, поработав со всеми приведенными здесь примерами, перейдите на справочную страницу nm, чтобы узнать больше.