man > nm(1)

⚡ TLDR: nm (tldr-pages)

List symbol names in object files.

  • List global (extern) functions in a file (prefixed with T)
    nm {{-g|--extern-only}} {{path/to/file.o}}
  • List only undefined symbols in a file
    nm {{-u|--undefined-only}} {{path/to/file.o}}
  • List all symbols, even debugging symbols
    nm {{-a|--debug-syms}} {{path/to/file.o}}
  • Demangle C++ symbols (make them readable)
    nm {{-C|--demangle}} {{path/to/file.o}}
NM(1)                                   GNU Development Tools                                  NM(1)

NAME
       nm - list symbols from object files

SYNOPSIS
       nm [-A|-o|--print-file-name]
          [-a|--debug-syms]
          [-B|--format=bsd]
          [-C|--demangle[=style]]
          [-D|--dynamic]
          [-fformat|--format=format]
          [-g|--extern-only]
          [-h|--help]
          [--ifunc-chars=CHARS]
          [-j|--format=just-symbols]
          [-l|--line-numbers] [--inlines]
          [-n|-v|--numeric-sort]
          [-P|--portability]
          [-p|--no-sort]
          [-r|--reverse-sort]
          [-S|--print-size]
          [-s|--print-armap]
          [-t radix|--radix=radix]
          [-u|--undefined-only]
          [-U|--defined-only]
          [-V|--version]
          [-W|--no-weak]
          [-X 32_64]
          [--no-demangle]
          [--no-recurse-limit|--recurse-limit]]
          [--plugin name]
          [--size-sort]
          [--special-syms]
          [--synthetic]
          [--target=bfdname]
          [--unicode=method]
          [--with-symbol-versions]
          [--without-symbol-versions]
          [objfile...]

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

       For each symbol, nm shows:

       •   The  symbol  value,  in  the  radix  selected  by  options (see below), or hexadecimal by
           default.

       •   The symbol type.  At least the following types are used; others are, as  well,  depending
           on  the object file format.  If lowercase, the symbol is usually local; if uppercase, the
           symbol is global (external).  There are however a few lowercase symbols  that  are  shown
           for special global symbols ("u", "v" and "w").

           "A" The symbol's value is absolute, and will not be changed by further linking.

           "B"
           "b" The  symbol  is  in  the  BSS  data  section.   This section typically contains zero-
               initialized or uninitialized data, although the exact behavior is system dependent.

           "C"
           "c" The symbol is common.  Common symbols are uninitialized data.  When linking, multiple
               common symbols may appear with the same name.  If the symbol is defined anywhere, the
               common symbols are treated as undefined references.  The lower case  c  character  is
               used when the symbol is in a special section for small commons.

           "D"
           "d" The symbol is in the initialized data section.

           "G"
           "g" The  symbol  is  in  an initialized data section for small objects.  Some object file
               formats permit more efficient access to small data objects,  such  as  a  global  int
               variable as opposed to a large global array.

           "i" For  PE  format  files this indicates that the symbol is in a section specific to the
               implementation of DLLs.

               For ELF format files this indicates that the symbol is an indirect function.  This is
               a GNU extension to the standard set of ELF symbol types.  It indicates a symbol which
               if referenced by a relocation does not evaluate to its address, but instead  must  be
               invoked  at  runtime.  The runtime execution will then return the value to be used in
               the relocation.

               Note - the actual symbols display for GNU  indirect  symbols  is  controlled  by  the
               --ifunc-chars  command  line option.  If this option has been provided then the first
               character in the string will be used for global indirect function  symbols.   If  the
               string contains a second character then that will be used for local indirect function
               symbols.

           "I" The symbol is an indirect reference to another symbol.

           "N" The symbol is a debugging symbol.

           "n" The symbol is in a non-data, non-code, non-debug read-only section.

           "p" The symbol is in a stack unwind section.

           "R"
           "r" The symbol is in a read only data section.

           "S"
           "s" The symbol is in an uninitialized or zero-initialized data section for small objects.

           "T"
           "t" The symbol is in the text (code) section.

           "U" The symbol is undefined.

           "u" The symbol is a unique global symbol.  This is a GNU extension to the standard set of
               ELF symbol bindings.  For such a symbol the dynamic linker will make sure that in the
               entire process there is just one symbol with this name and type in use.

           "V"
           "v" The  symbol  is  a  weak  object.  When a weak defined symbol is linked with a normal
               defined symbol, the normal defined symbol  is  used  with  no  error.   When  a  weak
               undefined  symbol  is  linked  and  the  symbol is not defined, the value of the weak
               symbol becomes zero with no error.  On  some  systems,  uppercase  indicates  that  a
               default value has been specified.

           "W"
           "w" The  symbol  is  a weak symbol that has not been specifically tagged as a weak object
               symbol.  When a weak defined symbol is linked  with  a  normal  defined  symbol,  the
               normal  defined symbol is used with no error.  When a weak undefined symbol is linked
               and the symbol is not defined, the value of the symbol is  determined  in  a  system-
               specific  manner  without error.  On some systems, uppercase indicates that a default
               value has been specified.

           "-" The symbol is a stabs symbol in an a.out object file.  In this case, the next  values
               printed  are  the  stabs other field, the stabs desc field, and the stab type.  Stabs
               symbols are used to hold debugging information.

           "?" The symbol type is unknown, or object file format specific.

       •   The symbol name.  If a symbol has  version  information  associated  with  it,  then  the
           version information is displayed as well.  If the versioned symbol is undefined or hidden
           from  linker, the version string is displayed as a suffix to the symbol name, preceded by
           an @ character.  For example foo@VER_1.  If the version is the default version to be used
           when resolving unversioned references to the symbol, then it is  displayed  as  a  suffix
           preceded by two @ characters.  For example foo@@VER_2.

OPTIONS
       The long and short forms of options, shown here as alternatives, are equivalent.

       -A
       -o
       --print-file-name
           Precede  each  symbol  by  the name of the input file (or archive member) in which it was
           found, rather than identifying the input file once only, before all of its symbols.

       -a
       --debug-syms
           Display all symbols, even debugger-only symbols; normally these are not listed.

       -B  The same as --format=bsd (for compatibility with the MIPS nm).

       -C
       --demangle[=style]
           Decode (demangle) low-level symbol names into user-level  names.   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.

       --no-demangle
           Do not demangle low-level symbol names.  This is the default.

       --recurse-limit
       --no-recurse-limit
       --recursion-limit
       --no-recursion-limit
           Enables  or  disables  a  limit  on  the  amount of recursion performed whilst demangling
           strings.  Since the name mangling formats allow for an infinite level of recursion it  is
           possible  to  create  strings  whose  decoding  will  exhaust  the  amount of stack space
           available on the host machine, triggering a memory fault.  The  limit  tries  to  prevent
           this from happening by restricting recursion to 2048 levels of nesting.

           The  default  is for this limit to be enabled, but disabling it may be necessary in order
           to demangle truly complicated names.   Note  however  that  if  the  recursion  limit  is
           disabled  then  stack exhaustion is possible and any bug reports about such an event will
           be rejected.

       -D
       --dynamic
           Display the dynamic symbols rather than the normal symbols.  This is only meaningful  for
           dynamic objects, such as certain types of shared libraries.

       -f format
       --format=format
           Use the output format format, which can be "bsd", "sysv", "posix" or "just-symbols".  The
           default  is  "bsd".   Only the first character of format is significant; it can be either
           upper or lower case.

       -g
       --extern-only
           Display only external symbols.

       -h
       --help
           Show a summary of the options to nm and exit.

       --ifunc-chars=CHARS
           When display GNU indirect function symbols nm will default to using the "i" character for
           both local indirect functions and global indirect functions.   The  --ifunc-chars  option
           allows the user to specify a string containing one or two characters. The first character
           will  be  used for global indirect function symbols and the second character, if present,
           will be used for local indirect function symbols.

       j   The same as --format=just-symbols.

       -l
       --line-numbers
           For each symbol, use debugging information to try to find a  filename  and  line  number.
           For  a  defined  symbol,  look  for the line number of the address of the symbol.  For an
           undefined symbol, look for the line number of a relocation  entry  which  refers  to  the
           symbol.   If  line  number  information  can  be  found,  print it after the other symbol
           information.

       --inlines
           When option -l is active, if the address belongs to a function  that  was  inlined,  then
           this option causes the source information for all enclosing scopes back to the first non-
           inlined  function  to be printed as well.  For example, if "main" inlines "callee1" which
           inlines "callee2", and address is from "callee2", the source  information  for  "callee1"
           and "main" will also be printed.

       -n
       -v
       --numeric-sort
           Sort symbols numerically by their addresses, rather than alphabetically by their names.

       -p
       --no-sort
           Do not bother to sort the symbols in any order; print them in the order encountered.

       -P
       --portability
           Use  the  POSIX.2 standard output format instead of the default format.  Equivalent to -f
           posix.

       -r
       --reverse-sort
           Reverse the order of the sort (whether numeric or alphabetic); let the last come first.

       -S
       --print-size
           Print both value and size of defined symbols for the "bsd" output style.  This option has
           no effect for object formats that do not record symbol sizes, unless --size-sort is  also
           used in which case a calculated size is displayed.

       -s
       --print-armap
           When  listing  symbols  from archive members, include the index: a mapping (stored in the
           archive by ar or ranlib) of which modules contain definitions for which names.

       -t radix
       --radix=radix
           Use radix as the radix for printing the symbol values.  It must be d for decimal,  o  for
           octal, or x for hexadecimal.

       -u
       --undefined-only
           Display  only  undefined  symbols  (those external to each object file).  By default both
           defined and undefined symbols are displayed.

       -U
       --defined-only
           Display only defined symbols for each object file.  By default both defined and undefined
           symbols are displayed.

       -V
       --version
           Show the version number of nm and exit.

       -X  This option is ignored for compatibility with the  AIX  version  of  nm.   It  takes  one
           parameter  which  must be the string 32_64.  The default mode of AIX nm corresponds to -X
           32, which is not supported by GNU nm.

       --plugin name
           Load the plugin called name to add support for extra target types.  This option  is  only
           available if the toolchain has been built with plugin support enabled.

           If  --plugin  is  not provided, but plugin support has been enabled then nm iterates over
           the files in ${libdir}/bfd-plugins in alphabetic order and the first plugin  that  claims
           the object in question is used.

           Please note that this plugin search directory is not the one used by ld's -plugin option.
           In   order   to   make   nm   use   the   linker  plugin  it  must  be  copied  into  the
           ${libdir}/bfd-plugins directory.  For GCC based compilations the linker plugin is  called
           liblto_plugin.so.0.0.0.   For Clang based compilations it is called LLVMgold.so.  The GCC
           plugin is always backwards compatible with earlier versions, so it is sufficient to  just
           copy the newest one.

       --size-sort
           Sort  symbols  by  size.   For  ELF objects symbol sizes are read from the ELF, for other
           object types the symbol sizes are computed as the difference between  the  value  of  the
           symbol  and  the  value  of  the  symbol with the next higher value.  If the "bsd" output
           format is used the size of the symbol is printed, rather than the value, and -S  must  be
           used in order both size and value to be printed.

           Note  -  this  option  does  not  work  if --undefined-only has been enabled as undefined
           symbols have no size.

       --special-syms
           Display symbols which have a target-specific special meaning.  These symbols are  usually
           used by the target for some special processing and are not normally helpful when included
           in  the  normal  symbol  lists.   For  example for ARM targets this option would skip the
           mapping symbols used to mark transitions between ARM code, THUMB code and data.

       --synthetic
           Include synthetic symbols in the output.  These are special symbols created by the linker
           for various purposes.  They are not shown by default since  they  are  not  part  of  the
           binary's original source code.

       --unicode=[default|invalid|locale|escape|hex|highlight]
           Controls  the  display  of  UTF-8  encoded  multibyte characters in strings.  The default
           (--unicode=default) is to give them no special treatment.   The  --unicode=locale  option
           displays  the  sequence  in  the  current locale, which may or may not support them.  The
           options --unicode=hex and --unicode=invalid display them as hex byte  sequences  enclosed
           by either angle brackets or curly braces.

           The   --unicode=escape  option  displays  them  as  escape  sequences  (\uxxxx)  and  the
           --unicode=highlight option displays them as  escape  sequences  highlighted  in  red  (if
           supported  by  the  output  device).   The colouring is intended to draw attention to the
           presence of unicode sequences where they might not be expected.

       -W
       --no-weak
           Do not display weak symbols.

       --with-symbol-versions
       --without-symbol-versions
           Enables or disables the display of symbol version information.   The  version  string  is
           displayed  as  a  suffix  to  the  symbol  name, preceded by an @ character.  For example
           foo@VER_1.  If the version is the default version to be used when  resolving  unversioned
           references  to  the symbol then it is displayed as a suffix preceded by two @ characters.
           For example foo@@VER_2.  By default, symbol version information is displayed.

       --target=bfdname
           Specify an object code format other than your system's default format.

       @file
           Read command-line options from file.  The options read  are  inserted  in  place  of  the
           original  @file  option.  If file does not exist, or cannot be read, then the option will
           be treated literally, and not removed.

           Options in file are separated by whitespace.  A whitespace character may be  included  in
           an  option  by  surrounding  the  entire  option  in either single or double quotes.  Any
           character (including a backslash) may be  included  by  prefixing  the  character  to  be
           included  with  a  backslash.   The file may itself contain additional @file options; any
           such options will be processed recursively.

SEE ALSO
       ar(1), objdump(1), ranlib(1), and the Info entries for binutils.

COPYRIGHT
       Copyright (c) 1991-2024 Free Software Foundation, Inc.

       Permission is granted to copy, distribute and/or modify this document under the terms of  the
       GNU  Free  Documentation  License,  Version  1.3  or  any later version published by the Free
       Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-
       Cover Texts.  A  copy  of  the  license  is  included  in  the  section  entitled  "GNU  Free
       Documentation License".

binutils-2.42                                2026-02-09                                        NM(1)
nm(1) □✕
NAME SYNOPSIS DESCRIPTION OPTIONS
-A -o --print-file-name -a --debug-syms -B The same as --format=bsd (for compatibility with the MIPS nm). -C --no-demangle --recurse-limit --no-recurse-limit --recursion-limit --no-recursion-limit -D --dynamic -f format -g --extern-only -h --help -l --line-numbers --inlines -n -v --numeric-sort -p --no-sort -P --portability -r --reverse-sort -S --print-size -s --print-armap -t radix -u --undefined-only -U --defined-only -V --version -X This option is ignored for compatibility with the AIX version of nm. It takes one --size-sort --special-syms --synthetic -W --no-weak --with-symbol-versions --without-symbol-versions
SEE ALSO COPYRIGHT

Generated by phpman v4.11.2-35-gf98a251 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-10-08 00:40 @216.73.217.162
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!

^_top_^