Hi Colin, top of the bill, as far as I know, is IDA pro. Simply amazing product, with matching pricetag. Google-ing for 'arm disassembler' will ofcourse yield some more results.
http://www.hex-rays.com/idapro/ Cheers, Johnny Colin Howarth wrote: > Hello all, > > I'm not entirely sure this is appropriate here, it being an OpenOCD > developer's list and not an ARM developer's list as such :-( > > However, I was wondering how many of you actually code in ARM assembler? > Do you avoid it wherever you can, using a "high-level" language and gcc? > > For those that do do assembly code, do you have a Good (TM) disassembler? > > > The armv4_5 disassemble command is fine, in that it disassembles, but > as I mentioned a while back, it doesn't produce what I would have > written as an assembly code routine :-) > > > So, I've written a quick 2-pass assembly code post-processor in Perl, > and was wondering if anyone else had any interest in it. > > So far, it does this: > > a) identifies subroutine calls (ie. BL) > b) identifies returns (e.g. BX R14; LDMFD R13!, {r0, r1, r15}; ) > c) identifies labels (e.g BNE 0x00001234) > d) identifies PC-relative addressed data > e) locates the definition of the base register (e.g. LDR r0, [r15, > #0x18]; ... STR r0, [r2] ) > > It prints out the marked up assembly code on the second pass. > > > Thus: > > > 0x0000072c 0xe59f3088 LDR r3, [r15, #0x88] > 0x00000730 0xe1540003 CMP r4, r3 > 0x00000734 0x1a000009 BNE 0x00000760 > 0x00000738 0xe3a00501 MOV r0, #0x400000 > 0x0000073c 0xe3a01001 MOV r1, #0x1 > 0x00000740 0xeb000174 BL 0x00000d18 > 0x00000744 0xe3a00501 MOV r0, #0x400000 > 0x00000748 0xe3a01000 MOV r1, #0x0 > 0x0000074c 0xeb000171 BL 0x00000d18 > 0x00000750 0xe3a02000 MOV r2, #0x0 > 0x00000754 0xe59f303c LDR r3, [r15, #0x3c] > 0x00000758 0xe58320ac STR r2, [r3, #0xac] > 0x0000075c 0xe89da810 LDMIA r13, {r4, r11, r13, r15} > 0x00000760 0xe59f3058 LDR r3, [r15, #0x58] > 0x00000764 0xe1540003 CMP r4, r3 > 0x00000768 0x189da810 LDMNEIA r13, {r4, r11, r13, r15} > 0x0000076c 0xe3a00502 MOV r0, #0x800000 > 0x00000770 0xe3a01001 MOV r1, #0x1 > 0x00000774 0xeb000167 BL 0x00000d18 > 0x00000778 0xe3a00502 MOV r0, #0x800000 > 0x0000077c 0xe3a01000 MOV r1, #0x0 > 0x00000780 0xeb000164 BL 0x00000d18 > 0x00000784 0xe3a02000 MOV r2, #0x0 > 0x00000788 0xe59f3008 LDR r3, [r15, #0x8] > 0x0000078c 0xe58320ac STR r2, [r3, #0xac] > 0x00000790 0xe89da810 LDMIA r13, {r4, r11, r13, r15} > 0x00000794 0x58006000 STMPLDA r0, {r13, r14 > 0x00000798 0x5c002000 UNDEFINED INSTRUCTION > 0x0000079c 0x58007000 STMPLDA r0, {r12, r13, r14} > > > Becomes: > > > 0x0000072c 0xe59f3088 LDR r3, [r15, #0x88] ; data at > 0x000007bc: 0x5800e000 > 0x00000730 0xe1540003 CMP r4, r3 > 0x00000734 0x1a000009 BNE 0x00000760 ; branch to > label_26 at: 0x00000760 > 0x00000738 0xe3a00501 MOV r0, #0x400000 > 0x0000073c 0xe3a01001 MOV r1, #0x1 > 0x00000740 0xeb000174 BL 0x00000d18 ; call > subroutine_7 at: 0x00000d18 > 0x00000744 0xe3a00501 MOV r0, #0x400000 > 0x00000748 0xe3a01000 MOV r1, #0x0 > 0x0000074c 0xeb000171 BL 0x00000d18 ; call > subroutine_7 at: 0x00000d18 > 0x00000750 0xe3a02000 MOV r2, #0x0 > 0x00000754 0xe59f303c LDR r3, [r15, #0x3c] ; data at > 0x00000798: 0x5c002000 > 0x00000758 0xe58320ac STR r2, [r3, #0xac] ; Base defined > at 0x00000754 > 0x0000075c 0xe89da810 LDMIA r13, {r4, r11, r13, r15} ; Return from > subroutine > > label_26: > 0x00000760 0xe59f3058 LDR r3, [r15, #0x58] ; data at > 0x000007c0: 0x5800f000 > 0x00000764 0xe1540003 CMP r4, r3 > 0x00000768 0x189da810 LDMNEIA r13, {r4, r11, r13, r15} ; Return from > subroutine > > 0x0000076c 0xe3a00502 MOV r0, #0x800000 > 0x00000770 0xe3a01001 MOV r1, #0x1 > 0x00000774 0xeb000167 BL 0x00000d18 ; call > subroutine_7 at: 0x00000d18 > 0x00000778 0xe3a00502 MOV r0, #0x800000 > 0x0000077c 0xe3a01000 MOV r1, #0x0 > 0x00000780 0xeb000164 BL 0x00000d18 ; call > subroutine_7 at: 0x00000d18 > 0x00000784 0xe3a02000 MOV r2, #0x0 > 0x00000788 0xe59f3008 LDR r3, [r15, #0x8] ; data at > 0x00000798: 0x5c002000 > 0x0000078c 0xe58320ac STR r2, [r3, #0xac] ; Base defined > at 0x00000788 > 0x00000790 0xe89da810 LDMIA r13, {r4, r11, r13, r15} ; Return from > subroutine > > 0x00000794 0x58006000 DATA <STMPLDA r0, {r13, r14}> > 0x00000798 0x5c002000 DATA <UNDEFINED INSTRUCTION> > 0x0000079c 0x58007000 DATA <STMPLDA r0, {r12, r13, r14}> > > > Which should soon become: > > > 0x0000072c 0xe59f3088 LDR r3, data_1 <0x5800e000 =? non_buffered APB0 > + GPIO_PORT_P8> > 0x00000730 0xe1540003 CMP r4, r3 > 0x00000734 0x1a000009 BNE label_26 > 0x00000738 0xe3a00501 MOV r0, #0x400000 > 0x0000073c 0xe3a01001 MOV r1, #0x1 > 0x00000740 0xeb000174 BL subroutine_7 > 0x00000744 0xe3a00501 MOV r0, #0x400000 > 0x00000748 0xe3a01000 MOV r1, #0x0 > 0x0000074c 0xeb000171 BL subroutine_7 > 0x00000750 0xe3a02000 MOV r2, #0x0 > 0x00000754 0xe59f303c LDR r3, data_2 <0x5c002000 =? non_buffered APB1 > + SCU> > 0x00000758 0xe58320ac STR r2, [NB_APB1_SCU, SCU_GPIOEMI] > 0x0000075c 0xe89da810 LDMIA r13, {r4, r11, r13, r15} ; Return from > subroutine > > label_26: > 0x00000760 0xe59f3058 LDR r3, data_3 <0x5800f000 =? non_buffered APB0 > + GPIO_PORT_P9> > 0x00000764 0xe1540003 CMP r4, r3 > 0x00000768 0x189da810 LDMNEIA r13, {r4, r11, r13, r15} ; Return from > subroutine > > 0x0000076c 0xe3a00502 MOV r0, #0x800000 > 0x00000770 0xe3a01001 MOV r1, #0x1 > 0x00000774 0xeb000167 BL subroutine_7 > 0x00000778 0xe3a00502 MOV r0, #0x800000 > 0x0000077c 0xe3a01000 MOV r1, #0x0 > 0x00000780 0xeb000164 BL subroutine_7 > 0x00000784 0xe3a02000 MOV r2, #0x0 > 0x00000788 0xe59f3008 LDR r3, data_4 <0x5c002000 =? non_buffered APB1 > + SCU> > 0x0000078c 0xe58320ac STR r2, [NB_APB1_SCU, SCU_GPIOEMI] > 0x00000790 0xe89da810 LDMIA r13, {r4, r11, r13, r15} ; Return from > subroutine > > 0x00000794 0x58006000 DATA <STMPLDA r0, {r13, r14}> > 0x00000798 0x5c002000 DATA <UNDEFINED INSTRUCTION> > 0x0000079c 0x58007000 DATA <STMPLDA r0, {r12, r13, r14}> > > > > > --colin > > > ------------------------------------------------------------------------ > > _______________________________________________ > Openocd-development mailing list > [email protected] > https://lists.berlios.de/mailman/listinfo/openocd-development _______________________________________________ Openocd-development mailing list [email protected] https://lists.berlios.de/mailman/listinfo/openocd-development
