2008-10-15 22 views

Respuesta

65

Puede usar IDA Pro por Hex-Rays. Por lo general, no obtendrás un buen C++ de un binario a menos que hayas compilado en la información de depuración. Prepárese para gastar lote del trabajo manual invirtiendo el código.

Si no quitó los binarios, hay algo de esperanza ya que IDA Pro puede producir código similar a C para trabajar con usted. Por lo general, es muy difícil, al menos cuando lo usé hace un par de años.

+17

Para aclarar, IDA solo dará el desmontaje. Hay un add-on llamado Hex-Rays que descompilará el resto del camino en una fuente C/C++, en la medida de lo posible. – davenpcj

+1

Para mi lectura de los documentos, los rayos X solo producen C como pseudocódigo. No es que eso sea inútil para descompilar C++, solo necesita saber un poco sobre cómo los compiladores convierten las estructuras de C++. –

+0

Para aclarar Algo más, el desmontaje es lo máximo que puede descompilar con Hex-Rays se traducirá ASM a C++ ASM se puede traducir a cualquier lenguaje de programación con el trabajo ya que todos los programas se pueden ejecutar como ASM –

17

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

18

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 auto-documentación se ha ido en un código de lanzamiento optimizado. Sin nombres de variables, sin nombres de rutina, sin nombres de clase, solo direcciones.

+2

"el alma" del programa se ha ido, solo un caparazón vacío de su anterior yo ... " –

3

Dependiendo de qué tan grande y cuán bien escrito esté el código original, podría valer la pena volver a empezar en su idioma favorito (que aún puede ser C++) y aprender de los errores cometidos en la última versión. ¿Alguien dijo una vez acerca de escribir uno para tirar?

n.b. Claramente, si este es un producto enorme, entonces puede no valer la pena el tiempo.

+0

http://www.joelonsoftware.com/articles/fog0000000069.html –

+21

Joel es un gran columnista, pero a veces está equivocado . Y luego hay ocasiones en que se lo cita incorrectamente. 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

+4

* ¿Alguien dijo una vez acerca de escribir una para tirar? * Sí, y cambió de opinión http://www.davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away * [I] n 1975, aconsejé a los programadores que "lanzaran la primera versión" de distancia, "luego construir una segunda. En la edición del 20 aniversario, me di cuenta de que la iteración incremental constante es un enfoque mucho más sólido * –

5

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