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

עמוד

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

מוצגות 1 תגובות (מתוך 1 סה״כ)
  • מאת
    תגובות
  • #77665
    Eat Bit not Meat
    משתתף

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

    אם קודי המקור נראים משובשים, העתיקו אותם לעורך טקסט (למשל notepad) ושם הציגו את הקוד כשהוא מוצמד לשמאל.

    BOMBER
    קוד המקור מצורף למנוע. כותב CC בית אחד בכל מחזור בן 3 פקודות, החל מכתובת 0 ומתקדם באופן רציף לאורך הזכרון. יכול לדרוס גם את עצמו.

    CANNON
    קוד המקור מצורף למנוע. כותב CC בית אחד בכל מחזור בן 3 פקודות. מתחיל לאחר הקוד של עצמו ומתקדם בקפיצות של 8 לאורך הזכרון. מכיוון שגודל הקפיצות (8) הוא מחלק של

    גודל הזכרון (64K) הכתיבות יחזרו על עצמן לאותן כתובות לאחר ביצוע סיבוב שלם לאורך הזכרון (64K/8 כתיבות). מכיוון שהקוד עצמו קטן מ 8 בתים, הכתיבות ידלגו על הקוד

    עצמו ולכן הוא לא יכול לדרוס את עצמו.

    SHOOTER
    קוד המקור:
    MOV DI,AX # Initialize DI to our code start address
    MOV AX,0CCCCh # Load 0xCCCCh to Ax, this will be written to the memory
    @loop:
    STOSW # Write Ax (0xCCCCh) to memory address (DI) and increment DI by 2
    ADD DI,9 # Add 9 to DI
    JMP @loop # Repeat last two commands forever (hopefully)

    שורד זה דומה לCANNON, אבל כותב בכל פעם 2 בתים, בפעולה של WORD, פעם במחזור של 3 פקודות. מתקדם בכל פעם 11 בתים. מתחיל לכתוב לכתובת של תחילת הקוד,

    אבל מכיוון שהפקודות הראשונות הן פקודות אתחול המורצות פעם אחת, לפני הכתיבה הראשונה, אין בעיה לכתוב עליהן. מכיוון שהקפיצות (11) הן ללא מכנה משותף עם גודל הזכרון

    (64K), סיבובים חוזרים כותבים לכתובות שונות בזכרון, כך שלכאורה במהלך 11 סיבובים על הזכרון יש כיסוי של כל הזכרון. הבעיה היא שבדרך הקוד דורס גם את עצמו, בתחילת

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

    BIMP
    קוד המקור:
    XCHG DI,AX # Initialize DI to our code start address
    ADD DI,10 # DI points to the start of loop
    MOV SI,DI
    ADD SI,10 # SI points to the start of loop
    STD # Set direction flag, MOVSW will go backward
    @loop:
    DEC DI #
    DEC DI # DI Points one word before start of loop
    MOVSW # Copy the whole loop (12 bytes)
    MOVSW # to the 12 bytes before its
    MOVSW # current location
    MOVSW # Copy the last 2 bytes first
    MOVSW # DI and SI pointers decreased by 2
    MOVSW # each time because DF=1
    INC DI # Now DI points to the start of the
    INC DI # new copy of the loop
    JMP DI # Jump to the start of the new loop

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

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

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

    להרצה של קוד הבימפ.
    ================================
    Eat Bit not Meat

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