ARMu - A tool to view and edit the ARM binaries.

Main features of ARMu:

 ARM disassembler
   It can disassemble an ARM binary file using the architecture ARMv5TE instruction set
(use some pseudo instruction mnemonic like ADR, RET, etc., no THUMB instructions)
Automatically generates labels for subroutines, branches, data referencing, strings, SHA constants
Custom labels, comments
Handles memory segments
Syntax highlighting
Fully customizable code view (colors, font)
 ARM debugger
  Run and trace commands (Step, Run over, Run to)
Stack view, Register view (CPSR flags), Call stack, CP15 view
Edit register values (+flags)
All 37 registers implemented.
 Import/export names from/to IDA database dump .idc files
   Dump all or only the custom labels
Load/Save database from/to own format
 Search options
  Hex search (normal and reverse byte order)
Text search (label, string, opcode, operand, comment)
 Database options
  Text search
Filter for auto generated labels
Type filter (show/hide jump target, subroutine, offset, string, data word)
Sorting by address, label (inc/dec), length (inc/dec), number of references (inc/dec), type (inc/dec)
Displays the UTF8 strings
 Hex editor
   It can show the binary file as hexadecimal values
 Project file editor
   It can edit the project file

- Quick overview -

Getting started

If you want to work with more than one segment you should create a 'project file' to make things easier.
The project file (.prj) is a plain text file containing instructions for ARMu.
Let's see how does it look like:

Download Canon EOS 7D fw 1.1.0 or Canon EOS 5D MkII fw 2.0.4 project.

1. Disassembler

 A(ASCI string) Mark this line as a string. 
 C(Code) Mark this line as code. 
 Shift-C(Clear) Clear the label and mark the line as code. 
 Ctrl-C(Copy) Copy the selected address, codewords (one or more), label, opcode, operand or comment to the clipboard. You can paste it to the search box. 
 D(Data) Mark this line as data. 
 G(Goto) Set focus on the address field 
 L(List) Disassemble the seleced area to the status page 
 Ctrl-L(Lock) Lock/unlock for editing 
 F3Search forward 
 Ctrl-F3Search backward 
 Clickon a code word: Show the code word in hex, bin, dec, inv 
 Clickon a label: Show label properties, write the next reference address to the jump box 
 Double clickon a label: Jump to DB view 
 Double clickon a jump operand: Jump to the address 
 Alt-F1Show/hide the Register view 
 Alt-F2Show/hide the Stack view 
 F5Start the trace from the cursor. Execute one command. 
 F7Step: Execute the current command. 
 F8Run over: Run until reach the next command. 
 F9Run to: Run the trace until the cursor. 
 F10Stop: Abort running. 


  The search always searches from the cursor (the selected field not included).
The double arrow change the search direction (you can also use F3, Ctrl-F3).
Before click on the Search button select a field in the grid.
The search procedure depends on which column has the selected field.
If the selected field is in one of the first two columns there will a hex search.
There are two options:
- type hex digit pairs (byte) as the same order as in the binary file. (eg. '1122334455667788')
- type codewords (4 bytes) as you see in the grid and put spaces between the codewords (eg. '44332211 88776655')
If you type other character than hex digits, the search automatically jumps to the 'label' column.
If the selected field is in the 'text' or the 'label' column it will a text search on labels.
If the selected field is in the 'opcode' column then there are two options:
- type only an opcode (or a part of it) to search in the opcode column only
- type an opcode (or a part of it) and an operand (or a part of the operand) separated by a 'space' to search in both column
If the selected field is in the 'operand' column then there will a text search on the operands.
If the selected field is in the 'comment' column then there will a text search on the comments.

 Alt-0Show custom labels only/show all. 
 Alt-1Show/hide jump targets. 
 Alt-2Show/hide subroutines. 
 Alt-3Show/hide offsets. 
 Alt-4Show/hide strings. 
 Alt-5Show/hide data words. 
 Ctrl-L(Lock) Lock/unlock for editing 
 F3Search forward 
 Ctrl-F3Search backward 
 Clickon a column header: Sort the data (address, label, len, C/G, ref, type) 
 Clickon a label: Show label properties 
 Double clickon a label: Jump to Code view 
 Double clickon a type: List label properties 

Version history

Change log:

Changes for v0.17 03/27/2011
  • .fir structure handling removed
  • Bug fixes
Changes for v0.16 03/22/2011
  • UTF8 string support (limited)
  • Bug fixes
Changes for v0.15 10/10/2010
  • Hex editor
Changes for v0.14 08/02/2010
  • Bug fixes
Changes for v0.12 07/18/2010
  • Improved search
  • Bug fixes
Changes for v0.11 06/04/2010
  • Improved debug
  • Bug fixes
First preview v0.10 05/26/2010
  • ARM Disassembler (ARMv5TE without Thumb instrucions)
  • Debugger (Step, Run over, Run to), Stack and Register view
  • Edit the register values and the binary file
  • Handle memory segments
  • Syntax highlighting (customizable)
  • Text and hex search (with different options)
  • Database for labels and comments
  • Search references
  • IDA dump IDC export, import
  • Display Canon DSLR firmware structure and decrypt updater(s)


If you've decided to make a donation for my project
click the donate button below for PayPal,
or wire the money directly to my account.

Donate with minimum amount of 10 EUR or 15 USD
and your serial number will be registered
and you can skip the start delay.

Donate via PayPal:

Money transfer:

Account (IBAN): HU56117730470957371600000000
Budapest, HUNGARY
European Union


Canon EOS 7D firmware related links:

ML-devel mailing list


The ARM instruction set implementation based on the ARMv5 Architecture Reference Manual