Útmutatók8 perc olvasás

32 vagy 64 bites Metin2-kliens: az EXE és az LAA jelző ellenőrzése

Ellenőrizd a Metin2-kliens architektúráját és LAA jelzőjét módosítás nélkül: 2/4 GB-os korlátok, natív x64 és hálózati kompatibilitás.

Szerző METIN2.GG

A 4 GB-os jelzőtől az x86-os kliens nem lesz x64-es

A Metin2 kliense akkor is maradhat 32 bites x86-os program, ha 64 bites Windowson fut, és engedélyezve van benne a Large Address Aware jelző. Ez a jelző, amelyet gyakran a „4 GB-os javítással” kapcsolnak össze, a címtérre vonatkozik. A natív x64-es kliens más gépi architektúrára készült, eltérő fordítás. Egyik megjelölés sem bizonyít önmagában magasabb FPS-t vagy minden összeomlásra megoldást.

Elsőként ezt érdemes tisztázni: milyen architektúrájú a játék tényleges futtatható állománya? A szerver Windows-követelményei, az indítóprogram és a játékfolyamat különböző dolgokat írhatnak le. Ez az útmutató az EXE fejlécének módosítás nélküli ellenőrzését és az eredmény korlátait mutatja be. Nem feltételezi, hogy minden Metin2-szerver ugyanazt a klienst biztosítja.

Metin2-játékos összefogott zöld hajjal, ezüstkék páncélban, széles aranyszínű pengével, elvont kliensadat-panelek mellett

Metin2-játékreferenciák alapján generált illusztráció. Nem képernyőkép, memóriamérés vagy egy konkrét kliensváltozat bizonyítéka.

Mit jelentenek valójában a memóriakorlátok?

A Microsoft LAA-útmutatója és memóriakorlátokat összegző táblázatai külön kezelik a folyamat virtuális címterét és a gépbe szerelt fizikai RAM-ot. A táblázat memóriakorlátokról szóló sorai a Windows x64-es kiadását feltételezik. Az ARM64-sor más fájlarchitektúrát azonosít; nem állítja, hogy ilyen fájl futtatható x64-es Windowson.

Futtatható állományMachine / formátumLAAJelentése
32 bites x860x014C / PE32KikapcsolvaÁltalában 2 GB-os felhasználói virtuális címtérkorlát
32 bites x860x014C / PE32BekapcsolvaLegfeljebb 4 GB felhasználói virtuális címtér; továbbra is x86
Natív x640x8664 / PE32+BekapcsolvaAz x86-os plafonnál nagyobb címtér, a Windows-verzió és a folyamat korlátain belül
ARM640xAA64 / PE32+Külön ellenőrizendőMás architektúra; a PE32+ önmagában nem jelent AMD64/x64-et

Ezek címtérkorlátok. Nem garantálják, hogy a kliens egyetlen összefüggő, 4 GB-os blokkot tud lefoglalni, az összes RAM-ot használhatja, vagy minden memóriafoglalás sikeres lesz. A natív x64-es állományra is további korlátozások vonatkoznak, ha az LAA jelző nincs beállítva; a tényleges korlátot ne pusztán a „64 bites” megjelölésből következtesd ki.

Fordítva is igaz: 32 GB fizikai RAM sem szünteti meg az x86-os folyamat címtérkorlátját. A korlát megemelése csak az azon múló problémákon segíthet. A sérült játékadat, az érvénytelen mutató vagy az inkompatibilis modul külön hibakeresést igényel.

Miért számít ez a különbség a Metin2 fejlesztésénél?

A Turkmmo 2026. májusi beszélgetésének szerzője MartySama v5.8 alapot nevez meg, és arról számol be, hogy a szerveroldali 64 bites fordítás könnyebb volt a kliens átültetésénél. A válaszok az x86-os és x64-es változat párhuzamos fenntartását, valamint a csomagkompatibilitás megőrzését tárgyalják. Ezek a szerző saját forráskészletéről szóló beszámolók, nem egy másik szerveren kipróbált átállási eljárás.

Egy ettől független, Linux-szerverről és x64-es kliensről szóló Reddit-beszélgetés egy másik bizonytalanságot is megmutat: arra a kérdésre, hogy maga portolta-e a klienst, a szerző azt válaszolja, hogy mástól szerezte. Egy képernyőkép vagy a szerver átültetésének ténye nem azonosítja minden összetevő eredetét, revízióját és architektúráját.

Az EterNext 2026. április 1-jei fejlesztői bejegyzése az adott projekthez tartozó natív 64 bites klienst jelent be. A jelenlegi futtatható állományukat nem vizsgáltuk meg, és a teljesítményre vonatkozó állításaikat sem reprodukáltuk. Az üzemeltető dátummal ellátott közlését az adott projektről szóló információként kezeld; mielőtt más kliensre is kiterjesztenéd, ellenőrizd annak tényleges változatát.

A játék EXE-fájljának ellenőrzése módosítás nélkül

Először azonosítsd a játékot futtató állományt. A javító-, frissítő- és beállítóprogram külön fájl lehet, akár eltérő architektúrával. Nézd meg az üzemeltető dokumentációját vagy a játékfolyamat nevét a Feladatkezelőben; ne feltételezd, hogy minden privát kliens ugyanazt a fájlnevet használja.

A Microsoft PE/COFF-specifikációja határozza meg a Machine mezőt, az opcionális fejléc formátumát és az IMAGE_FILE_LARGE_ADDRESS_AWARE jelzőt. Az alábbi Python 3-program kizárólag a szabványos könyvtárat használja, és a kiválasztott fájlt bináris olvasási módban nyitja meg. Mentsd el pe_info.py néven, majd futtasd a python pe_info.py client.exe parancsot. Az utolsó fájlnevet cseréld ki az előzőleg azonosított futtatható állomány nevére.

Python
import json
import struct
import sys

def inspect_pe(path):
    with open(path, "rb") as f:
        size = f.seek(0, 2)
        f.seek(0)
        dos = f.read(64)
        if len(dos) != 64 or dos[:2] != b"MZ":
            raise ValueError("Missing DOS header")
        offset = struct.unpack_from("<I", dos, 0x3C)[0]
        if offset < 64 or offset + 26 > size:
            raise ValueError("PE offset outside file")
        f.seek(offset)
        header = f.read(24)
        if header[:4] != b"PE\0\0":
            raise ValueError("Missing PE signature")
        machine = struct.unpack_from("<H", header, 4)[0]
        optional_size, flags = struct.unpack_from("<HH", header, 20)
        if optional_size < 2 or offset + 24 + optional_size > size:
            raise ValueError("Truncated optional header")
        magic = struct.unpack("<H", f.read(2))[0]
        expected = {0x014C: 0x010B, 0x8664: 0x020B, 0xAA64: 0x020B}
        if machine not in expected or magic != expected[machine]:
            raise ValueError("Unsupported or inconsistent Machine/Magic")
        return {
            "Machine": f"0x{machine:04X}",
            "Format": "PE32" if magic == 0x010B else "PE32+",
            "LAA": bool(flags & 0x0020),
        }

if __name__ == "__main__":
    if len(sys.argv) != 2:
        raise SystemExit("Usage: python pe_info.py client.exe")
    print(json.dumps(inspect_pe(sys.argv[1]), indent=2))

A mezőket együtt értelmezd. A Machine:0x014C, Format:PE32, LAA:true kombináció nagy címteret kezelőként megjelölt x86-os állományt jelent, nem natív x64-es programot. A Machine:0x8664 és a PE32+ együtt AMD64-et azonosít; a 0xAA64 ezzel szemben ARM64-et. Ezeket a neveket a Microsoft specifikációja rögzíti, nem a fájlnévből következtetünk rájuk.

A program ellenőrzi a DOS/PE-aláírásokat, a fejléc fájlon belüli határait és a három támogatott Machine/Magic párost. Egyszerű metaadat-olvasó, nem teljes PE-betöltési ellenőrző, digitálisaláírás-vizsgáló vagy annak megítélése, hogy biztonságos-e futtatni a fájlt. A nem támogatott vagy ellentmondásos fejléc miatt abba kell hagyni az eredmény értelmezését, nem pedig megjavítani az EXE-t. A program nem módosítja a fejlécet, és nem futtatja az állományt.

A natív x64-hez nem elég átállítani egy fejlécet

A Microsoft játékok átültetéséről szóló útmutatója a mutatók csonkolását, az igazítást, a tárolt bináris adatelrendezéseket és a külső könyvtárakat is az átállás szempontjai közé sorolja. A folyamaton belül betöltött szokásos natív DLL-eknek illeszkedniük kell a folyamat architektúrájához; egy x86-os DLL átnevezéssel nem válik x64-es függőséggé.

Egy Metin2-forrásfában ellenőrizni kell a mutatókat vagy hosszakat szűkebb egész típusokban tároló kódot, a Python és a natív kód közötti határt, az erőforrás-dekódolókat és az adott revízió által használt könyvtárakat. Ezután le kell fordítani a hozzájuk tartozó függőségeket. A pontos feladatok a projekttől függenek; ez a felsorolás nem egy azonosítatlan forráscsomagra telepíthető javítás.

Az architektúrát és a mért teljesítményt külön kezeld. Azonos kliensrevíziót, játékadatokat, jelenetet és beállításokat hasonlíts össze, és a képkockaidők mellett a memóriával összefüggő hibák körülményeit is rögzítsd. A Microsoft útmutatója portolás után teljesítményprofilozást javasol. Ehhez a cikkhez nem mértünk FPS-növekedést x64-es Metin2-klienssel.

A szervernek is 64 bitesnek kell lennie?

A hálózaton bájtok utaznak, nem a kliens processzorarchitektúrájának neve. A 32 bites kliens és a 64 bites szerver együttműködhet, ha a tényleges protokolljuk kompatibilis marad. Ennek megállapításához egy konkrét Metin2-pár csomagdefiníciói és tesztjei szükségesek; az egyező szervernevek vagy a sikeres fordítás nem bizonyítják a kompatibilitást.

Az alábbi szemléltető példa bájtformátumokat mutat be, nem egy Metin2-csomag definícióját:

Python
import struct

for fmt in ("<BI", "<BQ"):
    packet = struct.pack(fmt, 1, 1000)
    print(fmt, len(packet), packet.hex())

A kimenet <BI 5 01e8030000 és <BQ 9 01e803000000000000. A Python struct dokumentációja szerint a < little-endian bájtsorrendet, szabványos méreteket és igazítási kitöltés nélküli tárolást jelent; az I 4, a Q 8 bájtot foglal. A mező egyszerű szélesítése 5-ről 9 bájtra növeli az üzenetet. A régi elrendezést váró fogadóhoz egyeztetett protokollmódosítás kell; nem elég abban bízni, hogy az új processzorarchitektúra megoldja a problémát.

Ugyanezt kell ellenőrizni a mentett bináris adatoknál és az erőforrás-formátumoknál is. Őrizd meg a hálózati és fájlformátumok kifejezett szerződéseit, vagy tudatosan vezess be új verziót, és teszteld mindkét oldalt. Ne cserélj le gépiesen minden 32 bites egészet mutatóméretű típusra: a játékazonosítók, számlálók, hosszak és mutatók eltérő feladatot látnak el.

Mit bizonyít ez az ellenőrzés a játékosoknak és az üzemeltetőknek?

Játékosként a fejléc ellenőrzésével különválaszthatod a megadott fájl architektúráját az indítóprogram megjelölésétől vagy a Windows-követelménytől. Használd a szerver által támogatott klienscsomagot, és kérdezd meg az üzemeltetőt, melyik játékverziót tartalmazza. Az eredmény nem ellenőrzi a bejelentkezést, a játékvilágba belépést, a stabilitást vagy a szerver védelmével való kompatibilitást.

Üzemeltetőként őrizd meg az ismerten működő változatot, miközben a saját tulajdonú vagy jogszerűen licencelt forrásokat és függőségeket vizsgálod. A nyilvánosan olvasható forráskód, a letöltési hivatkozás és a nyílt forráskódú licenc három külön tény. Ez a cikk nem ajánl ellenőrizetlen forráscsomag-letöltést kész 64 bites kliensként.

Az olvasóprogramot négy mesterséges fejlécmintán és két meglévő Windows-programon futtattuk, és ellenőriztük, hogy a fájlok bájtjai változatlanok maradtak. Tíz hibás vagy ellentmondásos mintát a program elutasított. A bájtsorozatot előállító példa is a dokumentált 5/9 bájtos eredményt adta. Ezek az ellenőrzések a példákat igazolják; Metin2-klienst nem fordítottunk, nem módosítottunk és nem indítottunk el, és játékteljesítményre vonatkozó eredményt sem állítunk.

Más projektnél annak saját, aktuális változatából és követelményeiből indulj ki; a Metin2 privát szerverek jegyzéke segít megtalálni a profilját. Ha a kliens a grafika inicializálásakor áll le, az ettől eltérő tünettel a külön No Appropriate Device útmutató foglalkozik.

Források

Gyakran Ismételt Kérdések

A 4 GB-os javítástól 64 bites lesz a Metin2-kliensem?

Az LAA engedélyezése egy x86-os állományban nem változtatja meg annak gépi architektúráját. Egy x86-os LAA-folyamatnak x64-es Windowson legfeljebb 4 GB felhasználói virtuális címtere lehet; a natív x64 külön fordítás.

A 64 bites Windows bizonyítja, hogy a játékkliensem is 64 bites?

Nem. Az operációs rendszer, az indítóprogram és a játék futtatható állománya külön összetevő. Vizsgáld meg a tényleges játék-EXE Machine mezőjét és opcionális fejlécének formátumát, vagy kérj pontos fordítási adatokat az üzemeltetőtől.

Csatlakozhat x86-os kliens x64-es szerverhez?

A különböző processzorarchitektúrák önmagukban nem határozzák meg a hálózati kompatibilitást. A sorosított protokollnak egyeznie kell. A szemléltető 5/9 bájtos példa megmutatja, miért törheti meg ezt a szerződést a mező szélességének módosítása; konkrét privátszerver-párt itt nem ellenőriztünk.

Kapcsolódó Oldalak

Találd meg a tökéletes szervered

Böngéssz a legjobban rangsorolt Metin2 privát szerverek között a METIN2.GG-n vagy küldd be a saját szervered a ranglistára.