Sunteți pe pagina 1din 6

Universidad Nacional Autónoma de México

Facultad de Ingeniería

Compiladores

Trabajo de investigación

Herramientas de desarrollo para máquinas virtuales

Ensamblador Dex para Dalvik

Luis Arturo Ruiz Velázquez

Cuenta: 302548778

Fecha de entrega: 13/Diciembre/2010


¿Qué es Android?
Android es un sistema operativo para móviles inicialmente desarrollado por Android Inc. Android fue adquirido
por Google en el año de 2005 y está basado en una version modificada del kernel de Linux. Google y otros
miembros de Open Handset Alliance colaboraron para desarrollar y liberar Android al mundo. El Proyecto de
Código Abierto de Android (AOSP) se encarga del mantenimiento y desarrollo de Android. Las ventas unitarias
de smartphones con Android SO ocupó el primer lugar entre todos los smatphones con SO vendidos en
Estados Unidos, en el segundo y tercer trimestre de 2010, con una cuota de 43.6%.

Android posee una amplia comunidad de desarrolladores de programas de aplicación (apps) que extienden la
funcionalidad de los dispositivos. Existen alrededor de 100,000 aplicaciones disponibles para Android. El
Mercado de Android es la tienda de aplicaciones en línea a cargo de Google, aunque las aplicaciones se
pueden descargar de otros sitios (excepto el de AT&T, que no permite esto). Los desarrolladores utilizan el
lenguaje Java, controlando el dispositivo por medio de las librerías de Java para el desarrollo-Google.

La inauguración de la distribución de Android fue anunciada el 5 de Noviembre de 2007 con la fundación de la


Open Handset Alliance, un consorcio de 79 compañías de hardware, software y telecomunicaciones
empeñadas en avanzar con la promoción de estándares abiertos para dispositivos móviles. Google lanzó la
mayoría del código de Android bajo la licencia de Apache, un software gratuito y una licencia de código abierto.

La pila de software del sistema operative de Android se compone de las aplicaciones de Java que se ejecutan
en aplicaciones orientadas a objetos en la parte superior de bibliotecas del núcleo de Java que se ejecuta en
una máquina virtual Dalvik con compilación JIT. Las librerías escritas en C incluyen el administrador de
superficie OpenCore, media framework, Sistema Administrador de Bases de Datos Relacionales SQLite,
OpenGL ES 2.0 gráficas API, WebKit layout engine, SSL y librerías C Bionic. El Sistema Operativo de Android
consiste en 12 millones de líneas de código que incluyen 3 millones de líneas de XML, 2.8 millones de líneas de
C, 2.1 millones de lóneas de Java y 1.75 millones de líneas de C++.
Diagrama de la estructura de Android

Formato de un archivo .dex

Encabezado del archivo


Los archivos inician con un encabezado simple con algunas sumas de comprobación y
compensación con otras estructuras.

Localización Tamaño Descripción

0x0 8 Valor mágico: "dex\n009\0"

0x8 4 Checksum
0xC 20 Firma SHA-1

0x20 4 Tamaño del archive en bytes

0x24 4 Tamaño del encabezado en bytes(por lo general en 0x5c)

0x28 8 Relleno(reservado para un uso futuro)

0x30 4 Número de cadenas en la tabla de string

0x34 4 Desplazamiento absoluto de la tabla de cadenas

0x38 4 Strings relacionados

0x3C 4 Número de clases en la lista de clases

0x40 4 Desplazamiento absoluto de la lista de clases

0x44 4 Número de campos en la tabla de campos

0x48 4 Desplazamiento absoluto de la lista de campos

0x4C 4 Número de métodos en la tabla de métodos

0x50 4 Desplazamiento absoluto de la lista de métodos

0x54 4 Número de definición de clases en la tabla de definición de clases

0x58 4 Desplazamiento absoluto de la lista de definición de clases

¿Qué es Dalvik y cuál es su estructura?


Dalvik es el nombre de la máquina virtual (VM) del sistema operativo Android. Es una parte integral de Android,
el cual es utilizado en dispositivos móviles como teléfonos, computadoras tablet y netbooks. Antes de su
ejecución, las aplicaciones de Android son transformadas a un formato más compacto conocido como
ejecutable de Dalvik (.dex) , el cual está diseñado para ser adecuado para los sistemas que están limitados en
términos de memoria y velocidad del procesador. Fue escrito originalmente por Dan Bornstein, y nombrado así
por una villa de pescadores ubicada en Islandia.

Arquitectura de la Máquina Virtual de Dalvik

A diferencia de la Máquina Virtual de Java, las cuales son máquinas de stack, la máquina virtual de Dalvik es
una arquitectura basada en registros.

Las máquinas basadas en pilas (stack) debe utilizar instrucciones para cargar los datos en la pila y manipular
los datos y requieren más instrucciones de registro máquinas para aplicar el mismo código de alto nivel, pero
las instrucciones en una máquina de registro debe codificar los registros de origen y destino por lo que tienden
a ser más grandes. Esta diferencia es de una importancia básica a los intérpretes para los que VM código de
operación de despacho tiende a ser caro, junto con otros factores igualmente relevantes para la compilación
JIT.

Descripción General de ensambladores alternativos


Dedexer
Dedexer es una herramienta de desensamblado para archives DEX. Dex es el formato que introdujeron los
creadores de la plataforma de Android. El formato y el conjunto de código de operación asociado están en
relación distante con el formato de archivo de clase Java y bytecodes de Java. Dedexer es capaz de leer el
formato de ejecución directa y se convierten en un formato “assembly-like”. Este formato es influenciado por la
sintaxis Jasmin pero contiene código de Dalvik. Por esta razón, Jasmin no es capaz de compilar los archives
generados.

Otros ensambladores son:

- Dexdump.- Viene con el SDK de Android, es menos conveniente de usar que dedexer porque por dar un
ejemplo no soporta etiquetas, produce archivos grandes, etc.
- Baksmali.- Es un ensamblador competente de código abierto de DEX, Viene con el bytecode de Dalvik.

Traducción de Java a Dex


Una herramienta llamada dx es utilizada para convertir algunos archives de Java .class a un formato .dex.
Múltiples clases son incluidas en un archive único .dex. Duplicando cadenas y otras constantes utilizadas en
múltiples archivos de clase se incluyen sólo una vez en la salida de .dex para el ahorro de espacio. El bytecode
de Java también se convierte en una instrucción alternativa utilizada por la máquina virtual Dalvik. Un archivo
comprimido .dex suele ser un porcentaje más pequeño que un archive .jar derivado del mismo archive .class.

Los ejecutables de Dalvik pueden ser modificados cuando son instalados dentro de un dispositivo móvil. Para
poder obtener optimizaciones, el orden de bytes se debe intercambiar en algunos datos, estructuras simples de
datos y las bibliotecas de función puede estar vinculada en línea, por ejemplo las clases de objetos vacíos
pueden ser un corto circuito.
Así como Andriod 2.2, Dalvik tiene un compilador JIT.

Siendo optimizado para requerimientos de baja memoria, Dalvik tiene algunas características que la diferencian
de otras máquinas virtuales:

- La máquina virtual fue reducida para usar menos espacio


- El conjunto de constantes ha sido modificado para utilizar sólo 32 bits indexados para simplificar el
intérprete.
- Utiliza su propio bytecode
- Dalvik ha sido diseñado para que el dispositivo pueda ejecutar de manera eficiente múltiples instancias
de la máquina virtual.

Bibliografía
http://dedexer.sourceforge.net/

http://www.slideshare.net/paller/dedexer

http://en.wikipedia.org/wiki/Dalvik_(software)

http://en.wikipedia.org/wiki/Android_(operating_system)

http://www.retrodev.com/android/dexformat.html

S-ar putea să vă placă și