List symbols from binary files

nm is used to examine binary files and to display the contents of those files, meta information, names of functions and global variables declared in the file. nm is available in Unix and Linux System. For Windows users, nm command is available through cygwin.

Supported Targets:

elf64-x86-64 
elf32-i386 
elf32-x86-64 
a.out-i386-linux 
pei-i386 
pei-x86-64 
elf64-l1om 
elf64-k1om 
elf64-little 
elf64-big 
elf32-little 
elf32-big 
pe-x86-64 
pe-bigobj-x86-64 
pe-i386 
plugin 
srec symbolsrec 
verilog 
tekhex 
binary 
ihex

Options:

-a, --debug-syms       Display debugger-only symbols
  -A, --print-file-name  Print name of the input file before every symbol
  -B                     Same as --format=bsd
  -C, --demangle[=STYLE] Decode low-level symbol names into user-level names
                          The STYLE, if specified, can be `auto' (the default),
                          `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'
                          or `gnat'
      --no-demangle      Do not demangle low-level symbol names
  -D, --dynamic          Display dynamic symbols instead of normal symbols
      --defined-only     Display only defined symbols
  -e                     (ignored)
  -f, --format=FORMAT    Use the output format FORMAT.  FORMAT can be `bsd',
                           `sysv' or `posix'.  The default is `bsd'
  -g, --extern-only      Display only external symbols
  -l, --line-numbers     Use debugging information to find a filename and
                           line number for each symbol
  -n, --numeric-sort     Sort symbols numerically by address
  -o                     Same as -A
  -p, --no-sort          Do not sort the symbols
  -P, --portability      Same as --format=posix
  -r, --reverse-sort     Reverse the sense of the sort
      --plugin NAME      Load the specified plugin
  -S, --print-size       Print size of defined symbols
  -s, --print-armap      Include index for symbols from archive members
      --size-sort        Sort symbols by size
      --special-syms     Include special symbols in the output
      --synthetic        Display synthetic symbols as well
  -t, --radix=RADIX      Use RADIX for printing symbol values
      --target=BFDNAME   Specify the target object format as BFDNAME
  -u, --undefined-only   Display only undefined symbols
  -X 32_64               (ignored)
  @FILE                  Read options from FILE
  -h, --help             Display this information
  -V, --version          Display this program's version number

nm symbols/codes:

"A" The symbol's value is absolute, and will not be changed by
   further linking.
 
"B"
"b" The symbol is in the uninitialized data section (known as BSS).
 
"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.
 
"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.
 
"I" The symbol is an indirect reference to another symbol.
 
"N" The symbol is a debugging symbol.
 
"p" The symbols 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 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.
%d bloggers like this: