
הטקסט המלא של הדקות הראשונות בהרצאה «דיבאג ב-Visual Studio» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הקודמת יצרנו את הפיילוד שלנו ב-C-Sharp ועכשיו אנחנו רוצים להתחמק מאנטיווירוסים. בואו נפעיל אותו, את ה-C-Sharp שלנו. נעשה פה התחל ל-Visual Studio.
נפתח את הפרויקט שעשינו. הנה הוא פה למטה ברשימה, הפרויקטים שעשינו איתכם ביחד. אנחנו יכולים לבחור אותו מכאן ואנחנו יכולים לבחור אותו מכאן.
זה למעשה קובץ בתוך ה-HardDisk שלי. בואו ניכנס לתיקייה ונמצא אותו. הנה כובד שנקרא CSproge, והנה כובד סלושן. סלושן זה אוסף של פרויקטים. לדוגמה, יש לי כמה פרויקטים שקשורים לוגית לדבר אחד, כאשר כל פרויקט זה קובץ אקזה משלו.
אז יכולים להיות פה כמה קבצי אקזה שעובדים לוגית ביחד, אז הם מאוחדים לסלושן אחד, לפתרון אחד, וכל פרויקט כזה שיש לו CSproge, יש לו את הביינרים משלו, יש לו את האקזה משלו.
ומה הבעיה שלנו? שקובץ אק זה שלנו, האנטיווירוס תופס אותו. בואו נראה, נעשה פה סקן ואנחנו רואים שהאנטיווירוס תופס ואנחנו רוצים שהאנטיווירוס לא יתפוס אותו.
אז אנחנו נכנסים פה לתיקייה ופותחים את הסולושן. אפשר לעשות דאבל קליק על הסולושן או לפתוח את הפרויקט. אני אומר סולושן, דאבל קליק, הוא שואל אותי באיזה ויז'ואל סטודיו, יש לי רק אחד ותמיד אני אומר לו לפתוח בוויז'ואל סטודיו היחיד שיש לי לפי הסיומת, והנה הוא פתח לי את הסולושן, את הפתרון שבפנים יש כמה פרויקטים,
כאשר כל פרויקט זה או קובץ אקזה אחד, או אתר אינטרנט אחד, משהו אחד. והסולושן מאחד את הפרויקטים. כרגע יש לי סולושן אחד עם פרויקט אחד שעושה אקזה אחד.
איך אנחנו נחפש את הסיפור הזה של הווירוס? איך האנטיווירוס תופס אותי? איפה הוא בדיוק תופס אותי? אפשר לחלק את הקובץ לחלקים ולעשות כמו שעשינו לפני כן, ואפשר לעשות בשיטה אחרת לחלוטין.
מה השיטה? השיטה שאנחנו יודעים בעצמנו שזה איפשהו פה, איפשהו פה בתוך הבאפר הזה, בתוך שפת המכונת הזאת. אז איך אנחנו נבודד את זה? פשוט מאוד, נתחיל למחוק חלקים ולבדוק באיזה שורה פה בדיוק יש את הבעיה.
קודם כל אני מתחיל מזה שאני מוחק נניח כמה שורות. בואו נראה כמה שורות יש פה. יש לנו פה אני עושה Control גלגלת רואה כמה שורות יש לנו פה ונניח אני מוחק נניח את כל השורות האלו אני עושה Right Click ועושה Cut מוחק אותם הופה עשיתי את זה פי שתיים יותר קצר לא משנה שהתוכנה לא תעבוד אני רוצה להעלות מה מפריע לאנטיווירוס שלי ואני עושה Rebuild בונה אותו מייצר קובץ אקזה קבצים
האלו לא מעניינים אותי אני יכול למחוק אותם אני יכול להתעלם מהם ואני עושה Scan וסורק ועולה על זה שאין וירוס מה זה אומר שזה אחת השורות שמחקנו אתם רואים האנטיווירוס לא זיהה אם אני מחזיר את זה חזרה ונניח שאני אמחק נניח סתם נניח חצי מזה ככה אני אמחק ונעשה עוד פעם ריבילד בואו נמחק ונעשה ריבילד הוא יוצר לנו את הקבצים מחדש הוא גם ככה יוצר מחדש לא אני לא חייב למחוק
ואני עושה פה סקאן סורק הנה הוא עולה על זה שזה וירוס אתם רואים הוא עולה על הקטע שזה וירוס ואני אומר לו למחוק את הקובץ המסוכן והוא ימחוק לי עכשיו את זה זאת אומרת שהווירוס איפה שהוא נמצא באחד השורות אז אנחנו ככה יכולים להמשיך ולבודד אותו עד שאנחנו נמצא בדיוק איפה הוא נמצא ואני אגיד לכם שאפשר למחוק שורה שורה בסוף בסוף
אחרי שאנחנו מוחקים 1111 אנחנו נגיע למסקנה שהווירוס נמצא בשורה הזאת זאת אומרת כל פעם הייתי מוחק שורה עד שהייתי עולה עושה סריקה ומגלה שאם אין את השורה הזאת אין וירוס יש את השורה הזאת יש וירוס בואו נראה הנה מחקתי את השורה הזאת שמרתי אני עושה פה ריבילד הנה אתם רואים האנטיווירוס מחק לי אותו עושה ריבילד בלי השורה הזאת אני מגלה שאין וירוס
לא תופסים אותי אתם רואים האנטיווירוס לא תופס אותי אם אני מחזיר את השורה הזאת האנטיווירוס כן תופס אותי אז יש לנו פה בעיה בשורה הספציפית הזאת רק נשאר לגלות מה זה השורה הזאת ומה המשמעות שאם אני מוחק אותה?
כנראה שזה לא יעבוד כי זה באמצע קוד. זה האתגר שלנו כרגע, לגלות מה קורה פה בתוך השורות האלו. טוב חברים, איך אנחנו נבין מה עושות הפקודות האלו?
מאוד מאוד מאוד פשוט, אנחנו נעשה דיבאג, נעבור שורה שורה ונראה מה קורה. ונעבור לדיבאג, נעשה דיבאג וסטפ אינטו.
הנה אנחנו מתחילים, הצהוב זה אומר השורה שאותה אנחנו מבצעים, כאן למטה יש את המשתנה, נניח שאנחנו עוקבים אחריו אז אני לוחץ debug עוד פעם f11 step into לעבור פקודה פקודה עכשיו אנחנו בפקודה הצהובה הזאת ופה למטה אני גם רואה את כל המשתנים שלו בזיכרון כרגע יש לו משתנה באף ריק כי עוד לא עשיתי את הפקודה
אני עושה debug step into ועובר לפקודה הבאה עם f11 עכשיו יש לנו בתוך הבאף הזה את כל המספרים שלנו אנחנו יכולים לפתוח ולראות מה קורה לו 252, 72, אתם רואים הוא מציג לנו אותם בצורה רגילה שלנו, אנחנו יכולים לעשות לו פה XML Display והוא יציג לנו פה אותם ב-XFC48 כמו שאנחנו מכירים אותם.
אנחנו פה יכולים להגיד לו באיזה צורה להציג את הערכים האלו. זה משתנה באף עם 657 מספרים שזה למעשה שפת מכונה ואנחנו בפקודה הזאת. כרגע המשתנה סייז הוא באפס כי הוא עוד לא ביצע את הפקודה בצהוב אני לוחץ F11 הוא מבצע אותה ומשתנה סייז מקבל ערך 657 הנה אנחנו רואים פה באדום את
הערך 657 עכשיו הוא עושה הקצאת זיכרון למשתנה אדר מקציב זיכרון כרגע משתנה אדרס ADDR ככה קראתי לו כרגע הוא ריק הוא 0 0 0 אני עושה F11 הוא הקציב לו אותה בזיכרון שזה המספר שלו זה בעצם הכתובת בזיכרון שמשם מתחיל העמוד של הזיכרון שלו.
הקציב לו את האזור הזה, זה הפניה לשם. כרגע בזיכרון הזה אין כלום ומבצעים אליו קופי, ביצענו אליו קופי, העתקנו את כל התוכן ועכשיו יוצאים Thread.
Thread זה למעשה להריץ את הכתובת הזאת בזיכרון,