ריצה בסגמנט אחר

עמוד
מוצגות 5 תגובות – 1 עד 5 (מתוך 5 סה״כ)
  • מאת
    תגובות
  • #77013
    Spiritus
    משתתף

    אני יכול להעתיק את קוד התכנית לסגמנט אחר, ולהריץ אותה משם?
    ניסיתי לעשות זאת ולקרוא ל
    xor di, di
    jmp far es:[di]
    אחרי זטענתי לולאה לתוך הסגמנט, אבל זה נותן אקספשן לסיפיו.
    רציתי לדעת אם זה בגלל שעשיתי משהו לא טוב, או שזה משהו עקרוני אחר.

    #78479
    DL!
    משתתף

    The engine doesn't support segment prefixes, so the "ES:" part (which is not the default for "JMP FAR [DI]") is treated as invalid opcode.

    Even if you managed to jump to ES:DI using supported opcodes (e.g "PUSH ES", "PUSH DI", "RETF"), you'd still have a problem, as the engine only allows you to run code from the Arena segment. Otherwise, your survivor would simply jump to its private memory / stack, where it can't be touched by the other survivors – making it invulnerable to attacks.

    In fact, the engine doesn't look at your CS regsiter, but at the actual "linear" address your code is running from – this means you can change your CS segment to whatever you want, as long as your CS:IP still point the Arena memory (I believe the 2006 winning survivor actually used this feature). For example, say the Arena starts at 1000:0000 and ends in 1000:FFFF — changing CS:IP to 1001:0000 would be legal, but changing it to 1001:FFFF wouldn't be).

    #78428
    ilum_shem
    משתתף

    מה זאת אומרת לינארי?
    לדוגמא לאיפה הקוד:
    EC81:E38B
    מצביע?

    #78427
    CodeGuru
    מנהל בפורום

    ES:DX

    מצביע לכתובת

    16*ES + DX

    ה-16 הוא עשרוני, ז"א 10 בהקסהדצימלי

    ז"א 1234:5678 מצביע אל 12340+5608 שזה 17948

    #78421
    ilum_shem
    משתתף

    מה הערך ההתחלתי של CS?

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