Memóriakép (memory dump): A folyamat magyarázata és diagnosztikai célja

A memóriakép vagy memory dump egy pillanatkép a számítógép memóriájáról, amely segít a hibák és összeomlások okainak feltárásában. Ez az eszköz fontos a fejlesztők és rendszergazdák számára a problémák gyors diagnosztizálásához és megoldásához.
ITSZÓTÁR.hu
42 Min Read
Gyors betekintő

A modern számítástechnikai rendszerek komplexitása ellenére is előfordulnak olyan váratlan és kritikus hibák, amelyek a rendszer működésének leállásához, vagyis összeomlásához vezetnek. Ilyenkor a rendszer stabilitásának helyreállítása mellett kulcsfontosságú a hiba okának felderítése, ami gyakran rendkívül nehéz feladat. Ebben a folyamatban nyújt felbecsülhetetlen segítséget a memóriakép, más néven memory dump. Ez egy pillanatfelvétel az operációs rendszer és a futó alkalmazások memóriájának tartalmáról abban a kritikus pillanatban, amikor a hiba bekövetkezik.

A memóriakép egyfajta digitális boncolásnak tekinthető, amely lehetővé teszi a szakemberek számára, hogy visszamenőleg elemezzék a rendszer állapotát a hiba előtti másodpercekben. Ez a részletes információgyűjtés elengedhetetlen a gyökérok (root cause) azonosításához, legyen szó szoftveres bugról, illesztőprogram hibáról, hardver problémáról vagy akár egy rosszindulatú szoftver tevékenységéről. A megfelelő tudással és eszközökkel felszerelt elemző számára a memory dump egy kincsesbánya, amely feltárja a rendszer összeomlásához vezető események láncolatát.

Mi is az a memóriakép (memory dump) és miért létfontosságú?

A memóriakép alapvetően egy fájl, amely az operációs rendszer (OS) memóriájának tartalmát rögzíti egy adott időpontban, jellemzően egy kritikus hiba, például egy rendszerösszeomlás vagy kék halál (BSOD) bekövetkezésekor. Ez a fájl tartalmazza a rendszer memóriájában lévő összes adatot, beleértve a futó programok kódját, az aktív folyamatok állapotát, a CPU regisztereinek tartalmát, a verem (stack) és a kupac (heap) adatait, valamint a kernel struktúráit.

A létfontosságú szerepe abban rejlik, hogy a hibakeresés során a fejlesztők és rendszeradminisztrátorok számára lehetővé teszi, hogy megvizsgálják a rendszer belső állapotát anélkül, hogy valós időben kellene reprodukálniuk a hibát. Ez különösen hasznos olyan instabil vagy nehezen reprodukálható problémák esetén, amelyek csak ritkán vagy specifikus körülmények között jelentkeznek. A memóriakép elemzése egyfajta időutazás a hiba pillanatába, ami nélkülözhetetlen a komplex rendszerek stabil működésének fenntartásához.

„A memóriakép nem csupán egy fájl; ez a rendszer utolsó segélykiáltása, amely a hiba gyökérokának feltárásához szükséges összes információt magában hordozza.”

A rendszerösszeomlások mögött számos ok állhat, a hibás illesztőprogramoktól kezdve a hardveres meghibásodásokon át egészen a szoftveres hibákig. Egy memory dump elemzése során a szakember képes azonosítani, melyik komponens okozta a hibát, milyen adatok voltak a memóriában a hiba pillanatában, és milyen műveletek vezettek az összeomláshoz. Ezen információk nélkül a hibakeresés gyakran vakrepülés, ami jelentős időt és erőforrásokat emészt fel.

A memóriaképek típusai: Melyik mire való?

Nem minden memóriakép egyforma. Az operációs rendszerek, különösen a Windows, többféle típusú memóriaképet generálhatnak, amelyek eltérő mennyiségű és típusú információt tartalmaznak. A választás attól függ, hogy milyen jellegű hibát próbálunk diagnosztizálni, és mennyi tárhely áll rendelkezésre a dump fájl tárolására.

Teljes memóriakép (complete memory dump)

A teljes memóriakép, ahogy a neve is sugallja, a rendszer fizikai memóriájának teljes tartalmát rögzíti. Ez magában foglalja az operációs rendszer kerneljét, a felhasználói módú folyamatokat, az illesztőprogramokat és minden egyéb, a memóriában lévő adatot. Ez a legátfogóbb típusú dump, amely a legtöbb információt nyújtja a hibakereséshez.

Előnye, hogy szinte minden típusú hibát képes feltárni, beleértve a felhasználói módú alkalmazásokkal kapcsolatos problémákat is. Hátránya viszont, hogy rendkívül nagy méretű lehet – egy 32 GB RAM-mal rendelkező rendszer esetén akár 32 GB-os fájlt is eredményezhet –, ami jelentős tárhelyet igényel, és sok időt vehet igénybe a generálása és az elemzése. Általában kritikus, nehezen reprodukálható hibák esetén használják, amikor a lehető legtöbb adat szükséges a gyökérok azonosításához.

Rendszermag memóriakép (kernel memory dump)

A rendszermag memóriakép csak az operációs rendszer kerneljének memóriatartalmát rögzíti. Ez magában foglalja a kernel módú folyamatokat, a kernel memóriaterületeit, az illesztőprogramokat és az operációs rendszer alapvető struktúráit. A felhasználói módú alkalmazások memóriatartalmát nem tartalmazza.

Ez a típusú dump kisebb, mint a teljes memóriakép, mivel nem tartalmazza az összes felhasználói módú adatot. Ideális választás, ha a hiba valószínűleg az operációs rendszer kerneljében vagy egy illesztőprogramban keresendő, például egy kék halál (BSOD) esetén. Mivel a legtöbb rendszerösszeomlást kernel módú hibák okozzák, a kernel dump gyakran elegendő a probléma diagnosztizálásához, miközben kisebb fájlmérettel és gyorsabb generálással jár.

Kis memóriakép (mini dump)

A kis memóriakép (más néven minidump vagy small memory dump) a legkisebb méretű dump típus. Csak a leglényegesebb információkat tartalmazza az összeomlásról: a Stop kódot, a hibás illesztőprogramot vagy modult, a processzor regisztereinek tartalmát, a veremkövetést (stack trace) és a futó folyamatok listáját. Nem tartalmazza a teljes memóriatartalmat.

A minidump előnye a rendkívül kis fájlméret, ami gyors generálást és könnyű kezelhetőséget eredményez. Kiválóan alkalmas az elsődleges diagnózishoz, különösen, ha a hiba ismétlődő, és gyorsan meg akarjuk állapítani a legvalószínűbb okot. Sok esetben a minidump elegendő ahhoz, hogy azonosítsuk a hibás drivert vagy szoftvert. Azonban komplexebb problémák, például memória szivárgások vagy nehezen követhető holtpontok esetén korlátozott információt nyújthat.

Aktív memóriakép (active memory dump)

Az aktív memóriakép egy olyan speciális típus, amelyet Windows Server operációs rendszereken használnak, különösen virtualizált környezetekben. Ez a dump típus szűri a memóriatartalmat, kihagyva azokat a lapokat, amelyekről ismert, hogy nem tartalmaznak hasznos hibakeresési információkat, például az oldalozott memóriát (page file) vagy a nem kernel memóriaterületeket.

Célja, hogy egy kernel dumpnál több, de egy teljes dumpnál kevesebb információt rögzítsen, ezzel csökkentve a fájlméretet, miközben elegendő adatot biztosít a szerverekkel kapcsolatos hibák diagnosztizálásához. Különösen hasznos lehet, ha a szerverek nagy mennyiségű RAM-mal rendelkeznek, és a teljes dump generálása túl sokáig tartana, vagy túl nagy fájlt eredményezne.

Folyamat memóriakép (process dump)

A folyamat memóriakép nem az egész rendszer, hanem egyetlen, specifikus folyamat memóriatartalmát rögzíti, amikor az összeomlik vagy nem válaszol. Ez a dump típus kritikus fontosságú az alkalmazás-szintű hibák, például egy program váratlan leállása vagy lefagyása esetén.

A folyamat dump tartalmazza az adott alkalmazás memóriáját, a szálak állapotát, a CPU regisztereket és egyéb releváns adatokat, amelyek segítenek a fejlesztőknek azonosítani az alkalmazás kódjában lévő hibát. Eszközök, mint például a ProcDump (Windows) vagy a GDB (Linux), használhatók folyamat dumpok generálására. Ez a típusú memory dump elengedhetetlen a szoftverfejlesztésben és az alkalmazások támogatásában, mivel célzottan az adott alkalmazás problémájára fókuszál.

Hogyan keletkezik egy memóriakép? A folyamat lépései

A memóriakép generálása nem egy egyszerű fájl másolás, hanem egy komplex folyamat, amelyet az operációs rendszer végez el egy kritikus hiba észlelésekor. Ennek megértése segít abban, hogy hatékonyabban konfiguráljuk és használjuk a dumpokat a hibakeresés során.

A Stop hiba (BSOD) kiváltó okai

A legtöbb memóriakép generálását egy úgynevezett Stop hiba váltja ki, amelyet a Windows rendszereken gyakran kék halál (Blue Screen of Death, BSOD) néven ismerünk. Ez a hiba akkor következik be, amikor az operációs rendszer kernelje olyan kritikus hibát észlel, amelyből nem tud helyreállni. Ilyen lehet például:

  • Egy hibás illesztőprogram, amely illegális memóriaterületre ír.
  • Hardveres meghibásodás, például RAM hiba vagy túlmelegedés.
  • Kritikus rendszerfájlok sérülése.
  • Versenyhelyzet (race condition) vagy holtpont (deadlock) a kernelben.

Amikor a kernel észleli ezt a helyrehozhatatlan hibát, leállítja a rendszert, hogy megakadályozza a további adatvesztést és a rendszer integritásának sérülését. Ekkor kezdődik meg a memóriakép generálásának folyamata.

Az operációs rendszer szerepe

Amikor egy Stop hiba bekövetkezik, az operációs rendszer crash dump drivere veszi át az irányítást. Ez egy speciális, minimalista meghajtó, amely a lehető legkevesebb erőforrással működik, hogy a rendszer a lehető legstabilabb állapotban maradjon a dump írásának idejére. A driver feladata, hogy a memóriatartalmat egy előre meghatározott helyre, egy fájlba írja.

A Windows esetében a crash dump driver (dump_*.sys) felelős a memóriatartalom gyűjtéséért és a lemezre írásáért. Ez a folyamat rendkívül alacsony szinten zajlik, gyakran még azelőtt, hogy a grafikus felület teljesen leállna, vagy bármilyen más rendszerszolgáltatás futna.

A lapozófájl (page file) és a dedikált dump fájl

A memóriakép generálásához elengedhetetlen a megfelelő méretű tárhely. A Windows rendszereken a lapozófájl (page file vagy swap file) kulcsszerepet játszik ebben. A lapozófájl egy speciális fájl a merevlemezen, amelyet az operációs rendszer a fizikai memória kiterjesztésére használ.

Amikor egy teljes vagy kernel memóriaképet kell generálni, a lapozófájl méretének meg kell felelnie a fizikai RAM méretének, vagy annál nagyobbnak kell lennie (általában RAM + 256MB). Az operációs rendszer képes a memóriatartalmat közvetlenül a lapozófájlba írni a crash pillanatában. Miután a rendszer újraindult, a lapozófájlból kinyeri a dump adatokat, és egy különálló .dmp kiterjesztésű fájlba másolja, amelyet a %SystemRoot%\Minidump vagy %SystemRoot% mappában tárol.

Alternatív megoldásként konfigurálható egy dedikált dump fájl is, amely egy különálló, előre lefoglalt fájl a merevlemezen, kifejezetten a memóriaképek tárolására. Ez akkor lehet hasznos, ha a lapozófájl mérete nem elegendő, vagy ha külön szeretnénk kezelni a dump fájlokat. A dedikált dump fájl használata biztosítja, hogy a memóriakép generálása mindig sikeres legyen, függetlenül a lapozófájl aktuális állapotától.

A memóriakép írásának mechanizmusa

A memóriakép írásának mechanizmusa a következőképpen zajlik:

  1. Hiba észlelése: Az operációs rendszer kernelje észleli a helyrehozhatatlan hibát.
  2. Rendszer leállítása: A rendszer leállítja a normál működést, és a crash dump driver veszi át az irányítást.
  3. Memória tartalmának olvasása: A crash dump driver elkezdi olvasni a fizikai memória tartalmát.
  4. Adatok írása: A leolvasott adatokat a lapozófájlba vagy a dedikált dump fájlba írja. Ez egy szekvenciális írási művelet, amely optimalizálva van a sebességre.
  5. Befejezés és újraindítás: Miután az összes releváns memóriatartalom lemezre került, a rendszer újraindul.
  6. Fájl másolása (ha szükséges): Az újraindulás után az operációs rendszer a lapozófájlból kinyeri a dump adatokat, és egy .dmp fájlba másolja, majd törli a lapozófájlból az ideiglenes adatokat.

Ez a folyamat kritikus a memóriakép integritásának megőrzéséhez, mivel a hiba pillanatában a rendszer már instabil állapotban van. A crash dump driver minimalista jellege biztosítja, hogy a lehető legkevesebb további zavaró tényező befolyásolja az adatgyűjtést.

Konfigurációs beállítások (Windows)

A Windows operációs rendszerekben a memóriakép beállításai a „Rendszer tulajdonságai” (System Properties) ablakban, a „Speciális” (Advanced) fülön, a „Indítás és helyreállítás” (Startup and Recovery) részben találhatók. Itt választhatjuk ki a kívánt dump típust (nincs, kis, kernel, teljes, aktív), valamint meghatározhatjuk a dump fájl helyét.

A megfelelő konfiguráció kulcsfontosságú. Ha például egy teljes memóriaképet szeretnénk generálni, de a lapozófájl túl kicsi, akkor a dump generálása sikertelen lesz, és nem kapunk hasznos hibakeresési információt. Érdemes proaktívan beállítani ezeket a paramétereket, különösen szervereken és kritikus rendszereken.

A memóriaképek elemzésének alapjai: Milyen információkat rejt?

A memóriaképek elemzése segít hibák észlelésében és rendszerdiagnosztikában.
A memóriaképek elemzése feltárhatja a futó programok állapotát, hibáit és a rendszer biztonsági incidenseit.

A memóriakép generálása csak az első lépés. Az igazi érték a benne rejlő információk elemzésében rejlik. Ez egy összetett feladat, amely speciális eszközöket és mélyreható rendszermag-ismereteket igényel. Az elemzés célja a hiba gyökérokának azonosítása és a jövőbeni előfordulásának megelőzése.

A stack trace (veremkövetés) jelentősége

Az egyik legfontosabb információ, amit egy memóriakép szolgáltat, a stack trace vagy veremkövetés. Ez egy lista azokról a függvényhívásokról, amelyek a hiba bekövetkezésekor aktívak voltak. A veremkövetés megmutatja a program végrehajtásának útját, egészen addig a pontig, ahol a hiba történt.

Egy tipikus stack trace a legutolsó hívástól visszafelé haladva mutatja a függvényeket, így a fejlesztők láthatják, melyik függvény hívta meg a hibás függvényt, és milyen argumentumokkal. Ez segít azonosítani a hibás kódrészletet vagy az illesztőprogramot, ami kritikus a szoftveres hibák diagnosztizálásában. A veremkövetésből az is kiderülhet, hogy egy bizonyos illesztőprogram vagy modul okozta a problémát, ami egyértelmű útmutatást ad a hibaelhárításhoz.

Processzor regiszterek és a programfutás állapota

A memóriakép tartalmazza a processzor (CPU) regisztereinek tartalmát is a hiba pillanatában. Ezek a regiszterek tárolják a CPU aktuális állapotát, beleértve a program számlálót (instruction pointer), a veremmutatót (stack pointer) és az általános célú regisztereket, amelyek a futó program aktuális adatait tartalmazzák.

Ezen információk elemzése lehetővé teszi, hogy pontosan lássuk, milyen utasítást hajtott végre a CPU a hiba pillanatában, és milyen adatokkal dolgozott. Ez rendkívül hasznos az alacsony szintű hibakeresésben, például hardveres megszakítások vagy memóriaelérési hibák esetén. A regiszterek tartalma segíthet megérteni a hiba kontextusát, és feltárni a mögöttes problémákat, amelyek a rendszerösszeomláshoz vezettek.

Memória tartalom vizsgálata (heap, stack)

A memóriakép a rendszer teljes vagy részleges memóriatartalmát rögzíti, ami lehetővé teszi a heap (kupac) és a stack (verem) memória vizsgálatát. A heap a dinamikusan allokált memória, amelyet az alkalmazások futás közben használnak. A stack a függvényhívások és a lokális változók tárolására szolgál.

A heap memória vizsgálata segíthet azonosítani a memória szivárgásokat, a memória korrupcióját vagy a helytelen memória allokációt. A stack tartalmának elemzése kiegészíti a stack trace-t, további kontextust biztosítva a függvényhívásokhoz és a lokális változókhoz. Ezek az információk kritikusak az olyan komplex hibák diagnosztizálásában, mint a buffer overflow vagy a use-after-free hibák, amelyek gyakran vezetnek biztonsági résekhez vagy rendszerösszeomlásokhoz.

Modulok és illesztőprogramok listája

A memóriakép tartalmazza a rendszerben betöltött összes modul és illesztőprogram listáját, azok verziószámával és betöltési címeivel együtt. Ez az információ létfontosságú annak megállapításában, hogy melyik szoftverkomponens okozhatta a hibát.

Ha egy hiba egy adott illesztőprogramhoz köthető, a dump elemzése azonnal rámutat erre a komponensre. Ezenkívül lehetővé teszi a verziókonfliktusok vagy az elavult illesztőprogramok azonosítását, amelyek gyakran vezetnek instabilitáshoz. A modulok listája segíthet felderíteni a harmadik féltől származó szoftverek okozta problémákat is, amelyek gyakran rejtve maradnak a felületi hibajelentésekben.

Eseménynaplók összefüggései

Bár a memóriakép önmagában is gazdag információforrás, az eseménynaplók (event logs) adataival együtt elemezve még átfogóbb képet kaphatunk a hiba előtti eseményekről. Az eseménynaplók rögzítik a rendszerben zajló eseményeket, például szolgáltatásindításokat, hibákat, figyelmeztetéseket vagy biztonsági audit eseményeket.

Az eseménynaplók és a memory dump adatok összevetésével azonosíthatók azok az események, amelyek közvetlenül megelőzték az összeomlást. Például, ha az eseménynaplók egy bizonyos szolgáltatás indítását vagy egy illesztőprogram frissítését mutatják az összeomlás előtt, az erős bizonyítékot szolgáltathat a hiba okára. Ez a kombinált megközelítés kulcsfontosságú a komplex, időzítési hibák vagy ritka események okozta problémák diagnosztizálásában.

Gyakori hibajelenségek diagnosztizálása memóriaképek segítségével

A memóriaképek elemzése számos gyakori és összetett hibajelenség diagnosztizálására alkalmas. Az alábbiakban bemutatjuk, milyen típusú problémák felderítésében nyújtanak kulcsfontosságú segítséget.

Illesztőprogram hibák (driver issues)

Az illesztőprogram hibák a kék halál (BSOD) leggyakoribb okai közé tartoznak. Egy hibás vagy inkompatibilis illesztőprogram könnyedén összeomolhatja az operációs rendszer kerneljét, mivel kernel módban fut, és közvetlenül hozzáfér a hardverhez. A memóriakép elemzése rendkívül hatékony ezen problémák azonosításában.

Az elemző eszközök, mint például a WinDbg, gyakran azonnal rámutatnak a hibás illesztőprogramra a Stop kód és a veremkövetés alapján. Megmutatják, melyik driver modul volt aktív a hiba pillanatában, és melyik funkciója okozta az összeomlást. Ez lehetővé teszi a felhasználók számára, hogy frissítsék, visszaállítsák vagy eltávolítsák a problémás illesztőprogramot, ezzel megoldva a rendszer instabilitását.

Hardver problémák azonosítása

Bár a memóriakép elsősorban szoftveres információkat tartalmaz, közvetett módon segíthet a hardver problémák azonosításában is. Például, ha a dump elemzése ismétlődően memóriaelérési hibákat (pl. „PAGE_FAULT_IN_NONPAGED_AREA”) mutat különböző illesztőprogramokban és alkalmazásokban, az erős gyanút vethet fel egy hibás RAM modulra.

Hasonlóképpen, ha egy adott periféria illesztőprogramja (pl. hálózati kártya, videokártya) okoz folyamatosan összeomlásokat, miközben az illesztőprogram naprakész és stabil, az jelezheti a hardveres komponens meghibásodását. Bár a dump nem diagnosztizálja közvetlenül a hardvert, rámutathat azokra a szoftveres tünetekre, amelyek a hardveres problémákra utalnak, irányt mutatva a további fizikai hibakereséshez.

Memória szivárgások (memory leaks)

A memória szivárgások akkor fordulnak elő, amikor egy alkalmazás vagy illesztőprogram memóriát foglal le, de azt soha nem szabadítja fel, még akkor sem, ha már nincs rá szüksége. Idővel ez a jelenség kimerítheti a rendszer teljes memóriáját, ami teljesítményromláshoz vagy akár rendszerösszeomláshoz vezethet. A memóriaképek kiválóan alkalmasak a memória szivárgások felderítésére.

Egy teljes memóriakép elemzésével a szakemberek megvizsgálhatják a rendszer memóriahasználatát, és azonosíthatják azokat a folyamatokat vagy modulokat, amelyek indokolatlanul nagy mennyiségű memóriát foglalnak el. Speciális debugger parancsokkal (pl. !vm, !poolusage WinDbg-ben) részletesen feltárható, hogy melyik kód allokálja a memóriát, és miért nem szabadítja fel. Ez a képesség elengedhetetlen a hosszú távú rendszerstabilitás fenntartásához.

Holtpontok (deadlocks) és versenyhelyzetek

A több szálon futó alkalmazásokban és az operációs rendszer kerneljében gyakran előfordulnak holtpontok (deadlocks) és versenyhelyzetek (race conditions). Egy holtpont akkor keletkezik, amikor két vagy több szál kölcsönösen vár egymásra, hogy feloldja egy erőforrás zárolását, ami az alkalmazás vagy a rendszer lefagyásához vezet. A versenyhelyzet pedig akkor, ha az erőforrásokhoz való hozzáférés sorrendje befolyásolja a program kimenetelét, váratlan viselkedést okozva.

A memóriaképek elemzésével a szakemberek megvizsgálhatják a szálak állapotát, a zárolásokat (locks) és a szinkronizációs objektumokat a hiba pillanatában. A veremkövetések és a regiszterek tartalma segíthet feltárni, mely szálak vártak egymásra, és milyen erőforrások okozták a holtpontot. Ez a komplex hibadiagnosztika kulcsfontosságú a stabil, párhuzamos rendszerek fejlesztésében és üzemeltetésében.

Alkalmazásösszeomlások

Amikor egy felhasználói módú alkalmazás összeomlik, de a rendszer továbbra is működőképes marad, egy folyamat memóriakép (process dump) generálása a legmegfelelőbb diagnosztikai módszer. Ez a dump típus csak az adott alkalmazás memóriatartalmát rögzíti, ezzel minimalizálva a fájlméretet és fókuszálva a problémára.

Az elemzés során a fejlesztők megvizsgálhatják az alkalmazás veremkövetését, a memóriatartalmát, a betöltött modulokat és a szálak állapotát az összeomlás pillanatában. Ez segít azonosítani az alkalmazás kódjában lévő hibákat, például null pointer dereferálást, érvénytelen memóriaelérést vagy kivételkezelési problémákat. A folyamat dumpok elengedhetetlenek a szoftverminőség biztosításában és a hibajavítási ciklus felgyorsításában.

Kritikus biztonsági rések felderítése

A memóriaképek nemcsak stabilitási problémák diagnosztizálására alkalmasak, hanem kritikus biztonsági rések felderítésére is. Egy rendszerösszeomlás mögött gyakran állhat rosszindulatú szoftver tevékenysége, például egy exploit, amely kihasznál egy sérülékenységet, és memóriakorrupciót okoz.

Egy dump elemzése során a szakemberek azonosíthatják a szokatlan memóriaterületek tartalmát, a kódinjekció jeleit, vagy az illegális rendszerhívásokat. A memória tartalmának vizsgálata felfedheti a rosszindulatú kód jelenlétét, a rootkit-ek nyomait vagy a jogosultság-eszkalációs kísérleteket. Ez a képesség rendkívül értékes a digitális kriminalisztikában és a biztonsági incidensek elemzésében, segítve a támadások mechanizmusának megértését és a jövőbeni védekezés megerősítését.

Eszközök a memóriaképek elemzéséhez

A memóriaképek elemzéséhez speciális szoftvereszközökre van szükség, amelyek képesek értelmezni a bináris adatokat, és emberi számára olvasható formába alakítani azokat. A legnépszerűbb és legátfogóbb eszköz a Microsoft Windows Debugger (WinDbg).

WinDbg (Windows Debugger): Részletes bemutatás

A WinDbg a Microsoft által fejlesztett, ingyenesen elérhető hibakereső eszköz, amely a Windows operációs rendszerekhez készült. Képes kernel módú és felhasználói módú alkalmazások hibakeresésére, valamint memóriaképek elemzésére. Rendkívül hatékony és sokoldalú, de magas tanulási görbével rendelkezik.

A WinDbg a Debugging Tools for Windows csomag része, amely letölthető a Microsoft weboldaláról. Telepítése után a program parancssori felületen vagy grafikus felületen is használható, bár a legtöbb haladó elemzést parancsokkal végzik.

Szimbólumfájlok (symbol files)

A szimbólumfájlok (symbol files) kulcsfontosságúak a WinDbg használatához. Ezek a fájlok (általában .pdb kiterjesztésűek) tartalmazzák a forráskód és a fordított bináris kód közötti megfeleltetéseket, például a függvényneveket, változóneveket és sorazonosítókat. Nélkülük a debugger csak memóriacímeket és hexadecimális kódokat mutatna, ami szinte lehetetlenné tenné az elemzést.

A WinDbg konfigurálható úgy, hogy a Microsoft szimbólum szerveréről töltse le a szükséges szimbólumokat az operációs rendszer és a Microsoft alkalmazások számára. A harmadik féltől származó illesztőprogramokhoz és alkalmazásokhoz a gyártótól kell beszerezni a szimbólumfájlokat. A szimbólumok megfelelő beállítása nélkül az elemzés jelentősen korlátozottá válik, és nehéz lesz értelmezhető eredményeket kapni.

Bővítmények (extensions)

A WinDbg funkcionalitása bővíthető bővítményekkel. Ezek olyan DLL-ek, amelyek további parancsokat és elemző funkciókat biztosítanak. Számos beépített bővítmény létezik (pl. ext.dll, kdexts.dll), de harmadik féltől származó bővítmények is telepíthetők. Például az !analyze -v parancs, amely a leggyakrabban használt elemző parancs, valójában egy bővítmény része.

A bővítmények lehetővé teszik speciális adatszerkezetek vizsgálatát, komplex elemzések futtatását, vagy akár egyedi hibakeresési feladatok automatizálását. A bővítmények használata jelentősen felgyorsíthatja és hatékonyabbá teheti a memóriaképek elemzését, különösen specifikus problémák esetén.

Alapvető parancsok WinDbg-ben

Néhány alapvető WinDbg parancs, amelyek elengedhetetlenek a memóriaképek elemzéséhez:

  • !analyze -v: Ez a legfontosabb parancs. Automatikusan elemzi a dump fájlt, megpróbálja azonosítani a hiba okát, és részletes információkat szolgáltat a Stop kódról, a hibás modulról és a veremkövetésről. A -v kapcsoló részletesebb kimenetet eredményez.
  • kv: Megjeleníti a kernel veremkövetését (kernel stack trace). Ez segít azonosítani a függvényhívások sorrendjét a kernelben, ami kulcsfontosságú a kernel módú hibák diagnosztizálásában.
  • lm: Listázza a betöltött modulokat és illesztőprogramokat. Megjeleníti a modul nevét, a betöltési címét és a verziószámát. Ez segít azonosítani a problémás komponenseket.
  • !thread: Információt jelenít meg egy adott szálról, beleértve a veremkövetését és a regiszterek tartalmát.
  • !process 0 0: Listázza az összes aktív folyamatot a rendszerben a hiba pillanatában.
  • !pte [cím]: Megjeleníti a lapozótábla bejegyzését (Page Table Entry) egy adott virtuális memóriacímhez. Ez hasznos a memóriaelérési hibák mélyreható vizsgálatához.
  • dt [típus] [cím]: Megjeleníti egy adatszerkezet tartalmát egy adott memóriacímen. Például dt nt!_EPROCESS egy folyamat objektum struktúráját mutatja be.

Ezek a parancsok csak a jéghegy csúcsát jelentik, de segítségükkel már el lehet kezdeni a memóriaképek hatékony elemzését. A WinDbg parancsnyelv elsajátítása időigényes, de elengedhetetlen a mélyreható hibakereséshez.

ProcDump

A ProcDump egy parancssori segédprogram a Sysinternals Tools csomagból, amelyet a Microsoft fejlesztett. Elsősorban folyamat memóriaképek (process dumps) generálására szolgál. Képes dumpot készíteni egy futó folyamatról, vagy automatikusan generálni egyet, ha egy folyamat összeomlik, lefagy, vagy CPU-t és memóriát fogyaszt egy bizonyos küszöbérték felett.

A ProcDump rendkívül hasznos a felhasználói módú alkalmazások hibakeresésében, mivel lehetővé teszi a fejlesztőknek, hogy pontosan a hiba pillanatában rögzítsék az alkalmazás állapotát anélkül, hogy az egész rendszert le kellene állítaniuk. Paraméterekkel konfigurálható, hogy milyen típusú dumpot készítsen (mini, mini with full memory, full), és milyen triggereket figyeljen (CPU usage, memory usage, hung window, exceptions).

LiveKD

A LiveKD egy másik Sysinternals eszköz, amely lehetővé teszi a WinDbg számára, hogy egy futó rendszert hibakeressen, mintha egy kernel memóriaképet elemezne. Ez azt jelenti, hogy valós időben vizsgálhatjuk a kernel belső állapotát anélkül, hogy ténylegesen összeomlana a rendszer, vagy dumpot kellene generálnunk.

A LiveKD különösen hasznos az élő rendszerek problémáinak diagnosztizálásában, például ha egy rendszer lassan működik, de nem omlik össze teljesen. Segítségével valós időben futtathatjuk a WinDbg parancsokat, és megvizsgálhatjuk a kernel belső struktúráit, a futó illesztőprogramokat és a memóriahasználatot. Ez egy hatékony eszköz a proaktív hibakereséshez és a rendszer teljesítményének optimalizálásához.

Más platformok eszközei (Linux `crash` utility, GDB)

Bár a fenti eszközök elsősorban Windows-specifikusak, más operációs rendszerek is rendelkeznek hasonló képességekkel és eszközökkel a memóriaképek elemzésére.

  • Linux: A Linux rendszereken a crash utility egy népszerű eszköz a kernel dumpok elemzésére. Képes betölteni egy kernel memory dump fájlt (pl. kdump által generáltat), és interaktív felületet biztosít a kernel belső állapotának vizsgálatához. A gdb (GNU Debugger) pedig a felhasználói módú alkalmazások hibakeresésére és a folyamat dumpok elemzésére szolgál. Emellett a perf, strace, ltrace és más parancssori eszközök is segíthetnek az élő rendszerek diagnosztikájában.
  • macOS: A macOS rendszer is generál crash reportokat az alkalmazások összeomlásakor, amelyek a Console.app segítségével tekinthetők meg. A kernel pánikok (kernel panics) esetén a rendszer szintén generál dump fájlokat, amelyek elemzéséhez speciális Apple fejlesztői eszközökre és szaktudásra van szükség.

Minden platformon a cél ugyanaz: a hiba pillanatában rögzített információk alapján azonosítani a problémát okozó szoftveres vagy hardveres komponenst.

A memóriaképek generálása különböző operációs rendszereken

A memóriaképek generálásának módja operációs rendszertől függően eltérő lehet. Fontos ismerni a specifikus lépéseket és beállításokat az adott környezetben.

Windows: Rendszerbeállítások, manuális generálás

Windows rendszereken a memóriaképek generálásának alapvető módja a rendszerbeállítások konfigurálása. Ezt a már említett „Rendszer tulajdonságai” (System Properties) > „Speciális” (Advanced) > „Indítás és helyreállítás” (Startup and Recovery) menüpontban tehetjük meg. Itt kiválaszthatjuk a kívánt dump típust (pl. kernel memory dump, complete memory dump, small memory dump), és megadhatjuk a dump fájl helyét.

Azonban vannak esetek, amikor manuálisan kell memóriaképet generálni, például ha a rendszer lefagy, de nem omlik össze teljesen, vagy ha egy folyamatról szeretnénk dumpot készíteni egy adott pillanatban. Erre több módszer is létezik:

  • Billentyűkombináció (PS/2 billentyűzet esetén): Bizonyos régi PS/2 billentyűzetek esetén beállítható egy speciális billentyűkombináció (pl. jobboldali Ctrl + Scroll Lock kétszer), amely manuálisan indítja el a kernel dump generálását. Ez a funkció a beállításjegyzékben (registry) konfigurálható.
  • NMI (Non-Maskable Interrupt) gomb: Egyes szervereken és munkaállomásokon található egy NMI gomb, amely egy nem maszkolható megszakítást küld a CPU-nak, kényszerítve a rendszert a memóriakép generálására és az összeomlásra. Ezt általában csak kritikus esetekben használják.
  • ProcDump használata: A már említett ProcDump eszköz kiválóan alkalmas folyamat dumpok manuális generálására, vagy automatikus rögzítésre előre definiált triggerek alapján. Például: procdump -ma [folyamat_PID] teljes memóriaképet készít egy adott folyamatról.
  • Task Manager (Feladatkezelő): A Feladatkezelőben egy futó folyamatra jobb gombbal kattintva kiválasztható a „Create dump file” (Memóriakép létrehozása) opció, amely egy gyors folyamat dumpot generál.

Linux: SysRq, kexec/crashdump, GDB

Linux rendszereken is többféle módon generálhatunk memóriaképeket:

  • SysRq (System Request) billentyűkombináció: A Linux kernel rendelkezik egy SysRq funkcióval, amely lehetővé teszi bizonyos alacsony szintű műveletek végrehajtását, még akkor is, ha a rendszer lefagyott. A Alt + SysRq + c billentyűkombináció például egy kernel pánikot vált ki, és ha a kdump megfelelően be van állítva, az generál egy kernel dumpot.
  • kexec/crashdump: A kexec egy olyan mechanizmus, amely lehetővé teszi egy új kernel betöltését és indítását a futó kernelből anélkül, hogy a rendszer újraindulna. A kdump a kexec-re épül, és egy dedikált „crash kernel”-t tart fenn a memóriában. Amikor egy kernel pánik bekövetkezik, a crash kernel indul el, és a fő kernel memóriatartalmát egy dump fájlba írja. Ez a leggyakoribb és legmegbízhatóbb módszer a kernel dumpok generálására Linuxon. Konfigurálása az /etc/kdump.conf fájlban történik.
  • GDB (GNU Debugger): A GDB egy hatékony parancssori hibakereső, amely képes folyamat dumpok (core dumpok) elemzésére és generálására. Egy futó folyamathoz csatolható, vagy egy már létező core dumpot is megnyithat elemzésre. Például: gcore [PID] parancs generál egy core dumpot egy futó folyamatról.

macOS: Console.app, crash reports

macOS rendszereken az alkalmazások összeomlásakor automatikusan generálódnak crash reportok. Ezek XML vagy szöveges formátumban tartalmazzák az összeomlott alkalmazás veremkövetését, a regiszterek tartalmát és egyéb releváns adatokat. Ezeket a reportokat a Console.app alkalmazásban tekinthetjük meg, vagy a ~/Library/Logs/DiagnosticReports/ mappában találhatók meg.

A kernel pánikok esetén a macOS is generál memóriaképeket, amelyek a /Library/Logs/DiagnosticReports/ mappában találhatóak. Ezek elemzése azonban bonyolultabb, és gyakran Apple fejlesztői eszközöket és mélyebb rendszermag-ismereteket igényel. A rendszer naplói és a crash reportok kombinált elemzése segíthet a macOS rendszerek hibáinak diagnosztizálásában.

Adatvédelem és biztonság: Mire figyeljünk a memóriaképek kezelésekor?

A memóriaképek titkosítása kulcsfontosságú az adatvédelem érdekében.
A memóriaképek kezelésekor ügyeljünk a személyes adatok védelmére, mert könnyen kiszivároghatnak érzékeny információk.

A memóriaképek rendkívül gazdag információforrások, de éppen ezért komoly adatvédelmi és biztonsági kockázatokat rejtenek magukban. Mivel a rendszer memóriájának tartalmát rögzítik, potenciálisan érzékeny adatokat is tartalmazhatnak, amelyeket védeni kell.

Személyes adatok (PII) jelenléte

Egy teljes memóriakép tartalmazhatja a felhasználók által beírt adatokat, jelszavakat (akár titkosítatlan formában is), személyes azonosító adatokat (PII – Personally Identifiable Information), bankkártya számokat, e-mail üzeneteket, chat üzeneteket, vagy bármilyen más bizalmas információt, amely a memóriában volt a hiba pillanatában. Ez különösen igaz, ha az összeomlás egy olyan alkalmazás futása közben történt, amely érzékeny adatokat kezelt.

Ezért a memóriaképek kezelése során rendkívül óvatosnak kell lenni. Egy illetéktelen kezekbe került dump fájl súlyos adatvédelmi incidenshez vezethet, és komoly jogi következményekkel járhat, különösen a GDPR és más adatvédelmi szabályozások fényében. Az adatok szűrése és anonimizálása gyakran nehézkes, ezért a hozzáférés korlátozása az elsődleges védekezési vonal.

Bizalmas információk kiszivárgásának kockázata

A személyes adatokon túl a memóriaképek tartalmazhatnak céges titkokat, szellemi tulajdont, forráskód részleteket, belső hálózati konfigurációkat, API kulcsokat, titkosítási kulcsokat és egyéb bizalmas információkat. Ha egy dump fájl nyilvánosságra kerül, vagy illetéktelenekhez jut, az komoly üzleti károkat okozhat.

Például, egy szerver összeomlásakor generált dumpból kinyerhetők olyan adatok, amelyek segíthetik a támadókat a hálózatba való behatolásban vagy a további rendszerek kompromittálásában. A biztonsági szakemberek gyakran használnak dump fájlokat a támadások elemzésére, de ez megköveteli a dump fájlok extrém óvatos kezelését és a megfelelő biztonsági protokollok betartását.

Titkosítás és hozzáférés-szabályozás

A memóriaképek védelmének alapvető eszközei a titkosítás és a hozzáférés-szabályozás. A dump fájlokat tárolni és továbbítani titkosított formában kell. Ez megakadályozza, hogy illetéktelenek hozzáférjenek a tartalmukhoz, még akkor is, ha valamilyen módon megszerzik a fájlt.

A hozzáférés-szabályozás azt jelenti, hogy csak azok a személyek vagy rendszerek férhetnek hozzá a dump fájlokhoz, akiknek feltétlenül szükségük van rá a munkájuk elvégzéséhez (pl. hibakereső mérnökök, biztonsági elemzők). Ez magában foglalja a szigorú jogosultságkezelést, a naplózást és a rendszeres auditálást. A dump fájlokat biztonságos helyen kell tárolni, amely megfelel a vállalat biztonsági irányelveinek és a vonatkozó jogszabályoknak.

Adatmegőrzési irányelvek

Mivel a memóriaképek érzékeny adatokat tartalmazhatnak, fontos, hogy világos adatmegőrzési irányelvek legyenek érvényben. A dump fájlokat csak addig szabad tárolni, ameddig feltétlenül szükséges a hiba diagnosztizálásához és javításához. Miután a probléma megoldódott, és az elemzés befejeződött, a dump fájlokat biztonságosan törölni kell.

Az adatmegőrzési irányelveknek összhangban kell lenniük a vállalat belső szabályzataival és a jogi követelményekkel. Fontos, hogy a törlési folyamat is biztonságosan történjen, megakadályozva az adatok helyreállítását. A rendszeres felülvizsgálat és a compliance ellenőrzések elengedhetetlenek a memóriaképek biztonságos kezeléséhez.

A memóriaképek kihívásai és korlátai

Bár a memóriaképek rendkívül hasznosak a hibakeresésben, számos kihívással és korláttal is járnak, amelyeket figyelembe kell venni a használatuk során.

Nagy fájlméretek

A teljes memóriaképek mérete megegyezik a rendszer fizikai RAM-jának méretével, ami modern szerverek és munkaállomások esetén akár több tíz vagy száz gigabájt is lehet. Ez hatalmas fájlméretet jelent, ami jelentős tárhelyet igényel a generáláshoz és a tároláshoz.

A nagy fájlméretek lassú generálást, hosszú másolási időt és problémákat okozhatnak a hálózaton keresztüli továbbítás során. Az elemzés is lassabbá válhat, mivel a debuggernek nagyobb adatmennyiséget kell feldolgoznia. Ezért fontos mérlegelni, hogy valóban teljes dumpra van-e szükség, vagy elegendő egy kisebb, például kernel dump.

Elemzéshez szükséges szakértelem

A memóriaképek elemzése nem mindennapi feladat. Mélyreható ismereteket igényel az operációs rendszer belső működéséről, a kernel struktúráiról, a processzor architektúrájáról, a memóriakezelésről és a hibakereső eszközök (pl. WinDbg) használatáról. Ez egy speciális tudásterület, amelyre csak kevés szakember specializálódik.

Egy tapasztalatlan felhasználó számára egy memory dump elemzése rendkívül bonyolult és frusztráló lehet, és ritkán vezet eredményre. A megfelelő képzés és tapasztalat hiánya jelentős korlátot jelent a dump alapú hibakeresés hatékonyságában. Ezért a szervezeteknek beruházniuk kell a szakemberek képzésébe, vagy külső szakértőket kell bevonniuk.

Időigényesség

A memóriakép generálása és elemzése is időigényes folyamat lehet. Egy nagy méretű dump fájl generálása percekig, vagy akár órákig is eltarthat, különösen lassabb lemez I/O esetén. A dump fájl továbbítása hálózaton keresztül szintén hosszú időt vehet igénybe.

Az elemzés maga is több órát, vagy akár napokat vehet igénybe, a probléma komplexitásától és az elemző tapasztalatától függően. A szimbólumok betöltése, a parancsok futtatása és az eredmények értelmezése mind időt igényel. Ez a tényező különösen kritikus az éles rendszerek hibakeresésében, ahol minden perc leállás pénzbe kerül.

A probléma reprodukálhatóságának hiánya

A memóriaképek egyik legnagyobb előnye, hogy segítenek a nehezen reprodukálható hibák diagnosztizálásában. Azonban még a dump elemzése sem mindig vezet azonnal megoldásra, különösen, ha a hiba nagyon ritkán fordul elő, vagy ha az összeomlást kiváltó események láncolata rendkívül komplex.

Előfordulhat, hogy a dump nem tartalmaz elegendő kontextust a probléma teljes megértéséhez, vagy hogy a hiba egy olyan időzítési problémára vezethető vissza, amelynek pillanatképe nem ad elegendő információt. Ilyen esetekben a dump elemzése csak egy lépés a hosszabb hibakeresési folyamatban, amelyet további adatok gyűjtése és elemzése követhet.

Best practices: Hatékony memóriakép-kezelés és elemzés

A memóriaképek teljes potenciáljának kihasználásához és a velük járó kihívások minimalizálásához fontos betartani bizonyos best practices-eket.

Proaktív konfigurálás

Ne várjuk meg, amíg egy rendszer összeomlik, hogy beállítsuk a memóriakép generálását. A kritikus rendszereken, szervereken és fejlesztői gépeken proaktívan konfiguráljuk a megfelelő dump típust és a tárhelyet. Győződjünk meg arról, hogy a lapozófájl mérete elegendő a kiválasztott dump típushoz.

A szervereken az aktív memóriakép vagy a kernel memóriakép lehet a legjobb választás, míg a fejlesztői gépeken érdemes lehet a teljes memóriaképet beállítani. Ellenőrizzük rendszeresen a beállításokat, és győződjünk meg arról, hogy a dump fájlok a megfelelő helyre kerülnek, és elegendő szabad hely áll rendelkezésre a lemezen.

Dokumentáció

Minden generált memóriaképhez kapcsolódóan fontos a részletes dokumentáció. Rögzítsük a hiba pontos időpontját, a rendszer összeomlásához vezető körülményeket, a hibaüzeneteket (pl. Stop kód), a rendszer konfigurációját, és minden egyéb releváns információt. Ez a kontextus rendkívül hasznos lehet az elemzés során.

A dokumentáció segíti az elemzőt abban, hogy gyorsabban megértse a probléma természetét, és célzottabban végezze a hibakeresést. Egy jól dokumentált dump fájl sokkal értékesebb, mint egy önmagában álló, kontextus nélküli bináris adathalmaz.

Automatizálás

A memóriaképek gyűjtésének és alapvető elemzésének automatizálása jelentősen felgyorsíthatja a hibakeresési folyamatot. Például, szkriptek segítségével automatikusan feltölthetjük a dump fájlokat egy központi tárolóba, vagy futtathatunk rajtuk előzetes elemzéseket (pl. !analyze -v WinDbg-ben), és az eredményeket naplózhatjuk.

Az automatizált rendszerek képesek lehetnek értesítéseket küldeni a releváns csapatoknak, ha egy új dump fájl generálódott, így a hibakeresés azonnal megkezdődhet. Ez a proaktív megközelítés minimalizálja az állásidőt és javítja a rendszerstabilitást.

Tudásmegosztás

A memóriaképek elemzéséhez szükséges szakértelem ritka, ezért a tudásmegosztás kulcsfontosságú. A tapasztalt elemzők osszák meg ismereteiket a junior kollégákkal, tartsanak képzéseket, és hozzanak létre belső tudásbázisokat a gyakori hibajelenségekről és azok megoldásairól.

A közösségi hibakeresés, ahol több szakember is hozzáfér a dump fájlokhoz és megoszthatja elemzési eredményeit, szintén rendkívül hatékony lehet. A tudásmegosztás elősegíti a csapat fejlődését, és biztosítja, hogy a szervezeten belül elegendő szakértelem álljon rendelkezésre a komplex problémák kezeléséhez.

A memóriaképek jövője: Felhő és virtualizáció

A számítástechnika folyamatos fejlődésével, különösen a felhő és virtualizáció térnyerésével, a memóriaképek kezelése és elemzése is új dimenziókat ölt. Ezek az új környezetek sajátos kihívásokat és lehetőségeket kínálnak.

Virtuális gépek memóriaképei

A virtuális gépek (VM-ek) széles körű elterjedésével a memóriaképek generálása és elemzése is módosult. Egy virtuális gép összeomlásakor a hypervisor (pl. Hyper-V, VMware ESXi) képes lehet a teljes VM memória állapotát rögzíteni. Ez a VM dump egyfajta „kettős” dumpot jelent: tartalmazza a vendég operációs rendszer memóriatartalmát, de potenciálisan a hypervisor szintjén is elemezhető.

A VM dumpok előnye, hogy a hiba pillanatában a teljes virtuális környezet állapotát rögzítik, ami rendkívül hasznos a virtualizációs réteggel kapcsolatos problémák diagnosztizálásában. Azonban a VM dumpok mérete még nagyobb lehet, mint a fizikai gépek dumpjai, és speciális eszközöket vagy a hypervisor szolgáltatásait igényelhetik az elemzéshez.

Konténerizált alkalmazások diagnosztikája

A konténerizáció (pl. Docker, Kubernetes) egyre népszerűbbé válik az alkalmazások üzembe helyezésében. A konténerek izolált környezetet biztosítanak az alkalmazások számára, ami megnehezítheti a hagyományos memóriakép alapú hibakeresést.

Mivel egy konténer csak egy folyamat a gazda operációs rendszeren belül, egy konténer összeomlásakor általában egy folyamat dumpot generálunk. A kihívás az, hogy a konténer környezete minimalista, és gyakran hiányoznak belőle a hibakereséshez szükséges eszközök vagy szimbólumok. Ezért a konténerizált alkalmazások diagnosztikájához gyakran speciális, konténer-barát hibakereső eszközökre és megközelítésekre van szükség, amelyek képesek a gazda rendszerről vagy a konténeren belülről gyűjteni az információkat.

Felhőalapú hibakeresési szolgáltatások

A felhőalapú szolgáltatások (pl. AWS, Azure, Google Cloud) új lehetőségeket kínálnak a memóriaképek kezelésére és elemzésére. Számos felhőszolgáltató kínál beépített hibakeresési és diagnosztikai eszközöket, amelyek képesek automatikusan gyűjteni és tárolni a dump fájlokat a virtuális gépekről vagy a konténerekről.

Ezek a szolgáltatások gyakran integrált elemzőeszközökkel is rendelkeznek, amelyek felgyorsítják a diagnózist, és segítenek a hibák proaktív felderítésében. A felhőinfrastruktúra skálázhatósága és a centralizált naplózási képességek megkönnyítik a nagy mennyiségű dump fájl kezelését és elemzését, lehetővé téve a gyorsabb reakciót a kritikus hibákra.

Megosztás
Hozzászólások

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük