blob: eaccfe4e4d810da279dd030ccd622f1f76f771c5 [file] [log] [blame]
ndisasm(1)
==========
:doctype: manpage
:man source: NASM
:man manual: The Netwide Assembler Project
NAME
----
ndisasm - the Netwide Disassembler, an 80x86 binary file disassembler
SYNOPSIS
--------
*ndisasm* [ *-o* origin ] [ *-s* sync-point [...]] [ *-a* | *-i* ]
[ *-b* bits ] [ *-u* ] [ *-e* hdrlen ] [ *-p* vendor ]
[ *-k* offset,length [...]] infile
DESCRIPTION
-----------
The *ndisasm* command generates a disassembly listing of the binary file
infile and directs it to stdout.
OPTIONS
-------
*-h*::
Causes *ndisasm* to exit immediately, after giving a summary
of its invocation options.
*-r*|*-v*::
Causes *ndisasm* to exit immediately, after displaying its
version number.
*-o* 'origin'::
Specifies the notional load address for the file. This
option causes *ndisasm* to get the addresses it lists
down the left hand margin, and the target addresses
of PC-relative jumps and calls, right.
*-s* 'sync-point'::
Manually specifies a synchronisation address, such that
*ndisasm* will not output any machine instruction which
encompasses bytes on both sides of the address. Hence
the instruction which starts at that address will be
correctly disassembled.
*-e* 'hdrlen'::
Specifies a number of bytes to discard from the beginning
of the file before starting disassembly. This does not
count towards the calculation of the disassembly offset:
the first 'disassembled' instruction will be shown starting
at the given load address.
*-k* 'offset,length'::
Specifies that 'length' bytes, starting from disassembly
offset 'offset', should be skipped over without generating
any output. The skipped bytes still count towards the
calculation of the disassembly offset.
*-a*|*-i*::
Enables automatic (or intelligent) sync mode, in which
*ndisasm* will attempt to guess where synchronisation should
be performed, by means of examining the target addresses
of the relative jumps and calls it disassembles.
*-b* 'bits'::
Specifies 16-, 32- or 64-bit mode. The default is 16-bit
mode.
*-u*::
Specifies 32-bit mode, more compactly than using `-b 32'.
*-p* 'vendor'::
Prefers instructions as defined by 'vendor' in case of
a conflict. Known 'vendor' names include *intel*, *amd*,
*cyrix*, and *idt*. The default is *intel*.
RESTRICTIONS
------------
*ndisasm* only disassembles binary files: it has no understanding of
the header information present in object or executable files.
If you want to disassemble an object file, you should probably
be using *objdump*(1).
Auto-sync mode won't necessarily cure all your synchronisation
problems: a sync marker can only be placed automatically if a
jump or call instruction is found to refer to it 'before'
*ndisasm* actually disassembles that part of the code. Also,
if spurious jumps or calls result from disassembling
non-machine-code data, sync markers may get placed in strange
places. Feel free to turn auto-sync off and go back to doing
it manually if necessary.
SEE ALSO
--------
*objdump*(1)