disavr.exehttp://www.mikrocontroller.net/attac...471/disavr.exe verwendet zwar Labels, dafür ist das Ergebnis aber nackter ASM-Code (ohne Quelltext-Bezug).
man tauscht ein Problem gegen das andere...
Weiß schon, nur macht er Streß, wenn man downloaden will. War mir aber wurst, so arg isses ja auch nicht, und wenn du was selber programmierst, weißt du erstens wenigstens, warum du abstürzt, und zweitens, man kann weiterbasteln und sich das Zeugs so herrichten, wie man es braucht.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
disavr.exehttp://www.mikrocontroller.net/attac...471/disavr.exe verwendet zwar Labels, dafür ist das Ergebnis aber nackter ASM-Code (ohne Quelltext-Bezug).
man tauscht ein Problem gegen das andere...
Sieh da, da klappt das runterladen. Danke.
Schau'n wir mal:
Output DisAVR.eXE
Output avr_dis.eXE (Picnicks Hexhacker)Code:; Atmel AVR Disassembler v1.30 ; .cseg .org 0 ; 0000 940C nop ; 0001 002A reti ; 0002 9518 nop ; 0003 0000 reti ; 0004 9518 nop ; 0005 0000 reti ; 0006 9518 nop ; 0007 0000 reti ; 0008 9518 nop ; 0009 0000 reti ; 000A 9518 nop ; 000B 0000 reti ; 000C 9518 nop ; 000D 0000 reti ; 000E 9518 nop ; 000F 0000 reti ; 0010 9518 nop ; 0011 0000 reti ; 0012 9518 nop ; 0013 0000 reti ; 0014 9518 nop ; 0015 0000 reti ; 0016 9518 nop ; 0017 0000 reti ; 0018 9518 nop ; 0019 0000 reti ; 001A 9518 nop ; 001B 0000 reti ; 001C 9518 nop ; 001D 0000 reti ; 001E 9518 nop ; 001F 0000 reti ; 0020 9518 nop ; 0021 0000 reti ; 0022 9518 nop ; 0023 0000 reti ; 0024 9518 nop ; 0025 0000 reti ; 0026 9518 nop ; 0027 0000 reti ; 0028 9518 nop ; 0029 0000 ldi r24, 0x5F ; 002A E58F out SPL, r24 ; 002B BF8D ldi YL, 0x40 ; 002C E4C0 ldi ZL, 0x38 ; 002D E3E8 mov r4, ZL ; 002E 2E4E ldi r24, 0x08 ; 002F E088 out SPH, r24 ; 0030 BF8E ldi YH, 0x08 ; 0031 E0D8 ldi ZH, 0x08 ; 0032 E0F8 mov r5, ZH ; 0033 2E5F ldi ZL, 0xFE ; 0034 EFEE ldi ZH, 0x07 ; 0035 E0F7 ldi XL, 0x60 ; 0036 E6A0 ldi XH, 0x00 ; 0037 E0B0 clr r24 ; 0038 2788 AVR0039: st X+, r24 ; 0039 938D sbiw ZL, 0x01 ; 003A 9731 brne AVR0039 ; 003B F7E9 ldi r24, 0x33 ; 003C E383 out UBRR, r24 ; 003D B989 ldi r24, 0x00 ; 003E E080 out ?0x20?, r24 ; 003F BD80 ldi r24, 0x18 ; 0040 E188 out UCR, r24 ; 0041 B98A clr r6 ; 0042 2466 ldi r24, 0x04 ; 0043 E084 sts 0x0060, r24 ; 0044 9380 0060 ldi r19, 0x0E ; 0046 E03E ldi XL, 0x61 ; 0047 E6A1 ldi XH, 0x00 ; 0048 E0B0 ; 0049 940E nop ; 004A 0052 ldi r19, 0x01 ; 004B E031 ldi XL, 0x60 ; 004C E6A0 ldi XH, 0x00 ; 004D E0B0 ; 004E 940E nop ; 004F 0052 cli ; 0050 94F8 AVR0051: rjmp AVR0051 ; 0051 CFFF AVR0052: ld r24, X+ ; 0052 918D rcall AVR0057 ; 0053 D003 dec r19 ; 0054 953A brne AVR0052 ; 0055 F7E1 ret ; 0056 9508 AVR0057: sbis USR, 5 ; 0057 9B5D rjmp AVR0057 ; 0058 CFFE out UDR, r24 ; 0059 B98C ret ; 005A 9508 AVR005B: sbiw ZL, 0x01 ; 005B 9731 brne AVR005B ; 005C F7F1 ret ; 005D 9508 set ; 005E 9468 bld r6, 2 ; 005F F862 ret ; 0060 9508 clt ; 0061 94E8 bld r6, 2 ; 0062 F862 ret ; 0063 9508 .exit
Ein Kommentar: Nach unbedingten Sprüngen und wenn keine Sprung oder Call daraufhinzeigt, bring ich den Code im Dumpformat.Code:.NOLIST .INCLUDE "M32DEF.INC" .LIST INIT: JMP L_0x0054 INT0ADDR_: RETI .DB 0x00, 0x00 ;.. INT1ADDR_: RETI .DB 0x00, 0x00 ;.. INT2ADDR_: RETI .DB 0x00, 0x00 ;.. OC2ADDR_: RETI .DB 0x00, 0x00 ;.. OVF2ADDR_: RETI .DB 0x00, 0x00 ;.. ICP1ADDR_: RETI .DB 0x00, 0x00 ;.. OC1AADDR_: RETI .DB 0x00, 0x00 ;.. OC1BADDR_: RETI .DB 0x00, 0x00 ;.. OVF1ADDR_: RETI .DB 0x00, 0x00 ;.. OC0ADDR_: RETI .DB 0x00, 0x00 ;.. OVF0ADDR_: RETI .DB 0x00, 0x00 ;.. SPIADDR_: RETI .DB 0x00, 0x00 ;.. URXCADDR_: RETI .DB 0x00, 0x00 ;.. UDREADDR_: RETI .DB 0x00, 0x00 ;.. UTXCADDR_: RETI .DB 0x00, 0x00 ;.. ADCCADDR_: RETI .DB 0x00, 0x00 ;.. ERDYADDR_: RETI .DB 0x00, 0x00 ;.. ACIADDR_: RETI .DB 0x00, 0x00 ;.. TWSIADDR_: RETI .DB 0x00, 0x00 ;.. SPMRADDR_: RETI .DB 0x00, 0x00 ;.. L_0x0054: LDI r24,0x5F OUT SPL,r24 LDI YL,0x40 LDI ZL,0x38 MOV r4,ZL LDI r24,0x08 OUT SPH,r24 LDI YH,0x08 LDI ZH,0x08 MOV r5,ZH LDI ZL,0xFE LDI ZH,0x07 LDI XL,0x60 LDI XH,0x00 CLR r24 L_0x0072: ST X+,r24 SBIW ZL,0x0001 BRNE L_0x0072 LDI r24,0x33 OUT UBRRL,r24 LDI r24,0x00 OUT UBRRH,r24 LDI r24,0x18 OUT UCSRB,r24 CLR r6 LDI r24,0x04 STS 0x0060,r24 LDI r19,0x0E LDI XL,0x61 LDI XH,0x00 CALL L_0x00A4 LDI r19,0x01 LDI XL,0x60 LDI XH,0x00 CALL L_0x00A4 CLI L_0x00A2: RJMP L_0x00A2 L_0x00A4: LD r24,X+ RCALL L_0x00AE DEC r19 BRNE L_0x00A4 RET L_0x00AE: SBIS UCSRA,UDRE RJMP L_0x00AE OUT UDR,r24 RET L_0x00B6: SBIW ZL,0x0001 BRNE L_0x00B6 RET .DB 0x68, 0x94, 0x62, 0xF8, 0x08, 0x95, 0xE8, 0x94 ;h.b..... .DB 0x62, 0xF8, 0x08, 0x95 ;b...
Wenn nämlich Bascom oder sonstwer Text-Literale etc. abspeichert, will ich das auch lesen können.
Aber logo, die Hackerei fängt danach erst an, und Arbeit bleibt es immer.
An einem brauchbaren Source-Bezug bin ich noch am Arbeiten. Ist halt so, daß ich inzwischen etwas Übung habe und das eigentlich fast nicht mehr brauche.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@Tomas Ich häng da eine Zip rein
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@Robert
nicht schlecht, dein Disassembler. Womit hast du das Tool geschrieben ?
Eine Analyse der ISR - Routinen bezüglich der Push und Pop Arien, wäre toll.
Das man auf einen Blick sehen kann, welche Register gesichert werden müssen.
Ich mache es immer "zu Fuss", und das ist recht umständlich, wenn viele Verzweigungen vorhanden sind.
Nun, danke, das ist mit MS VC++ Entenscheiss-Edition gemacht.
Du meinst jetzt eine Analyse durch Ablauftracing ? Das ist halt dann schon knapp am AVR-Simulator dran.
Man sollte mal zusammenfassen, welche Fragestellungen noch nicht durch Simulatoren etc. abgedeckt sind.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
PicNick - tolle Arbeit !!
Habe auch mal die Disassambler-Outputs zwischen avr_dis.eXE und DisAVR.eXE verglichen. Das hornalte AVR-Tool kennt nicht mal den vollen Atmega-Befehlssatz und sagt immer NOP.
Hier ein Code-Schnipsel (Atmega169):
AVR-Studio:
avr_dis.eXE (Picnicks Hexhacker)Code:+00000126: 3007 CPI R16,0x07 +00000127: F410 BRCC PC+0x03 +00000128: 940C0134 JMP 0x00000134 +0000012A: 91800124 LDS R24,0x0124und jetzt kommt Schrott: DisAVR.eXECode:CPI r16,0x07 BRCC L_0x0254 JMP L_0x0268 L_0x0254: LDS r24,0x0124Code:cpi r16, 0x07 ; 0126 3007 brsh AVR012A ; 0127 F410 ; 0128 940C nop ; 0129 0134 AVR012A: lds r24, 0x0124 ; 012A 9180 0124Wäre nicht ein AfterBurner für den AVR-Studio-Ausgabefile einfacher zu programmieren? Immerhin steckt da alles schon drin - es fehlen nur die Labels!An einem brauchbaren Source-Bezug bin ich noch am Arbeiten.
Beispiel:
Code:265: If Len(lcd_textbuffer) >= 7 Then +00000125: 2F08 MOV R16,R24 Copy register +00000126: 3007 CPI R16,0x07 Compare with immediate 265: If Len(lcd_textbuffer) >= 7 Then +00000127: F410 BRCC PC+0x03 Branch if carry cleared +00000128: 940C0134 JMP 0x00000134 Jump 266: Lcd_scrollmode = 1 'Scroll If Text Is Longer Than Display Size +0000012A: 91800124 LDS R24,0x0124 Load direct from data space
Ja, man muß schauen, wo man hin will, was man erreichen will.
Persönlich verwend' ich das Zeugs meistens als Bascom-Inline & Library Generator. d.h. wenn mir was nicht paßt, disassemblier' ich das Programm und verwende umgeschriebene Teile für inline oder library.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
weil wir gerade so schön am disassemblieren sind...
hier ein weiterer AVR-Disassembler - obiger Code mit IDA:
Leider bekommt auch IDA den Bascom-OBJ-Code (Source-Bezug) nicht mit eingebunden.Code:ROM:0125 mov r16, r24 ROM:0126 cpi r16, 7 ROM:0127 brcc loc_12A ROM:0128 jmp loc_134 ROM:012A ; --------------------------------------------------------------------------- ROM:012A ROM:012A loc_12A: ; CODE XREF: sub_112+15j ROM:012A lds r24, unk_100124
@Robert
das kenne ich nicht. Aber heisst VC++ nicht Visual C++ ? Da hättest du doch auch eine visuelle Oberfläche erstellen können.das ist mit MS VC++ Entenscheiss-Edition gemacht.
Das war nur so ein Gedanke.
Ich bin zwar in der DOS Zeit zum PC gekommen, habe mich aber bis heute nicht mit Kommandozeilen Programmen angefreundet.
nicht direkt Tracing, sondern einfach nur alle Sprungziele in der ISR abklappern und die darin benutzten Register auflisten. Um diese dann in Bascom (NoSave) von Hand zu sichern.Du meinst jetzt eine Analyse durch Ablauftracing ?
@Tomas
wie soll es auch ??? Ich kann mich gar nicht mehr erinnern, wann das Tool beim AVRStudio dabei war. Jedenfalls zu einer Zeit, als nicht mal an ATMega's zu denken war und wurde seit dem nie neu rausgebracht.Das hornalte AVR-Tool kennt nicht mal den vollen Atmega-Befehlssatz
Das hängt sicher auch mit nicht gewolltem ReverseEngeneering zusammen.
das wäre mir neu. Ich werde es morgen mal mit dem Code von einem ATMega32, den ich gerade am Wickel habe, probieren.Leider bekommt auch IDA den Bascom-OBJ-Code (Source-Bezug) nicht mit eingebunden.
Welche Version hast du benutzt ?
Lesezeichen