Transformación y análisis de código de bytes orientado a objetos

  1. Gómez-Zamalloa Gil, Miguel
Dirigida por:
  1. Elvira Albert Directora

Universidad de defensa: Universidad Complutense de Madrid

Fecha de defensa: 26 de octubre de 2009

Tribunal:
  1. Ricardo Peña Marí Presidente
  2. Purificación Arenas Sánchez Secretaria
  3. Germán Vidal Oriola Vocal
  4. Roberto Bagnara Vocal
  5. Jhon P. Gallagher Vocal
Departamento:
  1. Sistemas Informáticos y Computación

Tipo: Tesis

Resumen

Predecir el comportamiento de los programas antes de su ejecución es cada vez más importante, especialmente teniendo en cuenta que éstos son cada vez más complejos y son utilizados frecuentemente en situaciones críticas, como operaciones médicas, con trol aéreo u operaciones bancarias, El análisis estático de programas es el proceso por el cual el comportamiento de los programas es analizado sin llegar a ejecutar su código. Tradicionalmente, la mayoría de análisis han sido formulados al nivel de l código fuente. No obstante, puede darse el caso de que el análisis deba tratar con código compilado, o código de bytes. Esta situación se da en particular cuando un consumidor de código está interesado en verificar ciertas propiedades de programas de un tercero, pero no tiene acceso directo al código fuente, como suele pasar con el software comercial y con el código móvil. Un ejemplo particularmente interesante es el \emph{análisis del consumo de memoria}, el cual puede ser muy útil en context os en los cuales el consumidor de código quiere verificar que el programa recibido puede ejecutarse sin que su consumo de memoria exceda un límite dado. Desafortunadamente, razonar sobre programas reales de código de bytes (con orientación a objetos ) es una tarea complicada y costosa. Además de las características propias de la orientación a objetos como la herencia y las invocaciones virtuales, un analizador de código de bytes tiene que tratar con ciertas complicaciones propias de los lenguaje s de bajo nivel como la ausencia de estructura de control, el uso de la pila de operandos, etc. Una práctica habitual consiste en resolver el problema en dos pasos, de forma que en primer lugar se transforma, o decompila, el programa de código de b ytes a una representación intermedia de más alto nivel, para poder así formular el análisis sobre dicha representación. Esto permite abstraer las características particulares del lenguaje y así poder desarrollar las herramientas de análisis sobre rep resentaciones más sencillas. La mayoría de los enfoques desarrollan decompiladores ad hoc, es decir, decompiladores exclusivamente diseñados para llevar a cabo una transformación particular. Existe no obstante una alternativa al desarrollo de decomp iladores ad hoc, llamada decompilación interpretativa por evaluación parcial. Como veremos, ésta permite decompilar programas evaluando parcialmente un intérprete respecto a éstos. Esta tesis contribuye a mejorar el estado del arte en la transformac