:

Szerző: Bodnár Ádám

2001. szeptember 22. 18:34

Memóriaháború a Mátrixban

A memóriaháború gyökerei egészen 1984-ig nyúlnak vissza, amikor a Scientific American magazin (itthon Tudomány néven volt kapható) egy érdekes, elgondolkodtató cikket közölt A. K. Dewdney tollából.

Manapság a memóriaháború szó kapcsán biztosan mindenkinek az jut az eszébe, hogy vajon a DDR SDRAM vagy a Rambus DRAM lesz a jövő szabványa, hogy mikorra tűnik el a piacról a PC133 SDRAM vagy hogy melyik gyártó milyen típusú memóriát dob majd piacra. Azonban a cikkünkben nem erről lesz szó, hanem egy teljesen más memóriaháborúról, amelynek a gyökerei egészen 1984-ig nyúlnak vissza, amikor a Scientific American magazin (itthon Tudomány néven volt kapható) egy érdekes, elgondolkodtató cikket közölt A. K. Dewdney tollából.

A "Számítógépes észjáték" cikksorozatban Dewdney egy olyan harci játékot mutatott be, amelyben számítógépes programok küzdenek egymással életre-halálra. Szó szerint, ugyanis a szoftverek egyetlen célja a másik elpusztítása. A játék az azóta eltelt évek során számos változáson ment keresztül, de az alapkoncepciója ugyanaz maradt. Ezt szeretnénk most bemutatni.

A memóriaháború (Core War) programjait egy speciális assembly nyelven írják, amely a Redcode nevet viseli. Ezeket a programokat a MARS (Memory Array Redcode Simulator) futtatja. A harcosok küzdőtere a MARS által biztosított virtuális aréna, amely gyakorlatilag egy véges memóriaterületet szimbolizál. A programoknak ezen a memóriaterületen kell kivívniuk a győzelmet az ellenséges program teljes megsemmisítésével.

A harci programok mindegyike egy véletlenszerűen kiválasztott memóriacímen kezdi meg a csatát, és akkor pusztul el, ha nem végrehajtható utasításra "lép rá". A Redcode nyelv összesen 11 egyszerű utasítást tartalmaz és négyféle címzési módot ismer. Minden címzés a pillanatnyilag végrehajtott utasítés címéhez képest relatív. A MARS szimulátor felváltva hajtja végre a harcosok programsorait.

[oldal:Egy egyszerű harcos, az Imp]

Az egyik legegyszerűbb Redcode harcos az "Imp", amelyet Dewdney is leír 1984-es cikkében. Az Imp mindösszes egyetlen utasításból áll:
    MOV 0,1
Ez az egysoros program semmi mást nem csinál, mint saját magát eggyel magasabb memóriacímre másolja, ugyanis a MOV utasítás első operandusa, a 0 magára a MOV utasításra utal. Egy ciklussal később már így néz ki az Imp:
    MOV 0,1
    MOV 0,1
ergo a MARS által a következő ciklusban végrehajtandó utasítás ismét önmaga lesz. Az Imp így szépen felülírja magával az egész rendelkezésre álló memóriaterületet.

Az Imp nagyon gyorsan terjed, azonban képességei korlátozottak. Amennyiben olyan memóriacímre írja be magát, amelyet az ellenséges program hajt végre, az ellenséges program is azon nyomban Imppé változik. Legfeljebb akkor érhető el siker ezzel a harcossal, ha sikerül felülírni az ellenség valamilyen adatát, vagy olyan kárt okozni, ami után az ellenséges program saját magát semmisíti meg.

Az eredeti cikkben szereplő másik program a "Bomber". A Bomber nem végrehajtható utasításokkal árasztja el a memóriát, és kis szerencsével sikerül felülírnia az ellenséges program valamely sorát is. Mint már említettük, a nem végrehajtható utasítás végrehajtása jelenti a programok halálát.

Korábban már volt róla szó, hogy a memóriaháború szabályai és a Redcode utasítások is átalakultak az idők során. Az egyik legfontosabb újítás a többszálúság engedélyezése volt, azaz a harci programok egyszerre több utasítást is végrehajthattak. Egy program elpusztításához az összes szál elpusztítása szükségeltetik. Lássunk egy példát:

    SPL 0
    MOV 0,1
Olvasóink bizonyára észrevették a korábban már bemutatott Imp nevű harcost. Az SPL a Split (osztódás) utasítás, ennek segítségével indíthatunk új szálat a programunkban. Egy ciklus után a harcosunk így néz ki:
    SPL 0
    MOV 0,1
Miután mindkét szál futása befejeződött, ezt kaptuk:
    SPL 0
    MOV 0,1
    MOV 0,1
Azaz a programunk minden egyes ciklusban romboló útjára indít egy Impet, amelyek aztán megindulnak az ellenség felé.

[oldal:Háború az interneten]

Általánosságban elmondható, hogy a harci programok több különféle stratégiát alkalmaznak, legalábbis ezekből indulnak ki a tervezők. Ezek közül az első a már korábban említett Bomber. A hatásos bombázáshoz minél nagyobb memóriaterületet kell bombázni, vigyázva, hogy a program ne tegyen kárt saját magában. Hogy a bombák között igazából mekkora rés az ideális, az az ellenségtől függ, úgyhogy egy Bomber sikeres alkalmazásához szerencse is szükséges.

A második taktika a letapogatás. A MARS a virtuális csatamező inicializálásakor a memóriacímeket egy adott értékkel tölti fel. Ha a programuk elkezdi keresni az ettől eltérő tartalmú memóriacímeket, akkor jó eséllyel ráakadhat az ellenséges programra, és egy jól irányzott bombázással megsemmisítheti azt.

Érdekes harci program még a replikátor, amely saját magát új memóriacímre tudja másolni. Ezek gyakorlatilag mozgó bombáknak tekinthetők.

Az egyik legérdekesebb harcos a Vámpír. Mivel a memóriát JMP (feltétel nélküli ugrás) utasításokkal is lehet bombázni, az ellenséges programot egy JMP-vel könnyen rábírhatjuk, hogy teljesen ártalmatlan kódot hajtson végre. A Vámpír egyik különösen kegyetlen alkalmazása, amikor az ellenséges programot egy JMP-vel elfogjuk és olyan címre irányítjuk, ahol SPL utasításokkal több szálra bontjuk ezzel rendkívül lelassítva a futását. Közben pedig elkezdjük bombázni a memóriát... Sajnos a vámpíroknak az a hátránya, hogy letapogatással könnyen a nyomára lehet akadni a JMP-bombáknak.

A memóriaháború harcosai jellemzően a fenti taktikákat kombinálják és ma már nem ritka a 80-100 utasításból álló harci program sem. A világ összes táján rendeznek memóriaháború-bajnokságot, és természetesen az Interneten is vannak helyek, ahol a versenyzők összemérhetik a tudásukat.

Ha valaki kedvet kapott a memóriaháborúhoz, javaslom, látogassa meg a KOTH.org oldalt, amely nem csak hadszíntér, hanem a memóriaháborúval kapcsolatos leírások és programok gyűjteménye is. Letölthető innen a pMARS (portable MARS) szimulátor Windows, Mac, Amiga és DOS-verziója, bővebben olvashatunk a játék történetéről és természetesen a harci programok nyelvének, a Redcode-nak is megtaláljuk a részletes leírását.

Szólj hozzá a fórumban!

Milyen technológiai és munkaerőpiaci hatások érhetik a backendes szakmát? Május 8-án végre elindul az idei kraftie! meetup-sorozat is (helyszíni vagy online részvétellel).

a címlapról

Hirdetés

Security témákkal folyatódik az AWS hazai online meetup-sorozata!

2024. április 26. 23:14

A sorozat május 28-i, harmadik állomásán az AWS-ben biztonsági megoldásait vesszük nagyító alá. Átnézzük a teljes AWS security portfóliót a konténerbiztonságtól a gépi tanulásos alkalmazások védelmén át, egészen az incidenskezelésig.