ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › הטיפ היומי – קוד המקור והסברים על ארבעת השורדים
- This topic has 0 תגובות, משתתף 1, and was last updated לפני 19 שנים, 9 חודשים by Eat Bit not Meat.
-
מאתתגובות
-
5 בפברואר 2005 בשעה 05:26 #77665Eat Bit not Meatמשתתף
בימים הבאים נציג כאן טיפים שימושיים, רעיונות, שורדי דוגמה נוספים וחזקים יותר ועוד. אתם מוזמנים להוסיף טיפים משלכם.
אם קודי המקור נראים משובשים, העתיקו אותם לעורך טקסט (למשל notepad) ושם הציגו את הקוד כשהוא מוצמד לשמאל.
BOMBER
קוד המקור מצורף למנוע. כותב CC בית אחד בכל מחזור בן 3 פקודות, החל מכתובת 0 ומתקדם באופן רציף לאורך הזכרון. יכול לדרוס גם את עצמו.CANNON
קוד המקור מצורף למנוע. כותב CC בית אחד בכל מחזור בן 3 פקודות. מתחיל לאחר הקוד של עצמו ומתקדם בקפיצות של 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 -
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.