Soru:
Bir Arduino ROM'unda neyin yazıldığını nasıl anlarım?
asheeshr
2013-03-21 19:30:15 UTC
view on stackexchange narkive permalink

Arduino Uno Rev3'üm var. Mikro denetleyici kartının ROM'unda hangi kodun yazıldığını öğrenmek ve öğrenmek istiyorum.

  1. Panodan kodu nasıl çıkarırım?
  2. Hex dosyaya giren orijinal kaynak kodunu nasıl bulabilirim?
Aşağıdaki yanıtı iyileştirmek için - orijinal kaynak koddan aradığınız şey hakkında daha fazla ayrıntı var mı?
@borowcm Temel işleyiş. Cevabınız bunu kapsıyor. Diğerlerinin cevaplayabileceği / ekleyebileceği için bunu en iyi cevap olarak seçmedim.
üç yanıtlar:
#1
+36
mborowczak
2013-03-21 20:18:15 UTC
view on stackexchange narkive permalink

Bunu iki kısımda cevaplayacağım, # 1 nispeten kolay, # 2 istediğini varsaydığım seviyeye göre imkansız.

1. Onaltılı kodu Uno'dan çıkarma:

Özellikler sahip olduğunuz Uno'nun revizyonuna bağlı olsa da, avrdude ( Linux için mevcuttur, OS X ile birlikte gelir) kullanmak isteyeceksiniz. Arduino yazılımı) ve aşağıdakine benzer bir komut, bilgiyi bir ATmega168'den alacaktır:

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

-p belirli parça parametresiyle eşleştirmek için avrdude belgelerine bakın cihazınıza gönderin (veya gönderin ve buradan gidebiliriz).

Görünüşe göre Uno Rev3 'e sahip olduğunuzdan, bu kartın bir ATmega328 ( -pm328 ). Programcı "orijinal STK500 protokolünü kullanarak iletişim kurar" bu nedenle iletişim protokolü bayrağı -c ihtiyacınız olan komut -cstk500v1 olmalıdır (Uno'nun / dev / ttyUSB0) aşağıdaki gibidir:

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

Sıradaki ikinci sorunuz.

2. Hex kodunu orijinal kaynağa dönüştürme:

Üzgünüz, ama bu mümkün değil. Bazı "c" kod çözücülere "altıgen oluşturabilirken, işlevsel olarak doğru olsa da döndürülen anlamsız ifadeler, insan tarafından okunamayacaktır (Hex-Rays gibi bazı ticari olanlar, size insan tarafından okunabilirlik düzeyi sağlayabilir).

Bununla birlikte, en iyisi onaltılık çevirici / çevirici olacaktır - bu size neler olduğuna dair daha iyi bir fikir verecektir, ancak yine de (tanım gereği) çok düşük seviyede olacaktır. Tüm değişken isimleri, yorumlar vb. Çıkarılır ve yine de orijinal kaynak program içeriğini - sadece derlenmiş sonucu bilmiyorsunuz.

Bir Atmel cihazıyla uğraştığınız için avr'ye özgü gcc araç zincirini avr-gcc kullanmayı deneyebilirsiniz . Özellikle, gerekli MCU türü bayrağı -m atmega328 (avr5) mimarisini ( Kullanılabilir Mimarilerin Tam Listesi, MCU türleri ) kullanan avr-objdump 'a ihtiyacınız olacak a>)

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

Yapılandırmanıza bağlı olarak mimari türünün kendisinin (avr5) sağlanması yeterli olacaktır:

  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

Bir arduino nano için Windows'ta şunu yaparsınız:

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

ardından şu:

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

Yukarıdaki kapma kodunun çıktısı:

  avrdude2.exe: Sürüm 6.0.1, 30 Mart 2015 tarihinde 14:56:06 derlendi. Telif hakkı ( c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch Sistemi geniş yapılandırma dosyası "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "Bağlantı Noktasını Kullanma: COM14 Programlayıcıyı Kullanma: arduino Baud Hızı: 57600 AVR Parça: ATmega328P Çip Silme gecikme: 9000 us PAGEL: PD7 BS2: PC2 RESET dispozisyonu: özel RETRY puls: SCK seri program modu: evet paralel program modu: evet Zaman Aşımı: 200 StabDelay: 100 CmdexeDelay: 25 SyncLoops: 32 ByteDelay: 0 PollIndex: 3 PollValue: 0x53 Memory Detay: Blok Anket Sayfası Sorgulu Bellek Tipi Mod Gecikme Boyutu Indx Sayfalanmış Boyut Boyut #Sayfa MinW MaksW ReadBack ----------- ---- ----- ----- ---- - ----- ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 hayır 1024 4 0 3600 3600 0xff 0xff flaş 65 6 128 0 evet 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 hayır 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 hayır 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 hayır 1 0 0 4500 4500 0x00 0x00 kilit 0 0 0 0 hayır 1 0 0 4500 4500 0x00 0x00 kalibrasyon 0 0 0 0 hayır 1 0 00 0 0x00 0x00 imza 0 0 0 0 hayır 3 0 00 0 0x00 0x00 Programcı Tipi: Arduino Açıklama: Arduino Donanım Sürümü: 2 Donanım Yazılımı Sürümü: 1.16 Hedef: 0.0 V Varef: 0.0 V Osilatör : Kapalı SCK dönemi: 0.1 usavrdude2.exe: AVR cihazı başlatıldı ve talimatları kabul etmeye hazır ##################################################### | 100% 0.02savrdude2.exe: Cihaz imzası = 0x1e950favrdude2.exe: safemode: lfuse 0avrdude2.exe olarak okur: safemode: hfuse 0avrdude2.exe olarak okur: safemode: efuse 0avrdude2.exe olarak okur: flash bellek okuma: Okuma | ##################################################### | % 100 9.49savrdude2.exe: çıktı dosyası "c: \ keep \ program.bin" yazılıyor avrdude2.exe: safemode: lfuse, 0avrdude2.exe olarak okur: safemode: hfuse, 0avrdude2.exe olarak okur: safemode: efuse, 0avrdude2.exe olarak okur : safemode: Sigortalar TAMAM (H: 00, E: 00, L: 00) avrdude2.exe bitti. Teşekkürler.  

ve ortaya çıkan dosya şu: -

  C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin>dir c: \ keep \ program.bin C sürücüsündeki birimin etiketi yoktur. Birim Seri Numarası EE8C-DFB9'dur c: \ keep
19/02/2016 07:00 PM 32,670 program.bin 1 Dosya 32.670 bayt 0 Dir (ler) 41.416.818.688 bayt ücretsiz  

"avrdude.exe" yi "avrdude2" olarak yeniden adlandırdım .exe "ve" avrdude.exe "adında bir shim yazdı ve arduino'nun hedef cihazıma inşa etmek için ne yaptığını çıkardıktan sonra gerçek olanı çağırdı.

Sistemimin oluşturmak için kullandığı orijinal komut şuydu: -

  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  

İlginç gerçek: onaltılık döküm, yazdığım diğer kodların parçalarını içeriyordu ... bu, bazı çok ilginç Daha önce başka şeyler için kullanılmış olan arduino'ları gönderen herkes için gizlilik ve güvenlik sorunları ...

Nano dışında bir kart kullanıyorsanız, takozum şöyleydi:

  #! perluse katı; foreach (@ARGV) {$ _ = qq ("$ _") if (/ \ s /)}; # DOS Uzayda gömülü parametreler hakkında alıntılar istiyor! Foreach (@ARGV) {$ _ = '- v' if ($ _ eq '-q');} # sessiz $ parms yerine ayrıntılı git $ parms = join ("", @ ARGV); open (OUT, ">>", "C: \\ keep \\ avrdude.log") || uyarı "Yazılamıyor: $!"; OUT "\ n" yazdır. &db_now (). "$ 0 $ parms \ n"; kapat (OUT); $ rc = ʻavrdude2.exe $ parms`; aç (OUT, ">>", "C: \\ keep \\ avrdude.log"); yazdır $ rc; kapat (OUT); yazdır $ rc; # mysql varsayılan biçiminde "şimdi ()" döndür. sub db_now {my ($ sn, $ min, $ saat, $ mgün, $ mon, $ yıl, $ wday, $ yday, $ isdst) = yerel zaman (); dönüş sprintf ("% 04d-% 02d-% 02d% 02d:% 02d:% 02d", 1900 + $ yıl, $ pazartesi + 1, $ mgün, $ saat, $ dak, $ saniye);}  

aşağıdakileri kullanarak bir windows .exe olarak derlendi:

  perlapp avrdude.pl  

keyfini çıkarın!

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

RetDec adlı bu açık kaynaklı uygulamayla yeniden derlemenin bir yolu var:

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

Ne yazık ki AVR'yi desteklemiyor.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...