summaryrefslogtreecommitdiff
path: root/src/format/java/java-int.h
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2010-04-24 10:16:17 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2010-04-24 10:16:17 (GMT)
commite56b4db3aae87f0458319019635dea4968a5c529 (patch)
treebbbbbca3921dca2add25f74d73096900254fe301 /src/format/java/java-int.h
parentfb12cfc1727ba949b70a48ee042a2aec9ebbb407 (diff)
Updated a little bit the Java part (welcome back).
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@154 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/format/java/java-int.h')
-rwxr-xr-xsrc/format/java/java-int.h379
1 files changed, 15 insertions, 364 deletions
diff --git a/src/format/java/java-int.h b/src/format/java/java-int.h
index 4fe9895..20ddf3c 100755
--- a/src/format/java/java-int.h
+++ b/src/format/java/java-int.h
@@ -21,394 +21,45 @@
*/
-#ifndef _FORMAT_JAVA_E_JAVA_INT_H
-#define _FORMAT_JAVA_E_JAVA_INT_H
+#ifndef _FORMAT_JAVA_JAVA_INT_H
+#define _FORMAT_JAVA_JAVA_INT_H
-#include "../exe_format-int.h"
+#include "java.h"
+#include "java_def.h"
+#include "../executable-int.h"
-/* ----------------------- ELEMENTS DU RESERVOIR A CONSTANTES ----------------------- */
-/* Types de données dans le réservoir (§4.4) */
-typedef enum _ConstantPoolTag
+/* Format d'exécutable Java (instance) */
+struct _GJavaFormat
{
- CONSTANT_EMPTY = 0, /* Non initialisé ou sur 2 */
+ GExeFormat parent; /* A laisser en premier */
- CONSTANT_CLASS = 7, /* Classe ou interface */
- CONSTANT_FIELD_REF = 9, /* Champ ou méthode */
- CONSTANT_METHOD_REF = 10, /* Champ ou méthode */
- CONSTANT_INTERFACE_METHOD_REF = 11, /* Champ ou méthode */
- CONSTANT_STRING = 8, /* Chaîne constante */
- CONSTANT_INTEGER = 3, /* Valeur entière */
- CONSTANT_FLOAT = 4, /* Valeur flottante */
- CONSTANT_LONG = 5, /* Valeur longue */
- CONSTANT_DOUBLE = 6, /* Valeur double */
- CONSTANT_NAME_AND_TYPE = 12, /* Prototype complet */
- CONSTANT_UTF8 = 1 /* Chaîne codée en UTF8 */
-
-} ConstantPoolTag;
-
-
-/* Représentation d'une classe ou d'une interface */
-typedef struct _class_info
-{
- uint16_t name_index; /* Indice pour le nom */
-
-} class_info;
-
-/* Représentation d'un champ ou d'une méthode */
-typedef struct _ref_info
-{
- uint16_t class_index; /* Indice de la classe */
- uint16_t name_and_type_index; /* Prototype associé */
-
-} ref_info;
-
-/* Représentation d'une chaîne constante */
-typedef struct _string_info
-{
- uint16_t string_index; /* Indice de la valeur UTF8 */
-
-} string_info;
-
-/* Représentation d'une valeur 'int' */
-typedef struct _integer_info
-{
- uint32_t val; /* Valeur au format 'int' */
-
-} integer_info;
-
-/* Représentation d'une valeur 'float' */
-typedef struct _float_info
-{
- float val; /* Valeur au format 'float' */
-
-} float_info;
-
-/* Représentation d'une valeur 'long' */
-typedef struct _long_info
-{
- long val; /* Valeur au format 'long' */
-
-} long_info;
-
-/* Représentation d'une valeur 'double' */
-typedef struct _double_info
-{
- double val; /* Valeur au format 'double' */
-
-} double_info;
-
-/* Représentation brève d'un champ ou d'une méthode */
-typedef struct _name_and_type_info
-{
- uint16_t name_index; /* Indice du nom correspondant */
- uint16_t descriptor_index; /* Prototype associé */
-
-} name_and_type_info;
-
-/* Représentation d'une chaîne codée en UTF8 */
-typedef struct _utf8_info
-{
- char *bytes; /* Valeur de la chaîne */
-
-} utf8_info;
-
-
-/* Entrée du réservoir */
-typedef struct _constant_pool_entry
-{
- ConstantPoolTag tag; /* Type d'entrée présente */
-
- union
- {
- class_info class;
- ref_info ref;
- string_info string;
- integer_info int_val;
- float_info float_val;
- long_info long_val;
- double_info double_val;
- name_and_type_info name_type;
- utf8_info utf8;
-
- } info; /* Infos portées par l'entrée */
-
-} constant_pool_entry;
-
-
-
-/* ------------------------ ATTRIBUTS POUR DES ELEMENTS JAVA ------------------------ */
-
-
-/* Types des attributs reconnus */
-typedef enum _JavaAttributeType
-{
- JAT_NONE = 0, /* Attribu non chargé */
-
- JAT_CONSTANT_VALUE, /* Valeur constante */
- JAT_CODE, /* Code exécutable */
- JAT_EXCEPTIONS, /* Exceptions remontables */
- JAT_INNER_CLASSES, /* Classes internes */
- JAT_SYNTHETIC, /* Membre non présent */
- JAT_SOURCE_FILE, /* Fichier source du code */
- JAT_LINE_NUMBER, /* Correspondances de débogage */
- JAT_LOCAL_VARIABLES, /* Variable(s) locale(s) */
- JAT_DEPRECATED /* Elément vieillot à oublier */
-
-} JavaAttributeType;
-
-/* Représentation d'un attribut à valeur constante (§4.7.2) */
-typedef struct _const_value_attrib
-{
- uint16_t const_value_index; /* Indice dans le réservoir */
-
-} const_value_attrib;
-
-/* Représentation d'un attribut de code (§4.7.3) */
-
-typedef struct _code_exception
-{
- uint16_t start_pc; /* Début de la zone couverte */
- uint16_t end_pc; /* Fin de la zone couverte */
- uint16_t handler_pc; /* Début du gestionnaire */
- uint16_t catch_type; /* Indice du type d'exception */
-
-} code_exception;
-
-typedef struct _code_attrib
-{
- uint16_t max_stack; /* Taille maximale de la pile */
- uint16_t max_locals; /* Nombre de variables (!) */
- uint32_t code_length; /* Taille du code référencé */
-
- off_t content; /* Début du code exécutable */
-
- code_exception *exceptions; /* Exceptions gérées */
- uint16_t exceptions_count; /* Nombre de ces exceptions */
-
- java_attribute *attributes; /* Attributs liés au code */
- uint16_t attributes_count; /* Nombre de ces attributs */
-
-} code_attrib;
-
-/* Représentation d'un attribut fixant les exceptions remontables (§4.7.4) */
-
-typedef struct _exceptions_attrib
-{
- uint16_t *throw; /* Exceptions remontées */
- uint16_t throw_count; /* Nombre de ces exceptions */
-
-} exceptions_attrib;
-
-/* Représentation d'un attribut présentant les classes internes (§4.7.5) */
-
-typedef enum _InnerClassAccessFlags
-{
- ICA_PUBLIC = 0x0001, /* Elément public */
- ICA_PRIVATE = 0x0002, /* Elément privé */
- ICA_PROTECTED = 0x0004, /* Elément sous protection */
- ICA_STATIC = 0x0008, /* Elément statique */
- ICA_FINAL = 0x0010, /* Elément défini un seule fois*/
- ICA_INTERFACE = 0x0200, /* Déclaration d'interface */
- ICA_ABSTRACT = 0x0400 /* Déclaré comme abstrait */
-
-} InnerClassAccessFlags;
-
-typedef struct _inner_class
-{
- uint16_t inner_class_info_index; /* Propriétés de la classe */
- uint16_t outer_class_info_index; /* Propriétés de la parente */
- uint16_t inner_name_index; /* Nom de la classe */
- InnerClassAccessFlags access; /* Droits d'accès */
-
-} inner_class;
-
-typedef struct _inner_classes_attrib
-{
- inner_class *classes; /* Classes internes */
- uint16_t classes_count; /* Nombre de ces classe */
-
-} inner_classes_attrib;
-
-/* Représentation d'un fichier source (§4.7.7) */
-typedef struct _source_file_attrib
-{
- uint16_t source_file_index; /* Indice dans le réservoir */
-
-} source_file_attrib;
-
-/* Représentation des correspondances entre lignes et code (§4.7.8) */
-
-typedef struct _pc_and_line
-{
- uint16_t start_pc; /* Début de la zone visée */
- uint16_t number; /* Numéro de ligne du code */
-
-} pc_and_line;
-
-typedef struct _line_number_attrib
-{
- pc_and_line *lines; /* Correspondances code/source */
- uint16_t lines_count; /* Nombre de correspondances */
-
-} line_number_attrib;
-
-/* Représentation des variables locales (§4.7.9) */
-
-typedef struct _local_variable
-{
- uint16_t start_pc; /* Position dans le code */
- uint16_t length; /* Taille de la variable */
- uint16_t name_index; /* Indice nominal de réservoir */
- uint16_t descriptor_index; /* Type de la variable */
- uint16_t index; /* Place dans la liste complète*/
-
-} local_variable;
-
-typedef struct _local_variables_attrib
-{
- local_variable *vars; /* Variables locales */
- uint16_t vars_count; /* Nombre de ces variables */
-
-} local_variables_attrib;
-
-/* Description des attributs Java */
-struct _java_attribute
-{
- JavaAttributeType type; /* Type d'attribut représenté */
-
- union
- {
- const_value_attrib const_value;
- code_attrib code;
- exceptions_attrib exceptions;
- inner_classes_attrib inner_classes;
- source_file_attrib source_file;
- line_number_attrib line_number;
- local_variables_attrib local_vars;
-
- } info; /* Infos portées par l'attribut*/
+ java_header header; /* En-tête du programme */
};
-
-
-/* ---------------------------- CHAMPS POUR CLASSES JAVA ---------------------------- */
-
-
-/* Types d'accès aux champs (§4.5) */
-typedef enum _FieldAccessFlags
+/* Format d'exécutable Java (classe) */
+struct _GJavaFormatClass
{
- FAC_PUBLIC = 0x0001, /* Elément public */
- FAC_PRIVATE = 0x0002, /* Elément privé */
- FAC_PROTECTED = 0x0004, /* Elément sous protection */
- FAC_STATIC = 0x0008, /* Elément statique */
- FAC_FINAL = 0x0010, /* Elément défini un seule fois*/
- FAC_VOLATILE = 0x0040, /* Elément sans cache */
- FAC_TRANSIENT = 0x0080 /* Elément ni lu ni écrit... */
-
-} FieldAccessFlags;
-
-/* Description d'un champ Java */
-typedef struct _java_field
-{
- FieldAccessFlags access; /* Droits d'accès */
-
- uint16_t name_index; /* Nom dans le réservoir */
- uint16_t descriptor_index; /* Prototype au même endroit */
-
- java_attribute *attributes; /* Attributs liés au champ */
- uint16_t attributes_count; /* Nombre de ces attributs */
-
-} java_field;
-
-
-
-/* --------------------------- METHODES POUR CLASSES JAVA --------------------------- */
-
-
-/* Types d'accès aux champs (§4.6) */
-typedef enum _MethodAccessFlags
-{
- MAC_PUBLIC = 0x0001, /* Elément public */
- MAC_PRIVATE = 0x0002, /* Elément privé */
- MAC_PROTECTED = 0x0004, /* Elément sous protection */
- MAC_STATIC = 0x0008, /* Elément statique */
- MAC_FINAL = 0x0010, /* Elément défini un seule fois*/
- MAC_SYNCHRONIZED = 0x0020, /* Elément avec mutex natif */
- MAC_NATIVE = 0x0100, /* Elément conçu sans Java */
- MAC_ABSTRACT = 0x0400, /* Elément sans implantation */
- MAC_STRICT = 0x0800 /* Elément déclaré stricte FP */
-
-} MethodAccessFlags;
-
-/* Description d'une méthode Java */
-typedef struct _java_method
-{
- MethodAccessFlags access; /* Droits d'accès */
-
- uint16_t name_index; /* Nom dans le réservoir */
- uint16_t descriptor_index; /* Prototype au même endroit */
-
- java_attribute *attributes; /* Attributs liés à la méthode */
- uint16_t attributes_count; /* Nombre de ces attributs */
-
-} java_method;
-
-
-
-/* ---------------------------- LISTE DES DROITS D'ACCES ---------------------------- */
-
-
-/* Types d'accès (§4.1) */
-typedef enum _ClassAccessFlags
-{
- CAC_PUBLIC = 0x0001, /* Elément public */
- CAC_FINAL = 0x0010, /* Déclaré comme final */
- CAC_SUPER = 0x0020, /* Traitement spécial */
- CAC_INTERFACE = 0x0200, /* Déclaration d'interface */
- CAC_ABSTRACT = 0x0400 /* Déclaré comme abstrait */
-
-} ClassAccessFlags;
-
-
-
-/* --------------------------- DESCRIPTION DU FORMAT JAVA --------------------------- */
+ GExeFormatClass parent; /* A laisser en premier */
+};
-/* Description du format Java */
-struct _java_format
-{
- exe_format dummy; /* A laisser en premier */
- uint16_t minor_version; /* Numéro de révision mineur */
- uint16_t major_version; /* Numéro de révision majeur */
- constant_pool_entry *pool; /* Réservoir de constantes */
- uint16_t pool_len; /* Quantité de ces éléments */
- ClassAccessFlags access; /* Type de classe/interface */
- uint16_t this_class; /* Infos sur la classe */
- uint16_t super_class; /* Infos sur la classe parente */
+/* Procède à la lecture d'une en-tête de programme Java. */
+bool read_java_header(const GJavaFormat *, off_t *, java_header *);
- uint16_t *interfaces; /* Interfaces intégrées */
- uint16_t interfaces_count; /* Nombre de ces interfaces */
- java_field *fields; /* Champs de la classe */
- uint16_t fields_count; /* Nombre de champs présents */
- java_method *methods; /* Méthodes de la classe */
- uint16_t methods_count; /* Nombre de méthodes listées */
- java_attribute *attributes; /* Attributs liés à la classe */
- uint16_t attributes_count; /* Nombre de ces attributs */
-};