Skip to content

Instantly share code, notes, and snippets.

@dentarg
Created March 15, 2022 10:47
Show Gist options
  • Save dentarg/0ca0d67856082f9880e5194020cd125d to your computer and use it in GitHub Desktop.
Save dentarg/0ca0d67856082f9880e5194020cd125d to your computer and use it in GitHub Desktop.

Revisions

  1. dentarg created this gist Mar 15, 2022.
    146 changes: 146 additions & 0 deletions nm.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,146 @@
    NM(1) General Commands Manual NM(1)



    NAME
    nm - display name list (symbol table)

    SYNOPSIS
    llvm-nm [ -agnoprumxjlPA ] [ - ] [ -t format ] [[ -arch arch_flag ]...] [
    file ... ] [ -s segname sectname ]

    nm-classic [ -agnoprumxjlfPA [ s segname sectname ]] [ - ] [ -t format ]
    [[ -arch arch_flag ]...] [ file ... ]

    DESCRIPTION
    As of Xcode 8.0 the default nm(1) tool is llvm-nm(1). For the most part
    nm(1) and llvm-nm(1) have the same options; notable exceptions include
    -f, -s, and -L as described below. This document explains options common
    between the two commands as well as some historically relevant options
    supported by nm-classic(1). More help on options for llvm-nm(1) is
    provided when running it with the --help option.

    nm displays the name list (symbol table of nlist structures) of each
    object file in the argument list. In some cases, as with an object that
    has had strip(1) with its -T option used on the object, that can be
    different than the dyld information. For that information use
    dyldinfo(1).

    If an argument is an archive, a listing for each object file in the
    archive will be produced. File can be of the form libx.a(x.o), in which
    case only symbols from that member of the object file are listed. (The
    parentheses have to be quoted to get by the shell.) If no file is given,
    the symbols in a.out are listed.

    Each symbol name is preceded by its value (blanks if undefined). Unless
    the -m option is specified, this value is followed by one of the
    following characters, representing the symbol type: U (undefined), A
    (absolute), T (text section symbol), D (data section symbol), B (bss
    section symbol), C (common symbol), - (for debugger symbol table entries;
    see -a below), S (symbol in a section other than those above), or I
    (indirect symbol). If the symbol is local (non-external), the symbol's
    type is instead represented by the corresponding lowercase letter. A
    lower case u in a dynamic shared library indicates a undefined reference
    to a private external in another module in the same library.

    If the symbol is a Objective-C method, the symbol name is
    ±[Class_name(category_name) method:name:], where `+' is for class
    methods, `-' is for instance methods, and (category_name) is present only
    when the method is in a category.

    The output is sorted alphabetically by default.

    Options are:

    -a Display all symbol table entries, including those inserted for use
    by debuggers.

    -g Display only global (external) symbols.

    -n Sort numerically rather than alphabetically.

    -o Prepend file or archive element name to each output line, rather
    than only once.

    -p Don't sort; display in symbol-table order.

    -r Sort in reverse order.

    -u Display only undefined symbols.

    -U Don't display undefined symbols.

    -m Display the N_SECT type symbols (Mach-O symbols) as (segment_name,
    section_name) followed by either external or non-external and then
    the symbol name. Undefined, common, absolute and indirect symbols
    get displayed as (undefined), (common), (absolute), and
    (indirect), respectively. Other symbol details are displayed in a
    human-friendly manner, such as "[no dead strip]". nm will display
    the referenced symbol for indirect symbols and will display the
    name of the library expected to provide an undefined symbol. See
    nlist(3) and <mach-o/nlist.h> for more information on the nlist
    structure.

    -x Display the symbol table entry's fields in hexadecimal, along with
    the name as a string.

    -j Just display the symbol names (no value or type).

    -s segname sectname
    List only those symbols in the section (segname,sectname). For
    llvm-nm(1) this option must be last on the command line, and after
    the files.

    -l List a pseudo symbol .section_start if no symbol has as its value
    the starting address of the section. (This is used with the -s
    option above.)

    -arch arch_type
    Specifies the architecture, arch_type, of the file for nm(1) to
    operate on when the file is a universal file (see arch(3) for the
    currently known arch_types). The arch_type can be "all" to
    operate on all architectures in the file. The default is to
    display the symbols from only the host architecture, if the file
    contains it; otherwise, symbols for all architectures in the file
    are displayed.

    -f format
    For llvm-nm(1) this specifies the output format. Where format can
    be bsd, sysv, posix or darwin.

    -f For nm-classic(1) this displays the symbol table of a dynamic
    library flat (as one file not separate modules). This is obsolete
    and not supported with llvm-nm(1).

    -A Write the pathname or library name of an object on each line.

    -P Write information in a portable output format.

    -t format
    For the -P output, write the numeric value in the specified
    format. The format shall be dependent on the single character used
    as the format option-argument:

    d The value shall be written in decimal (default).

    o The value shall be written in octal.

    x The value shall be written in hexadecimal.

    -L Display the symbols in the bitcode files in the (__LLVM,__bundle)
    section if present instead of the object's symbol table. For
    nm-classic(1) this is the default if the object has no symbol
    table and an (__LLVM,__bundle) section exists. This option is not
    supported by llvm-nm(1) where displaying llvm bitcode symbols is
    the default behavior.

    SEE ALSO
    ar(1), ar(5), Mach-O(5), stab(5), nlist(3), dyldinfo(1)

    BUGS
    Displaying Mach-O symbols with -m is too verbose. Without the -m,
    symbols in the Objective-C sections get displayed as an `s'.



    Apple, Inc. December 13, 2018 NM(1)
    179 changes: 179 additions & 0 deletions otool.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,179 @@
    OTOOL-CLASSIC(1) General Commands Manual OTOOL-CLASSIC(1)



    NAME
    otool-classic - object file displaying tool

    SYNOPSIS
    otool-classic [ option ... ] [ file ... ]

    DESCRIPTION
    The otool-classic command displays specified parts of object files or
    libraries. It is the preferred tool for inspecting Mach-O binaries,
    especially for binaries that are bad, corrupted, or fuzzed. It is also
    useful in situations when inspecting files with new or "bleeding-edge"
    Mach-O file format changes.

    For historical reasons, the LLVM-based llvm-objdump(1) tool does support
    displaying Mach-O information in an "otool-compatibility" mode. For more
    information on using llvm-objdump(1) in this way, see the llvm-otool(1)
    command-line shim. Note that llvm-objdump(1) is incapable of displaying
    information in all Mach-O files.

    If the -m option is not used the file arguments may be of the form
    libx.a(foo.o), to request information about only that object file and not
    the entire library. (Typically this argument must be quoted,
    ``libx.a(foo.o)'', to get it past the shell.) Otool-classic understands
    both Mach-O (Mach object) files and universal file formats.
    Otool-classic can display the specified information in either its raw
    (numeric) form (without the -v flag), or in a symbolic form using macro
    names of constants, etc. (with the -v or -V flag).

    At least one of the following options must be specified:

    -a Display the archive header, if the file is an archive.

    -S Display the contents of the `__.SYMDEF' file, if the file is an
    archive.

    -f Display the universal headers.

    -h Display the Mach header.

    -l Display the load commands.

    -L Display the names and version numbers of the shared libraries that
    the object file uses, as well as the shared library ID if the file
    is a shared library.

    -D Display just the install name of a shared library. See
    install_name_tool(1) for more info.

    -s segname sectname
    Display the contents of the section (segname,sectname). If the -v
    flag is specified, the section is displayed as its type, unless
    the type is zero (the section header flags). Also the sections
    (__OBJC,__protocol), (__OBJC,__string_object) and
    (__OBJC,__runtime_setup) are displayed symbolically if the -v flag
    is specified. For unknown section types, if the -V flag is
    specified, the contents of the section are displayed in a
    canonical hex+ASCII display, where a column of hexadecimal values
    print along side a column of ASCII characters.

    -t Display the contents of the (__TEXT,__text) section. With the -v
    flag, this disassembles the text. With the -V flag, it also
    symbolically disassembles the operands.

    -x Display the contents of every __text section found in the file.
    This is useful when looking at the Mach kernel and other files
    with __text sections in more than one segment, or where the __text
    section is somewhere other than __TEXT. When used with the -v
    flag, this disassembles the text. When used with the -V flag, it
    also symbolically disassembles the operands.

    -d Display the contents of the (__DATA,__data) section.

    -o Display the contents of the __OBJC segment used by the Objective-C
    run-time system.

    -r Display the relocation entries.

    -c Display the argument strings (argv[] and envp[]) from a core file.

    -I Display the indirect symbol table.

    -T Display the table of contents for a dynamically linked shared
    library.

    -R Display the reference table of a dynamically linked shared
    library.

    -M Display the module table of a dynamically linked shared library.

    -H Display the two-level namespace hints table.

    -G Display the data in code table.

    -C Display the linker optimization hints (-v for verbose mode can
    also be added).

    -P Print the info plist section, (__TEXT,__info_plist), as strings.

    -dyld_info
    Print bind and rebase information used by dyld to resolve external
    references in a final linked binary.

    -dyld_opcodes
    Print raw dyld bind and rebase opcodes present in a final linked
    binary. These opcodes are stored in a region pointed to by
    LC_DYLD_INFO* load commands.

    -show-latency
    When doing disassembly print latency annotations for instructions.

    -chained_fixups
    Print raw chained fixup data present in a final linked binary
    built with chained fixups. The chained fixup data are stored
    either in a region pointed to by the LC_DYLD_CHAINED_FIXUPS load
    command or in a (__TEXT,__chain_starts) section. This data
    includes the fixup chain's starting location on each page by
    segment and symbol information for each bind. Use the -dyld_info
    option to see the individual links in each chain.

    The following options may also be given:

    -j When doing disassembly print the opcode bytes of the instructions.

    -m The object file names are not assumed to be in the archive(member)
    syntax, which allows file names containing parenthesis.

    -p name
    Used with the -t and -v or -V options to start the disassembly
    from symbol name and continue to the end of the (__TEXT,__text)
    section. This option can also be used with the -x option to begin
    disassembly from symbol name in any segment where a __text section
    is found.

    -q Use the llvm disassembler when doing disassembly; this is
    available for the x86 and arm architectures. This is the default.

    -Q Use otool-classic(1)'s disassembler when doing disassembly.

    -v Display verbosely (symbolically) when possible.

    -V Display the disassembled operands symbolically (this implies the
    -v option). This is useful with the -s, -t, and -x options.

    -X Don't print leading addresses or headers with disassembly of
    sections.

    -addr_slide=arg
    When disassembling a binary using the -s, -t, or -o options, add
    an arbitrary slide to each pointer value when it is displayed.
    This is useful for matching otool output with that from a running
    process.

    -arch arch_type
    Specifies the architecture, arch_type, of the file for
    otool-classic(1) to operate on when the file is a universal file
    (aka a file with multiple architectures). (See arch(3) for the
    currently known arch_types.) The arch_type can be "all" to
    operate on all architectures in the file. The default is to
    display only the host architecture, if the file contains it;
    otherwise, all architectures in the file are shown.

    -function_offsets
    When doing disassembly print the decimal offset from the last
    label printed.

    -mcpu=arg
    When doing disassembly using the llvm disassembler use the cpu
    arg.

    --version
    Print the otool-classic(1) version information.

    SEE ALSO
    dyld(1), install_name_tool(1), libtool(1), lipo(1), llvm-otool(1), and
    vtool(1)