שאלה על elf

שאלה על elf

אני מצרפת את הקובץ
ורציתי רק לוודא שאני מבינה נכון.

שואלים אותי כמה sections יש בקובץ?
לפי הבנתי סקשינים זה כל הדברים המוגדרים עם ה- typedef זה נכון? במידה ולא, מזה sections?

בנוסף, השאלה היא איפה ה- entry point ומה ה- value שלו?
אפשר בבקשה הסבר לזה? איפה זה נמצא בקובץ?

ודבר נוסף-
מה ה- size של ה- .text סקשין?
איך אני יכולה לדעת את זה? איפה רואים את זה?

תודה רבה!!
 

Guy Yafe

New member
לא צירפת שום קובץ

בכל מקרה, את תמיד יכולה להשתמש בפקודה readelf כדי לנתח את הקובץ
 
ושוב, ניסיון

הוא לא נותן לי לצרף את הקובץ כקובץ h
שיניתי את הסיומת ל- pdf כדי לצרף אותו לכאן..
כשאתם פותחים אותו תשנו בבקשה את הסיומת ל-h

תודה רבה!
 
ניסיתי להשתמש בפקודה readelf

למשל ניסיתי לבדוק כמב סקשינים יש באמצעות הפקודה
readelf -g --section-groups elf.h

אבל זה רושם לי את הדבר הזה:

readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
readelf: Error: elf.h: Failed to read file header


מה אני עושה לא נכון?..
אשמח לעזרה.
תודה רבה!
 

BravoMan

Active member
הקובץ שצירפת הוא לא קובץ ELF

ולכן readelf לא יעבוד עליו.

או שאת מנסה לנתח קובץ לא נכון, או שכוונת המשורר היא שתקראי את הגדרת הפורמט ותעני כמה מקטעים (sections) יכולים להיות.

בפועל, זה תלוי בקובץ elf האמתי. הוא יכול לכיל רק מקטע קוד (text) ויכול להכיל עוד מקטעים בהתאם לקוד המקור ופעולת המהדר.
 
היי

הקובץ שצירפתי הוא קובץ pdf כי שיניתי את הסיומת שלו..
זה לא נותן לצרף קובץ h
י ש אפשרות אולי שאני אוכל לשלוח לך למייל?..

תודה רבה!
 

Guy Yafe

New member
התשובה בגוף השאלה

מה שהעלית זה לא קובץ elf. זה קובץ h שמיועד לתת לך ממשק לקריאת ויצירת קבצי elf.
קובץ elf הוא קובץ בינארי שמיועד להיות מורץ (או מלונקג') במערכת ההפעלה.
יש לו חתימה משלו וחלקים משלו.
הלינק הבא יעזור לך להבין יותר טוב קבתי elf:
http://www.skyfree.org/linux/references/ELF_Format.pdf
 
אה עכשיו דיי מובן

אז איך אני יכולה לענות כמה סקשינים יש בקובץ הזה?
או מה ה- entry point ומה ה- value שלו?

איך יודעים את זה?

תודה רבה!
 

Guy Yafe

New member
איזה קובץ?

את לא יכולה לענות על שאלות על קובץ מסויים בלי שיהיה לך את הקובץ הזה.
כרגע כל מה שיש לך ביד זה קובץ h כללי שמכיל מידע על כל קבצי elf בעולם.
אלא אם המרצה נתן לכם קובץ מסויים לענות עליו, קשה לי להבין איך את אמורה לפתור את השאלה הזו.
אלא אם כמו ש - Bravo Man ענה, את צריכה לתת תשובה כללית על מספר חלקים מינימלי/מקסימלי וכו'.
 
צודקים.

אני מצטערת. עכשיו אני מצרפת את הקובץ האמיתי. שיניתי את הסיומת שלו ל-pdf כדי לצרף אותו לכאן.
תשנו בבקשה בחזרה לסיומת out


אשמח להסבר..

תודה רבה!
 

Guy Yafe

New member
תעבירי את הקובץ הזה ב - readelf

הוא יגיד לך הכל
הסתכלת בקישור ששלחתי לך? סביר להניח שלא נתקלת בו לראשונה כי בכל קרוס ממליצים עליו כדי ללמוד על קבצי elf.
עוד אפשרות היא לפתוח את הקובץ באמצעות Hex Viewer. קצת יותר מורכב להבנה אבל בגדול ככה עובד readelf?
 
ניסיתי וקיבלתי כל מיני אופציות להרצת readelf

הרצתי את הקובץ ככה:
readelf a.out
קיבלתי כל מיני אפשרויות מה אני יכולה להריץ
למשל --g וכל מיני כאלה , לא קיבלתי פרטים על הקובץ עצמו.




עכשיו אני רוצה לדעת איפה ה- entry point ומה הגודל שלו?
איך אני עושה את זה/איך מוצאים את זה?

ודבר נוסף- איך מוצאים מה ה- size של .text section?

תודה !
 
אולי בכל זאת

מישהו יודע איך מוצאים את האנטרי פוינט ומה הערך שלו?
איזה פקודה צריך לרשום בקונסול?

ועם איזה פקודה בודקים מה הגודל של ה-טקסט סקשין?

תודה :)
 

Guy Yafe

New member
RTFM

האם עיינת במדריך ששלחתי לך? המדריך הזה מסביר בית-בית איך לקרוא קובץ ELF. את צריכה לפתוח את הקובץ באמצעות Hex Viewer ביד אחת וביד השניה להחזיק את המדריך ששלחתי.
דרך אחרת היא לגגל את הפקודה readelf ולהבין בדיוק מה הדגלים שהיא מקבלת.
אני לא ממליץ על הדרך השניה כי אני מניח שמטרת התרגיל היא שתלמדי לנתח את הקבצים האלה.
בכל מקרה, הנה ניתוח זריז של הקובץ שלך:
הקובץ מתחיל בmagic: 0x7F454C46
אחריו יש את ה - Class: בקובץ שלך הערך הוא 1 ולכן מדובר בקובץ של 32 ביט
הבית הבא, EI_DATA קיבל את הערך 1, מה שאומר שמדובר ב - Little Endian
הבית שלאחריו לא מעניין במיוחד ולאחריו משלימים ל-16 בתים באמצעות ריפוד באפסים.
לאחר מכן ישנם שני בתים שמתארים את סוג המעבד. במקרה שלנו, אינטל 80386
אחריהם עוד שני בתים שמכילים את הגרסה.
ארבעת הבתים הבאים הם ה - Entry Point שקיבלה את הערך 0x080482E0. זו הכתובת אליה יש לטעון את התוכנית
ארבעת הבתים הבאים: Program Header Table Offset
ארבעת הבתים הבאים: Section Header Table Offset. במקרה שלך 0xDF4.

איפה את מתקשה? להבין את המדריך? בחלק הטכני של פתיחת הקובץ ל - HEX?
 
אכו עברתי על המדריך, תודה רבה!

וכן, אני חושבת שאני מתקשה בהבנת המדריך
אני לא מצליחה להבין איפה מוצאים פקודות שאני צריכה.
למשל איזה פקודה אומרת לי אם הסימבול _start מופיע בקובץ? ואם כן, אז איפה הוא מופיע בוירטואל ממורי? (איזו פקודה אני צריכה להקליד בשביל לבדוק את זה?)
או למשל- איזו פקודה אומרת לי מה הגודל של .text סקשין?
איך בודקים את זה?

תודה רבה!
 

Guy Yafe

New member
אני לא לגמרי מבין

האם את מתכוונת להשתמש בפקודה readelf או שאת מתכוונת לחפור בקובץ?
אם את רוצה להשתמש בפקודה, קראי את המדריך הבא:
http://linux.die.net/man/1/readelf
זה האתר הראשון שהחבר גוגל נתן לי
נסי את readelf -all
אם את רוצה לחפור בקובץ, את צריכה לעבור על כל הכותרות שמפורטות במסמך הקודם ולהבין היכן הן נמצאות. האם יש חלק מסויים שאת מחפשת ולא מוצאת?

קשה לי לעזור לך כי אני לא משתמש בלינוקס. לא מאמין בזה.
 
למעלה