המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

תרגול 11 מלכודות בניית ה-Debugger

מצגות קשורות


מצגת בנושא: "תרגול 11 מלכודות בניית ה-Debugger"— תמליל מצגת:

1 תרגול 11 מלכודות בניית ה-Debugger
מבוסס על שקפים מאת יאן ציטרין

2 מלכודות במצבים מסוימים המעבד מפסיק את ריצת התוכנית הנוכחית ועובר לביצוע של שגרה מיוחדת שכתובתה נמצאת במקום שמור בזיכרון. דוגמאות: כתובת אי זוגית ב-PC (4,6) פקודה לא חוקית (10, 12) אירוע כזה נקרא מלכודת (פסיקת תוכנה). בניגוד לפסיקות רגילות שהן תוצאות של אירוע חיצוני, המקור של מלכודת – בתוכנית עצמה. © את"ם - תרגול מס' 12

3 תזכורת: מנגנון קפיצה וחזרה מפסיקה
pc psw  + 2 וקטור הפסיקה המחסנית RTI המחסנית pc PC PSW psw © את"ם - תרגול מס' 12

4 בדיוק כמו וקטור הפסיקות יש הבדל קטן בין RTT ל-RTI
מנגנון המלכודת בדיוק כמו וקטור הפסיקות קפיצה למלכודת וקטור מלכודת המחסנית pc  + 2 psw RTT המחסנית pc יש הבדל קטן בין RTT ל-RTI הוא יובהר בהמשך PC PSW psw © את"ם - תרגול מס' 12

5 השוואה בין המלכודות לפסיקות
"פסיקות תוכנה". פקודה או אירוע בתוך תוכנה אירוע נגרם ע"י התקן חיצוני במקרים מסוימים המתכנת בעצמו מכניס את פקודת המלכודת לתוכנה, ואז הוא יודע בדיוק מתי המלכודת תתרחש המתכנת אינו יודע מתי תתרחש הפסיקה המלכודת מתבצעת תמיד. אין מושג עדיפות חומרה ביצוע פסיקה מותנה בעדיפות חומרה גדולה מעדיפות תוכנה לא משתמשים במלות Status ו- Buffer המנגנון משתמש במלות Status ו- Buffer כתובת שיגרת שירות נמצאת בוקטור מלכודות כתובת שיגרת שירות נמצאת בוקטור פסיקות מנגנון הקפיצה והחזרה זהה לזה של הפסיקות מנגנון הקפיצה והחזרה: שמירה ושחזור של PC ו-PSW חזרה: RTT חזרה: RTI © את"ם - תרגול מס' 12

6 T-bit T N Z V C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 דרך נוספת לגרום למלכודת היא להדליק את ה-T-bit במילת הסטטוס של המעבד (PSW) אחרי ביצוע של כל פקודה ה-CPU בודק את ה-T-bit אם הוא דלוק מתבצעת קפיצה למלכודת בכתובת (14, 16) המנגנון הזה מאפשר לממשtracing - ביצוע של איזושהי תוכנית, פקודה אחרי פקודה, כאשר בסיום ביצוע של כל פקודה השליטה חוזרת למשתמש © את"ם - תרגול מס' 12

7 ההבדל ביןRTI ל-RTT אחרי פקודת RTT לא מתבצעת בדיקת הT-bit -
ניתן להשתמש בתכונה המיוחדת הזו לצורך בנייתdebugger פשוט (נקרא לו tracer) © את"ם - תרגול מס' 12

8 הרעיון של ה-tracer אתחול: כתובת התחלת התוכנית המדובגת ו-PSW עם ה-T-bit דלוק נמצאים בראש המחסנית ה-tracer נמצא בשגרת שירות של מלכודת (14, 16) אופן הפעולה: ה-tracer מבצע RTT. אחרי ביצוע RTT המעבד אינו מתייחס ל- T-bit. המעבד מבצע פקודה ראשונה של התוכנית המדובגת ובעקבות ה- T-bit מתבצעת קפיצה למלכודת (14, 16), כלומר ל-tracer. חזרה לשלב 1. © את"ם - תרגול מס' 12

9 הסכמה של ה-tracer push PSW (T-bit on) tracer push #main rtt PC=#main
המחסנית HandleT PSW 14 וקטור המלכודת 16 “print r0” rtt HandleT: זוהי הפקודה הראשונה של התוכנית המדובגת mov … add … main: בעקבות הביצוע של rtt תתחיל להתבצע התוכנית המדובגת לאחר ביצוע של כל פקודה ב-main נכנסים למלכודת (14,16) © את"ם - תרגול מס' 12

10 מלכודתBPT והרחבת ה-tracer
מה-debugger , למשל בדיקת ערכי הרגיסטרים או זיכרון בצורה אינטראקטיבית (ולא כמו קודם לאחר כל פקודה לבצע סדרה קבועה של פעולות) BPT – מלכודת, אשר הוקטור שלה נמצא ב-(14, 16), כלומר אותה שגרת שירות כמו ל-T-bit ניתן להשתמש ב-BPT על מנת להכניס breakpoints לתוכנית המדובגת וברגע שהתוכנית עוצרת ב-breakpoint שהגדרנו לאפשר למשתמש לבצע monitoring: לראות ערכים של הרגיסטרים להמשיך ריצה של התוכנית המדובגת ועוד © את"ם - תרגול מס' 12

11 טיפול ב-breakpoints א) השתלת ה-breakpoint
בוחרים פקודה בתוכנית שלפניה רוצים לעצור, שומרים אותה במקום אחר בזיכרון, ובמקומה מכניסים את ה-opcode של BPT (ערך ) ב) עצירה ב-breakpoint מבצעים את התוכנית וברגע שנגיע לפקודת BPT (שהוחלפה לפני כן) נקפוץ לשגרת השירות של המלכודת (ממשק של ה- Debugger.) © את"ם - תרגול מס' 12

12 מלכודתBPT והרחבת ה-tracer
mov #main, sp main: שלבים בתוכנית: הכנסת נקודת עצירה הגעה לנקודת העצירה החזרת השליטה למשתמש שחזור הפקודה ביצוע הפקודה החזרת נקודת העצירה המשך התוכנית. BPT BPT l1: mov r1, r3 halt save: © את"ם - תרגול מס' 12 mov r1, r3

13 תרשים הזרימה של ה-debugger
ב-interface מחליפים את הפקודה המקורית ל-BPT (000003) מבצעים BPT ב-main ובעקבות כך נכנסים למלכודת משחזרים את הפקודה המקורית מעבירים שליטה למשתמש (שיוכל לבצע monitoring) מדליקים את ה- T-bit בתוך PSW שבמחסנית חוזרים לתוכנית הראשית מבצעים את הפקודה מקורית וחוזרים ל-debugger בגלל ה-T-bit מחליפים את הפקודה המקורית ב-BPT מכבים את T-bit (כדי לעצור רק לפני הפקודה ב-breakpoint) © את"ם - תרגול מס' 12

14 זוהי התוכנית "המדובגת“.שימו לב שהיא מסתיימת ב-RTS ולא ב-HALT
debugger בדוגמה הזו התוכנית מתחילה להתבצע לא מ-main אלא מה-debugger debugger: mov pc, sp tst –(sp) mov ; Initialize trace ; and BPT vector jsr pc, interface jsr pc, main halt main: mov #7, r0 loop : sob r0, loop rts pc bAddr: .word loop ; the address of the original ; command save: .blkw 1 ; the original command is ; saved here נותנים למשתמש להגדיר פעולה של debugger (ההנחה הסמויה שהוא יכניס breakpoint לפני ה-loop זוהי התוכנית "המדובגת“.שימו לב שהיא מסתיימת ב-RTS ולא ב-HALT © את"ם - תרגול מס' 12

15 User Interface interface: waitP: tstb @#tps bpl waitP movb #’$, @#tpb
waitR: bpl waitR userInp checkR: cmpb userInp, #’r bne checkB movb r0, temp bic #177770, temp add #60, temp busy_w: bpl busy_w movb br ret print the promt read the input into userInp prints the value of the r0 on the display © את"ם - תרגול מס' 12

16 User Interface (cont.) checkB: cmpb userInp, #’b ; inserts breakpoint to bAddr bne checkC save ; saves the original command mov ; puts BPT instead of the br ret ; original command checkC: cmpb userInp, #’c ; continue bne interface ret: rts pc userInp: .blkw 1 temp: .blkw 1 © את"ם - תרגול מס' 12

17 שיגרת השירות של BPT BPT BPT T-bit מחזירים פקודה מקורית
מקטינים כתובת חזרה מדליקים T-bit בתוך PSW במחסנית ממשק המשתמש מבצעים RTT מחזירים את ה-BPT מכבים את ה-T-bit בתוך PSW במחסנית מבצעים RTT © את"ם - תרגול מס' 12

18 שגרת שרות של המלכודת break_subr: bit #20, 2(sp) ; Is the T-bit set ?
bne T_called BPT_called: mov ; restore the original command sub #2, 0(sp) ; make the PC re-run the ; command on the breakpoint bis #20, 2(sp) ; T-bit on jsr pc, interface rtt T_called: mov ; replace the original ; command with BPT bic #20, 2(sp) ; Clear the T-bit © את"ם - תרגול מס' 12


הורד את "ppt "תרגול 11 מלכודות בניית ה-Debugger

מצגות קשורות


מודעות Google