Pitanje:
Kako mogu shvatiti što se sagorijeva na Arduino ROM-u?
asheeshr
2013-03-21 19:30:15 UTC
view on stackexchange narkive permalink

Imam Arduino Uno Rev3. Želio bih izvući i saznati koji je kod zapisan na ROM-u ploče mikrokontrolera.

  1. Kako mogu izvući kôd s ploče?
  2. Kako mogu otkriti izvorni izvorni kod koji je ušao u hex datoteku?
Da bismo poboljšali odgovor u nastavku - imate li još pojedinosti o onome što tražite od izvornog izvornog koda?
-1
Tri odgovori:
#1
+36
mborowczak
2013-03-21 20:18:15 UTC
view on stackexchange narkive permalink

Odgovorit ću na to u dva dijela, # 1 je relativno lagan, # 2 nemoguć do nivoa za koji pretpostavljam da ga želite.

1. Izdvajanje hex koda iz Uno-a:

Iako će pojedinosti ovisiti o reviziji Uno-a koju imate, morat ćete upotrijebiti avrdude ( dostupan za linux, u paketu s OS X Arduino softver) i naredba slična sljedećoj koja bi izvukla podatke iz ATmega168:

  avrdude -F -v -pm168 -cstk500v1 -P / dev / ttyUSB0 -b19200 -D -Uflash: r: program.bin: r  

Pogledajte avrdude dokumentaciju kako biste podudarali parametar dijela -p na vaš uređaj (ili ih objavite i možemo ići od tamo).

Budući da se čini da imate Uno Rev3, ta ploča ima ATmega328 ( -pm328 ). Programer "komunicira korištenjem izvornog protokola STK500", pa bi zastava komunikacijskog protokola -c trebala biti -cstk500v1 naredba koja bi vam trebala (pod pretpostavkom da je Uno povezan s / dev / ttyUSB0) slijedi:

  avrdude -F -v -pm328p -cstk500v1 -P / dev / ttyUSB0 -b19200 -D -Uflash: r: program.bin: r  

Sljedeće vaše drugo pitanje.

2. Pretvaranje hex koda u izvorni izvor:

Žao nam je, ali to nije moguće. Iako možete dobiti malo hex-a do c "dekompajlera", vraćeni promucaji, iako funkcionalno ispravni, neće biti čitljivi ljudima (neki komercijalni, poput Hex-zraka, mogu vam pružiti određenu razinu čitljivosti od ljudi).

Uz to, najbolje je da se pretvorite / pretvorite u hex to Assembly - što će vam samo dati bolju sliku onoga što se događa, ali će i dalje biti (po definiciji) na vrlo niskoj razini. Sva imena varijabli, komentari itd. Bit će uklonjeni, a vi ćete i dalje ostati bez znanja o izvornom programskom sadržaju - samo sastavljeni rezultat.

Budući da imate posla s Atmel uređajem, mogli biste pokušati koristiti avr specifični gcc alatni niz avr-gcc . Točnije, trebat će vam avr-objdump koristeći potrebnu arhitekturu tipa MCU -m atmega328 (avr5) ( Potpuni popis dostupnih arhitektura, tipovi MCU-a)

  avr-objdump -s -m atmega328 program.hex > program.dump  

Također je moguće, ovisno o vašoj konfiguraciji, da pružanje samog tipa arhitekture (avr5) bilo bi dovoljno:

  avr-objdump -s -m avr5 program.hex > program.dump  
#2
+3
Anon Coward
2016-02-19 15:10:31 UTC
view on stackexchange narkive permalink

Na Windowsima za arduino nano radite ovo:

  cd "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin"  

nakon čega slijedi:

  "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin \ avrdude" -F "-CC: \ Program Datoteke (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "-v -v -patmega328p -carduino -PCOM14 -b57600 -D-Uflash: r: c: \ keep \ program.bin: r  

Evo rezultata iz gornjeg hvatanja:

  avrdude2.exe: Verzija 6.0.1, sastavljena 30. ožujka 2015. u 14:56:06 Copyright ( c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch Konfiguracijska datoteka sustava je "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "Korištenje porta: COM14 Korištenje programera: Arduino Nadjačavanje brzine prijenosa: 57600 AVR Dio: ATmega328P Chip Erase kašnjenje: 9000 us PAGEL: PD7 BS2: PC2 RESET dispozicija: namjenski RETRY impuls: SCK serijski način rada programa: da paralelni način rada programa: da Timeout: 200 StabDelay: 100 CmdexeDelay: 25 SyncLoops: 32 ByteDelay: 0 PollIndex: 3 PollValue: 0x53 Memory Pojedinosti: Blokiraj anketu Stranica anketiranog tipa memorije Način odgode Veličina Indx Veličina stranice # Stranice MinW MaxW ReadBack ----------- ---- ----- ----- ---- - ----- ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 ne 1024 4 0 3600 3600 0xff 0xff bljeskalica 65 6 128 0 da 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 ne 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 ne 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 ne 1 0 0 4500 4500 0x00 0x00 zaključavanje 0 0 0 0 ne 1 0 0 4500 4500 0x00 0x00 kalibracija 0 0 0 0 ne 1 0 00 0 0x00 0x00 potpis 0 0 0 0 ne 3 0 00 0 0x00 0x00 Tip programera: Arduino Opis: Arduino Verzija hardvera: 2 Verzija firmvera: 1.16 Vtarget: 0.0 V Varef: 0.0 V Oscilator : Isključeno SCK razdoblje: 0,1 usavrdude2.exe: AVR uređaj inicijaliziran i spreman za prihvaćanje uputaČitanje | #################################################### | 100% 0,02savrdude2.exe: Potpis uređaja = 0x1e950favrdude2.exe: safemode: lfuse čita se kao 0avrdude2.exe: safemode: hfuse čita se kao 0avrdude2.exe: safemode: efuse čita se kao 0avrdude2.exe: čitanje flash memorije: Čitanje | #################################################### | 100% 9.49savrdude2.exe: pisanje izlazne datoteke "c: \ keep \ program.bin" avrdude2.exe: safemode: lfuse čita se kao 0avrdude2.exe: safemode: hfuse čita kao 0avrdude2.exe: safemode: efuse čita kao 0avrdude2.exe : safemode: Osigurači u redu (H: 00, E: 00, L: 00) avrdude2.exe gotovo. Hvala vam.  

i ovo je rezultirajuća datoteka: -

  C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin>dir c: \ keep \ program.bin Volumen na pogonu C nema oznaku. Serijski broj sveska je EE8C-DFB9 Imenik c: \ keep
19.2.2016. 19:00 32.670 program.bin 1 Datoteka (i) 32.670 bajtova 0 Dir (a) 41.416.818.688 bajtova besplatno  

Preimenovao sam svoj "avrdude.exe" u "avrdude2 .exe "i napisao shim pod nazivom" avrdude.exe "koji poziva stvarni nakon što na moj ciljni uređaj izbaci ono što arduino radi za izgradnju.

Izvorna naredba koju je moj sustav koristio bila je: -

  C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin \ avrdude "- CC: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "-v -v -patmega328p -carduino -PCOM14 -b57600 -D -Uflash: w: C: \ Users \ user \ AppData \ Local \ Temp \ build4588201597642272956.tmp / TFT_Baja2.cpp.hex: i  

Zanimljiva činjenica: hex dump sadržavao je fragmente drugog koda koji sam napisao ... to sugerira neke vrlo zanimljive problemi s privatnošću i sigurnošću za svakoga tko isporučuje arduino-e koji su prethodno korišteni za druge stvari ...

Ako koristite ploče koje nisu nano, moj šim je bio:

  #! perluse strict; foreach (@ARGV) {$ _ = qq ("$ _") if (/ \ s /)}; # DOS želi citate oko parametara ugrađenih u svemir! Foreach (@ARGV) {$ _ = '- v' if ($ _ eq '-q');} # idite opširno umjesto silentmy $ parms = join ("", @ ARGV); open (OUT, ">>", "C: \\ keep \\ avrdude.log") || upozoriti "Ne mogu pisati: $!"; ispisati "\ n". &db_now (). "$ 0 $ parms \ n"; zatvori (OUT); moj $ rc = ʻavrdude2.exe $ parms`; otvori (OUT, ">>", "C: \\ keep \\ avrdude.log"); ispis OUT $ rc; close (OUT); print $ rc; # Vrati "now ()" u zadanom mysql formatu.sub db_now {my ($ sec, $ min, $ hour, $ mday, $ mon, $ year, $ wday, $ yday, $ isdst) = localtime (); return sprintf ("% 04d-% 02d-% 02d% 02d:% 02d:% 02d", 1900 + $ godina, $ mon + 1, $ mday, $ sat, $ min, $ sec);}  

kompajlirano u Windows .exe pomoću:

  perlapp avrdude.pl  

uživajte!

#3
  0
user24335
2018-05-11 13:08:12 UTC
view on stackexchange narkive permalink

Postoji način za ponovnu kompilaciju s ovom otvorenom aplikacijom, koja se zove RetDec:

https://github.com/avast-tl/retdec

Nažalost, ne podržava AVR.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...