題:
有什麼方法可以從Arduino下載草圖嗎?
The Guy with The Hat
2014-02-14 03:23:36 UTC
view on stackexchange narkive permalink

我做了一個草圖,但是後來丟失了。但是,我在丟失之前將其上傳到了Arduino。有什麼辦法可以找回我嗎?

http://electronics.stackexchange.com/questions/28211/backup-avr-with-avrdude,但是正如其他人所說,這只會吐出.hex文件,而不是原始的C源代碼。
跨站點欺騙:http://reverseengineering.stackexchange.com/q/125/189
五 答案:
sachleen
2014-02-14 03:25:48 UTC
view on stackexchange narkive permalink

只要沒有設置安全位,就應該有可能。不久前在EE上問了這個問題。

是否可以從arduino板上提取代碼?

但是您不會得到寫回的Arduino代碼。該代碼被編譯為彙編,您必須自己將其轉換回C。

讀回原始十六進制:http://forum.arduino.cc/index.php?topic=6150.0和自動反彙編:http://forum.arduino.cc/index.php/topic,46843.0.html
Cybergibbons
2014-03-16 14:43:55 UTC
view on stackexchange narkive permalink

此答案不能直接回答問題,但仍會得到相同的最終結果。

Arduino IDE使用臨時目錄存儲構建文件,包括原始草圖以及十六進制和中間文件。

在Mac上,默認情況下這些文件位於/ var / folders中,而在Windows計算機上,這些文件則位於…\ Local Settings \ Temp \(取決於Windows的版本)。我發現特別是在Windows中,當關閉草圖或IDE時這些構建文件不會被刪除,因此它們在計算機上的存在時間可能會比您更長。

默認情況下,Crashplan,Backblaze和Time Machine也會備份這些位置,因此,即使它們已被刪除,它們也可能仍在備份中。

這樣做的好處是您將恢復C代碼而不是ASM。

這是恕我直言的最佳解決方案。也很有創意...
您可以在Linux(甚至Mac)上的`/ tmp /`目錄中找到它。 c.f. https://www.arduino.cc/en/Hacking/BuildProcess
評論從已接受的答案中回顯:回讀原始十六進制:http://forum.arduino.cc/index.php?topic=6150.0和自動反彙編:http://forum.arduino.cc/index.php/topic, 46843.0.html
TheDoctor
2014-02-14 03:34:32 UTC
view on stackexchange narkive permalink

您可以下載文件的十六進制轉儲,但是沒有簡單的方法來獲取所有C ++代碼和註釋。如果您能理解彙編,則可以重新創建該程序,但這將花費一些時間。有些設備有拆解器,我不知道arduino。

arduino沒有反彙編程序,因為它不是MCU類型。 **有多個** ATmega **反彙編程序(Google`atmega disassembler`)。
如果您具有arduino環境,那麼您已經有了avr-gcc附帶的avr-objdump。
讀回原始十六進制:http://forum.arduino.cc/index.php?topic=6150.0和自動反彙編:http://forum.arduino.cc/index.php/topic,46843.0.html
Zathura
2015-01-19 14:15:03 UTC
view on stackexchange narkive permalink

我認為還有另一種方法,而無需從Arduino板上提取代碼。修改創建草圖的日期,然後在C:\ Users \ User \ AppData \ Local \ Temp \中查找(例如:C:\ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a)。除非某些“釋放空間程序”刪除了未保存的代碼,否則您可以找到它。祝您好運!

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

除非您的目標是將相同的代碼簡單地複製到另一台設備,否則簡單的答案是:

正如其他答案中指出的那樣,您可以將將設備上的十六進制代碼重新轉換為彙編代碼。

例如(一旦您已將代碼從設備複製回磁盤上):

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

在其中一個引導加載程序文件上運行,我得到以下結果(部分):

  00007e00 <。 sec1>:7e00:11 24 eor r1,r1 7e02:r24中的84 b7,0x34; 52 7e04:14退出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  

如您所見,對於再現草圖所做的工作並沒有特別的幫助。可能是以下兩種情況之一:

  • 您的草圖很短,在這種情況下,經過數週的工作,您可能會將彙編器代碼重新轉換為C
  • 您的草圖很長,在這種情況下,幾乎不可能將其轉換回C

在“簡短草圖”情況下,最好從頭開始重寫。幾乎可以肯定,那會更快。在“長草圖”情況下-這是不值得的。沒有保留任何變量名,並且編譯器優化代碼的方式甚至代碼的結構都難以確定。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...