Disassembler for MIPS Processors |
================================================================================ usage: disasmips [option]* {file} # system / version date input control options: -m {file} mapfile, symbolic addresses may be used after -m -o {addr} offset, memory address of 1st byte in dump file -a {addr} start address (hex or symbol) -e {addr} end address (hex or symbol), not before -a -s {size} size (hex), instead of end address -n {lines} maximum number of output lines -h {dir} HTML output directory, use -n for approx. file size -x end at address of next symbol after start address -LE force as Little Endian input -NO not an object file -NG no GPA in object file ($gp/$s7 global pointer area) -GP {addr} global offset table address for offset($gp) terms presentation options: -g GCC register naming -b prefix braces before symbol labels -r show addresses relative to last symbol label -c special comments for some instruction[ sequence]s -B {len} bi-instruction memory access sequence length (#instructions: 1=off, 2..50, default=10), implies -c -F {len} function end extension by branches < len to next JR (#instructions: 1=off, 2..10000, default=500) -H highlight jumps/branches and load/store (HTML output) -S short operands format (sub $1,$2; BUT sub $1,$2,$1) -P pseudo moves (move $1,$2; move $a0,100), implies -S -A all of the above presentation options other options: -t test only (coverage and inambiguity of decoded ops) -! show mapfile syntax mapfile syntax: [[value [@|*]symbol] [comment] [#comment] newline]* value := {hexnum | symbol}[+{value}] hexnum := [0x]{0..9 | a..f | A..F}* symbol := {a..z | A..Z | _ | 0..9}* symbols must not start with a decimal digit symbols must not be identical to any hex number special symbol '//' indicates a commented only value special comment '// $gp={value}' sets $gp for offset($gp) terms prefixed '@' switches from code to data representation 'symbol' / '@symbol' / '*symbol' are different symbols for addr references in options, '@' may be omitted, but then, an existing 'symbol' is taken before the '@symbol' comments before a # sign are visible in generated output multiple mapfiles (-m options) allowed ================================================================================ Example Output: 00000034: 18800006 blez $a0,0x50 00000038: 24020001 addiu $v0,$zero,1 0000003c: 00440018 mult $v0,$a0 00000040: 2484ffff addiu $a0,$a0,-1 00000044: 00001012 mflo $v0 00000048: 1c80fffc bgtz $a0,0x3c 0000004c: 00000000 nop 00000050: 03e00008 jr $ra 00000054: 00000000 nop (Compiled from int fac (int i) {int k = 1; while (i > 0) k *= i--; return (k);} by GCC.) ================================================================================ Versions / Modification History: 9-SEP-2016 new option -GP: global offset table address for offset($gp) terms new option -NG: no GPA in object file ($gp/$s7 global pointer area) significantly improved performance for very large symbol maps comments' pointer chaining: stop at function heads improved 25-APR-2015 new option -LE: little-endian support new option -NO: not an object file 8-SEP-2006 new option -F: detection of function boundaries improved detection of non-influencing instructions for -B improved 29-JUN-2006 maximum line length of mapfiles increased to 200 characters 22-JUL-2005 bugfix: crash on WinXP in some cases 12-JUL-2005 disassembly of GCC object files now possible (with automatic map and global offset table relocation) decoding of memory references of type lw + nop + addiu special comment "// $s7=value" for use in "offset($s7)" terms minimum string length set to 2 (was 1) new option -A for all must-have presentation options 1-JUL-2005 first release for Linux (x86) 28-JUN-2005 new option -S: output only 2 operands, if $dst == $src1..2 new option -P: output mnemonic "move" on appropriate cases special comment "// $gp=value" also for "addiu ..,$gp,.." instr. 27-JUN-2005 detection of non-influencing instructions for -B improved 22-JUN-2005 highlight jumps/branches and load/store (new option -H) align all comments correctly bugfix: too relaxed non-influencing instructions for -B 17-JUN-2005 bi-instruction memory references may be separated by up to 48 non-influencing instructions (new option -B) 16-JUN-2005 bi-instruction memory references may be separated by another non-influencing instruction 13-JUN-2005 bugfix: cyclic memory references 8-JUN-2005 complete decoding of bi-instruction memory references of type lui + addi / ori / load / store bugfix: ambiguity test (mtc0 was not ambiguous to cop0) 2-JUN-2005 bugfix: mtc0/mfc0 (rd confused with rt) new mtc0/mfc0 format Rrd[.sel]#regname 30-MAY-2005 symbols.htm with links to all HTML files now calls.htm with up to 500 entries now string references accept \t, \r and \n now (converted to blanks) relative addresses for symbol definitions in mapfiles special symbol "//" in mapfiles to indicate instruction comment special comment "// $gp=value" for use in "offset($gp)" terms 22-MAY-2005 decoding of mtc0, mfc0 and cache calls.htm for statistics 21-MAY-2005 HTML output possible 17-MAY-2005 absolute branch addresses possibly shown as symbols string references 6-MAY-2005 symbol maps 25-APR-2005 first release for Win32 ================================================================================ LICENCE AND DISCLAIMER: You are free to use this program for non-commercial purposes. Acade disclaims all warranties as to this software, whether express or implied, including without limitation any implied warranties of mer- chantability, fitness for a particular purpose or functionality. Any responsibility for any damages (including consequential ones) caused directly or by reliance on this program is denied. Using this program is an acknowledgement of these conditions. ================================================================================Any trademarks mentioned are property of their respective owners.