x86-64 emulátor fejlesztés
Fájlok
Dátum
Szerzők
Folyóirat címe
Folyóirat ISSN
Kötet címe (évfolyam száma)
Kiadó
Absztrakt
Egy informatikus számára fontos, hogy tudja, értse hogyan működik egy számítógép és hogy átlássa mi is történik egy program végrehajtása során a processzorban. A programok hatékonyságvizsgálatai során is fontos lehet azt tudni, hogy mikor melyik assembly szintű utasítás hajtódik végre. Ilyen adatok kigyűjtése futásidőben nem kivitelezhető egy valós rendszerben. Ha viszont az adott architektúrát emuláljuk, akkor egy program futásáról minden információt kinyerhetünk, akár tudományos akár oktatási célból. Egy olyan x86-64 architektúra emulátort akartunk létrehozni, amely képes egyszerűbb C vagy assembly nyelven megírt programok vagy valós futtatható állományok végrehajtására Linux operációs rendszer alatt. A projekt és a szoftverünk futása három fázisra bontható: előfeldolgozás, emuláció, megjelenítés. Az előfeldolgozás során a forráskódokból a gcc segítségével futtatható állományt készítünk, majd ezt a bináris fájlt a Linux objdump parancsa segítségével visszafejtjük egy már valós memóriacímeket tartalmazó assembly-szerű szöveggé, ami alapján megadható, hogy az egyes utasítások hol találhatóak a kódszegmensben és mi kerül az adatszegmens egyes bájtjaiba. Ezt használjuk fel a második lépés elején az emulátor inicializálására. Megvalósítottuk a teljes regiszterkészletet és képessé tettük az a C nyelven írt emulátort számos adatmozgató, aritmetikai és vezérlésátadó utasítás, valamint ezek különböző címzési módjainak alkalmazására. Az emulátort oktatási célra is szeretnénk használni így az utastások kapcsán nem csak a gépi kódot tároljuk el, hanem egyéb kiegészítő információkat is. Emiatt külön implementáltuk a rendszer utasítás- és adatmemóriáját egy-egy láncolt listával, hogy a valós címtérnek csak azon részeit tároljuk, amelyek ténylegesen felhasználásra kerülnek. A rendszer állapotát minden egyes utasítás végrehajtása után elmentjük és végül ezt fogja felhasználni a Pythonban írt grafikus felhasználói felület az architektúra működés interaktív szemléltetésére.