¿Con qué frecuencia deberíamos esperar que el código descompilado se vuelva a compilar con éxito?

Ningún descompilador puede reconstruir un archivo de código fuente en un lenguaje de alto nivel. Casi toda la información útil para un programador se elimina durante la compilación, y todo lo que queda es el código hexadecimal ejecutable. A veces, el programa deja información de depuración en forma de una tabla de símbolos, pero la mayoría se elimina, ya que ocupa espacio. Entonces, lo que obtienes es casi invariablemente una lista de ensambladores, sin comentarios y, en el mejor de los casos, etiquetas del formulario “C1234” o “D005A”, que son la mejor suposición del desensamblador en cuanto a si la dirección es código o datos. Luego, habrá tablas de datos enterradas en el código, y el desensamblador no sabe la diferencia entre estas y las instrucciones. Depende de la persona que hace el trabajo identificar esas áreas y marcarlas, lo que requiere mucho conocimiento y, por lo general, varias ejecuciones de desensamblador para encontrarlas. El programa original, incluso uno bastante pequeño, se compilará y vinculará desde varios archivos de origen y bibliotecas, pero el desensamblaje será un solo archivo, sin indicación de los cortes originales. Finalmente, el desensamblador no tiene idea de qué ensamblador o compilador se utilizó para compilar el programa, por lo que no tiene forma de incluir las directivas y las operaciones psuedo necesarias para hacerlo.

La conclusión es que no, el código descompilado sin procesar nunca se compilará correctamente . Se necesita una gran cantidad de habilidad y experiencia para editar el resultado en un formulario que se ensamble sin error. Primero, realice el desensamblaje correctamente con todas las áreas de datos correctamente identificadas y las operaciones psuedo-op del ensamblador restauradas hasta que cree un archivo hexadecimal idéntico al que comenzó. Ese es el primer paso importante. Solo entonces debería profundizar y comenzar a editar el código.