Vraag:
Is er een manier om een ​​schets van een Arduino te downloaden?
The Guy with The Hat
2014-02-14 03:23:36 UTC
view on stackexchange narkive permalink

Ik heb een schets gemaakt, maar toen ben ik hem kwijtgeraakt. Ik heb het echter geüpload naar de Arduino voordat ik het verloor. Is er een manier om het terug te krijgen?

http://electronics.stackexchange.com/questions/28211/backup-avr-with-avrdude maar zoals anderen zeggen, spuugt dit alleen .hex-bestanden uit, niet de oorspronkelijke C-bron.
Cross site dupe: http://reverseengineering.stackexchange.com/q/125/189
Vijf antwoorden:
#1
+37
sachleen
2014-02-14 03:25:48 UTC
view on stackexchange narkive permalink

Het zou mogelijk moeten zijn zolang het beveiligingsbit niet is ingesteld. Deze vraag is een tijdje geleden op EE gesteld.

Is het mogelijk om code van een Arduino-bord te extraheren?

Maar je krijgt de Arduino-code die je hebt geschreven niet terug. De code wordt in assembly gecompileerd en je zult dat zelf weer naar C moeten converteren.

De ruwe hexadecimaal teruglezen: http://forum.arduino.cc/index.php?topic=6150.0 en automatische demontage: 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

Dit antwoord geeft geen direct antwoord op de vraag, maar zal toch hetzelfde eindresultaat opleveren.

De Arduino IDE gebruikt tijdelijke mappen om buildbestanden op te slaan, inclusief de originele sketch en de HEX en tussenliggende bestanden.

Op een Mac bevinden deze zich standaard in / var / mappen, en op een Windows-computer bevinden ze zich in ... \ Local Settings \ Temp \ (wat afhankelijk van de versie van Windows zou kunnen zijn op verschillende plaatsen).

Ik heb gemerkt dat, vooral in Windows, deze build-bestanden niet worden verwijderd wanneer je de sketch of IDE sluit, dus ze kunnen veel langer op je computer staan ​​dan je zou doen Denk eraan.

Ook maken Crashplan, Backblaze en Time Machine standaard een back-up van deze locaties, dus zelfs als ze zijn verwijderd, kunnen ze zich nog steeds in een back-up bevinden.

De Het voordeel hiervan is dat u C-code herstelt in plaats van ASM.

Dit is de beste oplossing IMHO. Heel creatief ook ...
U kunt dit vinden in de `/ tmp /` -mappen op Linux (en zelfs Mac). c.f. https://www.arduino.cc/en/Hacking/BuildProcess
Reageer-echo van het geaccepteerde antwoord: de ruwe hexadecimaal teruglezen: http://forum.arduino.cc/index.php?topic=6150.0 en automatische demontage: 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

U kunt de hexadecimale dump van het bestand downloaden, maar er is geen gemakkelijke manier om alle C ++ - code en commentaren op te halen. Als je de montage begrijpt, zou je het programma opnieuw kunnen maken, maar dat zou even duren. Er zijn demontageprogramma's beschikbaar voor sommige apparaten, ik weet het niet van arduino.

Er zijn geen disassemblers voor arduino, omdat het geen MCU-type is. Er zijn ** meerdere ** ATmega ** demontagesystemen (google `atmega disassembler`).
Als je de arduino-omgeving hebt, heb je al avr-objdump zoals het wordt geleverd met avr-gcc.
De ruwe hexadecimaal teruglezen: http://forum.arduino.cc/index.php?topic=6150.0 en automatische demontage: 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

Ik denk dat er een andere manier is om dit te doen, zonder de code van het Arduino-bord te extraheren. Bereken de datum waarop u de schets heeft gemaakt en zoek deze in C: \ Users \ User \ AppData \ Local \ Temp \ (bijvoorbeeld: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). U zou uw niet-opgeslagen code kunnen vinden, tenzij deze werd verwijderd door een of ander "ruimteprogramma". Veel succes!

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

Tenzij het uw doel is om simpelweg de identieke code naar een ander apparaat te kopiëren, is het simpele antwoord: nee

Zoals in andere antwoorden is aangegeven, kunt u de hex-code op het apparaat terug in assembler-code.

Bijvoorbeeld (nadat u de code van het apparaat terug naar uw schijf hebt gekopieerd):

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

Draai op een van de bootloader-bestanden. Ik krijg deze resultaten (gedeeltelijk):

  00007e00 <. sec1>: 7e00: 11 24 eor r1, r1 7e02: 84 b7 in r24, 0x34; 52 7e04: 14 uit 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 sts 0x0081, r24 7e10: 82 e0 ldi r24, 0x02; 2 7e12: 80 93 c0 ​​00 sts 0x00C0, r24 7e16: 88 e1 ldi r24, 0x18; 24 7e18: 80 93 c1 00 sts 0x00C1, r24 7e1c: 86 e0 ldi r24, 0x06; 6 7e1e: 80 93 c2 00 sts 0x00C2, r24 7e22: 80 e1 ldi r24, 0x10; 16 7e24: 80 93 c4 00 sts 0x00C4, r24 7e28: 8e e0 ldi r24, 0x0E; 14 7e2a: c9 d0 rcall. + 402; 0x7fbe 7e2c: 25 9a sbi 0x04, 5; 4  

Zoals u kunt zien, niet bijzonder nuttig om te reproduceren wat uw schets deed. Er zijn waarschijnlijk twee scenario's:

  • Je sketch was kort, in welk geval je, na weken van werk, de assembler code weer in C zou kunnen veranderen
  • Je schets was lang, in welk geval het vrijwel onmogelijk zou zijn om er weer C van te maken

In het geval van "korte schets" kunt u beter helemaal opnieuw schrijven. Dat zou vrijwel zeker sneller zijn. In het geval van "lange schets" - het is het gewoon niet waard. Geen van de variabelenamen blijft behouden en de manier waarop de compiler de code optimaliseert, zelfs de structuur van de code, zou moeilijk te bepalen zijn.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...