Pular para o conteúdo
Falar com a gente
Caso real · Delphi

Do executável Delphi para a web.

Pegamos o HeidiSQL 12.21, um programa Delphi de código aberto, e lemos só o executável oficial, sem abrir o código-fonte. Em 5,3 segundos saiu tudo o que as telas prometem. Depois conferimos contra o código: 34 de 34 telas idênticas.

Em um minuto

O caminho inteiro, do arquivo .exe à tela na web.

O que saiu do executável

Um arquivo de 25 MB, lido como bytes, sem rodar o programa.

  • 38telas
  • 1.634componentes
  • 1.264eventos de tela
  • 199comandos SQL
  • 48tabelas citadas

Cada número vem do contrato gerado do executável oficial (sha256 no fim da página) e é refeito igual a cada execução.

As telas, na web

Escolha uma tela e clique num botão: aparece o que ele faz no sistema original.

A prova

Onde existe código-fonte, o executável tem que dizer a mesma coisa. Disse.

pelo executávelpelo código-fonte
Telas do projeto3434
Telas idênticas, componente por componente34 de 34
Eventos nessas telas1.264, os mesmos dos dois lados
Telas embutidas que nada abre4não aparece lendo o código

Um achado que só o executável mostrou

A tela de sincronização de bancos (TfrmSyncDB) está dentro do executável, com botões e eventos, mas a classe dela não está: nada no programa abre essa tela, e o compilador descartou o código. Lendo só o fonte, ela parece viva. É o tipo de coisa que decide o escopo de uma migração: não se reescreve o que ninguém usa.

Como funciona

Quatro passos, cada um com a sua conferência.

  1. Ler o executável

    O Delphi guarda cada tela dentro do .exe. Lemos esses blocos como dados: telas, componentes, ligações e eventos. O programa nunca é executado.

  2. Montar o contrato

    Tudo vira uma lista do que o sistema promete: cada botão, o evento dele, o SQL que aparece. Mesmo arquivo, mesmo resultado, byte a byte.

  3. Conferir com o fonte, quando existe

    Lemos o código pelo arquivo de projeto e comparamos tela por tela. Aqui, 34 de 34 idênticas.

  4. Subir para a web

    As telas viram HTML, cada evento ligado à operação do contrato. Um conferidor reprova se faltar um componente ou um evento: faltaram 0.

O que ainda não está aqui

O que o executável não entrega, e como fechamos.

  • O código de cada botão. O executável traz a tela e diz se o botão tem código, mas não o que o código faz. Esse passo vem do código-fonte ou da engenharia reversa do binário.
  • SQL montado em tempo de execução. No código-fonte do HeidiSQL, 195 comandos são montados com variáveis; a tabela real só aparece rodando. Ficam marcados para conferir com quem conhece o sistema.
  • O desenho. A versão web usa as posições originais da tela. É o ponto de partida para redesenhar, não o visual final.
De onde veio cada byte

Programa de terceiros, código aberto, usado como caso de estudo.

O HeidiSQL é criado por Ansgar Becker e colaboradores e distribuído sob a licença GPL-2.0. A Genesis não tem relação com o projeto. Executável: release oficial 12.21, sha256 do heidisql.exe d4bc6b81906832aeed79e054ed094f5e15449c8fa91285538173d4a7f90db113. Código-fonte: repositório oficial, commit effb854 (Bump version for v12.21 release). Nada foi alterado no programa.

Contato

Tem um sistema em Delphi parado no tempo?

Manda o executável ou o código. Devolvemos o contrato do sistema, o que ele faz tela por tela, e o caminho para a web.