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 watch ampliado mostrou que o gerenciador possui uma lista ativa em 0x00149BB0: o guest insere os nos 0x009BDA70 e 0x009BDA40 e depois os remove. O campo 0x00149BC0 e separado e segue nulo.
Bloqueio
O caminho de 0x00114528 consulta o campo 0x00149BC0 (+0x30), enquanto a lista ativa observada fica em 0x00149BB0 (+0x20). O campo objeto+0x24 ainda ch...
Solução
Ampliei a auditoria para 0x00149B90..0x00149BDF e correlacionei as escritas com os PCs 0x00114AF0 e 0x00114E90. Isso separa os dois campos e corrige q...
O watch de 0x00149BC0 confirmou que a escrita zero observada ocorre durante o SIF DMA que carrega o MOVIE. Os bytes do ELF nesse endereco tambem sao zero, e nenhuma escrita guest nao nula apareceu no replay.
Bloqueio
O caminho do MOVIE depende da lista global 0x00149BC0, que permanece vazia neste replay. A rotina posterior recebe objeto+0x24 = 0, limpa RAM baixa e...
Solução
Armei um watch no global e correlacionei PC 0x001714D0 com a leitura do arquivo e o DMA para 0x00148000. O endereco fica no bloco copiado do PT_LOAD d...
A disassembly localizou uma condicao que ajuda a explicar o campo nulo: com a lista global 0x00149BC0 vazia, o caminho observado pula o trecho candidato a gravar objeto+0x24.
Bloqueio
A limpeza guest recebe objeto+0x24 = 0 e apaga o descritor em RAM baixa; depois, a busca de mpegbuff percorre o link nulo e esgota o fuel. A causa fin...
Solução
Comparei o desvio em 0x00114588, a gravacao candidata em 0x001145BC e o estado capturado da lista global. A lista segue zero e a auditoria nao detecta...
O replay confirmou que três buffers nomeados são alocados com sucesso; depois, uma limpeza guest com destino zero apaga o descritor e bloqueia a busca de mpegbuff.
Bloqueio
A rotina de limpeza usa objeto 0x009BDA40 + 0x24 = 0 e zera 0x10C bytes. Isso apaga os links do allocator em RAM baixa e leva o guest ao loop 0x0010FA...
Solução
Rastreei os argumentos e retornos do wrapper 0x0010FDB8 e confirmei as alocações File Sys, cd:\MAPS\MUSIC.VIV e bigfile buf antes da limpeza. Registre...
A auditoria do objeto guest 0x009BDA40 capturou stores SQ e uma store de 8 bytes sobre o campo +0x24; todas mantiveram o valor em zero.
Bloqueio
O campo 0x009BDA64 fornece destino zero à rotina de limpeza do MOVIE. Ela apaga o descritor low-RAM e o setup de mpegbuff volta ao loop em 0x0010FA9C...
Solução
Ampliei o watch de escrita para cobrir stores de 128 bits e monitorei o campo antes do replay guest. As três escritas observadas mantiveram zero; nenh...
A pilha localizou no objeto 0x009BDA40 o campo que fornece o destino zero da limpeza que apaga o descritor do MOVIE.
Bloqueio
O campo objeto+0x24, no endereço 0x009BDA64, contém zero. O guest usa esse destino para limpar 0x10C bytes em RAM baixa; isso apaga a lista selecionad...
Solução
Ampliei a auditoria do SQ para capturar a pilha e o conteúdo do objeto no ponto da escrita. Registrei seu layout parcial e a cadeia RA=0x001152DC -> c...
Correção editorial da atualização #94: o descritor do MOVIE é criado e depois apagado por um helper guest chamado com destino zero.
Bloqueio
O helper limpa a faixa 0x00..0x10B, removendo o descritor low-RAM que a tabela[0] aponta em 0x10. Depois, mpegbuff encontra o link nulo e consome o li...
Solução
Auditei stores guest de 32 e 128 bits, correlacionei o SQ em 0x00110840 ao RA=0x001152DC e rastreei a chamada de 0x00113E74 para 0x001152A8. O campo +...
A análise estática encontrou código do MOVIE que registra um descritor na tabela de listas. O replay, porém, termina com a entrada selecionada e a RAM baixa ainda zeradas; falta provar que esse caminho inicializa o buffer mpegbuff.
Bloqueio
Na primeira chamada do setup de vídeo, o MOVIE seleciona a entrada 0 da tabela 0x001448F0, que aponta para 0x10. O descritor em 0x10..0x4C está zerado...
Solução
Localizei no ELF o caminho em 0x001101A4..0x001101C4 que calcula um slot da tabela e grava nele o endereço de um nó, além de montar campos com assinat...
A pilha guest confirmou que o loop ocorre na primeira chamada do setup de vídeo do MOVIE, ao registrar o buffer mpegbuff em 0x0017C300.
Bloqueio
A chamada da rotina em 0x0010F8D8 tenta percorrer a lista selecionada pela tabela do ELF em 0x001448F0. No estado observado, ela aponta para 0x10, o l...
Solução
Ampliei a captura diagnóstica da pilha guest e reproduzi o replay nativo. Os retornos salvos apontam para 0x00104888 e para o chamador 0x00104880, que...
A análise das instruções no PC final localizou o fuel stop dentro de um loop guest em 0x0010FA90–0x0010FA9C: o código percorre registros por ponteiros, compara um campo com t0 e repete via branch-likely. Os valores de t0/t1 e a estrutura guest no stop ainda não foram capturados, então a causa exata permanece em investi...