Projeto experimental de engenharia reversa e recompilação estática. O objetivo é traduzir o executável original para código nativo em Windows e Linux, sem substituir o console por um emulador.
Pesquisar o caminho técnico para traduzir o software do console para uma execução nativa em Windows e Linux. O progresso será registrado com evidências, limites e bloqueios reais.
O guest chegou a WaitSema na rotina MOVIE. O semáforo 38 existe com contagem zero, mas só há uma thread EE registrada e nenhuma thread pronta para receber a troca; o jogo ainda não foi aberto.
Bloqueio
A chamada em 0x0012D4A4 tenta esperar no semáforo 38 depois de 0x0012F780 retornar diferente de zero. O scheduler não encontra thread EE pronta e o ru...
Solução
Instrumentei os caminhos de WaitSema e reproduzi o bloqueio: thread atual EE 1 em execução, semáforo 38 zerado e nenhuma thread pronta. Vou rastrear o...
O guest PADMAN registrou o servico de controle e respondeu sua primeira RPC. A EE recompilada avancou por novas continuacoes de MOVIE, incluindo 0x001062B4; o replay agora se repete em rotinas de espera e ainda nao abriu ACTION.ELF.
Bloqueio
A continuacao 0x001062B4 ja era recompilada, mas nao estava ligada ao dispatcher do harness. Depois da ligacao, a nova fronteira observada alterna ent...
Solução
Conectei 0x001062B4 ao dispatcher estatico e registrei seus intervalos de codigo guest. O replay confirmou a RPC PADMAN funcao 18, o retorno RPC_END e...
PADMAN foi extraído da ISO, recompilado e iniciado como código guest. Seus workers registraram o SID 0x80000100 e a primeira chamada RPC guest terminou com RPC_END; a EE prosseguiu até uma continuação MOVIE ainda sem dispatcher.
Bloqueio
O jogo repetia binds porque PADMAN não estava no IOPRP selecionado, embora MODULES/PADMAN.IRX exista na ISO. O primeiro handler RPC também parava em u...
Solução
Compilei a entrada PADMAN, dois workers, providers SIO2MAN necessários e o dispatcher com o alvo guest 0x00187478 observado. O registry guest apresent...
O MTAPMAN guest da ISO iniciou e registrou cinco servidores RPC reais; o boot agora pede PADMAN pelo SID 0x80000100.
Bloqueio
O runner interrompia a verificação ao selecionar um worker CDVDFSV válido e compilava quatro handlers MTAPMAN em raízes de worker, não nos endereços d...
Solução
A validação de threads foi corrigida, handlers MTAPMAN foram recompilados nos endereços observados e o guest passou a responder aos cinco binds e a um...
A ISO 007 contem ACTION.ELF e DRIVING.ELF, mas o replay observado abriu somente MOVIE.ELF e terminou em KExit(0). A cadeia estatica de saida de MOVIE foi identificada.
Bloqueio
A execucao recompilada nao demonstrou a transicao guest para ACTION.ELF. O RA final 0x00132BC8 nao e prova do chamador: o caminho termina por saltos s...
Solução
Inventariei SYSTEM.CNF e a arvore ISO9660: BOOT2 aponta para SLUS_202.65; ACTION.ELF esta no LBA 793160 e DRIVING.ELF no LBA 794696. No MOVIE, 0x0013E...
O replay percorre as continuacoes estaticas de MOVIE e termina em KExit(0), sem fault. Isso identifica o termino guest, mas nao comprova que o jogo abriu.
Bloqueio
O diagnostico final mostrava status 0 sem o registrador v1, ocultando o numero do syscall. Tentar retomar em 0x0012D084 repete KExit e entra em ciclo,...
Solução
O runner agora imprime v1. O estado final confirma service_id=4 (KExit), exit_code=0, PC=0x0012D084 e RA=0x00132BC8. Mantive KExit como termino e remo...
O replay alcançou a inicialização gráfica de MOVIE.ELF: o guest iniciou DMA D2 para o GIF e o runtime processou tags com registros GS. A próxima fronteira estática é 0x0012E868.
Bloqueio
O runner não tinha cobertura estática para a nova cadeia de MOVIE e o despacho recursivo das continuações causava stack overflow. A primeira escrita C...
Solução
O harness agora executa continuidades por um loop externo, sem recursão entre módulos. Com o perfil DMAC/GIF opt-in e explicitamente diagnóstico, proc...
O replay deixou de parar na segunda chamada CDVDFSV: o runner identificou uma RPC não bloqueante com callback e avançou por duas novas continuações recompiladas de MOVIE.ELF, chegando a 0x0013282C.
Bloqueio
O harness classificava todo rmode=1 como chamada síncrona e recusava uma nova RPC enquanto havia uma chamada guest pendente. Isso encerrava o replay a...
Solução
O runner agora consulta sema_id e end_function do cliente SIF RPC. Para a chamada observada, sema_id=0xFFFFFFFF e callback=0x0013B488 indicam o caminh...
Identificamos que a RPC 0x80000596 aguarda o evento CDVD Power Off Ready (bit 0x4). O replay atual nao gera essa causa antes da espera.
Bloqueio
O handler recompilado limpa o bit 0x4 do event flag 2 e fica bloqueado. A chamada sceCdSC(0xFFFFFFF5) apenas devolve o ID do event flag; ela nao enfil...
Solução
Conferimos a semantica na fonte publica do PS2SDK e cruzamos com PS2Tek. O handler CDVD sinaliza esse bit quando recebe o motivo CDVD 0x04, identifica...
O status 99 nao e uma falha dentro de 0x001246EC: o scheduler recusou outra RPC porque a chamada guest anterior ao mesmo thread segue bloqueada.
Bloqueio
A primeira chamada ao handler CDVDFSV em 0x001246EC ficou bloqueada (dispatch=6); uma requisicao posterior ao mesmo thread foi rejeitada por haver cha...
Solução
Refinei a leitura do trace e corrigi a documentacao: a proxima investigacao deve identificar o evento que conclui ou libera a chamada RPC pendente ant...