L’ultimo aggiornamento beta di Aroma ha portato anche alla realizzazione di nuovo plugin dedicato al debugging delle applicazioni homebrew per le console Wii U.
GDB o più semplicemente GNU debugger è uno strumento che ci permette di vedere cosa succede all’interno di un altro programma mentre questo è in esecuzione o cosa stava facendo un altro programma nel momento in cui si è bloccato.
With Aroma Beta 11 a gdbstub plugin has been released! This finally means proper homebrew debugging on retail hardware. For more information read the README of the repository carfully. Big shoutout to @GaryOderNichts who implemented the IOSU side!https://t.co/WcCoyMmSw8
— MaschellDev (@MaschellDev) February 19, 2023
Il plugin prende base proprio dal debugger GNU gdbstub che si trova all’interno del file coreinit.rpl
presente su qualsiasi console Wii U. Può essere utilizzato per correggere diverse funzioni e per consentire l’utilizzo dello stub sulle console retail.
Con queste patch sono stati corretti alcuni bug (ad es. supporto vCont
di base e contenuto dei pacchetti escape) ed è stato aggiunto il supporto per query multiple.
L’accesso alla memoria ora avviene completamente tramite il KernelModule che bypassa la MMU, che ci consente di scrivere/leggere ovunque. Per scopi di ricerca si prevede di reimplementare (le parti importanti di) coreinit.rpl
gdbstub passo dopo passo.
Caratteristiche
- Supporto hardware breakpoint (è supportato massimo un punto di interruzione hw alla volta).
- Supporta fino a 512 breakpoint software contemporaneamente.
- Watchpoint hardware per l’accesso in lettura/scrittura dei dati con una precisione di 8 byte (è supportato un massimo di un watchpoint hw alla volta).
- Passaggio all’istruzione successiva (solo per i thread attualmente attivi).
- Memoria/registro lettura/scrittura.
- Implementata la query facoltativa
qXfer:features:read
eqXfer:threads:read
. - Interrompi l’esecuzione in qualsiasi momento tramite
CTRL+C
. - Vedere il file
main.h
per ulteriori opzioni di configurazione tramite macro.
Requisiti / Limitazioni
- Utilizzando MochaPayload v0.2 o superiore o qualcos’altro che supporti l’API DK_PChar. Se non si utilizza la moka, probabilmente è necessario regolare la sostituzione
makeOpenPath
. - Qualsiasi homebrew di cui desideri eseguire il debug deve essere compilato con wut 1.2.0-2 o versioni successive. Anche il software ufficiale funziona, ma probabilmente non avrai alcun simbolo.
- Quando gdbstub viene caricato, inizierà direttamente ad attendere una connessione tramite TCP. Si consiglia di caricare il plug-in quando necessario tramite la rete invece di posizionarlo in modo permanente sulla scheda SD. Per caricare i plugin in fase di esecuzione puoi usare il plugin wiiload.
- La console non risponderà a nessun altro input durante l’attesa di una connessione. Connettiti allo stub o spegni forzatamente la console (tieni premuto il pulsante di accensione della console per almeno 4 secondi).
- Il gdbstub rimarrà caricato e attivo fino allo spegnimento della console, è possibile modificare o ricaricare l’applicazione.
Consigliato
- Utilizzo del modulo USBSerialLogger per avere l’output via seriale durante il debug. Per questo è necessario un cavo seriale USB con un determinato chipset. Leggere la repository USBSerialLogger per ulteriori informazioni.
- Costruisci le app homebrew con
-O0
, assicurati di aggiungere il flag del compilatore-g
per creare build di debug con informazioni DWARF.
Utilizzo
- Avviare la console in un ambiente compatibile con WiiUPluginLoaderBackend (ad es. Aroma).
- Avviare l’app homebrew di cui desideri eseguire il debug.
- Caricare gdbstub_plugin tramite wiiload.
- Ora l’app homebrew si riavvierà e attenderà una connessione. (Quando si utilizza la registrazione seriale USB dovrebbe stampare
[+-*WAITING FOR DEBUGGER*-+]
). - Connettiti a gdbstub tramite TCP alla porta 3000.
- Quando non carichi alcun file di simboli, potresti dover forzare l’endianness tramite
set endian big
.
Impostazioni di base per gdb:
set arch powerpc:750
set remotetimeout 30
set tcp connect-timeout 60
set print thread-events on
set disassemble-next-line on
set remote hardware-watchpoint-limit 1
set remote hardware-breakpoint-limit 1
target remote tcp:192.168.178.123:3000
Download: GDBStub v0.1
Download: Source code GDBStub v0.1
Fonte: twitter.com