stacktrace ן backtrace_symbol
נניח ואני רוצה למצא את הbacktrace שלי. בהנחה ואני תחת אינטל, ומקמפל עם g++ (בלי פלאגים מיותרים), אני יכול לקרא את הערך של ebp, כדי לקבל את ה return address הראשון, לקפוץ אליו, לקרא את ה return address הבא וכן הלאה. אז יש לי רשימת כתובות, על ה stack שהם ה return address שלי.
מה שלא ברור לי זה איך, מהכתובות האלה אני מגיע לפונקציות שקראו להן (או, לשורה שמהן הן נקראו).
ז.א איך, לדוגמה addr2line יודע לבצע את ההמרה הזו, מכתובת על ה stack, לפונקציה, שמוגדרת בקוד סיגמנט .
שאלה נוספת, האים יש דרך "זולה" לבצע את ההמרה הזו, כשהפרוסס עדיין חיי.
אני מניח ש addr2line משתמש ב dlopem, dladdr וכד. ז.א לרקא לו בזמן ריצה, זה דיי יקר. יש משהו "זול" יותר??
נניח ואני רוצה למצא את הbacktrace שלי. בהנחה ואני תחת אינטל, ומקמפל עם g++ (בלי פלאגים מיותרים), אני יכול לקרא את הערך של ebp, כדי לקבל את ה return address הראשון, לקפוץ אליו, לקרא את ה return address הבא וכן הלאה. אז יש לי רשימת כתובות, על ה stack שהם ה return address שלי.
מה שלא ברור לי זה איך, מהכתובות האלה אני מגיע לפונקציות שקראו להן (או, לשורה שמהן הן נקראו).
ז.א איך, לדוגמה addr2line יודע לבצע את ההמרה הזו, מכתובת על ה stack, לפונקציה, שמוגדרת בקוד סיגמנט .
שאלה נוספת, האים יש דרך "זולה" לבצע את ההמרה הזו, כשהפרוסס עדיין חיי.
אני מניח ש addr2line משתמש ב dlopem, dladdr וכד. ז.א לרקא לו בזמן ריצה, זה דיי יקר. יש משהו "זול" יותר??