1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/* OpenIDA - Outil d'analyse de fichiers binaires
* dex-int.h - prototypes pour les structures internes du format DEX
*
* Copyright (C) 2010 Cyrille Bagard
*
* This file is part of OpenIDA.
*
* OpenIDA 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.
*
* OpenIDA 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_INT_H
#define _FORMAT_DEX_DEX_INT_H
#include "class.h"
#include "dex.h"
#include "dex_def.h"
#include "../executable-int.h"
/* Format d'exécutable DEX (instance) */
struct _GDexFormat
{
GExeFormat parent; /* A laisser en premier */
dex_header header; /* En-tête du programme */
GDexClass **classes; /* Classes retrouvées */
size_t classes_count; /* Nombre de ces classes */
};
/* Format d'exécutable DEX (classe) */
struct _GDexFormatClass
{
GExeFormatClass parent; /* A laisser en premier */
};
/* Retrouve si possible la méthode associée à une adresse. */
GDexMethod *g_dex_format_find_method_by_address(const GDexFormat *, vmpa_t);
/* ------------------------ ELEMENTS DE TABLE DES CONSTANTES ------------------------ */
/* Procède à la lecture d'un identifiant de chaîne DEX. */
bool read_dex_string_id_item(const GDexFormat *, off_t *, string_id_item *);
/* Procède à la lecture de proriétés de chaîne DEX. */
bool read_dex_string_data_item(const GDexFormat *, off_t *, string_data_item *);
/* Procède à la lecture d'un identifiant de type DEX. */
bool read_dex_type_id_item(const GDexFormat *, off_t *, type_id_item *);
/* Procède à la lecture d'une description de prototype. */
bool read_dex_proto_id_item(const GDexFormat *, off_t *, proto_id_item *);
/* Procède à la lecture d'une description de champ. */
bool read_dex_field_id_item(const GDexFormat *, off_t *, field_id_item *);
/* Procède à la lecture d'une description de méthode. */
bool read_dex_method_id_item(const GDexFormat *, off_t *, method_id_item *);
/* Procède à la lecture des propriétés d'une classe DEX. */
bool read_dex_class_def_item(const GDexFormat *, off_t *, class_def_item *);
/* --------------------------- DESCRIPTION DE CLASSES DEX --------------------------- */
/* Procède à la lecture d'un champ quelconque DEX. */
bool read_dex_encoded_field(const GDexFormat *, off_t *, encoded_field *);
/* Procède à la lecture d'une méthode quelconque DEX. */
bool read_dex_encoded_method(const GDexFormat *, off_t *, encoded_method *);
/* Procède à la lecture d'un type DEX. */
bool read_dex_type_item(const GDexFormat *, off_t *, type_item *);
/* Procède à la lecture d'une liste de types DEX. */
bool read_dex_type_list(const GDexFormat *, off_t *, type_list *);
/* Procède à la lecture d'un contenu de classe DEX. */
bool read_dex_class_data_item(const GDexFormat *, off_t *, class_data_item *);
/* Supprime tous les éléments chargés en mémoire à la lecture. */
void reset_dex_class_data_item(class_data_item *);
/* Procède à la lecture d'une portion de code DEX. */
bool read_dex_code_item(const GDexFormat *, off_t *, code_item *);
/* Procède à la lecture d'une en-tête de programme DEX. */
bool read_dex_header(const GDexFormat *, off_t *, dex_header *);
#endif /* _FORMAT_DEX_DEX_INT_H */
|