אסמבלי ...

DadleFish

New member
נראה אותך עושה את זה בפועל!

זה שזה אפשרי תיאורטי זה נחמד
 

vinney

Well-known member
מה הבעיה?

תעשה memcpy לכתובת של פונקציה, ותקרא לה.
 

vinney

Well-known member
תלוי במ"ה כבר, לא בשפה.

מערכת שמאפשרת לך לעשות את זה באסמבלי, תאפשר את זה גם לC.
 

DecayCell

New member
לא בהכרח...

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

vinney

Well-known member
באמת?

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

DecayCell

New member
אני לא בטוח ב-100% במה שאני אומר...

אבל זה נשמע לי די הגיוני - וירוסים, למשל, מסתננים הרבה פעמים דרך buffer overflows, ובדרך כלל זה אומר שהם כותבים לחלק במחסנית שאחרי ה-buffer שאליו היה המידע אמור להיכתב, ומריצים את הקוד שלהם מתוך המחסנית (כי אי-אפשר לכתוב אל תוך מקטע הטקסט). בנוסף, לאחרונה הודיעה AMD שהיא תוסיף לארכיטקטורת ה-x86 את סיבית ה-NX (don't execute), שתמנע הרצה של קוד ממקטע מסויים - פירוש הדבר שכיום קוד יכול לרוץ מכל (או כמעט כל) איזור בזיכרון. שוב, אני לא בטוח בדברים הללו במאה אחוזים, אבל אני משער שהם כך...
 

vinney

Well-known member
נשמע מוזר ../images/Emo13.gif

אבל אני מכיר את כל הדקויות האלה מסביבות UNIX דווקא, לא PC. אם מה שאתה אומר לגבי AMD נכון, אז אם עכשיו אין סיבית כזאת בAMD, מה שאתה מתאר ניתן לביצוע שם.
 

voguemaster

New member
לא כ"כ...

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

vinney

Well-known member
לא במקרה זה

קומפיילר לא יכול לדעת לאן אני עושה memcpy. protection fault זאת שגיאה שמערכת ההפעלה מקבלת מהמעבד במצב מוגן.
 

DadleFish

New member
שני דברים

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

vinney

Well-known member
כל שפה והעדינות שלה

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

DadleFish

New member
../images/Emo6.gif

כן, טוב....
בעוונותיי אני חייב להודות שאת PERL אף פעם לא הכרתי לעומק.
 

annefan

New member
טכניקה חמודה מאוד

משמשת הרבה במודולים בפרל, בייחוד ב-OOP (Object Oriented Perl). (מצד שני, אפשר להסתדר גם בלי...)
 

DadleFish

New member
חוץ מבאסמבלי של MVS,

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

annefan

New member
לא רוצה לשמוע!

(אבל בפרל יש לזה שימוש התומך ב-code reuse, אבל איך אמר פרמה, אין לי זמן לכתוב על זה...)
 
למעלה