שְׁאֵלָה:
כיצד אוכל להבין מה נצרב ב- Arduino ROM?
asheeshr
2013-03-21 19:30:15 UTC
view on stackexchange narkive permalink

יש לי Arduino Uno Rev3. ברצוני לחלץ ולברר איזה קוד נצרב על גבי ה- ROM של לוח המיקרו-בקר.

  1. כיצד אוכל לחלץ את הקוד מהלוח?
  2. כיצד אוכל להבין את קוד המקור המקורי שנכנס לקובץ ה- hex?
על מנת לשפר את התשובה למטה - האם יש לך פרטים נוספים על מה שאתה מחפש מתוך קוד המקור המקורי?
-1
שְׁלוֹשָׁה תשובות:
mborowczak
2013-03-21 20:18:15 UTC
view on stackexchange narkive permalink

אני אענה על כך בשני חלקים, מספר 1 קל יחסית, מספר 2 בלתי אפשרי לרמה שאני מניח שאתה רוצה.

1. חילוץ קוד ה- hex מה- Uno:

בעוד שהפרטים יהיו תלויים בתיקון ה- Uno שיש לך, תרצה להשתמש ב- avrdude ( זמין עבור לינוקס, יחד עם מערכת ההפעלה X תוכנת Arduino) ופקודה הדומה לבאות שתחלץ את המידע מ- ATmega168:

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

עיין בתיעוד avrdude כדי להתאים לפרמטר החלק -p ספציפי למכשיר שלך (או פרסם אותם ונוכל להמשיך משם).

מכיוון שנראה שיש לך את Uno Rev3, ללוח זה יש ATmega328 ( -pm328 ). המתכנת "מתקשר באמצעות פרוטוקול STK500 המקורי" ולכן דגל פרוטוקול התקשורת -c צריך להיות -cstk500v1 הפקודה שתזדקק לה (בהנחה שה- Uno מחובר / dev / ttyUSB0) מופיע:

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

הבא את השאלה השנייה שלך.

2. המרת קוד Hex למקור המקורי:

מצטער, אבל זה לא אפשרי. אמנם אתה יכול להשיג כמה "hex decililers" ל- c, אבל הג'יבריש שהוחזר, אמנם נכון מבחינה תפקודית, לא יהיה קריא לאנשים (חלקם מסחריים, כמו Hex-Rays, עשויים לתת לך רמה מסוימת של קריאות אנושית).

מכיוון שאתה מתמודד עם מכשיר Atmel אתה יכול לנסות להשתמש בשרשרת הכלים הספציפית avr avr-gcc . באופן ספציפי, תזדקק ל avr-objdump באמצעות ארכיטקטורת הדרוש מסוג MCU -m atmega328 (avr5) ( רשימה מלאה של ארכיטקטורות זמינות, סוגי MCU)

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

זה אפשרי, תלוי בתצורה שלך, כי מתן סוג הארכיטקטורה עצמו (avr5) יספיק:

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

בחלונות עבור ננו ארדואינו, אתה עושה זאת:

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

ואחריו זה:

  "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin \ avrdude" -F "-CC: \ Program קבצים (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "-v -v -patmega328p -carduino -PCOM14 -b57600 -D-Uflash: r: c: \ keep \ program.bin: r  קוד> 

הנה הפלט מהקוד התופס לעיל:

  avrdude2.exe: גרסה 6.0.1, הורכבה בתאריך 30 במרץ 2015 בשעה 14:56:06 זכויות יוצרים ( c) 2000-2005 בריאן דין, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch מערכת התצורה הרחבה היא "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "באמצעות יציאה: COM14 באמצעות מתכנת: arduino עקיפת קצב שידור: 57600 AVR חלק: ATmega328P מחק שבב עיכוב: 9000 ארה"ב PAGEL: PD7 BS2: PC2 RESET disposition: דופק RETRY ייעודי: SCK מצב תוכנית סדרתי: כן מצב תכנית מקבילה: כן פסק זמן: 200 StabDelay: 100 Cmdexe Delay: 25 SyncLoop: 32 Byte Delay: 0 PollIndex: 3 PollValue: 0x53 Memory פרט: חסום עמוד הסקר הנבדק סוג זיכרון מצב עיכוב גודל אינדקס עמוד גודל גודל # עמודים MinW MaxW Readback ----------- ---- ----- ----- ---- - ----- ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 לא 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 כן 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 כיול 0 0 0 0 no 1 0 00 0 0x00 0x00 חתימה 0 0 0 0 no 3 0 00 0 0x00 0x00 סוג מתכנת: Arduino תיאור: Arduino גרסת חומרה: 2 גרסת קושחה: 1.16 מטרה: 0.0 V Varef: 0.0 V מתנד : תקופת SCK כבויה: 0.1 usavrdude2.exe: מכשיר AVR מאותחל ומוכן לקבל הוראות קריאה | ####################### #################################### | 100% 0.02savrdude2.exe: חתימת התקן = 0x1e950favrdude2.exe: safemode: lfuse קורא כ 0avrdude2.exe: safemode: hfuse קורא כ 0avrdude2.exe: safemode: efuse קורא כ 0avrdude2.exe: קריאת זיכרון פלאש: קריאה | ####################### #################################### | 100% 9.49savrdude2.exe: כתיבת קובץ הפלט "c: \ keep \ program.bin" avrdude2.exe: safemode: lfuse קורא כ- 0avrdude2.exe: safemode: hfuse קורא כ- 0avrdude2.exe: safemode: efuse קורא כ- 0avrdude2.exe : safemode: נתיכים בסדר (H: 00, E: 00, L: 00) avrdude2.exe הסתיים. תודה.  

וזה הקובץ שנוצר: -

  C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr \ bin>dir c: \ keep \ program.bin בכונן C אין תווית. מספר סידורי נפח הוא EE8C-DFB9 ספריה של c: \ keep
19/02/2016 19:00 32,670 program.bin 1 קובץ (ים) 32,670 בתים 0 דיר (ים) 41,416,818,688 בתים בחינם  

שמתי את השם "avrdude.exe" ל "avrdude2 .exe "וכתב שים בשם" avrdude.exe "המכנה את האמיתי לאחר שהוציא את מה שהארדואינו עושה כדי לבנות למכשיר היעד שלי.

הפקודה המקורית שהמערכת שלי השתמשה בה לבנות הייתה: -

  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  

עובדה מעניינת: dump ה- hex כלל שברים של קוד אחר שכתבתי ... זה מרמז על כמה שמעניין מאוד בעיות פרטיות ואבטחה לכל מי שמשלוח ארדואינו ששימש בעבר לדברים אחרים ...

אם אתה משתמש בלוחות שאינם ננו, ה- shim שלי היה:

  #! perluse strict; foreach (@ARGV) {$ _ = qq ("$ _") if (/ \ s /)}; # DOS רוצה ציטוטים סביב פרמטרים משובצים בחלל! Foreach (@ARGV) {$ _ = '- v' if ($ _ eq '-q');} # ללכת מילולית במקום שקט שלי $ parms = להצטרף ("", @ ARGV); פתוח (OUT, ">>", "C: \\ keep \\ avrdude.log") || הזהיר "לא יכול לכתוב: $!"; הדפס OUT "\ n". &db_now (). "$ 0 $ פארמים \ n"; סגור (OUT); $ rc = ʻavrdude2.exe $ parms שלי; פתוח (OUT, ">>", "C: \\ keep \\ avrdude.log"); הדפס OUT $ rc; סגור (OUT); הדפס $ rc; # חזור "עכשיו ()" בפורמט ברירת המחדל של mysql. sub db_now {my ($ sec, $ min, $ hour, $ mday, $ mon, $ year, $ wday, $ yday, $ isdst) = localtime (); return sprintf ("% 04d-% 02d-% 02d% 02d:% 02d:% 02d", 1900 + $ year, $ mon + 1, $ mday, $ hour, $ min, $ sec);}  

הידור ל- .exe של חלונות באמצעות:

  perlapp avrdude.pl  

ליהנות!

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

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

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

Alas it does not support AVR.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...