Archivos DEX (Dalvik Executable): La Tabla de Tipos
Seguimos desenmarañando la estructura de los archivos Dex y ahora nos toca la tabla de tipos, es decir, los diferentes tipos de datos que utiliza nuestra aplicación a analizar. En este caso al igual que hicimos con la tabla de strings, obtenemos el offset y numero de elementos en la tabla de tipos de la cabecera. En el caso que estamos analizando la tabla de tipos comienza en 0x000001AC y tiene 28 (0x0000001C) elementos. Recorriendo de 4 en 4 bytes obtenemos las posiciones en la tabla de strings que identifican los tipos a usar: 2,7,8,9,10..
- elemento 2 de la lista de STRINGS: I
- elemento 7 de la lista de STRINGS: Landroid/app/Activity;
- elemento 8 de la lista de STRINGS: Landroid/os/Bundle;
- elemento 9 de la lista de STRINGS: Landroid/text/Editable;
- elemento 10 de la lista de STRINGS: Landroid/view/View$OnClickListener;
- elemento 11 de la lista de STRINGS: Landroid/view/View;
- elemento 12 de la lista de STRINGS: Landroid/widget/Button;
- elemento 13 de la lista de STRINGS: Landroid/widget/EditText;
- elemento 14 de la lista de STRINGS: Landroid/widget/TextView;
- elemento 15 de la lista de STRINGS: Lcom/marakana/NDKDemo$1;
- elemento 16 de la lista de STRINGS: Lcom/marakana/NDKDemo;
- elemento 17 de la lista de STRINGS: Lcom/marakana/NativeLib;
- elemento 18 de la lista de STRINGS: Lcom/marakana/R$attr;
- elemento 19 de la lista de STRINGS: Lcom/marakana/R$drawable;
- elemento 20 de la lista de STRINGS: Lcom/marakana/R$id;
- elemento 21 de la lista de STRINGS: Lcom/marakana/R$layout;
- elemento 22 de la lista de STRINGS: Lcom/marakana/R$string;
- elemento 23 de la lista de STRINGS: Lcom/marakana/R;
- elemento 24 de la lista de STRINGS: Ldalvik/annotation/EnclosingClass;
- elemento 25 de la lista de STRINGS: Ldalvik/annotation/EnclosingMethod;
- elemento 26 de la lista de STRINGS: Ldalvik/annotation/InnerClass;
- elemento 27 de la lista de STRINGS: Ldalvik/annotation/MemberClasses;
- elemento 28 de la lista de STRINGS: Ljava/lang/CharSequence;
- elemento 29 de la lista de STRINGS: Ljava/lang/Integer;
- elemento 30 de la lista de STRINGS: Ljava/lang/Object;
- elemento 31 de la lista de STRINGS: Ljava/lang/String;
- elemento 32 de la lista de STRINGS: Ljava/lang/System;
- elemento 37 de la lista de STRINGS: V
Estos strings usan una sintaxis concreta y pueden traducirse a una forma mas común de definir los tipos mediante la siguiente tabla.
| Syntax | Meaning |
|---|---|
| V | void |
| Z | boolean |
| B | byte |
| S | short |
| C | char |
| I | int |
| J | long |
| F | float |
| D | double |
| Lnombre/completo/Clase; | la clase nombre.completo.Clase |
| [descriptor | Array de elementos descriptor, es posible crear arrays de arrays, con limite de profundidad 255Ejemplo: [I ~ array de ints (int[]) |
Por tanto, la tabla, nos quedaria de esta manera:
- int
- android.app.Activity
- android.os.Bundle
- android.text.Editable
- android.view.View.OnClickListener
- android.view.View
- android.widget.Button
- android.widget.EditText
- android.widget.TextView
- com.marakana.NDKDemo.1
- com.marakana.NDKDemo
- com.marakana.NativeLib
- com.marakana.R.attr
- com.marakana.R.drawable
- com.marakana.R.id
- com.marakana.R.layout
- com.marakana.R.string
- com.marakana.R
- dalvik.annotation.EnclosingClass
- dalvik.annotation.EnclosingMethod
- dalvik.annotation.InnerClass
- dalvik.annotation.MemberClasses
- java.lang.CharSequence
- java.lang.Integer
- java.lang.Object
- java.lang.String
- java.lang.System
- void
Otro recurso mas, que sera utilizado junto a la tabla de strings para desensamblar el resto de estructuras de nuestra aplicación.



