ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
אורח · ·
 

הודעה פורסם: 16/10/2014 - 15:07
נושא ההודעה: assembly (שפת ASM ל x86) ,זקוק לכלי decompiler ל elf ,

שלום חברים ,
אני מתכנת חדש ב אסמבלי , אני כותב קוד ב as (אסמבלר עם gnu חלק מ gcc)
הייתי רוצה כלי decompiler שממיר לי מקוד elf בינארי לקוד מכונה .
(הכוונה אני רוצה לדעת איך הדברים נעשים ב אסמבלי)

נניח קימפלתי קוד של c++


char year[] ;
cin >> year;

אני רוצה לדעת איך קולטים string לתוך מערך (אבל לדעת את זה באסמבלי)

יש כלי ללינוקס שמתרגם elf (בינארי של לינוקס) לקוד x86 ?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 16/10/2014 - 15:44
נושא ההודעה:

אתה יכול להשתמש בobjdump:
קוד:
objdump -d <file>
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 16/10/2014 - 15:50
נושא ההודעה: האורח הראשון

אם את רוצה כלי נוח יותר אתה יכול להשתמש בדיבאגר של qtcreator (שהוא בעצם מעטפת גרפית של gdb)
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 18/10/2014 - 15:33
נושא ההודעה:

אם אתה מתחיל, אל תתחיל מפירוק ++C.
תתחיל מפירוק של C.

בנוסף, אל תתחיל מקבצי ELF שלמים, תתחיל מפירוק קובץ o שקומפלה עליו פונקציה בודדת.

קובץ ELF שנבנה מ-++C, גם עם קוד טריוויאלי יחסית כמו זה שהצגת, יכלול המון overhead כשהוא בצורת assembly.

בנוסף, עליך לוודא שהקובץ לא קומפל עם אופטימיזציה, אלא במצב debug או 0 O-, אחרת ההתאמה בין קוד assembly שתקבל, לקוד C שכתבת, תהיה נמוכה יחסית (תתפלא כמה טריקים הקומפיילר יודע!).

רק בשביל לסבר את האוזן:
הקומפיילר יודע "לשטח לולאות" - להעלים לולאות ופשוט לחזור על הקוד שבתוכן, להעיף חלקים בקוד שהוא חושב שהם חסרי תועלת, ולהחליף סדר פעולות אם הדבר לא משנה את התוצאה.

לכן, אם אתה רוצה ללמוד איך הופכים קוד בשפה עילית לקוד assembly, תתחיל בקטנה מפונקציות בודדות, בשפת C וללא אופטימיזציה.

אגב, אם תרצה, אתה יכול אפילו להימנע מ-decompile, ולבקש מ-gcc לעשות את התרגום ל-assembly בלבד, ע"י שימוש בפרמטר S-
כך תקבל ישירות קוד assembly מקוד C (או ++C אם אתה מתעקש).

בהצלחה!

--לב
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 19/10/2014 - 09:42
נושא ההודעה:

מעולה!
אפשר דוגמאות לאופטימיזציות נוספות?

Anonymous :
אם אתה מתחיל, אל תתחיל מפירוק ++C.
תתחיל מפירוק של C.

בנוסף, אל תתחיל מקבצי ELF שלמים, תתחיל מפירוק קובץ o שקומפלה עליו פונקציה בודדת.

קובץ ELF שנבנה מ-++C, גם עם קוד טריוויאלי יחסית כמו זה שהצגת, יכלול המון overhead כשהוא בצורת assembly.

בנוסף, עליך לוודא שהקובץ לא קומפל עם אופטימיזציה, אלא במצב debug או 0 O-, אחרת ההתאמה בין קוד assembly שתקבל, לקוד C שכתבת, תהיה נמוכה יחסית (תתפלא כמה טריקים הקומפיילר יודע!).

רק בשביל לסבר את האוזן:
הקומפיילר יודע "לשטח לולאות" - להעלים לולאות ופשוט לחזור על הקוד שבתוכן, להעיף חלקים בקוד שהוא חושב שהם חסרי תועלת, ולהחליף סדר פעולות אם הדבר לא משנה את התוצאה.

לכן, אם אתה רוצה ללמוד איך הופכים קוד בשפה עילית לקוד assembly, תתחיל בקטנה מפונקציות בודדות, בשפת C וללא אופטימיזציה.

אגב, אם תרצה, אתה יכול אפילו להימנע מ-decompile, ולבקש מ-gcc לעשות את התרגום ל-assembly בלבד, ע"י שימוש בפרמטר S-
כך תקבל ישירות קוד assembly מקוד C (או ++C אם אתה מתעקש).

בהצלחה!

--לב
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
elicnאורח · ·
 

הודעה פורסם: 19/10/2014 - 18:39
נושא ההודעה:

Anonymous :
מעולה!
אפשר דוגמאות לאופטימיזציות נוספות?


    השמטת ה-Frame Pointer שמקשה על קבלת Frame בדיבאגר. ניתן להמנע מכך ע"י ציון -fno-omit-framepointer
    במידה ופונקציה קטנה מאוד, או נקראת רק פעם אחת הקומפיילר עלול לשים את קוד הפונקציה כולו במקום בו קראו לה (Inlining). ניתן להמנע מכך ע"י ציון -fno-inline
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 21/10/2014 - 10:44
נושא ההודעה:

יש הסבר מלא על האופטימיזציות בהן תומך GCC בתיעוד שלו:
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

--לב
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח
  2. אורח
  3. אורח
  4. אורח
  5. אורח
  6. אורח [elicn]
  7. אורח