Logo

רד-בורד: ארכיון

ראשי > אבטחת מידע > מאחורי כל הקלעים

07/06/2007 00:20:14 T4uSBaZ
בזמן האחרון התחלתי לחשוב על מה באמת קורה מאחורי הקלעים של המחשב. בכלל, כיצד הוא בנוי. מבחינת התוכנה.
ניסיתי לחקור פה ושם, לא מצאתי הרבה מידע. אתם מוזמנים לשתף אותי בידע שלכם.

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

זאת אמרת, ממש מאחורי הקלעים. כולם מסבירים כיצד לתכנת ב C לדוגמא, אך אני רוצה ליצור שפה משל עצמי! כולם משתמשים באיזה מערכת הפעלה, אבל אני רוצה לבנות מערכת הפעלה משל עצמי, ולהיות ברמה הגבוהה ביותר , עם האפשרויות הרבות ביותר שאני יכול לעשות.
[ההודעה נערכה על-ידי T4uSBaZ ב-07/06/2007 00:20:38]
07/06/2007 01:17:38 devil kide
ציטוט:בזמן האחרון התחלתי לחשוב על מה באמת קורה מאחורי הקלעים של המחשב. בכלל, כיצד הוא בנוי. מבחינת התוכנה.
ניסיתי לחקור פה ושם, לא מצאתי הרבה מידע. אתם מוזמנים לשתף אותי בידע שלכם.

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

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


[ההודעה נערכה על-ידי T4uSBaZ ב-07/06/2007 00:20:38]

ההסבר הוא על מעבדי אינטל 80X86 .

ילדון, שאלת פה הרבה שאלות טובות.
תראה, המחשב שלנו מורכב מהמון חלקים, אבל בגדול יש כמה מרכזיים , שגם הם בנויים מכמה חלקים מרכזיים שגם הם בנוים מכמה חלקים...רקורסיה :-).

בכל מקרה, כל תוכנה שאנחנו כותבים הופכת בסוף לקוד מכונה (binary) , המעבד מבין רק את ה"קוד" הזה.את זה בטח אתה יודע.
הקוד שאנחנו כותבים, נשמר ביחידת אחסון כל שהיא (הארד דיסק, סידי-רום,דיסקט וכו’...) , ובזמן ההרצה הוא עולה לזיכרון שלנו (יש כמה זכרונות, שלנו הוא RAM , שזה זיכרון שמאפשר קריאה וכתיבה לזיכרון.
(אני אסביר לך בזמננו שלנו, שמערכת ההפעלה יודעת להריץ כמה תוכנית במקביל).
התוכנית שכתבנו מקבלת 4 סגמנטים(segment) .
אני אתייחס ל3 המרכזיים; code segment,data segment,stack segment .
התוכנית שלנו מחלקת את עצמה ל3 החלקים האלו.
קוד התוכנית עצמה נכנס ל code segment , הנתונים ל data segment וה satck segmenet יכיל את כל מה שאנחנו נכניס למחסנית (עם push ו pop) וכשנקרא לשגרה.

עכשיו נראה את מבנה המעבד.
המעבד מורכב מכמה חלקים, עכשיו נתייחס ל cpu - יחידה אריתמית לוגית .
היחידה הזו מבצעת את כל החלקים המתמטיים במחשב (add,sub,div,mul..) .
יש אח החלק שמפשרש את הפקודות שלנו.
ויש את אוגרי העזר (al,ah,bl,bh..כמובן שניתן לשלב, al+ah=ax. נגיע לזה בהמשך).
ויש את האוגרים שמשמשים את התוכנית, למשל ip=Instruction Pointer , שהוא יצביע על ההוראה הבאה שאנחנו צריכים לבצע.
או האוגרים שיסמנו את גודל הסגמנטים שלנו.

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

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

עכשיו נסביר עוד משהו, אוגר IP הוא בגודל 2 בתים , ככה שהוא לא יכול להצביע על כל הזיכרון.
לכן, הוא מצביע על כתובת יחסית, יש את ה CS שמצביע על החלק של הסגמנט של התוכנית, וה IP מצביע על ההוראה בתוך איזור הקוד ב CS .

אוקיי, מכאן, אוגר IP מקבל את המקום של ההוראה הראשונה (למעשה זה יהיה 00000000 ) והוא אומר לפס ההוראות להעביר את הביט הראשון של ההוראה למעבד.
המעבד מקבל את ההוראה ובודק במאגר שלו מה הפרוש שלה ולפיה הוא יודע את ההמשך שלה (הכוונה עוד כמה ביטים צריך להביא).
למשל ההוראה mov al,[0A]
תקח 16 ביטים,
ההוראה MOV תקח 8 בטים וכל אוגר עוד 4 בתים.
לכן פס הנתונים יביא עוד 2 ביט של הוראה, ובינתיים אוגר IP עובר כבר להצביע על ההוראה הבאה.
המעבד מפענח את ההוראה ומבצע אותה, נניח שההוראה הייתה רק קריאה-ז"א לקרוא מאיזור הנתונים מספר;
הוא שולח לפס הבקרה 0 (אומר קריאה) ושולח לפס הנתונים את המיקום שממנו הוא אמור לקרוא(במקרה שלנו, התא שמספרו הסידורי 10) . הוא שם את התוכן באוגר AL (אם היה מדובר באוגר של שני ביט הוא היה לוקח את תא מספר 10 ותא 11) .
בינתיים, כשהוא סיים את הפעולה, כבר אוגר IP הספיק להצביע על הפעולה הבאה.
נניח והפעולה הבאה היא mov dx,00 .
אז המעבד יקבל מפס ההוראות את הפקודה MOV רק שכאן המהדר יודע שהאוגר מקבל מספר לכן הפקודה MOV של אגור לאוגר לא שווה לאוגר למספר.
לכן, הוא יקח 3 בתים, יעלה את IP באחד.
ואז, הוא יראה שהוא צריך להכניס לתא DX את המספר 0, וככה הוא יעשה.
הוא יכנס גם ל dl וגם ל dh את המספר 0.

נניח וההוראה הבאה היא mov [dx],2 , המעבד יקח את ההוראות כמו שלמדתי למעלה, רק שכאן הפקודה אומרת להכניס למה שתא DX מצביע עליו את המספר 2.
כאן הוא יכניס לפס הבקרה 1 (שיסמן על כתיבה) וישלח לפס הכתובות את תוכן DX (במקרה שלנו 0) , וישלח דרך פס הכתובות (שפס הכתובות יכול גם להעביר וגם לקבל מידע-דו כיווני) את המספר 2 (00000010) , וזה יכנס לזיכרון.

אם נניח אח"כ יש את הפקודה call function באסמבלי,
אז בזמן ההידור לשפת המכונה, עובר על הקוד pro compiler שהוא הופך את מיקום התווית function למיקום האמיתי של ההוראה שבאה אחרי התווית.
בביצוע ההוראה הזו, הIP יצביע על ההוראה הבאה, ואז המצעבד יעשה את הפקודות הבאת(בדמיון):
push ip
mov ip,function
ואז ביצוע ההוראות ימשיך משם.

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

אממ... שכחתי לציין, אם יש יותר מרכיז זיכרון אחד אז יש איזור שנקרא בורר רכיבים , והוא מקושר לכל רכיבי הזיכרון שמחוברים ללוח אמ ולמעבד.
והמעבד שולח לו לאיזה רכיב הוא רוצה להתחבר (אם לרכיב הראשון הוא שולח 00000000 אם לרכיב השני 00000001 לשלישי 000000010 וכו’...), והוא מנתב את המידע לרכיב המתאים....
07/06/2007 01:24:56 devil kide
אני אשתדל להמשיך בפעם אחרת, אני אסביר יותר על הסגמנטים ועל עוד פקודת שהן לא אריתמתיות לוגיות (shl,shr..).
07/06/2007 13:08:42 SkOd
מה שעדן מנסה להגיד זה שתלך ללמוד אסמבלר.
08/06/2007 17:58:17 bla27
בדיוק, תקנה ספר של אסמבלי ומבנה המחשב.
אני למדתי מספר של האוניברסיטה הפתוחה.

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

"אירגון המחשב ותיכנותו" מאת אריה פיקז, זה בא בשני כרכים.
08/06/2007 18:17:36 devil kide
בעיקרון כל המידע נמצא באינטרנט , על הארכיטקטורה של 80X86 ושל כל סוגי המעבדים האחרים.
החלטה שלך.
08/06/2007 18:38:17 Nuuuuuu
דביל קיד.. תודה רבה על ההסבר.. באמת שהבהרת פה הרבה דבירם חשובים, במיוחד לאנשים שרק מתחילים עם העסק.
בהתחלה דיברת על המחשב בצורה כוללת ואח"כ עברת לאסמבלי ושם נתת את הדגש.. כמו שהיה צפוי לקרות וכמו שצריך לקרות.


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

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

לך תלמד, תחכים ותיישם. ככה פועלים. בהצלחה
09/06/2007 12:12:42 T4uSBaZ
אין לי מושג איך להודות לכם. הפנתם אותי להמון מקורות...

תודה חבר’ה..!
09/06/2007 16:01:31 Nuuuuuu
אין בעד מה..
כאן מי שלומד הכי הרבה וחושב הכי הרבה.. יצליח הכי הרבה.

תלמד.. זה טוב וזה גם כיף :]
09/06/2007 20:56:28 devil kide
אבידור אחי, אין בעד מה.
אתה מוזמן לדסקס איתי ב ICQ בעיניין.
09/06/2007 21:57:41 Compact
בקשר למערכת הפעלה עצמה,
יש שני מדריכונים שהלל כתב פעם,לא?
10/06/2007 16:40:25 T4uSBaZ
כן, אני חושב בגיליון ה5 של IKP
15/06/2007 19:18:39 HLL
הערות לדביל קיד (כמה שהיה לי כוח, דביל - נמאס לי להעיר לך ... תדאג שמה שאתה כותב יהיה 100% ... או שתרשום ’לא בטוח’ או משו)
CPU - יחידת עיבוד מרכזית - יע"מ
היא זו שמורכבת מכמה חלקים - אחד מהחלקים שלה היא היחידה האריתמתיט - לוגית - ה ALU (כמה שזכרוני אינו מטעה אותי, יש בנוסף אליה, יחידת גישה לBus)

יש עוד כלמיני דברים לא מלאים - אבל אני לא מצפה שמישהוא באמת יצליח לענות על שאלה כזו בצורה ברורה דרך פורום, כמו שאמרו זה לא שאלה לפורום... זה מאוד מעניין וזה תורם מאוד להבנה של תכנות (ותאמת גם האקינג ואבטחת מידע- המון) ... אתה מוזמן לשלוח לי הודעות פרטיות עם שאלות... אני תמיד אוהב לענות על שאלות Low-Level :)
16/06/2007 16:48:55 Nuuuuuu
יש יסבה לזה שאתה אוהב לענות לשאלות low-level ?

HLL בסדר.. כולם שמו לב שהוא התבלבל ורשם cpu במקום alu (arithmatic logic unit)..
בקטנה.. אבל אתה היחיד שצריך להעיר על זה.. תאמין לי שבנאדם שבאמת צריך לדעת מזה.. כבר ילמד את זה במקום אחר.. זה סתם משהו שנאמר לפרוטוקול.. למה להתפס בשטויות..
16/06/2007 20:56:49 devil kide
הלל, בקשר ל ALU ול CPU, הALU יושב בתוך ה CPU , לכן זה דיי נכון.
חוץ מזה, שמתי לב אחרי ששלחתי, אבל לא ראיתי סיבה שבגללה צריך לתקן.

איזה עוד טעויות יש?
אני מודע לזה שבגדול דלגתי על שלבים (כמו בורר הרכיבים,איך עובד כל הקטע של פס הכתובות ויש עוד 101 חלקים שלא כתבתי)
16/06/2007 21:20:18 devil kide
עכשיו ראיתי כמה תיקנת אותי על קטנות, עוד אחד כזה אני שולח את רועי שיאנוס אותך!
17/06/2007 22:02:05 HLL
:D למה נראה לך שאני אתנגד לרועי האגדי
בכל אופן...
מה שאמרת בתגובה האחרונה שלך לגבי ה ALU , זה בידיוק מה שאמרתי ...
לאדע קשה לי לקרוא משהוא שלא מדוייק ב 100% זה מפריע לי נפשית...
18/06/2007 22:11:02 Nuuuuuu
דביל.. עשית עבודת קודש.. אל תתייחס לביקורות כאלו שטותיות..
19/06/2007 13:41:40 T4uSBaZ
הקיצר יש איזה ספר שמסביר את זה טוב? אפילו באנגלית.
19/06/2007 14:22:29 דרקולה4אבאר
בקיצור, הלקח מהנושא הזה הוא מאוד פשוט: להתחיל ללמוד אסמבלר.
יש פה הסבר טוב מאוד על הנושא:
http://www.underwar.co.il/library.asp?Page=Programming#cat108
20/06/2007 00:21:40 devil kide
דרקולה, אתה יודע אסמבלי?
עמודים: 1