שינוי הסגמנטים

עמוד
מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)
  • מאת
    תגובות
  • #76736
    noyalo
    משתתף

    רעיון שעלה לי, לא בטוח אם זה חוקי/לא עובד במנוע המשחק, אז לכן אשאל אותו פה:

    ES אני רוצה לכתוב לסגמנט
    MOVSW LODSW בקלות יותר, בלי להסתבך עם הפעולות
    וכו'…
    אז חשבתי על הרעיון הזה:

    אם אכתוב את השורה
    mov [1234h], ax
    [1234H] זה תא זיכרון
    DS – ולכן זה יהיה בסגמנט של התאי זיכרון
    mov DS:[1234h], ax
    מצביע עליו ES יצביע לאיפה שה DS אבל אם אגיד שהסגמנט
    ע"י הקוד הבא:
    push ds
    push es
    pop ds
    (כביכול – mov ds, es )

    mov [1234h], ax – אז בעצם כשאני כותב
    mov ES:[1234h], ax – אני בעצם עושה ככה

    האם התאוריה שלי נכונה? או שזה לא באמת עובד ככה?

    #77853
    Yoav
    משתתף

    בדיוק :)

    #77850
    noyalo
    משתתף

    סבבה. וכנ"ל גם להוציא משם קוד..

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

    אבל אולי בהשתלטות על זומבים זה יוכל לעזור..

    תודה רבה!

    #77848
    noyalo
    משתתף

    אז יש לי עוד שאלה בעניין:

    .סגמנט CSמחפש את השורה הבאה ב IPה
    ESגם ל CSאז אם אשנה את ה
    ?יורץ שם IPאז ה

    כי אם כן – אי אפשר להפסיד אם עושים את זה – כי האייפי יהיה מוגן לגמרי… ;)

    ?אז אני מנחש שזה לא נכון ולא מורשה ע"י המנוע

    #77847
    Yoav
    משתתף

    ניחוש טוב – אם תנסה להריץ פקודה מחוץ לגבולות הזירה
    0x10000 – 0x1ffff
    השורד יחטוף שגיאה וימות

    #77845
    Idan Dor
    משתתף

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

    #77843
    noyalo
    משתתף

    אתה יכול לתת דוגמא שאבין?
    מתי אפשר לעשות את השינויים, ומתי לא? ממה להיזהר כשאני עושה את זה?

    ואיך אדע אם מה שאני עושה עובד, ואל יכול לגרום לבעיות?

    האם השורדים האחרים יכולים להשפיע על השגיאה הזאת, או רק הקוד שאני עצמי מריץ?

    #77840
    Son
    משתתף

    העצה הכי טובה שלמדתי בחיים:

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

מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.