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)
