17
- בבבבב בlong mode תתתתתlong mode - תתתתת תתתתתת ת3 תתתתת תת תתתת:- 4k – 2 12 = 4096 תתתת תתת.- 2M - 2 21 = 2097152 תתתת תתת.- 1G- 2 30 = 1073741824 תתתת תתת.- תתתת תתת תתתת תתתת תPS , תתת תתתת7 תתתתתתת תת תתתתתתת. תתתתתת תתת תתתת תתתתת4k תתתתת2M תתתת תתתת7 -ת( PS - ת) PDE – Page Directory Entry , תתתת תתתתתתת תתתת תתתתתת תתת תתתתת תתתת. תתתתתת תתת תתתת תתתתת1G תתתתת תתתתת תתתת4K, 2M תתתת תתת תתת תתתת תתת- תPDPE – Page Directory Pointer Entry . תתתתתת, תתתתתת תתתתת תת:- תתתת תתתתתתת תתתתתת תתתת ת"ת תCR3 : בבבב:AMD64 Architecture Programmers Manual Volume 2

Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

long mode דפדוף ב-

גדלים של דפים: 3 תומכת בדפדוף ב-long modeמערכת

-4k – 212 = 4096.בתים לדף -2M - 221 = 2097152.בתים לדף -1G- 230 = 1073741824.בתים לדף

בכניסות של הטבלאות.7, ביט מספר PSגודל הדף נקבע בביט ה-

, הרמהPDE – Page Directory Entry( ב-PS )ה-7 נעשה בביט 2M לעומת 4kהאבחנה בין דפים בגודל האחרונה לפני המיפוי לדף הפיזי עצמו.

PDPE – Page נעשה רמה אחת קודם לכן ב-4K, 2M לדפים קטנים יותר 1Gהאבחנה בין דפים בגודל Directory Pointer Entry.

בעקרון, ההמרות נראות כך:

:CR3הרמה העליונה מוצבעת תמיד ע"י ה-

AMD64 Architecture Programmers Manual Volume 2מקור:

Page 2: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

: 4k דפדוף

AMD64 Architecture Programmers Manual Volume 2מקור:

תוכן הכניסות בטבלאות ההמרה נראות כך:

Page 3: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

AMD64 Architecture Programmers Manual Volume 2מקור:

Page 4: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

2M דפדוף

AMD64 Architecture Programmers Manual Volume 2מקור:

הכניסות בטבלאות הדפדוף נראות כך

Page 5: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

AMD64 Architecture Programmers Manual Volume 2מקור:

Page 6: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

1G דפדוף

הפענוח נראה כך:

AMD64 Architecture Programmers Manual Volume 2מקור:

Page 7: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

AMD64 Architecture Programmers Manual Volume 2מקור:

כל הכניסות בטבלאות מהוות למעשה מערך פוינטרים לרמה הבאה, טבלת משנה הבאה או לבסוף הדףהפיזי.

כל הכניסות בטבלאות למעט הרמה האחרונה בכל שלושת הגדלים של דף מכילים מצביעים בגודל של בתים. בפעול מדובר במצביעים4k = 4096 = 212 ביט משום שהם מצביעים על טבלאות משנה בגודל 40 ביטים אפסים.12 ביט המרופדים ב-52

ביט.64גודל כל כניסה היא

.512מספר הכניסות בכל טבלת משנה היא

זה עשוי להיות אחרת, כלומר1G בדפי PDE, ו-2M בדפי 4k, PDE בדפי PTEרק הרמה האחרונה, פוינטרים עם פחות ביטים.

:1G ו-2M בדפי PDEבפועל זה אחרת רק ב-

ביטים אפסים(21 ביט )מרופד ב-31פוינטרים -

Page 8: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

ביטים אפסים(30 ביט )מרופד ב-22פוינטרים -

ושהכניסות בחלק מוCR3 נובע בעצם מן הרצון שאוגרים כמו ה-252המגבלה של מרחב כתובות פיזי בגודל ביט. 64הטבלאות לא יעלו על

אשר לכניסות בטבלאות עצמן, מבחינת הבנה של המערכת מה שהכי חשוב זה השדות הבאות:

(.P==0( או לא )P==1 האם הכניסה מיושמת ) : P ביט ה-

האפשרותNX==1. אם NX==0. ניתן לבצע פקודת מכונה בגישה רק אם No Execute bit ה- : NX ביט ה-הזו חסומה.

. User/Supervisor bit ה- : U/S ביט ה-

גם קוד ברמת פריווילגיהU/S == 1 יכול לגשת לכניסה, אם 0,1,2 רק ריצה ברמת פריווילגיה U/S == 0 אם יכול לגשת. 3

זהו ביט המודלק אוטומטית כל אימת שהמעבד ניגש דרך הכניסה, והוא אינוAccessed bit ה- : A ביט ה- ביוזמתו מכבה אותה. מערכת ההפעלה יכולה בעזרתו )על ידי כיבוי ובדיקה כעבור זמן( אם הכניסה הייתה

בשימוש בזמן האחרון.

הכניסה יכולה לשמש רק לפעולת קריאה בלבד. אםR/W==0. אם Read/Write bit ה- : R/W ביט ה-R/W==1-הכניסה יכולה לשמש לכתיבה למידע. בשביל שהאופציה הזו תהיה פעילה ביט ה CR0.WPחייב

.1להיות שווה ל-

יתר הכניסה עומדת לרשות מערכת ההפעלה. P==1כאשר ביט ה-

הדבר מאפשר למערכת:

להשבית רצפים של כתובות וירטואליות-להוריד תוכן דפים פיזיים לשטח דיסק ולשחרר את הזיכרון שמימש אותם.-

CR2. המערכת מקבלת דרך 14 חריגה מספר Page Fault מתרחש חריגה P==0אם קוד ניגש לדף שבו ה- את הכתובת הלינארית הרלוונטית ובודקת אם מדובר בצורך לשחזר דף מהדיסק או גישה לכתובת לא

חוקית.

Page 9: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

long mode הגנה ב-

קובעים את רמת הייחוס של הקוד שרץ עכשיו.CPL, ה-CS הביטים הנמוכים של ה-2כמו קודם,

. במידת הצורך קוד תהליכי מערכת יכול גםRing0 או CPL==00bגרעין מערכת ההפעלה רץ ברמת ייחוס לרוץ שם.

CPL ואינם יכולים לשנות את ה-Ring3 או CPL==11bהיישומים רצים )על פי רוב( ברמת ייחוס

(.2 או 1 או 0 לרמה מיחסת יותר )מספרית ל-CPL אינו יכול לשנות את ה-Ring3, והקוד ב-

( אבל זה אינו מבטיח3 )קטן מספרית מ-3 מיוחס מ-DPL לא יכול להסתעף לכניסה שבה ה-Ring3קוד ב- הגנה של ממש כי בעזרת ערך סגמנט קוד חוקי תהליך יישום יכול ליצר לעצמו כתובת אפקטיבית/לינארית

כלשהוא.

.1 חייב להיות שווה ל-CR0.PG קוד יכול לגשת לזיכרון אך ורק דרך מנגנון הדפדוף. ה-long modeב-

גישה של יישום לכתובת לינארית שהמערכת לא יעדה לו נעצרת בבדיקות הבאות:

בראש ובראשונה אם הכתובת אינה קנונית..1.0 שווה ל-P bitאם בשלב כלשהוא לאורך הפענוח ה-.2.0 ביט שווה ל-U/Sאם בשלב כלשהוא לאורך הפענוח ה-.3.1 ביט שווה ל-NXאם מדובר בהסתעפות ובשלב כלשהוא לאורך הפענוח ה-.4.0 שווה ל-R/Wאם הגישה היא לכתיבה וביט ה-.5

.U/Sה- ע"י ביט או המיוחסים של המערכתם מבני הנתונים הגלובלייהמערכת מונעת מיישום לגשת ל

.NX ע"י ביט ה-שטח מידע תוכן של להריץהמערכת מונעת מיישום

.Pה- משטחים שהוקצו לו ע"י ביט לחרוגהמערכת מונעת מיישום

ע"י יצירת מערכת טבלאות לכל תהליךבין התהליכים הפיזיים את מרחבי הכתובות ממדרתהמערכת . כך שמרחבי כתובות פיזיות )להבדיל מלינאריות( ברירתמעבר בין תהליכים במסגרת CR3והחלפת ה-

מחדל של תהליכי יישום יכולים להיות בעלי חתך ריק. יתכן שיתוף כתובות פיזיות רק בהסכמת מערכתההפעלה.

רמת הפריווילגיה של קוד יכולה למנוע מהקוד ביצוע פקודות מכונה מסוימות ולהגביל את משמעות של פקודות מכונה אחרות . מדובר על פקודות על אוגר הדגלים, שאינן יכולות לשנות את הדגלים המיוחסים

.RFLAGSבאוגר הדגלים

Page 10: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

( שהוא לא יכול לבצע פקודות מכונה שיכולותRing3 או CPL==11bמשמעות הדבר לגבי רמת היישום )לשבש את תפקוד המערכת, לבצע קלט/פלט

פקודות מיוחסות

, הניתנות לביצוע רק ב-Privileged Instructionsישנה סוג של פקודות מכונה, הנקראות פקודות מיוחסות Ring0:

רשימת הפקודות הללו הינו:

CLGI, CLTS, HLT, INVD, INLPG, LGDT, LIDT, LMSW, LTR, MOV CRn, MOV DRn,

RDMSR, SKINIT, STGI, SWAPGS, VMLOAD, VMMCAL, VMRUN, VMSAVE, VMBINDVD, WRMSR

מדובר בעיקר בפקודות שינוי אוגרי מערכת או גישה לטבלאות מערכת.

פקודות רגישות

הן פקודות שמי שיכול לבצע אותםIOPL- Sensitive Instructions או Sensitive Instructionsפקודות רגישות . הרשימה היא:RFLAGS באוגר הדגלים IOPLנקבע ע"י מערכת ההפעלה ע"י השדה

רשימת הפקודות כוללת את:

CLI, STI, IN, OUT, INS, OUTS

פקודות מוגבלות

:CPLפקודות שמשמעותם תלויה ב-

.POPF, POPFD, POPFQ או חלק ממנו: RFLAGS למיניהם על אוגר הדגלים POP וכל פקודות IRETהפקודה

בפקודות מוגבלות המעבד לא יגרום לחריגה אבל יתעלם מניסיון לשנות דגלים מיוחסים למי שאינומוסמך לכך.

, תלויהIF. היכולת לשנות את האחרים, כמו ה-Ring0 , יכול לשנות רק תוכנית ב-IOPLחלק מהדגלים כמו, .IOPLב-

מונעת מיישום להסתעף לפסיקות תוכנה שלא נועדו לו.Trap Gate של כניסות DPLה-

CALL GATE ל-CALLתהליך יישום יכול לעבור לרמת פריווילגיה מיוחסת יותר רק באמצעות הסתעפות . הדבר נחוץ למימוש קריאות מערכת אולם יעדSYSCALL ופקודת מכונה TRAP GATE ל-, INTהסתעפות

ההסתעפות בכל המקרים הוא בשליטת מערכת ההפעלה.

.INT 2Eh ב-Windows ו-INT 80h משתמש למטרה הזו ב-Linuxככל הנראה,

Page 11: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

, כל ניסיון של יישום לבצע פעולה שאינה שורדת את בדיקותPage Faultלמעט הפקודות המוגבלות וה- . במחסנית נשמרת קוד המציין בדיוק איזהGeneral Protection Fault 13התקינות גורמת לחריגה מספר

בדיקת תקינות נכשלה.

טבלת פקודות מכונה מערכת והרשאים לבצע אותם – כללי:

Page 12: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת
Page 13: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת
Page 14: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת
Page 15: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

מעבר מבוקר מרמת פרווילגיה נחותה למיוחסת יותר

דרכים לאפשר את המעבר מרמת ייחוס נחותה למיוחסת יותר:3יש

Call Gate ל-JMP או CALLהסתעפות ע"י פקודת .1Trap Gate( ל-INTביצוע פסיקת תוכנה )פקודת המכונה .2 )אין אופרנדים(SYSCALLביצוע פקודת מכונה חדשה .3

CALL GATE כניסת ה-

AMD64 Architecture Programmers Manual Volume 2מקור:

0Ch= 1100b=12 הוא CALL GATE ב-Typeערך ה-

Trap Gate כניסת ה-

AMD64 Architecture Programmers Manual Volume 2מקור:

Page 16: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

0Fh= 1111b=15 הוא TRAP GATE ב-Typeערך ה-

נעשה ע"י CALL GATEהסתעפות ל-

Mem80b DT ?

CALL Mem80b

או

JMP Mem80b

נעשה ע"י 80h, נניח פסיקה TRAP GATEהסתעפות ל-

Int 80h

בדיקות

CALLעבור s=0, Type=12 בכניסה המתאימה מתאים )STYPEהמעבד בודק אם ה-GATE-ו Type=15 עבור TRAP GATE.)

. זהו אחד השימושים האחרונים של ה-DPL==CPLכמו כן המעבד בודק אם ה-DPL.שעדיין משמעותיים

SYSRET ו- SYSCALL פקודות המכונה

נועדו לאפשר מעבר מהיר לגרעין לצורך מימושSYSRET ו-SYSCALLפקודות המכונה קריאה לקריאת מערכת על ידי שמירת ערכי היעד באוגרים. יחד עם זאת ערכי

.Ring0החזרה נשמרים ונקראים מהמחסנית של

התרשים הבא ממחיש את האוגרים המעורבים:

Page 17: Department of Mathematics | University of Haifa – החוג ...math.haifa.ac.il/ronn/advprog/x86_64/X86_64lm2.docx · Web viewדפדוף ב-long mode מערכת long mode תומכת

AMD64 Architecture Programmers Manual Volume 2מקור:

-32 מועתקים הביטים CS, לתוך long modeכאשר מתבצע מעבר לגרעין שהוא ב-47( SYSCALL CS and SS ולתוך )SS( מועתקים תוכן הביטים הללו SYSCALL CS and SS) +16 .

בתור ערכיSYSRET( משמשים את פקודת המכונה SYSRET CS and SS )48-63ביטים SSולתוך 16+( SYSRET CS and SS ייכתב ערך הביטים הללו )CSהסתעפות. לתוך

.8+ ( SYSRET CS and SSערך הביטים הללו )

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