vAVRdisasm - Free AVR Disassembler

Download the latest version of vAVRdisasm source here: vavrdisasm-1.2.tar.gz.
Download a Mac OS X Intel binary (compiled on 10.4.8) of vAVRdisasm here: vavrdisasm-intel-osx-1.2.gz.
Download a Linux x86 binary of vAVRdisasm here: vavrdisasm-linux-x86-1.2.gz.


ChangeLog

Version 1.2 - 2007/01/06

Version 1.0 - 2007/01/03


I have formatted the README, which does a good job of explaining what vAVRdisasm is and how to use it, for online viewing here.

README
vAVRdisasm - Version 1.0 - 2007/01/06
Vanya A. Sergeev - vsergeev at gmail.

Table of Contents

  1. ABOUT vAVRdisasm
  2. LICENSE
  3. COMPILING vAVRdisasm
  4. USING vAVRdisasm
  5. Ghetto Address Labels
  6. Shortcomings
  7. Source Code
  8. Sample Disassembly Outputs

1. ABOUT vAVRdisasm

vAVRdisasm is an AVR program disassembler. It supports all 136 AVR instructions as defined by the Atmel AVR Instruction Set, revision 0856E-AVR-11/05.

This single-pass disassembler can handle Atmel Generic, Intel HEX8, and Motorola S-Record formatted files containing valid AVR program binaries.

vAVRdisasm features a handful of formatting options, including:

vAVRdisasm should work on most *nix platform, including a Cygwin environment. vAVRdisasm was written in C by Vanya A. Sergeev - vsergeev at gmail, and tested with the GNU C Compiler.


2. LICENSE

vAVRdisasm is released under the GNU General Public License.

    You should have received a copy of the GNU General Public License
    along with this program; see the file "COPYING".  If not, visit
    http://www.gnu.org or write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

3. COMPILING vAVRdisasm

Simply by running,
$ make
in the vAVRdisasm project directory should compile vAVRdisasm on most *nix systems, including a Cygwin environment. The Makefile is configured to use GCC to compile vAVRdisasm. vAVRdisasm should have no problem being compiled with “gmake”.


4. USING vAVRdisasm

If you encounter any program bugs or problems, please notify the program author by email: Vanya A. Sergeev - vsergeev at gmail.


5. Ghetto Address Labels

vAVRdisasm supports a unique formatting feature: Ghetto Address Labels, which few, if not any, single-pass disassemblers implement.

With the -l or - -address-label option and a supplied prefix, vAVRdisasm will print a label containing the (ideally) non-numerical supplied prefix and the address of the disassembled instruction at every instruction. Also, all relative branch, jump, and call instructions will be formatted to jump to their designated address label.

This feature enables direct re-assembly of the vAVRdisasm’s disassembly. This can be especially useful for quick modification of the AVR program assembly code without having to manually format the disassembly or adjust the relative branch, jump, and call distances with every modification to the disassembly.

The -l or - -address-label option overrides the default printing of the addresses alongside disassembly. Destination comments can still be used.

Example:
$ ./vavrdisasm -l “A_” sampleprogram.hex
vAVRdisasm’s disassembly will include address labels that will look like this A_0000:. For sample disassembly outputs by vAVRdisasm, see the “Sample Disassembly Outputs” section.


6. Shortcomings

These features do not affect the accuracy of the disassembler’s output, and may be supported in future versions of vAVRdisasm.


7. Source Code

vAVRdisasm’s source code is heavily commented, because this disassembler was also a personal learning project of the author.

Operand prefixes (such as “R” for register operands or “$” for data operands) can be customized in the format_disasm.h header file.

Field width spacing of the addresses printed alongside disassembly, and the destination relative address comments can be customized in the ui_disasm.c source file.
The output file (default is stdout) can be changed in ui_disasm.c source file.

vAVRdisasm uses libGIS, a free Atmel Generic, Intel HEX8, and Motorola S-Record Parser Library to parse formatted files containing AVR program binaries. libGIS is available for free under a Public Domain license here.
libGIS is compiled into vAVRdisasm–it does not need to be obtained separately.


8. Sample Disassembly Outputs

These disassembly samples, produced by vAVRdisasm, are of the program code in the “Novice’s Guide to AVR Development” article of the Atmel Applications Journal.

$ ./vavrdisasm sampleprogram.hex
   0:   rjmp .0         ; 0x2
   2:   ser R16
   4:   out $17, R16
   6:   out $18, R16
   8:   dec R16
   A:   rjmp .-6        ; 0x6
$ ./vavrdisasm --no-destination-comments sampleprogram.hex
   0:   rjmp .0
   2:   ser R16
   4:   out $17, R16
   6:   out $18, R16
   8:   dec R16
   A:   rjmp .-6
$ ./vavrdisasm --no-addresses sampleprogram.hex
rjmp .0         ; 0x2
ser R16
out $17, R16
out $18, R16
dec R16
rjmp .-6        ; 0x6
$ ./vavrdisasm --no-addresses --no-destination-comments sampleprogram.hex
rjmp .0
ser R16
out $17, R16
out $18, R16
dec R16
rjmp .-6
$ ./vavrdisasm -l "A_" sampleprogram.hex

.org 0x000
A_000: rjmp A_002       ; 0x2
A_002: ser R16
A_004: out $17, R16
A_006: out $18, R16
A_008: dec R16
A_00A: rjmp A_006       ; 0x6
$ ./vavrdisasm -l "A_" --no-destination-comments sampleprogram.hex

.org 0x000
A_000: rjmp A_002
A_002: ser R16
A_004: out $17, R16
A_006: out $18, R16
A_008: dec R16
A_00A: rjmp A_006

The program sample above is modified slightly to illustrate vAVRdisasm’s ability to represent data constants in different bases.

$ ./vavrdisasm --data-base-bin sampleprogram2.hex
   0:   rjmp .0         ; 0x2
   2:   ser R16
   4:   out $17, R16
   6:   ldi R16, 0b00100011
   8:   out $18, R16
   A:   dec R16
   C:   rjmp .-6        ; 0x8
Print This Page Print This Page