שְׁאֵלָה:
האם יש דרך להוריד סקיצה מארדואינו?
The Guy with The Hat
2014-02-14 03:23:36 UTC
view on stackexchange narkive permalink

הכנתי סקיצה, אבל אז איבדתי אותה. עם זאת, העליתי אותו לארדואינו לפני שאיבדתי אותו. האם יש דרך שאוכל להחזיר אותה?

http://electronics.stackexchange.com/questions/28211/backup-avr-with-avrdude אבל כמו שאחרים אומרים, זה רק פולט קבצי .hex ולא המקור C שמקורו.
שולי אתר חוצה: http://reverseengineering.stackexchange.com/q/125/189
חָמֵשׁ תשובות:
#1
+37
sachleen
2014-02-14 03:25:48 UTC
view on stackexchange narkive permalink

זה אמור להיות אפשרי כל עוד ביט האבטחה אינו מוגדר. שאלה זו נשאלה ב- EE לפני זמן מה.

האם ניתן לחלץ קוד מלוח ארדואינו?

אך לא תקבל את קוד הארדואינו שכתבת בחזרה. הקוד מורכב להרכבה ותצטרך להמיר את זה בחזרה ל- C בעצמך.

קריאת המשושה הגולמי: http://forum.arduino.cc/index.php?topic=6150.0 ופירוק אוטומטי: 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

תשובה זו אינה עונה ישירות על השאלה, אך עדיין תביא לאותה תוצאה סופית.

IDE של Arduino משתמש בספריות זמניות לאחסון קבצי build, כולל הרישום המקורי וכן ב- HEX וקבצי ביניים.

ב- Mac, אלה נמצאים / var / תיקיות כברירת מחדל, ובמחשב Windows הם נמצאים ב ... \ Local Settings \ Temp \ (שתלוי בגרסת Windows יכול להיות בכמה מקומות).

גיליתי שבמיוחד ב- Windows, קבצי ה- build האלה לא נמחקים כשאתה סוגר את הסקיצה או IDE, כך שהם עשויים להתקיים במחשב שלך הרבה יותר זמן ממה שהיית עושה חשוב.

כמו כן, כברירת מחדל, Crashplan, Backblaze ו- Time Machine מגבים מיקומים אלה, כך שגם אם הם נמחקו, הם עדיין עשויים להיות בגיבוי.

היתרון כאן הוא שתשחזר קוד C ולא ASM.

זה הפיתרון הטוב ביותר IMHO. גם מאוד יצירתי ...
ייתכן שתמצא זאת בספריות `/ tmp /` ב- Linux (ואפילו ב- Mac). 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
#3
+5
TheDoctor
2014-02-14 03:34:32 UTC
view on stackexchange narkive permalink

ניתן להוריד את dump ה- hex של הקובץ, אך אין דרך קלה להשיג את כל קוד ה- C + + וההערות. אם אתה יכול להבין הרכבה, תוכל ליצור מחדש את התוכנית, אך זה ייקח זמן מה. ישנם מפיצים זמינים עבור מכשירים מסוימים, אני לא יודע על ארדואינו.

אין פורקים לארדואינו מכיוון שהוא אינו מסוג MCU. ישנם ** מספר ** מפרקים של ATmega ** (גוגל `מפרק atmega`).
אם יש לך את ההזמנה לארדואינו, כבר יש לך avr-objdump כפי שהוא מגיע עם avr-gcc.
קריאת המשושה הגולמי: http://forum.arduino.cc/index.php?topic=6150.0 ופירוק אוטומטי: 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

אני חושב שיש דרך אחרת לעשות זאת, מבלי לחלץ את הקוד מלוח הארדואינו. הזכר את התאריך שבו אתה יוצר את הסקיצה, וחפש אותה ב- C: \ Users \ User \ AppData \ Local \ Temp \ (לדוגמא: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). אתה יכול למצוא את הקוד שלא נשמר אלא אם כן הוא נמחק על ידי איזו "תוכנית חלל משחררת". בהצלחה!

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

אלא אם מטרתך היא פשוט להעתיק את הקוד הזהה למכשיר אחר, התשובה הפשוטה היא: אין

כפי שצוין בתשובות אחרות, תוכל להפוך את קוד hex במכשיר חזרה לקוד הרכבה.

לדוגמא (לאחר שהעתקת את הקוד מהמכשיר בחזרה לדיסק שלך):

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

הפעל באחד מקבצי ה- bootloader אני מקבל את התוצאות האלה (בחלקן):

  00007e00 <. sec1>: 7e00: 11 24 eor r1, r1 7e02: 84 b7 in r24, 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...