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

Loading...
Thumbnail Image
Official URL
Full text at PDC
Publication Date
2010-06-23
Advisors (or tutors)
Editors
Journal Title
Journal ISSN
Volume Title
Publisher
Universidad Complutense de Madrid, Servicio de Publicaciones
Citations
Google Scholar
Research Projects
Organizational Units
Journal Issue
Abstract
Predecir el comportamiento de los programas antes de su ejecuci´on es cada vez mÁs importante, especialmente teniendo en cuenta que ´estos son cada vez más complejos y son utilizados frecuentemente en situaciones críticas, como operaciones médicas, control 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 del 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 ánálisis del consumo de memoria, el cual puede ser muy útil en contextos 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´odigo de bytes (con orientación a objetos) es una tarea complicada y costosa. Adem´as 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 lenguajes de bajo nivel como la ausencia de estructura de control, el uso de la pila de operandos, etc. Una pr´actica habitual consiste en resolver el problema en dos pasos, de forma que en primer lugar se transforma, o decompila, el programa de c´odigo de bytes a una representación intermedia de m´as alto nivel, para poder asi 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 representaciones 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 decompiladores 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 transformación y el análisis de lenguajes de código de bytes, en concreto: (1) proponiendo e implementando un esquema formal para la decompilación automática por compilación interpretativa de programas de código de bytes (con orientación a objetos) a representaciones intermedias de más alto nivel, en particular utilizando programación lógica; (2) estudiando las aplicaciones prácticas que se tienen gracias a disponer de dichas representaciones; y (3) diseñando e implementando un análisis de consumo de memoria para lenguajes de código de bytes con recolección de basura. [ABSTRACT] Predicting the behavior of programs before their actual execution becomes more and more relevant as programs increase in complexity and become used in critical situations such as medical operations, flight control or banking cards. Static program analysis is the process of automatically analyzing the behavior of programs without actually executing the code. Traditionally, most analyses have been formulated at the source code level. However, it can be the case that the analysis must consider the compiled code, or bytecode, instead. This may happen, in particular, when the code consumer is interested in verifying some properties of 3rd party programs, but has no direct access to the source code, as usual for commercial software and in mobile code. A particularly interesting example is memory consumption analysis, which can be very useful in contexts where the code consumer wants to verify that the received program can run within the actual memory available. Unfortunately, reasoning about realistic (object-oriented) bytecode programs is rather complicated and time consuming. In addition to the objectoriented features such as inheritance and virtual method invocations, a bytecode analyzer has to deal with several low-level language features like the unstructured control flow, the usage of the operand stack, etc. A usual practice is to first transform, or decompile, the bytecode program into a higher-level intermediate representation, and then develop the analysis over such representation. This allows abstracting away the particular bytecode language features and developing the analysis tools on much simpler representations. Most of the approaches develop ad-hoc decompilers, i.e., decompilers exclusively designed to carry out the particular transformation. There is however an alternative to the development of dedicated decompilers which is the so calle i terpretive decompilation by partial evaluation,which allows decompiling programs by partially evaluating an interpreter w.r.t. them. This thesis contributes to improve the state-of-the-art in the transformation and analysis of bytecode languages by: (1) providing and implementing a formal framework for the automatic decompilation of (objectoriented) bytecode programs to higher-level intermediate representations, in particular represented using logic programming, by means of interpretive decompilation; (2) studying the practical applications that having such representations can have; and (3) designing and implementing a live memory consumption analysis for bytecode languages with garbage collection.
Description
Tesis de la Universidad Complutense de Madrid, Facultad de Informática, Departamento de Sistemas Informáticos y Computación, leída el 26-10-2009
Keywords
Citation
Collections