minix/commands/dis386/dis386.doc
Ben Gras 98ddbffe6e dis386 - a disassembler for ack
- it can disassemble object files (dis386o) and executables
    (dis386a)
  - only useful for as long as we still have ack
2010-10-04 13:26:53 +00:00

77 lines
2.9 KiB
Text

Dis36: a static disassembler for Minix 2.0. C W Rose, 20 Oct 97.
SUMMARY
This is the second release of dis386, a disassembler for Minix 2.0 At present
it is comprised of two programs, dise which understands executable files, and
diso which understands object files. The programs have been written using as
much common code as possible, and in time they will be merged. Meantime, they
are easier to debug separately.
The two programs are both front ends for Bruce Evan's x86 disassembler. The
disassembler can handle both 16-bit and 32-bit code, but since the programs
use large data tables (kept in memory for speedy access) they have been tested
only on 32-bit Minix.
The changes between versions 1.0 and 1.1 are small, but add to the ease of
use: addresses can now be entered in decimal or hexadecimal (leading 0x),
and starting offset and program counter now have more intelligble values.
OPTIONS
Object, executable and core files have the following structures, where
Name is the section name, and Option the option needed to display the section.
Object file Executable file Core file
Name Option Name Option Name Option
Header } h Header h Memory map m
Section headers } Process table p
Sections - Sections - Sections -
text t text t text t
rom m
data d data d data d
bss - stack k
Relocation structures r
Symbol table s Symbol table s
Symbol names n
Other options are:
-A str set executable file name
-C str set core file name
-O str set object file name
-a display all sections
-b dump in straight binary
-f # set the first address to be displayed
-l # set the last address to be displayed
-x # set debugging level
Not all these options are functional at present; in particular, the file type
override of -A/C/O isn't implemented (since the programs are single-purpose).
The default option is -h. The default input file is a.out for dise, and test.o
for diso. Otherwise, input is taken from the first file option on the command
line. Output is always written to standard output, and error messages to
standard error.
BUGS AND FEATURES
The programs search the data area for possible local symbols; generally, these
are the start of strings. At the moment this search is limited, and accepts
even single printing characters as strings; it should probably accept only
runs of three or more characters.
There is no search for local text symbols, as opposed to data symbols; this
would need two full passes over the text with the disassembler, and doesn't
seem worthwhile. Once the data symbols are out of the way, the disassembled
text is fairly easy to read.
The programs do a fair amount of error checking to ensure that they are
using eg. addresses that are within scope, but if they do fail they tend
to abandon the task completely and bale out with a (supposedly informative)
error message.
There are many apparent dead-ends in the code, left as hooks for later
additions.
/* eof */