Witam.
ok, mam zdeassemblowany kawałek kodu w avr-studio.
Akurat, że studio to potrafi ja wiedziałem wcześniej, teraz mam pytanie: a jak ten kod poprawić?
nie prościej pracować na czymś takim?
.cseg
.org 0
avr0000: rjmp avr0013 ; 0000 C012 0000 '................'
rjmp avr0019 ; 0001 C017 0002 '................'
rjmp avr0019 ; 0002 C016 0004 '................'
rjmp avr0019 ; 0003 C015 0006 '................'
rjmp avr0019 ; 0004 C014 0008 '................'
rjmp avr0019 ; 0005 C013 000A '................'
rjmp avr0019 ; 0006 C012 000C '................'
rjmp avr0019 ; 0007 C011 000E '................'
rjmp avr0019 ; 0008 C010 0010 '................'
rjmp avr0019 ; 0009 C00F 0012 '................'
rjmp avr0019 ; 000A C00E 0014 '................'
rjmp avr0019 ; 000B C00D 0016 '................'
rjmp avr0019 ; 000C C00C 0018 '...............$'
rjmp avr0019 ; 000D C00B 001A '.............$..'
rjmp avr0019 ; 000E C00A 001C '...........$....'
rjmp avr0019 ; 000F C009 001E '.........$......'
rjmp avr0019 ; 0010 C008 0020 '.......$........'
rjmp avr0019 ; 0011 C007 0022 '.....$..........'
rjmp avr0019 ; 0012 C006 0024 '...$............'
avr0013: clr r1 ; 0013 2411 0026 '.$..............'
out SREG, r1 ; 0014 BE1F 0028 '................'
ldi YL, 0xDF ; 0015 EDCF 002A '................'
out SPL, YL ; 0016 BFCD 002C '................'
rcall avr001A ; 0017 D002 002E '................'
rjmp avr001D ; 0018 C004 0030 '................'
avr0019: rjmp avr0000 ; 0019 CFE6 0032 '................'
avr001A: ldi r24, 0x00 ; 001A E080 0034 '................'
ldi r25, 0x00 ; 001B E090 0036 '................'
ret ; 001C 9508 0038 '................'
avr001D: cli ; 001D 94F8 003A '................'
avr001E: rjmp avr001E ; 001E CFFF 003C '................'
.exit
Może szału nie ma, część nazw rejestrów trzeba poprawiać lecz można na takim kodzie coś zdziałać.
Wczytuje się do avr studio, oczywiście jak ktoś miesza dane i kod będzie lekki chaos.
Podam jeszcze drugą metodę, do której potrzebne jest tylko AVR-STUDIO
są to tylko DWA polecenia w CMD (wiersz poleceń)
avr-objcopy -I ihex -O elf32-avr "led.hex" "program.elf"
a następnie:
avr-objdump -D "program.elf" > "zrodlo.txt"
efekt tego zabiegu jest następujący:
program.elf: file format elf32-avr
Disassembly of section .sec1:
00000000 <.sec1>:
0: 12 c0 rjmp .+36 ; 0x26
2: 17 c0 rjmp .+46 ; 0x32
4: 16 c0 rjmp .+44 ; 0x32
6: 15 c0 rjmp .+42 ; 0x32
8: 14 c0 rjmp .+40 ; 0x32
a: 13 c0 rjmp .+38 ; 0x32
c: 12 c0 rjmp .+36 ; 0x32
e: 11 c0 rjmp .+34 ; 0x32
10: 10 c0 rjmp .+32 ; 0x32
12: 0f c0 rjmp .+30 ; 0x32
14: 0e c0 rjmp .+28 ; 0x32
16: 0d c0 rjmp .+26 ; 0x32
18: 0c c0 rjmp .+24 ; 0x32
1a: 0b c0 rjmp .+22 ; 0x32
1c: 0a c0 rjmp .+20 ; 0x32
1e: 09 c0 rjmp .+18 ; 0x32
20: 08 c0 rjmp .+16 ; 0x32
22: 07 c0 rjmp .+14 ; 0x32
24: 06 c0 rjmp .+12 ; 0x32
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf ed ldi r28, 0xDF ; 223
2c: cd bf out 0x3d, r28 ; 61
2e: 02 d0 rcall .+4 ; 0x34
30: 04 c0 rjmp .+8 ; 0x3a
32: e6 cf rjmp .-52 ; 0x0
34: 80 e0 ldi r24, 0x00 ; 0
36: 90 e0 ldi r25, 0x00 ; 0
38: 08 95 ret
3a: f8 94 cli
3c: ff cf rjmp .-2 ; 0x3c
Ten kod także można edytować (niestety trzeba go przepuścić np. przez arkusz kalkulacyjny aby pozbyć się pierwszych kolumn)jednak trzeba przeliczać skoki.
Podsumowując: to jest konwersja do asm(pierwsza dobra, druga dla zdesperowanych) , a nie tylko podgląd w deassembler'ze.
Pozdrawiam i życzę udanych deasemblacji.