Portando jogos do Xbox 360 para C++ nativo com ReXGlue
Emular consoles como o Xbox 360 sempre foi limitado por altas demandas de CPU. O PowerPC Xenon de oito threads exigia hardware robusto apenas para traduzir instruções em tempo real. Os desenvolvedores do projeto Xenia fizeram um trabalho extraordinário, mas mesmo em PCs modernos a carga de CPU continua perceptível.
A comunidade de engenharia reversa está adotando uma abordagem diferente: recompilação estática. Em vez de traduzir código durante o jogo, um utilitário converte o executável do console em código-fonte C++ padrão em uma única passagem, que então é compilado nativamente para a plataforma-alvo.
É exatamente isso que o projeto ReXGlue faz.
O que é recompilação estática
Quando um emulador roda em tempo real, ele gasta continuamente recursos decodificando instruções PowerPC, gerenciando registradores e simulando a arquitetura do console. Um recompilador estático analisa o binário antecipadamente, examina suas instruções e gera código C++ equivalente.
Um compilador padrão como Clang ou MSVC então assume, otimizando o código gerado para o processador específico e aproveitando todas as instruções x86-64 ou ARM64 disponíveis. O resultado é uma aplicação nativa padrão.
Essa abordagem elimina completamente a sobrecarga de tradução. O jogo acessa diretamente os recursos do PC, exigindo muito menos recursos.
Do que o ReXGlue consiste
Os criadores do projeto reconhecem abertamente que se baseiam na pesquisa da equipe do Xenia e no trabalho dos desenvolvedores do XenonRecomp e das ferramentas rexdex.
A arquitetura do ReXGlue pode ser dividida em dois componentes:
- Uma ferramenta de análise que lê binários do Xbox 360 e gera funções em C++.
- Uma biblioteca de runtime (SDK) que gerencia chamadas de funções do sistema do console, gerenciamento de memória e operações de entrada/saída.
O repositório rexglue-sdk contém o runtime e o wrapper de compilação. O código-fonte em si é escrito em C e C++.
O projeto suporta builds para Windows (amd64) e Linux (amd64, arm64). O build ARM64 é particularmente notável—ele permite rodar jogos recompilados em handhelds e computadores de placa única sem penalidades de quadros por segundo.
Estado atual e limitações
Os desenvolvedores são transparentes sobre o estágio inicial do projeto. A API pública passa por mudanças frequentes, e alguns recursos permanecem incompletos. Ainda não é possível transformar um jogo compilado em um binário pronto para rodar com um único clique.
A recompilação estática em geral é cheia de nuances. Binários frequentemente contêm saltos indiretos ou dados compactados. Um tradutor automatizado nem sempre consegue determinar limites de funções independentemente sem dicas. Por isso, o processo de portagem requer criar configurações específicas para cada título.
O repositório atualmente tem cerca de 750 estrelas. A comunidade está se formando em torno de um servidor Discord e da seção de releases no GitHub, onde os autores publicam builds noturnos.
Para quem a ferramenta é
Você não conseguirá rodar qualquer jogo do Xbox 360 em poucos minutos com esta ferramenta ainda. Mas o projeto certamente interessará a:
- Engenheiros reversos e pesquisadores que estudam a estrutura de executáveis PowerPC.
- Desenvolvedores de compiladores e tradutores que buscam exemplos práticos de geração de código de uma ISA para outra.
Instruções detalhadas para trabalhar com a CLI e arquivos de configuração podem ser encontradas na wiki do repositório, e o código-fonte em si está disponível no GitHub no repositório rexglue/rexglue-sdk.
Projetos relacionados