>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
C

Xbox 360-games porten naar native C++ met ReXGlue

Het emuleren van consoles zoals de Xbox 360 is altijd beperkt door hoge CPU-eisen. De acht-threadige PowerPC Xenon vereiste serieuze hardware om instructies ter plekke te vertalen. De ontwikkelaars van het Xenia-project hebben enorm werk verricht, maar zelfs op moderne pc's blijft de CPU-belasting merkbaar.

De reverse-engineeringcommunity omarmt een andere aanpak: statische recompilatie. In plaats van code tijdens het spelen te vertalen, zet een utility de console-executable in één keer om naar standaard C++-broncode, waarna deze native wordt gecompileerd voor het doelplatform.

Dit is precies wat het ReXGlue-project doet.

Waar statische recompilatie over gaat

Wanneer een emulator in realtime draait, besteedt deze voortdurend resources aan het decoderen van PowerPC-instructies, het beheren van registers en het simuleren van de console-architectuur. Een statische recompiler neemt de binary van tevoren, analyseert de instructies en genereert equivalente C++-code.

Een standaardcompiler zoals Clang of MSVC neemt het vervolgens over en optimaliseert de gegenereerde code voor de specifieke processor, waarbij alle beschikbare x86-64- of ARM64-instructies worden benut. Het resultaat is een standaard native applicatie.

Deze aanpak elimineert vertalingsoverhead volledig. De game maakt rechtstreeks gebruik van de mogelijkheden van de pc en vraagt daardoor veel minder resources.

Waaruit ReXGlue bestaat

De makers van het project geven openlijk toe dat ze voortbouwen op het onderzoek van het Xenia-team en het werk van de XenonRecomp- en rexdex-toolontwikkelaars.

De architectuur van ReXGlue kan in twee componenten worden opgesplitst:

  • Een analysehulpmiddel dat Xbox 360-binaries leest en C++-functies genereert.
  • Een runtime-bibliotheek (SDK) die systeemfunctie-aanroepen van de console afhandelt, geheugenbeheer en invoer/uitvoer.

De repository rexglue-sdk bevat de runtime en build-wrapper. De broncode zelf is geschreven in C en C++.

Het project ondersteunt builds voor Windows (amd64) en Linux (amd64, arm64). De ARM64-build is bijzonder vermeldenswaardig: hiermee kunnen gerecompileerde games worden uitgevoerd op handheld-consoles en single-board computers zonder framerate-problemen.

Huidige staat en beperkingen

De ontwikkelaars zijn open over de vroege fase van het project. De publieke API ondergaat regelmatig wijzigingen en sommige functies zijn nog onvolledig. Je kunt een gecompileerde game nog niet met één klik omzetten naar een direct uitvoerbare binary.

Statische recompilatie kent over het algemeen veel nuances. Binaries bevatten vaak indirecte sprongen of verpakte data. Een geautomatiseerde vertaler kan niet altijd zelfstandig functiegrenzen bepalen zonder hints. Daarom vereist het portingsproces het maken van game-specifieke configuraties voor elke titel.

De repository heeft momenteel ongeveer 750 sterren. Er vormt zich een community rond een Discord-server en de releases-sectie op GitHub, waar de auteurs nightly builds publiceren.

Voor wie het hulpmiddel bedoeld is

Je kunt nog niet zomaar elke Xbox 360-game in een paar minuten draaiende krijgen met dit hulpmiddel. Maar het project zal zeker interessant zijn voor:

  • Reverse engineers en onderzoekers die de structuur van PowerPC-executables bestuderen.
  • Compiler- en vertalerontwikkelaars die op zoek zijn naar praktische voorbeelden van codegeneratie van de ene ISA naar de andere.

Gedetailleerde instructies voor het werken met de CLI en configuratiebestanden zijn te vinden in de repository-wiki, en de broncode zelf is beschikbaar op GitHub in de rexglue/rexglue-sdk-repository.

Gerelateerde projecten