summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-12-07 21:04:46 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-12-07 21:04:46 (GMT)
commit648bf475951e6d588d13539441d8a0e54eab2706 (patch)
treeb654558a0c6bb4bc9d15eb9d65c124acb8a3522a /src/format
parentc980546e8bca6f1c0c340634a4c3640e14fd1228 (diff)
Moved some core features into plugins.
Diffstat (limited to 'src/format')
-rw-r--r--src/format/Makefile.am2
-rw-r--r--src/format/java/Makefile.am29
-rw-r--r--src/format/java/attribute.c717
-rw-r--r--src/format/java/attribute.h40
-rw-r--r--src/format/java/e_java.c284
-rw-r--r--src/format/java/e_java.h49
-rw-r--r--src/format/java/field.c158
-rw-r--r--src/format/java/field.h40
-rw-r--r--src/format/java/java-int.c92
-rw-r--r--src/format/java/java-int.h66
-rw-r--r--src/format/java/java.c508
-rw-r--r--src/format/java/java.h63
-rw-r--r--src/format/java/java_def.h418
-rw-r--r--src/format/java/method.c187
-rw-r--r--src/format/java/method.h44
-rw-r--r--src/format/java/pool.c474
-rw-r--r--src/format/java/pool.h56
17 files changed, 1 insertions, 3226 deletions
diff --git a/src/format/Makefile.am b/src/format/Makefile.am
index 9cabaee..1ab4825 100644
--- a/src/format/Makefile.am
+++ b/src/format/Makefile.am
@@ -31,4 +31,4 @@ AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
-# SUBDIRS = java
+SUBDIRS =
diff --git a/src/format/java/Makefile.am b/src/format/java/Makefile.am
deleted file mode 100644
index 0e40bfa..0000000
--- a/src/format/java/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-
-noinst_LTLIBRARIES = libformatjava.la
-
-libformatjava_la_SOURCES = \
- java-int.h java-int.c \
- java.h java.c \
- java_def.h \
- pool.h pool.c
-
-
-# libformatjava_la_SOURCES = \
-# attribute.h attribute.c \
-# e_java.h e_java.c \
-# field.h field.c \
-# java-int.h \
-# method.h method.c \
-# pool.h pool.c
-
-libformatjava_la_LDFLAGS =
-
-
-devdir = $(includedir)/chrysalide/$(subdir:src/%=%)
-
-dev_HEADERS = $(libformatjava_la_SOURCES:%c=)
-
-
-AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
-
-AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
diff --git a/src/format/java/attribute.c b/src/format/java/attribute.c
deleted file mode 100644
index 3e04ea9..0000000
--- a/src/format/java/attribute.c
+++ /dev/null
@@ -1,717 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * attribute.c - manipulation des attributs Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "attribute.h"
-
-
-#include <malloc.h>
-#include <string.h>
-
-
-#include "java-int.h"
-#include "pool.h"
-#include "../../common/endianness.h"
-#include "../../panel/log.h"
-
-
-
-#define _(str) str
-
-
-
-/* Charge les propriétés d'un attribut quelconque. */
-bool load_java_attribute(java_format *, java_attribute *, off_t *);
-
-/* Décharge les propriétés d'un attribut quelconque. */
-void unload_java_attribute(java_format *, java_attribute *);
-
-/* Charge les propriétés d'un attribut de valeur constante. */
-bool load_java_const_value_attribute(java_format *, const_value_attrib *, off_t *);
-
-/* Charge les propriétés d'un attribut de code. */
-bool load_java_code_attribute(java_format *, code_attrib *, off_t *);
-
-/* Décharge les propriétés d'un attribut de code. */
-void unload_java_code_attribute(java_format *, code_attrib *);
-
-/*Charge les propriétés d'un attribut d'exceptions lançables. */
-bool load_java_exceptions_attribute(java_format *, exceptions_attrib *, off_t *);
-
-/* Décharge les propriétés d'un attribut d'exceptions lançables. */
-void unload_java_exceptions_attribute(java_format *, exceptions_attrib *);
-
-/* Charge les propriétés d'un attribut de classes internes. */
-bool load_java_inner_classes_attribute(java_format *, inner_classes_attrib *, off_t *);
-
-/* Décharge les propriétés d'un attribut de classes internes. */
-void unload_java_inner_classes_attribute(java_format *, inner_classes_attrib *);
-
-/* Charge les propriétés d'un attribut de fichier source. */
-bool load_java_source_file_attribute(java_format *, source_file_attrib *, off_t *);
-
-/* Charge les propriétés d'un attribut de correspondance. */
-bool load_java_line_number_attribute(java_format *, line_number_attrib *, off_t *);
-
-/* Décharge les propriétés d'un attribut de correspondance. */
-void unload_java_line_number_attribute(java_format *, line_number_attrib *);
-
-/* Charge les propriétés d'un attribut de variables locales. */
-bool load_java_local_variables_attribute(java_format *, local_variables_attrib *, off_t *);
-
-/* Décharge les propriétés d'un attribut de variables locales. */
-void unload_java_local_variables_attribute(java_format *, local_variables_attrib *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* pos = point de lecture à faire évoluer. [OUT] *
-* attributes = tableau des attributs chargés. [OUT] *
-* count = nombre d'éléments à charger. [OUT] *
-* *
-* Description : Charge les attribus d'un élément d'un binaire Java. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_attributes(java_format *format, off_t *pos, java_attribute **attributes, uint16_t *count)
-{
- bool result; /* Bilan à remonter */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(count, EXE_FORMAT(format)->content, pos,
- EXE_FORMAT(format)->length, SRE_BIG);
-
- if (!result) return false;
-
- if (*count > 0)
- {
- *attributes = (java_attribute *)calloc(*count, sizeof(java_attribute));
-
- for (i = 0; i < *count && result; i++)
- result = load_java_attribute(format, &(*attributes)[i], pos);
-
- if (!result)
- unload_java_attributes(format, *attributes, *count);
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à libérer. *
-* attributes = tableau des attributs à décharger. *
-* count = nombre d'éléments à décharger. *
-* *
-* Description : Décharge les attribus d'un élément d'un binaire Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_attributes(java_format *format, java_attribute *attributes, uint16_t count)
-{
- uint16_t i; /* Boucle de parcours */
-
- for (i = 0; i < count; i++)
- unload_java_attribute(format, &attributes[i]);
-
- free(attributes);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut quelconque. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_attribute(java_format *format, java_attribute *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint16_t index; /* Indice du nom assimilé */
- const char *name; /* Version humainement lisible */
- uint32_t attrib_length; /* Taille de la charge utile */
- off_t saved_pos; /* Conservation de la position */
-
- result = read_u16(&index, EXE_FORMAT(format)->content, pos,
- EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= get_java_pool_ut8_string(format, index, &name);
-
- if (result)
- {
- result = read_u32(&attrib_length, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- saved_pos = *pos;
-
- if (result && strcmp("ConstantValue", name) == 0)
- {
- attrib->type = JAT_CONSTANT_VALUE;
- result = load_java_const_value_attribute(format, &attrib->info.const_value, pos);
- }
-
- else if (result && strcmp("Code", name) == 0)
- {
- attrib->type = JAT_CODE;
- result = load_java_code_attribute(format, &attrib->info.code, pos);
- }
-
- else if (result && strcmp("Exceptions", name) == 0)
- {
- attrib->type = JAT_EXCEPTIONS;
- result = load_java_exceptions_attribute(format, &attrib->info.exceptions, pos);
- }
-
- else if (result && strcmp("InnerClasses", name) == 0)
- {
- attrib->type = JAT_INNER_CLASSES;
- result = load_java_inner_classes_attribute(format, &attrib->info.inner_classes, pos);
- }
-
- else if (result && strcmp("Synthetic", name) == 0)
- attrib->type = JAT_SYNTHETIC;
-
- else if (result && strcmp("SourceFile", name) == 0)
- {
- attrib->type = JAT_LINE_NUMBER;
- result = load_java_source_file_attribute(format, &attrib->info.source_file, pos);
- }
-
- else if (result && strcmp("LineNumberTable", name) == 0)
- {
- attrib->type = JAT_SOURCE_FILE;
- result = load_java_line_number_attribute(format, &attrib->info.line_number, pos);
- }
-
- else if (result && strcmp("LocalVariableTable", name) == 0)
- {
- attrib->type = JAT_LOCAL_VARIABLES;
- result = load_java_local_variables_attribute(format, &attrib->info.local_vars, pos);
- }
-
- else if (result && strcmp("Deprecated", name) == 0)
- attrib->type = JAT_DEPRECATED;
-
- else if (result)
- {
- result = false;
- log_variadic_message(LMT_BAD_BINARY, _("Attribute name not supported: '%s'"), name);
- }
-
- if (result && attrib_length != (*pos - saved_pos))
- log_variadic_message(LMT_BAD_BINARY, _("Size indication of the attribute '%s' not verified: %d vs %d"),
- name, attrib_length, *pos - saved_pos);
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à libérer. *
-* *
-* Description : Décharge les propriétés d'un attribut quelconque. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_attribute(java_format *format, java_attribute *attrib)
-{
- switch (attrib->type)
- {
- case JAT_NONE:
- break;
-
- case JAT_CONSTANT_VALUE:
- break;
-
- case JAT_CODE:
- unload_java_code_attribute(format, &attrib->info.code);
- break;
-
- case JAT_EXCEPTIONS:
- unload_java_exceptions_attribute(format, &attrib->info.exceptions);
- break;
-
- case JAT_INNER_CLASSES:
- unload_java_inner_classes_attribute(format, &attrib->info.inner_classes);
- break;
-
- case JAT_SYNTHETIC:
- break;
-
- case JAT_SOURCE_FILE:
- break;
-
- case JAT_LINE_NUMBER:
- unload_java_line_number_attribute(format, &attrib->info.line_number);
- break;
-
- case JAT_LOCAL_VARIABLES:
- unload_java_local_variables_attribute(format, &attrib->info.local_vars);
- break;
-
- case JAT_DEPRECATED:
- break;
-
- }
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut de valeur constante. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_const_value_attribute(java_format *format, const_value_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
-
- result = read_u16(&attrib->const_value_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut de code. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_code_attribute(java_format *format, code_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&attrib->max_stack, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->max_locals, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u32(&attrib->code_length, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= ((*pos + attrib->code_length) <= EXE_FORMAT(format)->length);
-
- if (result)
- {
- attrib->content = *pos;
- *pos += attrib->code_length;
- }
-
- result &= read_u16(&attrib->exceptions_count, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- if (result && attrib->exceptions_count > 0)
- {
- attrib->exceptions = (code_exception *)calloc(attrib->exceptions_count, sizeof(code_exception));
-
- for (i = 0; i < attrib->exceptions_count && result; i++)
- {
- result &= read_u16(&attrib->exceptions[i].start_pc, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->exceptions[i].end_pc, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->exceptions[i].handler_pc, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->exceptions[i].catch_type, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- }
-
- }
-
- result &= load_java_attributes(format, pos, &attrib->attributes, &attrib->attributes_count);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à libérer de la mémoire. *
-* *
-* Description : Décharge les propriétés d'un attribut de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_code_attribute(java_format *format, code_attrib *attrib)
-{
- if (attrib->exceptions != NULL)
- free(attrib->exceptions);
-
- if (attrib->attributes != NULL)
- unload_java_attributes(format, attrib->attributes, attrib->attributes_count);
-
-}
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut d'exceptions lançables. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_exceptions_attribute(java_format *format, exceptions_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&attrib->throw_count, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- if (result && attrib->throw_count > 0)
- {
- attrib->throw = (uint16_t *)calloc(attrib->throw_count, sizeof(uint16_t));
-
- for (i = 0; i < attrib->throw_count && result; i++)
- result &= read_u16(&attrib->throw[i], EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à libérer de la mémoire. *
-* *
-* Description : Décharge les propriétés d'un attribut d'exceptions lançables.*
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_exceptions_attribute(java_format *format, exceptions_attrib *attrib)
-{
- if (attrib->throw != NULL)
- free(attrib->throw);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut de classes internes. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_inner_classes_attribute(java_format *format, inner_classes_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&attrib->classes_count, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- if (result && attrib->classes_count > 0)
- {
- attrib->classes = (inner_class *)calloc(attrib->classes_count, sizeof(inner_class));
-
- for (i = 0; i < attrib->classes_count && result; i++)
- {
- result &= read_u16(&attrib->classes[i].inner_class_info_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->classes[i].outer_class_info_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->classes[i].inner_name_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16((uint16_t *)&attrib->classes[i].access, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- }
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à libérer de la mémoire. *
-* *
-* Description : Décharge les propriétés d'un attribut de classes internes. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_inner_classes_attribute(java_format *format, inner_classes_attrib *attrib)
-{
- if (attrib->classes != NULL)
- free(attrib->classes);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut de fichier source. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_source_file_attribute(java_format *format, source_file_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
-
- result = read_u16(&attrib->source_file_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut de correspondance. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_line_number_attribute(java_format *format, line_number_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&attrib->lines_count, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- if (result && attrib->lines_count > 0)
- {
- attrib->lines = (pc_and_line *)calloc(attrib->lines_count, sizeof(pc_and_line));
-
- for (i = 0; i < attrib->lines_count && result; i++)
- {
- result &= read_u16(&attrib->lines[i].start_pc, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->lines[i].number, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- }
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à libérer de la mémoire. *
-* *
-* Description : Décharge les propriétés d'un attribut de correspondance. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_line_number_attribute(java_format *format, line_number_attrib *attrib)
-{
- if (attrib->lines != NULL)
- free(attrib->lines);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un attribut de variables locales. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_local_variables_attribute(java_format *format, local_variables_attrib *attrib, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&attrib->vars_count, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- if (result && attrib->vars_count > 0)
- {
- attrib->vars = (local_variable *)calloc(attrib->vars_count, sizeof(local_variable));
-
- for (i = 0; i < attrib->vars_count && result; i++)
- {
- result &= read_u16(&attrib->vars[i].start_pc, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->vars[i].length, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->vars[i].name_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->vars[i].descriptor_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&attrib->vars[i].index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- }
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* attrib = élément à libérer de la mémoire. *
-* *
-* Description : Décharge les propriétés d'un attribut de variables locales. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_local_variables_attribute(java_format *format, local_variables_attrib *attrib)
-{
- if (attrib->vars != NULL)
- free(attrib->vars);
-
-}
diff --git a/src/format/java/attribute.h b/src/format/java/attribute.h
deleted file mode 100644
index 155aa7e..0000000
--- a/src/format/java/attribute.h
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * attribute.h - prototypes pour la manipulation des attributs Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_ATTRIBUTE_H
-#define _FORMAT_JAVA_ATTRIBUTE_H
-
-
-#include "e_java.h"
-
-
-
-/* Charge les attribus d'un élément d'un binaire Java. */
-bool load_java_attributes(java_format *, off_t *, java_attribute **, uint16_t *);
-
-/* Décharge les attribus d'un élément d'un binaire Java. */
-void unload_java_attributes(java_format *, java_attribute *, uint16_t);
-
-
-
-#endif /* _FORMAT_JAVA_ATTRIBUTE_H */
diff --git a/src/format/java/e_java.c b/src/format/java/e_java.c
deleted file mode 100644
index 7d05fa9..0000000
--- a/src/format/java/e_java.c
+++ /dev/null
@@ -1,284 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * e_java.c - support du format Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "e_java.h"
-
-
-#include <malloc.h>
-#include <string.h>
-
-
-#include "attribute.h"
-#include "field.h"
-#include "java-int.h"
-#include "method.h"
-#include "pool.h"
-#include "../../common/endianness.h"
-
-
-
-
-/* Indique le type d'architecture visée par le format. */
-FormatTargetMachine get_java_target_machine(const java_format *);
-
-
-
-/* Fournit les références aux zones de code à analyser. */
-bin_part **get_java_default_code_parts(const java_format *, size_t *);
-
-
-/* Fournit le prototype de toutes les routines détectées. */
-GBinRoutine **get_all_java_routines(const java_format *, size_t *);
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* length = taille du contenu en question. *
-* *
-* Description : Indique si le format peut être pris en charge ici. *
-* *
-* Retour : true si la réponse est positive, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool java_is_matching(const uint8_t *content, off_t length)
-{
- bool result; /* Bilan à faire connaître */
-
- result = false;
-
- if (length >= 4)
- result = (strncmp((const char *)content, "\xca\xfe\xba\xbe", 4) == 0);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* length = taille du contenu en question. *
-* *
-* Description : Prend en charge une nouvelle classe Java. *
-* *
-* Retour : Adresse de la structure mise en place ou NULL en cas d'échec.*
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-exe_format *load_java(const uint8_t *content, off_t length)
-{
- java_format *result; /* Adresse à retourner */
- off_t pos; /* Point d'analyse */
- uint32_t magic; /* Identifiant Java */
- uint16_t i; /* Boucle de parcours */
-
- result = (java_format *)calloc(1, sizeof(java_format));
-
- EXE_FORMAT(result)->content = content;
- EXE_FORMAT(result)->length = length;
-
- EXE_FORMAT(result)->get_target_machine = (get_target_machine_fc)get_java_target_machine;
- EXE_FORMAT(result)->get_def_parts = (get_def_parts_fc)get_java_default_code_parts;
- EXE_FORMAT(result)->get_all_routines = (get_all_routines_fc)get_all_java_routines;
-
- pos = 0;
-
- if (!read_u32(&magic, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->minor_version, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->major_version, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!load_java_pool(result, &pos))
- goto ldj_error;
-
- if (!read_u16((uint16_t *)&result->access, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->this_class, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->super_class, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->interfaces_count, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- for (i = 0; i < result->interfaces_count; i++)
- if (!read_u16(&result->interfaces[i], content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!load_java_fields(result, &pos))
- goto ldj_error;
-
- if (!load_java_methods(result, &pos))
- goto ldj_error;
-
- if (!load_java_attributes(result, &pos, &result->attributes, &result->attributes_count))
- goto ldj_error;
-
- return EXE_FORMAT(result);
-
- ldj_error:
-
- unload_java(result);
-
- return NULL;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à supprimer. *
-* *
-* Description : Efface la prise en charge une nouvelle classe Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java(java_format *format)
-{
- if (format->pool_len > 0)
- unload_java_pool(format);
-
- if (format->interfaces_count > 0)
- free(format->interfaces);
-
- if (format->fields_count > 0)
- unload_java_fields(format);
-
- if (format->methods_count > 0)
- unload_java_methods(format);
-
- if (format->attributes_count > 0)
- unload_java_attributes(format, format->attributes, format->attributes_count);
-
- free(format);
-
-}
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* *
-* Description : Indique le type d'architecture visée par le format. *
-* *
-* Retour : Identifiant de l'architecture ciblée par le format. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-FormatTargetMachine get_java_target_machine(const java_format *format)
-{
- return FTM_JVM;
-
-}
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* count = quantité de zones listées. [OUT] *
-* *
-* Description : Fournit les références aux zones de code à analyser. *
-* *
-* Retour : Zones de code à analyser. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bin_part **get_java_default_code_parts(const java_format *format, size_t *count)
-{
- bin_part **result; /* Tableau à retourner */
- uint16_t i; /* Boucle de parcours */
- off_t offset; /* Position physique */
- off_t size; /* Taille de la partie */
- bin_part *part; /* Partie à intégrer à la liste*/
-
- result = NULL;
- *count = 0;
-
- for (i = 0; i < format->methods_count; i++)
- if (find_java_method_code_part(&format->methods[i], &offset, &size))
- {
- part = create_bin_part();
-
- set_bin_part_values(part, offset, size, offset);
-
- result = (bin_part **)realloc(result, ++(*count) * sizeof(bin_part *));
- result[*count - 1] = part;
-
- }
-
- return result;
-
-}
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* count = taille du tableau créé. [OUT] *
-* *
-* Description : Fournit le prototype de toutes les routines détectées. *
-* *
-* Retour : Tableau créé ou NULL si aucun symbole de routine trouvé. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinRoutine **get_all_java_routines(const java_format *format, size_t *count)
-{
- *count = 0;
-
- return NULL;
-
-}
diff --git a/src/format/java/e_java.h b/src/format/java/e_java.h
deleted file mode 100644
index 65befbd..0000000
--- a/src/format/java/e_java.h
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * e_java.h - prototypes pour le support du format Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_E_JAVA_H
-#define _FORMAT_JAVA_E_JAVA_H
-
-
-#include "../exe_format.h"
-
-
-/* Description des attributs Java */
-typedef struct _java_attribute java_attribute;
-
-/* Description du format Java */
-typedef struct _java_format java_format;
-
-
-/* Indique si le format peut être pris en charge ici. */
-bool java_is_matching(const uint8_t *, off_t);
-
-/* Prend en charge une nouvelle classe Java. */
-exe_format *load_java(const uint8_t *, off_t);
-
-/* Efface la prise en charge une nouvelle classe Java. */
-void unload_java(java_format *);
-
-
-
-#endif /* _FORMAT_JAVA_E_JAVA_H */
diff --git a/src/format/java/field.c b/src/format/java/field.c
deleted file mode 100644
index e7df342..0000000
--- a/src/format/java/field.c
+++ /dev/null
@@ -1,158 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * field.c - gestion des champs Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "field.h"
-
-
-#include <malloc.h>
-
-
-#include "attribute.h"
-#include "java-int.h"
-#include "../../common/endianness.h"
-
-
-
-/* Charge les propriétés d'un champ de classe. */
-bool load_java_field(java_format *, java_field *, off_t *);
-
-/* Décharge les propriétés d'un champ de classe. */
-void unload_java_field(java_format *, java_field *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les champs d'un binaire Java. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_fields(java_format *format, off_t *pos)
-{
- bool result; /* Bilan à remonter */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&format->fields_count, EXE_FORMAT(format)->content, pos,
- EXE_FORMAT(format)->length, SRE_BIG);
-
- if (!result) return false;
-
- if (format->fields_count > 0)
- {
- format->fields = (java_field *)calloc(format->fields_count, sizeof(java_field));
-
- for (i = 0; i < format->fields_count && result; i++)
- result = load_java_field(format, &format->fields[i], pos);
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à vider. *
-* *
-* Description : Décharge les champs d'un binaire Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_fields(java_format *format)
-{
- uint16_t i; /* Boucle de parcours */
-
- for (i = 0; i < format->fields_count; i++)
- unload_java_field(format, &format->fields[i]);
-
- free(format->fields);
-
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* field = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'un champ de classe. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_field(java_format *format, java_field *field, off_t *pos)
-{
- bool result; /* Bilan à retourner */
-
- result = read_u16((uint16_t *)&field->access, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&field->name_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
- result &= read_u16(&field->descriptor_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= load_java_attributes(format, pos,
- &field->attributes, &field->attributes_count);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* field = élément à libérer. *
-* *
-* Description : Décharge les propriétés d'un champ de classe. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_field(java_format *format, java_field *field)
-{
- if (field->attributes_count > 0)
- unload_java_attributes(format, field->attributes, field->attributes_count);
-
-}
diff --git a/src/format/java/field.h b/src/format/java/field.h
deleted file mode 100644
index 686c13f..0000000
--- a/src/format/java/field.h
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * field.h - prototypes pour la gestion des champs Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_FIELD_H
-#define _FORMAT_JAVA_FIELD_H
-
-
-#include "e_java.h"
-
-
-
-/* Charge les champs d'un binaire Java. */
-bool load_java_fields(java_format *, off_t *);
-
-/* Décharge les champs d'un binaire Java. */
-void unload_java_fields(java_format *);
-
-
-
-#endif /* _FORMAT_JAVA_FIELD_H */
diff --git a/src/format/java/java-int.c b/src/format/java/java-int.c
deleted file mode 100644
index c1c8aa5..0000000
--- a/src/format/java/java-int.c
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * java-int.c - structures internes du format Java
- *
- * 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "java-int.h"
-
-
-#include "pool.h"
-#include "../../common/endianness.h"
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* pos = position de début de lecture. [OUT] *
-* header = structure lue à retourner. [OUT] *
-* *
-* Description : Procède à la lecture d'une en-tête de programme Java. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool read_java_header(const GJavaFormat *format, off_t *pos, java_header *header)
-{
- bool result; /* Bilan à retourner */
- const bin_t *content; /* Contenu binaire à lire */
- off_t length; /* Taille totale du contenu */
- uint32_t magic; /* Identifiant Java */
- size_t i; /* Boucle de parcours */
-
- result = true;
-
- content = NULL; //G_BIN_FORMAT(format)->content;
- length = 0; //G_BIN_FORMAT(format)->length;
-
- result &= read_u32(&magic, content, pos, length, SRE_BIG);
- printf("magic :: 0x%08x\n", magic);
- result &= read_u16(&header->minor_version, content, pos, length, SRE_BIG);
- result &= read_u16(&header->major_version, content, pos, length, SRE_BIG);
-
- printf("avant :: %d\n", result);
-
- result &= load_java_pool(format, pos);
-
- printf("après :: %d\n", result);
-
- result &= read_u16((uint16_t *)&header->access, content, pos, length, SRE_BIG);
- result &= read_u16(&header->this_class, content, pos, length, SRE_BIG);
- result &= read_u16(&header->super_class, content, pos, length, SRE_BIG);
- result &= read_u16(&header->interfaces_count, content, pos, length, SRE_BIG);
-
-/* for (i = 0; i < header->interfaces_count; i++) */
-/* result &= read_u16(&header->interfaces[i], content, pos, length, SRE_BIG)) */
-/* goto ldj_error; */
-
-/* result &= load_java_fields(result, pos); */
-
-/* result &= load_java_methods(result, pos); */
-
-/* result &= load_java_attributes(result, pos, &header->attributes, &header->attributes_count); */
-
- return result;
-
-}
-
-
-
-
-
diff --git a/src/format/java/java-int.h b/src/format/java/java-int.h
deleted file mode 100644
index 1636d1e..0000000
--- a/src/format/java/java-int.h
+++ /dev/null
@@ -1,66 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * java-int.h - prototypes pour les structures internes du format Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_JAVA_INT_H
-#define _FORMAT_JAVA_JAVA_INT_H
-
-
-#include "java.h"
-#include "java_def.h"
-#include "../executable-int.h"
-
-
-
-
-
-/* Format d'exécutable Java (instance) */
-struct _GJavaFormat
-{
- GExeFormat parent; /* A laisser en premier */
-
- java_header header; /* En-tête du programme */
-
-};
-
-/* Format d'exécutable Java (classe) */
-struct _GJavaFormatClass
-{
- GExeFormatClass parent; /* A laisser en premier */
-
-};
-
-
-
-
-
-/* Procède à la lecture d'une en-tête de programme Java. */
-bool read_java_header(const GJavaFormat *, off_t *, java_header *);
-
-
-
-
-
-
-
-
-#endif /* _FORMAT_JAVA_JAVA_INT_H */
diff --git a/src/format/java/java.c b/src/format/java/java.c
deleted file mode 100644
index dcd8299..0000000
--- a/src/format/java/java.c
+++ /dev/null
@@ -1,508 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * java.c - support du format Java
- *
- * 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "java.h"
-
-
-#include <string.h>
-
-
-#include "java-int.h"
-
-
-
-
-
-
-
-
-
-
-
-/* Initialise la classe des formats d'exécutables Java. */
-static void g_java_format_class_init(GJavaFormatClass *);
-
-/* Initialise une instance de format d'exécutable Java. */
-static void g_java_format_init(GJavaFormat *);
-
-/* Supprime toutes les références externes. */
-static void g_java_format_dispose(GJavaFormat *);
-
-/* Procède à la libération totale de la mémoire. */
-static void g_java_format_finalize(GJavaFormat *);
-
-/* Indique le type d'architecture visée par le format. */
-static const char *g_java_format_get_target_machine(const GJavaFormat *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* *
-* Description : Indique si le format peut être pris en charge ici. *
-* *
-* Retour : true si la réponse est positive, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool java_is_matching(GBinContent *content)
-{
- bool result; /* Bilan à faire connaître */
- vmpa2t addr; /* Tête de lecture initiale */
- char magic[4]; /* Idenfiant standard */
-
- init_vmpa(&addr, 0, VMPA_NO_VIRTUAL);
-
- result = g_binary_content_read_raw(content, &addr, 4, (bin_t *)magic);
-
- result &= (memcmp(magic, "\xca\xfe\xba\xbe", 4) == 0);
-
- return result;
-
-}
-
-
-/* Indique le type défini pour un format d'exécutable Java. */
-G_DEFINE_TYPE(GJavaFormat, g_java_format, G_TYPE_EXE_FORMAT);
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe à initialiser. *
-* *
-* Description : Initialise la classe des formats d'exécutables Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_java_format_class_init(GJavaFormatClass *klass)
-{
- GObjectClass *object; /* Autre version de la classe */
- GExeFormatClass *exe; /* Version en exécutable */
-
- object = G_OBJECT_CLASS(klass);
-
- object->dispose = (GObjectFinalizeFunc/* ! */)g_java_format_dispose;
- object->finalize = (GObjectFinalizeFunc)g_java_format_finalize;
-
- exe = G_EXE_FORMAT_CLASS(klass);
-
- exe->get_machine = (get_target_machine_fc)g_java_format_get_target_machine;
- //exe->refine_portions = (refine_portions_fc)g_java_format_refine_portions;
-
- exe->translate_phys = (translate_phys_fc)g_exe_format_without_virt_translate_offset_into_vmpa;
- exe->translate_virt = (translate_virt_fc)g_exe_format_without_virt_translate_address_into_vmpa;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = instance à initialiser. *
-* *
-* Description : Initialise une instance de format d'exécutable Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_java_format_init(GJavaFormat *format)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = instance d'objet GLib à traiter. *
-* *
-* Description : Supprime toutes les références externes. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_java_format_dispose(GJavaFormat *format)
-{
- G_OBJECT_CLASS(g_java_format_parent_class)->dispose(G_OBJECT(format));
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = instance d'objet GLib à traiter. *
-* *
-* Description : Procède à la libération totale de la mémoire. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_java_format_finalize(GJavaFormat *format)
-{
- G_OBJECT_CLASS(g_java_format_parent_class)->finalize(G_OBJECT(format));
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* length = taille du contenu en question. *
-* *
-* Description : Prend en charge un nouveau format Java. *
-* *
-* Retour : Adresse de la structure mise en place ou NULL en cas d'échec.*
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinFormat *g_java_format_new(const bin_t *content, off_t length)
-{
- GJavaFormat *result; /* Structure à retourner */
- off_t offset; /* Tête de lecture */
-
- result = g_object_new(G_TYPE_JAVA_FORMAT, NULL);
-
- //g_binary_format_set_content(G_BIN_FORMAT(result), content, length);
-
-
- offset = 0;
-
- if (!read_java_header(result, &offset, &result->header))
- {
- /* TODO */
- return NULL;
- }
-
-
- return G_BIN_FORMAT(result);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* *
-* Description : Indique le type d'architecture visée par le format. *
-* *
-* Retour : Identifiant de l'architecture ciblée par le format. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static const char *g_java_format_get_target_machine(const GJavaFormat *format)
-{
- return "jvm";
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-#if 0
-
-#include <malloc.h>
-#include <string.h>
-
-
-#include "attribute.h"
-#include "field.h"
-#include "java-int.h"
-#include "method.h"
-#include "pool.h"
-#include "../../common/endianness.h"
-
-
-
-
-/* Indique le type d'architecture visée par le format. */
-FormatTargetMachine get_java_target_machine(const java_format *);
-
-
-
-/* Fournit les références aux zones de code à analyser. */
-bin_part **get_java_default_code_parts(const java_format *, size_t *);
-
-
-/* Fournit le prototype de toutes les routines détectées. */
-GBinRoutine **get_all_java_routines(const java_format *, size_t *);
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* length = taille du contenu en question. *
-* *
-* Description : Indique si le format peut être pris en charge ici. *
-* *
-* Retour : true si la réponse est positive, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool java_is_matching(const uint8_t *content, off_t length)
-{
- bool result; /* Bilan à faire connaître */
-
- result = false;
-
- if (length >= 4)
- result = (strncmp((const char *)content, "\xca\xfe\xba\xbe", 4) == 0);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* length = taille du contenu en question. *
-* *
-* Description : Prend en charge une nouvelle classe Java. *
-* *
-* Retour : Adresse de la structure mise en place ou NULL en cas d'échec.*
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-exe_format *load_java(const uint8_t *content, off_t length)
-{
- java_format *result; /* Adresse à retourner */
- off_t pos; /* Point d'analyse */
- uint32_t magic; /* Identifiant Java */
- uint16_t i; /* Boucle de parcours */
-
- result = (java_format *)calloc(1, sizeof(java_format));
-
- EXE_FORMAT(result)->content = content;
- EXE_FORMAT(result)->length = length;
-
- EXE_FORMAT(result)->get_target_machine = (get_target_machine_fc)get_java_target_machine;
- EXE_FORMAT(result)->get_def_parts = (get_def_parts_fc)get_java_default_code_parts;
- EXE_FORMAT(result)->get_all_routines = (get_all_routines_fc)get_all_java_routines;
-
- pos = 0;
-
- if (!read_u32(&magic, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->minor_version, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->major_version, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!load_java_pool(result, &pos))
- goto ldj_error;
-
- if (!read_u16((uint16_t *)&result->access, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->this_class, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->super_class, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!read_u16(&result->interfaces_count, content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- for (i = 0; i < result->interfaces_count; i++)
- if (!read_u16(&result->interfaces[i], content, &pos, length, SRE_BIG))
- goto ldj_error;
-
- if (!load_java_fields(result, &pos))
- goto ldj_error;
-
- if (!load_java_methods(result, &pos))
- goto ldj_error;
-
- if (!load_java_attributes(result, &pos, &result->attributes, &result->attributes_count))
- goto ldj_error;
-
- return EXE_FORMAT(result);
-
- ldj_error:
-
- unload_java(result);
-
- return NULL;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à supprimer. *
-* *
-* Description : Efface la prise en charge une nouvelle classe Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java(java_format *format)
-{
- if (format->pool_len > 0)
- unload_java_pool(format);
-
- if (format->interfaces_count > 0)
- free(format->interfaces);
-
- if (format->fields_count > 0)
- unload_java_fields(format);
-
- if (format->methods_count > 0)
- unload_java_methods(format);
-
- if (format->attributes_count > 0)
- unload_java_attributes(format, format->attributes, format->attributes_count);
-
- free(format);
-
-}
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* *
-* Description : Indique le type d'architecture visée par le format. *
-* *
-* Retour : Identifiant de l'architecture ciblée par le format. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-FormatTargetMachine get_java_target_machine(const java_format *format)
-{
- return FTM_JVM;
-
-}
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* count = quantité de zones listées. [OUT] *
-* *
-* Description : Fournit les références aux zones de code à analyser. *
-* *
-* Retour : Zones de code à analyser. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bin_part **get_java_default_code_parts(const java_format *format, size_t *count)
-{
- bin_part **result; /* Tableau à retourner */
- uint16_t i; /* Boucle de parcours */
- off_t offset; /* Position physique */
- off_t size; /* Taille de la partie */
- bin_part *part; /* Partie à intégrer à la liste*/
-
- result = NULL;
- *count = 0;
-
- for (i = 0; i < format->methods_count; i++)
- if (find_java_method_code_part(&format->methods[i], &offset, &size))
- {
- part = create_bin_part();
-
- set_bin_part_values(part, offset, size, offset);
-
- result = (bin_part **)realloc(result, ++(*count) * sizeof(bin_part *));
- result[*count - 1] = part;
-
- }
-
- return result;
-
-}
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* count = taille du tableau créé. [OUT] *
-* *
-* Description : Fournit le prototype de toutes les routines détectées. *
-* *
-* Retour : Tableau créé ou NULL si aucun symbole de routine trouvé. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinRoutine **get_all_java_routines(const java_format *format, size_t *count)
-{
- *count = 0;
-
- return NULL;
-
-}
-
-#endif
diff --git a/src/format/java/java.h b/src/format/java/java.h
deleted file mode 100644
index ad70e43..0000000
--- a/src/format/java/java.h
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * java.h - prototypes pour le support du format Java
- *
- * 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_JAVA_H
-#define _FORMAT_JAVA_JAVA_H
-
-
-#include <glib-object.h>
-#include <stdbool.h>
-#include <sys/types.h>
-
-
-#include "../../core/formats.h"
-
-
-
-#define G_TYPE_JAVA_FORMAT g_java_format_get_type()
-#define G_JAVA_FORMAT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_JAVA_FORMAT, GJavaFormat))
-#define G_IS_JAVA_FORMAT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_JAVA_FORMAT))
-#define G_JAVA_FORMAT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_JAVA_FORMAT, GJavaFormatClass))
-#define G_IS_JAVA_FORMAT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_JAVA_FORMAT))
-#define G_JAVA_FORMAT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_JAVA_FORMAT, GJavaFormatClass))
-
-
-/* Format d'exécutable Java (instance) */
-typedef struct _GJavaFormat GJavaFormat;
-
-/* Format d'exécutable Java (classe) */
-typedef struct _GJavaFormatClass GJavaFormatClass;
-
-
-/* Indique si le format peut être pris en charge ici. */
-bool java_is_matching(GBinContent *);
-
-/* Indique le type défini pour un format d'exécutable Java. */
-GType g_java_format_get_type(void);
-
-/* Prend en charge un nouveau format Java. */
-GBinFormat *g_java_format_new(const bin_t *, off_t);
-
-
-
-#endif /* _FORMAT_JAVA_JAVA_H */
diff --git a/src/format/java/java_def.h b/src/format/java/java_def.h
deleted file mode 100644
index 2b1da67..0000000
--- a/src/format/java/java_def.h
+++ /dev/null
@@ -1,418 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * java_def.h - liste des structures et constantes utilisées par le format Java
- *
- * 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_JAVA_DEF_H
-#define _FORMAT_JAVA_JAVA_DEF_H
-
-
-#include <stdint.h>
-
-
-
-/* Description des attributs Java */
-typedef struct _java_attribute java_attribute;
-
-
-
-/* ----------------------- ELEMENTS DU RESERVOIR A CONSTANTES ----------------------- */
-
-
-/* Types de données dans le réservoir (§4.4) */
-typedef enum _ConstantPoolTag
-{
- CONSTANT_EMPTY = 0, /* Non initialisé ou sur 2 */
-
- 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*/
-
-};
-
-
-
-/* ---------------------------- CHAMPS POUR CLASSES JAVA ---------------------------- */
-
-
-/* Types d'accès aux champs (§4.5) */
-typedef enum _FieldAccessFlags
-{
- 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 --------------------------- */
-
-
-/* En-tête de tout programe Java */
-typedef struct _java_header
-{
- 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 */
-
- 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 */
-
-} java_header;
-
-
-
-#endif /* _FORMAT_JAVA_JAVA_DEF_H */
diff --git a/src/format/java/method.c b/src/format/java/method.c
deleted file mode 100644
index 371ba8c..0000000
--- a/src/format/java/method.c
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * method.c - gestion des méthodes Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "method.h"
-
-
-#include <malloc.h>
-
-
-#include "attribute.h"
-#include "../../common/endianness.h"
-
-
-
-/* Charge les propriétés d'une méthode de classe. */
-bool load_java_method(java_format *, java_method *, off_t *);
-
-/* Décharge les propriétés d'une méthode de classe. */
-void unload_java_method(java_format *, java_method *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les méthodes d'un binaire Java. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_methods(java_format *format, off_t *pos)
-{
- bool result; /* Bilan à remonter */
- uint16_t i; /* Boucle de parcours */
-
- result = read_u16(&format->methods_count, EXE_FORMAT(format)->content, pos,
- EXE_FORMAT(format)->length, SRE_BIG);
-
- if (!result) return false;
-
- if (format->methods_count > 0)
- {
- format->methods = (java_method *)calloc(format->methods_count, sizeof(java_method));
-
- for (i = 0; i < format->methods_count && result; i++)
- result = load_java_method(format, &format->methods[i], pos);
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à vider. *
-* *
-* Description : Décharge les méthodes d'un binaire Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_methods(java_format *format)
-{
- uint16_t i; /* Boucle de parcours */
-
- for (i = 0; i < format->methods_count; i++)
- unload_java_method(format, &format->methods[i]);
-
- free(format->methods);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* method = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'une méthode de classe. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_method(java_format *format, java_method *method, off_t *pos)
-{
- bool result; /* Bilan à retourner */
-
- result = read_u16((uint16_t *)&method->access, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= read_u16(&method->name_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
- result &= read_u16(&method->descriptor_index, EXE_FORMAT(format)->content,
- pos, EXE_FORMAT(format)->length, SRE_BIG);
-
- result &= load_java_attributes(format, pos,
- &method->attributes, &method->attributes_count);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* method = élément à libérer. *
-* *
-* Description : Décharge les propriétés d'une méthode de classe. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_method(java_format *format, java_method *method)
-{
- if (method->attributes_count > 0)
- unload_java_attributes(format, method->attributes, method->attributes_count);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : method = élément à traiter. *
-* offset = position physique du code de la méthode. [OUT] *
-* size = taille du code de la méthode. [OUT] *
-* *
-* Description : Retrouve le code binaire correspondant à une méthode. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool find_java_method_code_part(const java_method *method, off_t *offset, off_t *size)
-{
- uint16_t i; /* Boucle de parcours */
-
- for (i = 0; i < method->attributes_count; i++)
- if (method->attributes[i].type == JAT_CODE)
- {
- *offset = method->attributes[i].info.code.content;
- *size = method->attributes[i].info.code.code_length;
- break;
- }
-
- return (i < method->attributes_count);
-
-}
diff --git a/src/format/java/method.h b/src/format/java/method.h
deleted file mode 100644
index 35b04e1..0000000
--- a/src/format/java/method.h
+++ /dev/null
@@ -1,44 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * method.h - prototypes pour la gestion des méthodes Java
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_METHOD_H
-#define _FORMAT_JAVA_METHOD_H
-
-
-#include "e_java.h"
-#include "java-int.h"
-
-
-
-/* Charge les méthodes d'un binaire Java. */
-bool load_java_methods(java_format *, off_t *);
-
-/* Décharge les méthodes d'un binaire Java. */
-void unload_java_methods(java_format *);
-
-/* Retrouve le code binaire correspondant à une méthode. */
-bool find_java_method_code_part(const java_method *method, off_t *, off_t *);
-
-
-
-#endif /* _FORMAT_JAVA_METHOD_H */
diff --git a/src/format/java/pool.c b/src/format/java/pool.c
deleted file mode 100644
index 625e9cc..0000000
--- a/src/format/java/pool.c
+++ /dev/null
@@ -1,474 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * pool.c - lecture du réservoir de constantes
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "pool.h"
-
-
-#include <malloc.h>
-#include <math.h>
-#include <string.h>
-
-#include "java-int.h"
-#include "../../common/endianness.h"
-#include "../../common/extstr.h"
-
-
-
-/* Charge les propriétés d'une constante du réservoir. */
-bool load_java_pool_entry(GJavaFormat *, constant_pool_entry *, off_t *);
-
-/* Fournit une entrée donnée du réservoir de constantes. */
-const constant_pool_entry *get_java_pool_entry(const GJavaFormat *, uint16_t, ConstantPoolTag);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge le réservoir de constantes d'un binaire Java. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_pool(GJavaFormat *format, off_t *pos)
-{
- bool result; /* Bilan à remonter */
- uint16_t count; /* Nombre d'éléments présents */
- uint16_t i; /* Boucle de parcours */
-
- result = false/*read_u16(&count, G_BIN_FORMAT(format)->content, pos,
- G_BIN_FORMAT(format)->length, SRE_BIG)*/;
-#if 0
- printf("Alloc %hu entries (result=%d)\n", count, result);
-
- format->header.pool_len = count - 1;
- format->header.pool = (constant_pool_entry *)calloc(count - 1, sizeof(constant_pool_entry));
-
- for (i = 1; i < count && result; i++)
- {
- result = load_java_pool_entry(format, &format->header.pool[i - 1], pos);
-
- if (format->header.pool[i - 1].tag == CONSTANT_LONG
- || format->header.pool[i - 1].tag == CONSTANT_DOUBLE)
- {
- i++;
-
- /* On n'est jamais trop prudent */
- if (i < count)
- format->header.pool[i - 1].tag = CONSTANT_EMPTY;
-
- }
-
- }
-#endif
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à vider. *
-* *
-* Description : Décharge le réservoir de constantes d'un binaire Java. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_java_pool(GJavaFormat *format)
-{
- uint16_t i; /* Boucle de parcours */
-
- for (i = 0; i < format->header.pool_len; i++)
- switch (format->header.pool[i].tag)
- {
- case CONSTANT_EMPTY:
- case CONSTANT_CLASS:
- case CONSTANT_FIELD_REF:
- case CONSTANT_METHOD_REF:
- case CONSTANT_INTERFACE_METHOD_REF:
- case CONSTANT_STRING:
- case CONSTANT_INTEGER:
- case CONSTANT_FLOAT:
- case CONSTANT_LONG:
- case CONSTANT_DOUBLE:
- case CONSTANT_NAME_AND_TYPE:
- break;
-
- case CONSTANT_UTF8:
- free(format->header.pool[i].info.utf8.bytes);
- break;
-
- }
-
- free(format->header.pool);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à compléter. *
-* entry = élément à spécifier. [OUT] *
-* pos = point de lecture à faire évoluer. [OUT] *
-* *
-* Description : Charge les propriétés d'une constante du réservoir. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool load_java_pool_entry(GJavaFormat *format, constant_pool_entry *entry, off_t *pos)
-{
- bool result; /* Bilan à retourner */
- uint8_t tag; /* Type de l'élément */
- uint32_t low_bytes; /* Octets de poids faible */
- uint32_t high_bytes; /* Octets de poids fort */
- uint64_t bits; /* Nombre lu sur 64 bits */
- int sign; /* Signe du nombre lu */
- int exponent; /* Exposant du nombre lu */
- uint64_t mantissa32; /* Mantisse du nombre lu 32b */
- uint64_t mantissa64; /* Mantisse du nombre lu 64b */
- uint16_t length; /* Taille d'une chaîne */
-
- result = false/*read_u8(&tag, G_BIN_FORMAT(format)->content, pos,
- G_BIN_FORMAT(format)->length, SRE_BIG)*/;
-#if 0
- entry->tag = tag;
-
- switch (entry->tag)
- {
- case CONSTANT_CLASS:
- result = read_u16(&entry->info.class.name_index, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- break;
-
- case CONSTANT_FIELD_REF:
- case CONSTANT_METHOD_REF:
- case CONSTANT_INTERFACE_METHOD_REF:
-
- result = read_u16(&entry->info.ref.class_index, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- result &= read_u16(&entry->info.ref.name_and_type_index, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
-
- break;
-
- case CONSTANT_STRING:
- result = read_u16(&entry->info.string.string_index, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- break;
-
- case CONSTANT_INTEGER:
- result = read_u32(&entry->info.int_val.val, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- break;
-
- case CONSTANT_FLOAT:
-
- result = read_u32(&low_bytes, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
-
- if (result)
- {
- if (low_bytes == 0x7f800000)
- entry->info.float_val.val = INFINITY;
-
- else if (low_bytes == 0xff800000)
- entry->info.float_val.val = /* -1* */INFINITY;
-
- else if ((low_bytes >= 0x7f800001 && low_bytes <= 0x7fffffff)
- || (low_bytes >= 0xff800001 && low_bytes <= 0xffffffff))
- entry->info.float_val.val = NAN;
-
- else if (low_bytes == 0x00000000 || low_bytes == 0x80000000)
- entry->info.float_val.val = 0;
-
- else
- {
- sign = (low_bytes & 0x80000000) ? -1 : 1;
- exponent = (low_bytes >> 23) & 0xff;
- mantissa32 = (exponent == 0 ?
- (low_bytes & 0x7fffff) << 1 :
- (low_bytes & 0x7fffff) | 0x800000);
-
- entry->info.float_val.val = pow(2, (exponent - 150));
- entry->info.float_val.val *= mantissa32;
- entry->info.float_val.val *= sign;
-
- }
-
- }
-
- break;
-
- case CONSTANT_LONG:
-
- result = read_u32(&high_bytes, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- result &= read_u32(&low_bytes, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
-
- if (result)
- {
- entry->info.double_val.val = (uint64_t)high_bytes << 32;
- entry->info.double_val.val += low_bytes;
- }
-
- break;
-
- case CONSTANT_DOUBLE:
-
- result = read_u32(&high_bytes, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- result &= read_u32(&low_bytes, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
-
- if (result)
- {
- bits = (uint64_t)high_bytes << 32 | (uint64_t)low_bytes;
-
- if (bits == 0x7ff0000000000000ll)
- entry->info.double_val.val = INFINITY;
-
- else if (bits == 0xfff0000000000000ll)
- entry->info.double_val.val = /* -1* */INFINITY;
-
- else if ((bits >= 0x7ff0000000000001ll && bits <= 0x7fffffffffffffffll)
- || (bits >= 0xfff0000000000001ll && bits <= 0xffffffffffffffffll))
- entry->info.double_val.val = NAN;
-
- else if (bits == 0x0000000000000000ll || bits == 0x8000000000000000ll)
- entry->info.double_val.val = 0;
-
- else
- {
- sign = ((bits >> 63) == 0) ? 1 : -1;
- exponent = (bits >> 52) & 0x7ffl;
- mantissa64 = (exponent == 0 ?
- (bits & 0xfffffffffffffll) << 1 :
- (bits & 0xfffffffffffffll) | 0x10000000000000ll);
-
- entry->info.double_val.val = pow(2, (exponent - 1075));
- entry->info.double_val.val *= mantissa64;
- entry->info.double_val.val *= sign;
-
- }
-
- }
-
- break;
-
- case CONSTANT_NAME_AND_TYPE:
-
- result = read_u16(&entry->info.name_type.name_index, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
- result &= read_u16(&entry->info.name_type.descriptor_index, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
-
- break;
-
- case CONSTANT_UTF8:
-
- result = read_u16(&length, G_BIN_FORMAT(format)->content,
- pos, G_BIN_FORMAT(format)->length, SRE_BIG);
-
- if (result)
- {
- entry->info.utf8.bytes = (char *)calloc(length + 1, sizeof(char));
- memcpy(entry->info.utf8.bytes, &G_BIN_FORMAT(format)->content[*pos], length);
- *pos += length;
- }
-
- break;
-
- default:
- result = false;
- break;
-
- }
-#endif
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à consulter. *
-* index = indice de l'élément dont la valeur est à recupérer. *
-* expected = type de l'élément à trouver à l'indice donné. *
-* *
-* Description : Fournit une entrée donnée du réservoir de constantes. *
-* *
-* Retour : Entrée du réservoir de constantes ou NULL en cas d'erreur. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-const constant_pool_entry *get_java_pool_entry(const GJavaFormat *format, uint16_t index, ConstantPoolTag expected)
-{
- const constant_pool_entry *result; /* Entrée à retourner */
- constant_pool_entry *entry; /* Entrée du réservoir visée */
-
- result = NULL;
-
- if (/*index < 0 && FIXME */index <= format->header.pool_len);
- {
- entry = &format->header.pool[index - 1];
-
- if (entry->tag == expected)
- result = entry;
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à consulter. *
-* index = indice de l'élément de la table à recupérer. *
-* expected = type de l'élément à trouver à l'indice donné. *
-* *
-* Description : Construit une version humaine de référence. *
-* *
-* Retour : Référence construite ou NULL en cas de problème. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-char *build_reference_from_java_pool(const GJavaFormat *format, uint16_t index, JavaRefType expected)
-{
- char *result; /* Chaîne humaine à retourner */
- const constant_pool_entry *entry; /* Entrée du réservoir visée 1 */
- const constant_pool_entry *subentry; /* Entrée du réservoir visée 2 */
- const char *tmp; /* Copie de chaîne intouchable */
-
- result = NULL;
-
- switch (expected)
- {
- case JRT_FIELD:
- entry = get_java_pool_entry(format, index, CONSTANT_FIELD_REF);
- break;
- case JRT_METHOD:
- entry = get_java_pool_entry(format, index, CONSTANT_METHOD_REF);
- break;
- case JRT_INTERFACE_METHOD:
- entry = get_java_pool_entry(format, index, CONSTANT_INTERFACE_METHOD_REF);
- break;
- default:
- entry = NULL;
- break;
- }
-
- if (entry == NULL)
- goto brfjp_error;
-
- /* Lieu parent où trouver la référence */
-
- subentry = get_java_pool_entry(format, entry->info.ref.class_index, CONSTANT_CLASS);
-
- if (subentry == NULL)
- goto brfjp_error;
-
- if (!get_java_pool_ut8_string(format, subentry->info.class.name_index, &tmp))
- goto brfjp_error;
-
- result = strdup(tmp);
-
- /* Champ proprement dit */
-
- subentry = get_java_pool_entry(format, entry->info.ref.name_and_type_index, CONSTANT_NAME_AND_TYPE);
-
- if (subentry == NULL)
- goto brfjp_error;
-
- if (!get_java_pool_ut8_string(format, subentry->info.name_type.name_index, &tmp))
- goto brfjp_error;
-
- result = stradd(result, ".");
- result = stradd(result, tmp);
-
- /* Petites retouches finales */
-
- result = strrpl(result, "/", ".");
- result = strrpl(result, "<", "&lt;");
- result = strrpl(result, ">", "&gt;");
-
- return result;
-
- brfjp_error:
-
- if (result != NULL)
- free(result);
-
- return NULL;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à consulter. *
-* index = indice de l'élément dont la valeur est à recupérer. *
-* str = adresse où placer la chaîne de caractères trouvée. *
-* *
-* Description : Recherche une chaîne de caractères dans le réservoir. *
-* *
-* Retour : true si l'opération s'est bien déroulée, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool get_java_pool_ut8_string(const GJavaFormat *format, uint16_t index, const char **str)
-{
- bool result; /* Bilan à renvoyer */
- const constant_pool_entry *entry; /* Entrée du réservoir visée */
-
- entry = get_java_pool_entry(format, index, CONSTANT_UTF8);
-
- result = (entry != NULL);
-
- if (result)
- (*str) = entry->info.utf8.bytes;
-
- return result;
-
-}
diff --git a/src/format/java/pool.h b/src/format/java/pool.h
deleted file mode 100644
index 7f1a1db..0000000
--- a/src/format/java/pool.h
+++ /dev/null
@@ -1,56 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * pool.h - prototypes pour la lecture du réservoir de constantes
- *
- * Copyright (C) 2009-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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _FORMAT_JAVA_POOL_H
-#define _FORMAT_JAVA_POOL_H
-
-
-#include "java.h"
-
-
-
-/* Types de référence Java */
-typedef enum _JavaRefType
-{
- JRT_FIELD, /* Champ */
- JRT_METHOD, /* Méthode */
- JRT_INTERFACE_METHOD /* Méthode d'interface */
-
-} JavaRefType;
-
-
-/* Charge le réservoir de constantes d'un binaire Java. xs*/
-bool load_java_pool(GJavaFormat *, off_t *);
-
-/* Décharge le réservoir de constantes d'un binaire Java. */
-void unload_java_pool(GJavaFormat *);
-
-/* Construit une version humaine de référence. */
-char *build_reference_from_java_pool(const GJavaFormat *, uint16_t, JavaRefType);
-
-/* Recherche une chaîne de caractères dans le réservoir. */
-bool get_java_pool_ut8_string(const GJavaFormat *, uint16_t, const char **);
-
-
-
-#endif /* _FORMAT_JAVA_POOL_H */