Академический Документы
Профессиональный Документы
Культура Документы
de Hidalgo
Instituto de Ciencias Básicas e Ingeniería
Autómatas y compiladores
“Descompiladores”
Profesor: Macedonio
05 de marzo de 2018
“Descompiladores”
Definición
Es necesario que exista un programa en lenguaje Máquina para que pueda ser ejecutado. Y es
necesario que exista un programa en lenguaje Fuente para que pueda ser modificado, mejorado o
depurado por el programador. Si el programa en lenguaje Máquina se pierde o es destruido, puede
generarse un nuevo programa procesando el correspondiente programa en lenguaje Fuente por
medio del Compilador. Pero si el Fuente ha sido destruido o perdido, el proceso será imposible. En
este caso será necesario el uso de un Descompilador, el cuál procesará el programa en lenguaje
Máquina para reproducir el programa en lenguaje Fuente. Realizando un proceso inverso al
Compilador. Dicho de otro modo, el Descompilador traduce y convierte programas Máquina
(Objetos) comprensibles por el AS400 en programas Fuente (Source) comprensibles por los
humanos (Programadores).
Utilización
Los descompiladores se utilizan especialmente cuando el código máquina ha sido generado con
opciones de depuración, y contiene información adicional de ayuda al descubrimiento de errores
(puntos de ruptura, seguimiento de trazas, opciones de visualización de variables, etc.).
También se emplean cuando el compilador no genera código máquina puro, sino pseudocódigo para
ser ejecutado a través de un pseudointérprete. En estos casos suele existir una relación biyectiva
entre las instrucciones del pseudocódigo y las construcciones sintácticas del lenguaje fuente, lo que
permite reconstruir un programa de alto nivel a partir del de un bloque de pseudocódigo.
¿Cuándo es necesario?
¿Por qué descompilar?
¿Cómo funciona?
Realizar este proceso, generalmente nos permite entender la lógica a nivel superior, como lo son:
los bucles o declaraciones if-then.
Ensamblador
Delphi
Visual Basic
Java
.NET
Python
Flash
C/C++
Los compiladores de Java, .NET y Flash no generan código binario, si no bytecode, esto es, código
para ser ejecutable sobre sus máquinas virtuales. Por eso estos lenguajes son multiplataforma. En
cambio, los compiladores de C generan código optimizado en binario para un procesador
determinado (x86, AMD64, SPARC...) De esta manera, es mucho más difícil decompilar programas
en C. La única documentación hoy día que he podido encontrar es una tesis de Cristina Cifuentes
(Universidad de Queensland) dedicada exclusivamente a la decompilación en C en la arquitectura
i386. Los pocos decompiladores existentes para C no son automáticos, es decir, necesitan la
interacción del usuario y sólo funcionan con programas pequeños.
Conclusión
La descompilación suele ser una labor casi imposible, porque al código máquina generado casi
siempre se le aplica una optimización en una fase posterior, de manera que un mismo código
máquina ha podido ser generado a partir de varios códigos fuente. Por esto, sólo existen
descompiladores de aquellos lenguajes en los que existe una relación biyectiva entre el código
destino y el código fuente, como sucede con los desensambladores, en los que a cada instrucción
máquina le corresponde una y sólo una instrucción ensamblador.
Referencias
Sergio Gálvez Rojas, Miguel Ángel Mora Mata (2005). Compiladores. Universidad de Malaga. E.T.S
de Ingeniería Informática. Dpto. de Lenguajes y Ciencias de la Computación. España. Recuperado en
web de: http://www.lcc.uma.es/~galvez/ftp/libros/Compiladores.pdf
ATT. American Top Tools (s.f.). Qué es un descompilador. ATT. España. Recuperado en web de:
http://www.gofaster.us/attnews/archivos/decom0805.pdf