summaryrefslogtreecommitdiff
path: root/src/format/dex/dex_def.h
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-10-18 20:50:10 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-10-18 20:50:10 (GMT)
commitdce9d9cdfef1d37ef11a987a21f36e83b6b1944f (patch)
tree830623ade20e892954fcbddd3b7b05d09aac1dd7 /src/format/dex/dex_def.h
parent1e7c7de85438749d3faf7b76984b86a9c088fbc1 (diff)
Created plugins for the Dex and Dalvik support.
Diffstat (limited to 'src/format/dex/dex_def.h')
-rwxr-xr-xsrc/format/dex/dex_def.h327
1 files changed, 0 insertions, 327 deletions
diff --git a/src/format/dex/dex_def.h b/src/format/dex/dex_def.h
deleted file mode 100755
index e1521e8..0000000
--- a/src/format/dex/dex_def.h
+++ /dev/null
@@ -1,327 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * dex_def.h - liste des structures et constantes utilisées par le format DEX
- *
- * Copyright (C) 2010-2017 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * Chrysalide is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * Chrysalide is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_DEX_DEX_DEF_H
-#define _FORMAT_DEX_DEX_DEF_H
-
-
-#include "../../common/leb128.h"
-
-
-
-/* -------------------------- DESCRIPTION DU FORMAT DALVIK -------------------------- */
-
-
-/* Identifiant magique "dex\n035\0" */
-#define DEX_FILE_MAGIC "\x64\x65\x78\x0a\x30\x33\x35\x00"
-#define DEX_FILE_MAGIC_LEN 8
-
-/* Types de boutisme */
-#define ENDIAN_CONSTANT 0x12345678
-#define REVERSE_ENDIAN_CONSTANT 0x78563412
-
-/* Indice non valide */
-#define NO_INDEX 0xffffffff
-
-
-/* En-tête de tout programe Dex */
-typedef struct _dex_header
-{
- uint8_t magic[DEX_FILE_MAGIC_LEN]; /* Valeur magique du format */
-
- uint32_t checksum; /* Somme de contrôle adler32 */
- uint8_t signature[20]; /* Emprunte SHA-1 du reste */
- uint32_t file_size; /* Taille du fichier */
- uint32_t header_size; /* Taille de cette en-tête */
-
- uint32_t endian_tag; /* Boutisme du fichier */
-
- uint32_t link_size; /* Taille de section 'liaisons'*/
- uint32_t link_off; /* Position de ladite section */
- uint32_t map_off; /* Position de la cartographie */
- uint32_t string_ids_size; /* Nombre de chaînes de carac. */
- uint32_t string_ids_off; /* Position de cette liste */
- uint32_t type_ids_size; /* Nom d'identifiant de type */
- uint32_t type_ids_off; /* Position de la liste */
- uint32_t proto_ids_size; /* Nombre de prototypes */
- uint32_t proto_ids_off; /* Position de la liste */
- uint32_t field_ids_size; /* Nombre de champs */
- uint32_t field_ids_off; /* Position de la liste */
- uint32_t method_ids_size; /* Nombre de méthodes */
- uint32_t method_ids_off; /* Position de la liste */
- uint32_t class_defs_size; /* Nombre de classes déclarées */
- uint32_t class_defs_off; /* Position de la liste */
- uint32_t data_size; /* Taille des données */
- uint32_t data_off; /* Début des données */
-
-} dex_header;
-
-
-
-/* -------------------------- CONSTANTES POUR DEX DIVERSES -------------------------- */
-
-
-/* Définition des drapeaux d'accès */
-
-#define ACC_PUBLIC 0x00001 /* Elément publique */
-#define ACC_PRIVATE 0x00002 /* Elément privé */
-#define ACC_PROTECTED 0x00004 /* Elément protégé */
-#define ACC_STATIC 0x00008 /* Elément statique */
-#define ACC_FINAL 0x00010 /* Non dérivable / modifiable */
-#define ACC_SYNCHRONIZED 0x00020 /* Pose de verrou automatique */
-#define ACC_VOLATILE 0x00040 /* Accès spécial threads */
-#define ACC_BRIDGE 0x00040 /* Méthode pont */
-#define ACC_TRANSIENT 0x00080 /* Pas de sérialisation */
-#define ACC_VARARGS 0x00080 /* Arguments variables */
-#define ACC_NATIVE 0x00100 /* Implémentation en code natif*/
-#define ACC_INTERFACE 0x00200 /* Interface */
-#define ACC_ABSTRACT 0x00400 /* Non instanciable directement*/
-#define ACC_STRICT 0x00800 /* Règle pour les flottants */
-#define ACC_SYNTHETIC 0x01000 /* Non défini dans le code */
-#define ACC_ANNOTATION 0x02000 /* Annotation */
-#define ACC_ENUM 0x04000 /* Enumération */
-#define ACC_CONSTRUCTOR 0x10000 /* Constructeur */
-#define ACC_DECLARED_SYNCHRONIZED 0x20000 /* Pose de verrou automatique */
-
-
-
-/* ------------------------ ELEMENTS DE TABLE DES CONSTANTES ------------------------ */
-
-
-/* Chaîne de caractères */
-
-typedef struct _string_id_item
-{
- uint32_t string_data_off; /* Propriétés de la chaîne */
-
-} string_id_item;
-
-typedef struct _string_data_item
-{
- uleb128_t utf16_size; /* Taille du décodage */
- const uint8_t *data; /* Caractères terminés par '\0'*/
-
-} string_data_item;
-
-/* Description d'un type */
-typedef struct _type_id_item
-{
- uint32_t descriptor_idx; /* Description du type */
-
-} type_id_item;
-
-/* Description d'un prototype */
-typedef struct _proto_id_item
-{
- uint32_t shorty_idx; /* Description version courte */
- uint32_t return_type_idx; /* Type de retour */
- uint32_t parameters_off; /* Position des arguments */
-
-} proto_id_item;
-
-/* Description d'un champ */
-typedef struct _field_id_item
-{
- uint16_t class_idx; /* Classe d'appartenance */
- uint16_t type_idx; /* Type du champ */
- uint32_t name_idx; /* Nom du champ */
-
-} field_id_item;
-
-/* Description d'une méthode */
-typedef struct _method_id_item
-{
- uint16_t class_idx; /* Classe d'appartenance */
- uint16_t proto_idx; /* Prototype de la méthode */
- uint32_t name_idx; /* Nom de la méthode */
-
-} method_id_item;
-
-/* Description d'une classe */
-typedef struct _class_def_item
-{
- uint32_t class_idx; /* Type de la classe */
- uint32_t access_flags; /* Drapeaux d'accès déclarés */
- uint32_t superclass_idx; /* Type de la classe parente */
- uint32_t interfaces_off; /* Liste des interfaces */
- uint32_t source_file_idx; /* Fichier source d'origine */
- uint32_t annotations_off; /* Eventuelles annotations */
- uint32_t class_data_off; /* Données de la classe */
- uint32_t static_values_off; /* Initialisations statiques */
-
-} class_def_item;
-
-
-
-/* --------------------------- DESCRIPTION DE CLASSES DEX --------------------------- */
-
-
-/* Propriétés d'une champ */
-typedef struct _encoded_field
-{
- uleb128_t field_idx_diff; /* Description du champ */
- uleb128_t access_flags; /* Conditions d'accès */
-
-} encoded_field;
-
-/* Propriétés d'une méthode */
-typedef struct _encoded_method
-{
- uleb128_t method_idx_diff; /* Description de la méthode */
- uleb128_t access_flags; /* Conditions d'accès */
- uleb128_t code_off; /* Position du code associé */
-
- vmpa2t origin; /* Rajout pour suivi interne */
-
-} encoded_method;
-
-/* Type quelconque */
-typedef struct _type_item
-{
- uint16_t type_idx; /* Indice dans la table adaptée*/
-
-} type_item;
-
-/* Liste de types */
-typedef struct _type_list
-{
- uint32_t size; /* Nombre d'éléments présents */
- type_item *list; /* Liste des éléments inscrits */
-
-} type_list;
-
-/* Données de fonctionnement pour classe */
-typedef struct _class_data_item
-{
- uleb128_t static_fields_size; /* Quantité de champs statiques*/
- uleb128_t instance_fields_size; /* Qté de champs instanciables */
- uleb128_t direct_methods_size; /* Qté de méthodes propres */
- uleb128_t virtual_methods_size; /* Qté de méthodes virtuelles */
-
- encoded_field *static_fields; /* Champs statiques */
- encoded_field *instance_fields; /* Champs instanciables */
- encoded_method *direct_methods; /* Méthodes propres */
- encoded_method *virtual_methods; /* Méthodes virtuelles */
-
-} class_data_item;
-
-
-
-/* --------------------------- PORTION DE CODE EXECUTABLE --------------------------- */
-
-
-/* Exception gérée */
-typedef struct _encoded_type_addr_pair
-{
- uleb128_t type_idx; /* Type d'exception couverte */
- uleb128_t addr; /* Adresse du début du code */
-
-} encoded_type_addr_pair;
-
-/* Ensemble d'exceptions prises en compte */
-typedef struct _encoded_catch_handler
-{
- leb128_t size; /* Quantité d'exceptions */
- encoded_type_addr_pair *handlers; /* Gestionnaires explicites */
- uleb128_t catch_all_addr; /* Adresse par défaut */
-
- /**
- * Note : les spécifications indiquent que le champ handler_off de
- * try_item renvoie vers le gestionnaire à partir de la base de la structure
- * encoded_catch_handler_list. Comme la représentation interne de cette
- * structure efface la représentation physique, on conserve en mémoire
- * le décalage rencontré à la lecture dans un champ artificiel.
- */
- phys_t offset; /* Position dans le binaire */
-
-} encoded_catch_handler;
-
-/* Liste des différents gestionnaires d'exceptions */
-typedef struct _encoded_catch_handler_list
-{
- uleb128_t size; /* Taille de la liste */
- encoded_catch_handler *list; /* Gestionnaires en place */
-
-} encoded_catch_handler_list;
-
-/* Zone couverte en cas de pépin */
-typedef struct _try_item
-{
- uint32_t start_addr; /* Adresse du début couvert */
- uint16_t insn_count; /* Nbre de doubles-octets gérés*/
- uint16_t handler_off; /* Indice du gestionnaire */
-
-} try_item;
-
-/* Description de la zone */
-typedef struct _code_item
-{
- uint16_t registers_size; /* Qté de registres utilisés */
- uint16_t ins_size; /* Nbre d'arguments en entrée */
- uint16_t outs_size; /* Nbre d'arguments en sortie */
- uint16_t tries_size; /* Qté de try/catch */
- uint32_t debug_info_off; /* Information de débogage */
- uint32_t insns_size; /* Nbre de blocs de 2 octets */
-
- uint16_t *insns; /* Code exécutable */
- try_item *tries; /* Zone d'exceptions */
- encoded_catch_handler_list *handlers; /* Gestionnaires associés */
-
-} code_item;
-
-
-
-/* ------------------------------- AIGUILLAGES DIVERS ------------------------------- */
-
-
-/* Aiguillage compressé */
-typedef struct _packed_switch
-{
- uint16_t ident; /* Pseudo-code d'identification*/
- uint16_t size; /* Nombre d'entrées */
- uint32_t first_key; /* Première et plus petite clef*/
- uint32_t *targets; /* Cibles relatives */
-
-} packed_switch;
-
-/* Aiguillage dispersé */
-typedef struct _sparse_switch
-{
- uint16_t ident; /* Pseudo-code d'identification*/
- uint16_t size; /* Nombre d'entrées */
- uint32_t *keys; /* Clefs valeureuses */
- uint32_t *targets; /* Cibles relatives */
-
-} sparse_switch;
-
-/* Manipulation interne */
-typedef union _dex_switch
-{
- packed_switch packed; /* Modèle compact */
- sparse_switch sparse; /* Modèle dispersé */
-
-} dex_switch;
-
-
-
-#endif /* _FORMAT_DEX_DEX_DEF_H */