Fråga:
Finns det något sätt att ladda ner en skiss från en Arduino?
The Guy with The Hat
2014-02-14 03:23:36 UTC
view on stackexchange narkive permalink

Jag gjorde en skiss, men sedan tappade jag den. Jag laddade dock upp den till Arduino innan jag tappade den. Finns det något sätt att få tillbaka det?

http://electronics.stackexchange.com/questions/28211/backup-avr-with-avrdude men som andra säger, spottar detta bara .hex-filer, inte den ursprungliga C-källan.
Cross-dupe: http://reverseengineering.stackexchange.com/q/125/189
Fem svar:
#1
+37
sachleen
2014-02-14 03:25:48 UTC
view on stackexchange narkive permalink

Det borde vara möjligt så länge säkerhetsbiten inte är inställd. Denna fråga ställdes på EE för ett tag sedan.

Är det möjligt att extrahera kod från ett arduino-kort?

Men du får inte tillbaka Arduino-koden. Koden sammanställs till montering och du måste själv konvertera den till C.

Läser tillbaka den råa hexen: http://forum.arduino.cc/index.php?topic=6150.0 och automatisk demontering: http://forum.arduino.cc/index.php/topic,46843.0.html
#2
+21
Cybergibbons
2014-03-16 14:43:55 UTC
view on stackexchange narkive permalink

Det här svaret svarar inte direkt på frågan, men kommer ändå att resultera i samma slutresultat.

Arduino IDE använder tillfälliga kataloger för att lagra byggfiler, inklusive originalskiss samt HEX och mellanliggande filer.

På en Mac finns dessa i / var / mappar som standard, och på en Windows-maskin finns de i ... \ Local Settings \ Temp \ (vilket beroende på Windows-versionen kan vara på flera ställen).

Jag har upptäckt att speciellt i Windows raderas inte dessa byggfiler när du stänger skissen eller IDE, så de kan finnas på din dator mycket längre än du skulle tänk.

Som standard säkerhetskopierar även Crashplan, Backblaze och Time Machine dessa platser, så även om de har raderats kan de fortfarande vara i en säkerhetskopia.

fördel här är att du kommer att återställa C-kod snarare än ASM.

Detta är den bästa lösningen IMHO. Mycket kreativt också ...
Du kan hitta detta i `/ tmp /` kataloger på Linux (och till och med Mac). c.f. https://www.arduino.cc/en/Hacking/BuildProcess
Kommentareko från det accepterade svaret: Avläsning av rå hex: http://forum.arduino.cc/index.php?topic=6150.0 och automatisk demontering: http://forum.arduino.cc/index.php/topic, 46843.0.html
#3
+5
TheDoctor
2014-02-14 03:34:32 UTC
view on stackexchange narkive permalink

Du kan ladda ner hex-dumpningen av filen, men det finns inget enkelt sätt att få all C ++ -kod och kommentarer. Om du kan förstå montering kan du återskapa programmet, men det tar en stund. Det finns dissemblers tillgängliga för vissa enheter, jag vet inte om arduino.

Det finns inga isärtagare för arduino, eftersom det inte är en MCU-typ. Det finns ** flera ** ATmega ** demonterare (google `atmega disassembler`).
Om du har arduino-uppmaningen har du redan avr-objdump eftersom det kommer med avr-gcc.
Läser tillbaka den råa hexen: http://forum.arduino.cc/index.php?topic=6150.0 och automatisk demontering: http://forum.arduino.cc/index.php/topic,46843.0.html
#4
+5
Zathura
2015-01-19 14:15:03 UTC
view on stackexchange narkive permalink

Jag tror att det finns ett annat sätt att göra detta utan att extrahera koden från Arduino-kortet. Kom ihåg datumet då du skapade skissen och leta efter den i C: \ Users \ User \ AppData \ Local \ Temp \ (Till exempel: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Du kunde hitta din osparade kod om den inte raderades av något "frigörande rymdprogram". Lycka till!

#5
+4
Nick Gammon
2015-07-03 04:34:30 UTC
view on stackexchange narkive permalink

Om inte ditt mål är att helt enkelt kopiera identisk kod till en annan enhet, är det enkla svaret: ingen

Som påpekats i andra svar kan du vrida hex-kod på enheten tillbaka till assembler-kod.

Till exempel (när du har kopierat koden från enheten tillbaka till din disk):

  avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex  

Kör på en av bootloader-filerna Jag får dessa resultat (delvis):

  00007e00 <. sek1>: 7e00: 11 24 eor r1, r1 7e02: 84 b7 i r24, 0x34; 52 7e04: 14 vara ute 0x34, r1; 52 7e06: 81 ff sbrs r24, 1 7e08: f0 d0 rcall. + 480; 0x7fea 7e0a: 85 e0 ldi r24, 0x05; 5 7e0c: 80 93 81 00 m 0x0081, r24 7e10: 82 e0 ldi r24, 0x02; 2 7e12: 80 93 c0 ​​00 m 0x00C0, r24 7e16: 88 e1 ldi r24, 0x18; 24 7e18: 80 93 c1 00 m 0x00C1, r24 7e1c: 86 e0 ldi r24, 0x06; 6 7e1e: 80 93 c2 00 m 0x00C2, r24 7e22: 80 e1 ldi r24, 0x10; 16 7e24: 80 93 c4 00 m 0x00C4, r24 7e28: 8e e0 ldi r24, 0x0E; 14 7e2a: c9 d0 rcall. + 402; 0x7fbe 7e2c: 25 9a sbi 0x04, 5; 4  

Som du kan se, inte särskilt användbart för att återge vad din skiss gjorde. Det kommer sannolikt att finnas ett av två scenarier:

  • Din skiss var kort, i vilket fall du, efter veckors arbete, kan förvandla monteringskoden till C
  • Din skiss var lång, i vilket fall det skulle vara praktiskt taget omöjligt att göra om till C

I fallet "kort skiss" är det bättre att du bara skriver om från början. Det skulle vara snabbare, nästan säkert. I fallet "lång skiss" - det är bara inte värt det. Inget av variabelnamnen bevaras och hur kompilatorn optimerar koden, även strukturen för koden skulle vara svår att bestämma.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...