¿Hay alguna esperanza de una Decompiler que convertir un programa ejecutable en C / C + + código?
Este FAQ respuesta es un extracto de los fragmentos de Bob Stout.
No sostenga la respiración. Piénsalo ... Para una Decompiler para funcionar correctamente, ya sea 1) cada compilador tendría que generar código sustancialmente idénticas, incluso con la plena optimización de encendido, o 2) tendría que reconocer la salida individual de cada generador de código del compilador.
Si el primer caso se correcta, no habrá más necesidad de compilador de los puntos de referencia ya que cada uno funciona de la misma. Para el segundo caso se requeriría en realidad inmensamente complejo programa que tenía que cambiar con cada nuevo compilador liberación.
Así que ¿qué hay de específico decompilers para compiladores específicos - El decompiler decir diseñados para trabajar sólo en el código generado por, digamos, BC + + 4.5? Esto nos remontan a la optimización cuestión. Código escrito en aras de la claridad y comprensibilidad es a menudo ineficaz. Código escrito para obtener el máximo rendimiento (velocidad o tamaño) es a menudo críptica (en el mejor!) Añadir a esto el hecho de que todos los compiladores modernos tienen una multitud de interruptores para el control de optimización que la optimización de técnicas que permitan y que evitar. La conclusión es que, para un razonablemente grande, compleja fuente módulo, puede obtener el compilador para producir una serie de módulos objeto simplemente cambiando su optimización interruptores, de modo que su Decompiler también tendrá que ser un deoptimizer que reconocer que puede automágicamente estrategias de optimización pudieron en tiempo de compilación.
Vamos a simplificar aún más, y se especifica que sólo desea un apoyo específico y compilador que desea descompilar a lo más lógico de código fuente sin tratar de interpretar la optimización. ¿Entonces qué? Un buen optimizador puede reescribir y de manera sustancial la parte interna de su código, así que lo que obtiene de su Decompiler será, no sólo críptico, pero en muchos casos, lleno de ir a otros estados y no-no de la codificación de buenas prácticas. En este punto, usted tiene descompilado fuente, pero ¿qué tan bueno es?
También observamos cuidadosamente mi referencia a la fuente de los módulos. Una característica de C es que se convierta en gran parte ilegibles a menos que divide en módulos fácilmente mantenible fuente (. Archivos C). ¿Cómo hacer frente a la del decompiler que? Se podría tratar de descompilar el programa en algunos mamut función main (), la pérdida de todos los módulos, o podría tratar de colocar cada función llamada en su propio archivo. La primera manera sería inutilizable generar caos y el segundo iría en problemas cuando la fuente original hade archivos con múltiples funciones utilizando los datos y / o una o más funciones llamando a uno o más funciones estáticas. Una podría hacer del decompiler los datos y / o funciones globales, pero sólo en el gasto o la lectura (que ya sería inaceptable).
Por último, recuerde que las aplicaciones comerciales de código con frecuencia los más difíciles o de tiempo crítico funciones en ensamblador que podría resultar casi imposible en un descompilar C equivalente.
Como dije, no mantenga la respiración. A medida que la tecnología mejora a decompilers donde pueden llegar a ser más factible, y los optimizadores de lenguajes (C + +, por ejemplo, sería un lenguaje mucho más duro que a descompilar C) también conspiran para que sean menos probables.
Durante años, las aplicaciones de Unix se han distribuido en forma de fuente envuelto (máquina pero no legible - en blanco y todos los comentarios eliminados, los nombres de todas las variables en forma OOIIOIOI, etc), que ha sido un medio muy adecuado de la protección de los derechos del autor. Es muy poco probable que la salida del decompiler incluso como lectura como fuente envuelto.
Actualizado: Decompiler de tecnología es aún muy difícil, pero se han logrado avances significativos, ya que esto fue escrito.
Leer ¿Qué es un Decompiler? De actualizar la información sobre los proyectos del decompiler.
|
Guardar ¿Hay alguna esperanza de una Decompiler que convertir un programa ejecutable en C / C + + código?

