Desafortunadamente, perdí mi código fuente y solo tengo el archivo de salida que hizo con gcc en Linux y no tengo acceso a mi PC ahora. ¿Hay alguna forma de convertir el archivo de salida en el archivo de origen (en c bajo Linux)?
Desafortunadamente, perdí mi código fuente y solo tengo el archivo de salida que hizo con gcc en Linux y no tengo acceso a mi PC ahora. ¿Hay alguna forma de convertir el archivo de salida en el archivo de origen (en c bajo Linux)?
Respuestas:
Entonces tenías una vaca, pero la convertiste inadvertidamente en hamburguesa, y ahora quieres recuperar tu vaca.
Lo siento, simplemente no funciona de esa manera.
Simplemente restaure el archivo fuente de sus copias de seguridad.
Ah, no tenías copias de seguridad. Desafortunadamente, el universo no te da un descanso para eso.
Puedes descompilar el binario. Eso no le dará su código fuente, pero le dará algo de código fuente con el mismo comportamiento. No obtendrá los nombres de las variables a menos que sea un binario de depuración. No obtendrá exactamente la misma lógica a menos que haya compilado sin optimizaciones. Obviamente, no recibirás comentarios.
He usado Boomerang para descompilar algunos programas, y el resultado fue más legible que el código de la máquina. No sé si es la mejor herramienta que existe. De todos modos, no esperes milagros.
Varias herramientas son comunes en ingeniería inversa de un ejecutable.
En la mayoría de los casos que he visto, el código necesitaba ser reescrito desde cero, mantenido como un programa en lenguaje ensamblador o reconstituido mediante la aplicación de solicitudes de cambio a una versión anterior.
Lo que quieres hacer se llama "descompilar". Hay muchos descompiladores por ahí y no es práctico cubrirlos todos aquí.
Sin embargo, como comentario general: la conversión de la fuente C al código de máquina ejecutable es con pérdida. Por ejemplo:
Es raro que el código se compile como está escrito. La mayoría de los compiladores en estos días cambiarán drásticamente su código para optimizarlo. Entonces, cuando descompila, el compilador solo puede adivinar cómo debe haber sido el código fuente, no tiene forma de saber cuál era su código, porque se ha ido. Si el descompilador es bueno, el código que obtenga al menos volverá a compilarse en un ejecutable equivalente, y luego puede comenzar a refactorizarlo lentamente para que sea legible. Pero lo más probable es que el descompilador produzca un código de espagueti absolutamente ilegible, y será un gran dolor de cabeza descifrarlo. A veces, puede terminar siendo menos trabajo reescribir el programa desde cero.