revava is a disassembler for Atmel AVR microcontroller firmware.
Version: 0.3revava is a single pass disassembler that reads in a file containing a program intended for an Atmel AVR microcontroller and outputs assembly code that can be input to an avr assembler. The output of revava contains assembler mnemonics where possible and dc.W declarations where no mnemonic matches the data.
Operating System: Linux
The comment field for each assembly instruction contains the address from the object code and the destination address for branches, calls, jumps, etc. In the case where there are multiple assembly instructions that assemble to the same opcode, all choices are presented in a group with all but the first choice commented out.
revava is written in C++ and the source code is available here, having been released under the GNU Public License.
The code is pretty vannilla C++. It should build with just about any C++ compiler. I tried it with gcc egcs-2.91.66 on linux and gcc 2.95.1 on Solaris 7. The only problem I noticed is that the Linux version wanted
#include < string.h >
and the Solaris version wanted
#include < strings.h >
I left it at < string.h >, so you might have to adjust that to get it to compile on your system.
After downloading the latest tarball (x.y is the version number)
tar -xvzf revava-x.y.tar.gz
Here you might want to edit the Makefile for your own preferences, then:
This should make two executables: "revava" and "make_test_source". revava is the disassembler. make_test_source just spits out some AVR assembly code that uses every instruction with different combinations of arguments.
After that you might want to
I thought not using -g as a compiler flag made the executable as small as possible, but "strip revava" makes it even smaller.