GHIDRABOY: Extensão de garoto SM83 / Game Sharp para Ghidra
Muito experimental! Sem garantias de compatibilidade!
Versões Ghidra apoiadas:

Características
- SM83 (núcleo da CPU usado no garoto de jogo), suporte para trenó
- Game Boy Rom Loader:
- Pode carregar ROMs não bancários (<= 32kb, por exemplo, tetris)
- Pode carregar ROMs bancários (> 32kb, por exemplo, Pokemon)
- Pode carregar ROMs de inicialização em escala de escala (DMG/DMG0/MGB/SGB/SGB2)
- Pode carregar ROMs de inicialização colorida (CGB/CGB0)
- Blocos de memória com base no mapa de memória de hardware
- As regiões bancárias usam sobreposições (TODO: Descubra se há uma maneira melhor de apoiá -las)
- As diferenças de GB vs GBC são tratadas (por exemplo, WRAM de banco)
- Símbolos para registros de hardware (intervalo 0xffxx)
- As diferenças de GB vs GBC são tratadas (por exemplo, existência do registro KEY1)
- Tipos de dados do cabeçalho do cartucho de garoto de jogo
- Tipos enumerados para algumas coisas
Como instalar
- Faça o download de um lançamento pré -construído da Ghidraboy ou construa você mesmo.
- Comece Ghidra
- Arquivo -> Instalar extensões
- Pressione o ícone Plus ("Adicionar extensão")
- Escolha o arquivo zip de ghidraboy construído ou baixado
- Reinicie ghidra quando solicitado a carregar a extensão corretamente
Como construir
Como pré -requisito, você precisa ter uma instalação Ghidra em algum lugar (uma instalação real, não uma cópia do código -fonte Ghidra!).
export GHIDRA_INSTALL_DIR=/path/to/ghidra
./gradlew
ou
./gradlew -Pghidra.dir=/path/to/ghidra
Você pode encontrar uma extensão construída .zip no diretório build/distributions .
Perguntas / problemas abertos
- É difícil ler a saída do decompilador se certas instruções forem usadas (por exemplo, gira, JP HL para jumptables)
- A "Convenção de Callagem ASM" padrão assume que todos os registros podem ser insumos e/ou saídas. Entradas/saídas são frequentemente adivinhadas incorretamente, portanto, a ajuste manual é necessária para quase todas as funções
- As sobreposições são a única / a melhor solução para lidar com áreas de memória bancária? No momento, em ROMs de banco, todas as funções chamam para 0x4000-0x7FFF precisam ser resolvidas manualmente para o (s) banco (s) correto (s)
Licença
Licenciado sob a licença Apache, versão 2.0.