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

Reply via email to