¿Existe un descompilador de C ++? [cerrado]

116

Tengo un programa en el que perdí el código fuente de C ++. ¿Existen buenos descompiladores de C ++?

Ya me encontré con Boomerang .

Bryan Denny
fuente
objdumppara Linux
Stypox
1
cutter.re para una gran interfaz gráfica de usuario y un gran descompilador incorporado
Misiur

Respuestas:

80

Puede utilizar IDA Pro de Hex-Rays . Por lo general, no obtendrá un buen C ++ de un binario a menos que haya compilado información de depuración. Prepárese para gastar mucho trabajo manual revirtiendo el código.

Si no eliminó los binarios, hay alguna esperanza, ya que IDA Pro puede producir un código similar a C para que pueda trabajar con él. Sin embargo, por lo general es muy difícil, al menos cuando lo usé hace un par de años.

David Holm
fuente
26
Para aclarar, IDA solo dará el desmontaje. Hay un complemento llamado Hex-Rays que descompilará el resto del camino en la fuente C / C ++, en la medida de lo posible.
davenpcj
2
Para mi lectura de los documentos, hex-rays solo produce C como pseudocódigo. No es que eso lo haga inútil para descompilar C ++, solo necesita saber un poco sobre cómo los compiladores convierten las estructuras de C ++.
Michael Anderson
Para aclarar un poco más, Disassembly es lo máximo que puede descompilar con Hex-Rays traducirá ASM a C ++ ASM se puede traducir a cualquier lenguaje de programación con trabajo, ya que todos los programas pueden ejecutarse como ASM
Barkermn01
4
SNOWMAN es un buen descompilador de C ++ gratuito
Inga
2
+1 para Snowman, pero como otros han mencionado, incluso un simple Hello, World se vuelve prácticamente ilegible una vez descompilado.
bdetweiler
25

la información se descarta en el proceso de compilación. Incluso si un descompilador pudiera producir el código lógico equivalente con clases y todo (probablemente no pueda), la parte de autodocumentación desaparece en el código de lanzamiento optimizado. Sin nombres de variables, sin nombres de rutina, sin nombres de clases, solo direcciones.

Dustin Getz
fuente
25
"el alma" del programa se ha ido, sólo una cáscara vacía de su antiguo yo ... "
Darshan Chaudhary
21

Sí, pero ninguno de ellos logrará producir código lo suficientemente legible para que valga la pena el esfuerzo. Pasará más tiempo tratando de leer la fuente descompilada con bloques ensambladores adentro, que reescribiendo su antigua aplicación desde cero.

m_pGladiator
fuente
6

No he visto ningún descompilador que genere código C ++. He visto algunos experimentales que hacen un intento razonable de generar código C, pero tienden a depender de hacer coincidir los patrones de generación de código de un compilador en particular (eso puede haber cambiado, ha pasado un tiempo desde la última vez que miré esto ). Por supuesto, toda información simbólica desaparecerá. Google para "descompilador".

Ferruccio
fuente
4

Dependiendo de cuán grande y bien escrito esté el código original, podría valer la pena comenzar de nuevo en su idioma favorito (que aún podría ser C ++) y aprender de los errores cometidos en la última versión. ¿No dijo alguien una vez sobre escribir uno para tirarlo?

nb Claramente, si este es un producto enorme, entonces puede que no valga la pena.

harriyott
fuente
24
Joel es un gran columnista, pero a veces se equivoca. Y luego hay momentos en los que se cita mal. Como aquí, ya que la pregunta se centra en la pérdida del código fuente. El artículo de Joels explica por qué el código fuente es valioso.
MSalters
5
¿No dijo alguien una vez sobre escribir uno para tirarlo? Sí, y cambió de opinión. Davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [E] n 1975, aconsejé a los programadores que "tiraran la primera versión" y luego crearan una segunda uno. En la edición del vigésimo aniversario, me di cuenta de que la iteración incremental constante es un enfoque mucho más sólido
ta.speot.is