2008-12-02 49 views
16

Alguien acaba de enviarme un descompilador de un programa en C. Era un descompilador muy bueno, que producía un código C agradable, en su mayoría readable (si pasa por alto el hecho de que ninguna de las variables o funciones tenía un nombre legible) que parecía que realmente compilaría.¿Hay algún programa para descompilar Delphi?

Hubo un gran problema, sin embargo. Sé por casualidad que el programa que estaba descompilando estaba escrito en Delphi, que está lleno de conceptos que son difíciles de traducir a C. Pero quedé realmente impresionado por la salida del decompilador, y me hizo pensar. ¿Hay algo que pueda hacer eso para Delphi?

La mejor herramienta de descompilación que he visto para Delphi es DeDe. Puede hacer muchas cosas, pero ni siquiera intenta producir el código de Object Pascal como salida, y no se ha actualizado desde Delphi 6. ¿Hay algo mejor por ahí?

+0

¿Tiene el nombre del programa que descompuso la aplicación Delphi en el código psuedo de la fuente C? Quiero ver cómo un viejo programa de 1999 implementó un algoritmo. No puedo ejecutar la aplicación para determinar el comportamiento porque hay una pérdida de recursos en el manejo de gráficos y tengo que reiniciar unos diez minutos para usar la aplicación. – AMissico

+0

@AMissico: según el correo electrónico, fue hecho con IDA Pro, con un complemento llamado "Hex Rays Decompiler". –

+0

Gracias por responder. Pensé que era Hex-Rays Decompiler. Lo único que encontré para hacer lo que describiste. – AMissico

Respuesta

13

No creo que haya descompiladores de códigos de máquina que produzcan código Pascal. La mayoría de los "descompiladores de Delphi" analizan los datos de forma y RTTI, pero en realidad no descompilan el código de máquina. Solo puedo recomendar el uso de algo como DeDe (o similar software) para extraer información de símbolos en combinación con un descompilador de C, luego traducir el código de C decompilado a Delphi (hay muchos convertidores de código fuente por ahí).

+1

FWIW, hubo, en los primeros días de Delphi, un descompilador completo. Sin embargo, no he visto ni oído hablar de él durante muchos años. – mj2008

+0

@ mj2008 ¿Alguien sabe más al respecto? Tengo un proyecto Delphi 4/5, podría ser "primeros días" en la vista de hoy :-) –

+0

Delphi usa una semántica de llamadas a función diferente (no __stdcall). En una prueba con retdec.com, "olvidó" mantener los valores de retorno y no detectó adecuadamente el inicio y final de la función, lo que inutilizó el resultado. –

1

Idiomas como Delphi, C y C++ Compilar con el código máquina nativo del procesador, y los ejecutables de salida tienen poco o ningún metadato en ellos. Esto está en contraste con Java o .Net, que se compilan a código de bytes independiente de la plataforma orientado a objetos, que conserva los nombres de métodos, parámetros de métodos, clases y espacios de nombres, y otros metadatos.

Por lo tanto, es mucho menos útil la descompilación que se puede hacer en Delphi o el código C. Sin embargo, Delphi normalmente tiene datos de formulario incorporados para cualquier forma en el proyecto (generados por la línea $ R * .dfm), y también tiene metadatos en todas las propiedades publicadas, por lo que una herramienta específica de Delphi podría extraer esta información .

+0

Incluso si no es un código administrado rico en reflejos, no es muy difícil leer el ASM que produce Delphi y convertirlo en mi memoria al código de Object Pascal. Hago un montón de depuración en ese nivel. Todo lo que pierde son los nombres, y puede inferirlos del contexto la mayor parte del tiempo. –

+5

Consejo: Si crees que es fácil, entonces comienza a implementarlo tú mismo. –

+0

Mason: ¿hiciste esa prueba en el código con la optimización activada? –

6

Puede usar IDR es un excelente programa para descompilar delphi, se actualiza a las versiones actuales de Delphi y tiene muchas características.

+0

Parece que IDR solo funciona hasta D2009 (con soporte D2010 teórico pero el archivo de datos de contexto está protegido por contraseña) y no tiene soporte para XE o posterior, o para realmente descompilar el código de nuevo a Pascal. –

+0

@MasonWheeler El D2010 ahora es gratis sin protección con contraseña. –

+1

Ahora el enlace está muerto. – jirarium

Cuestiones relacionadas