These are a list of tools which are likely to be useful when reverse engineering.

Standard Development tools

These tools should be already installed on a Unix system used for development. As a check list, you should be familiar with the following tools.

file. Determines file types. Useful for a quick overview of an unknown file. Often the first command executed when reverse engineering.

binutils. This package contains tools for manipulating / examining object files and executables. Particularly useful tools include objdump, strings, objcopy and readelf.

grep. Pattern matcher.

textutils. Text processing utilities. Particularly useful tools include od, uniq and wc.

sed. Stream based text processing.

gdb. Runtime debugger. Being intimately familiar with this tool is a must for dynamically examining executables.

ruby / python / perl... Scripting language for complex data processing. Use which ever you are most comfortable with.

Reverse Engineering Specific tools

These tools will be used for specific purposes during an reverse engineering session.

Locally developed tools

rsymtab. Regenerates the symbol table for a statically linked and stripped executable.

xocopy. Copies an executable with execute but no read permission.

Externally developed tools

strace. System call tracer.

ltrace. Library call tracer.

fenris. Debugging / program analysis suite.

subterfugue. System call subverter.