summaryrefslogtreecommitdiff
path: root/src/mangling
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-12-04 22:49:03 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-12-04 22:49:03 (GMT)
commite146d7d8c7af50d2592379570c66acaf1dfa73c9 (patch)
tree31f20677a1a46427383080cba0c8f61652c8f51c /src/mangling
parent9e58f9ae7208eeaf09a4b0af2f60996341d6af50 (diff)
Updated the Java descriptor demangling process.
Diffstat (limited to 'src/mangling')
-rw-r--r--src/mangling/Makefile.am27
-rw-r--r--src/mangling/java.h59
-rw-r--r--src/mangling/java_gram.y279
-rw-r--r--src/mangling/java_tok.l37
4 files changed, 2 insertions, 400 deletions
diff --git a/src/mangling/Makefile.am b/src/mangling/Makefile.am
index 3ed04ef..0a24dc1 100644
--- a/src/mangling/Makefile.am
+++ b/src/mangling/Makefile.am
@@ -1,9 +1,5 @@
-BUILT_SOURCES = libjavamangling_la-java_gram.h
-
-AM_YFLAGS = -d
-
-noinst_LTLIBRARIES = libjavamangling.la libmangling.la
+noinst_LTLIBRARIES = libmangling.la
libmangling_la_SOURCES = \
context-int.h \
@@ -13,8 +9,7 @@ libmangling_la_SOURCES = \
libmangling_la_LDFLAGS =
-libmangling_la_LIBADD = \
- libjavamangling.la
+libmangling_la_LIBADD =
devdir = $(includedir)/chrysalide/$(subdir:src/%=%)
@@ -22,26 +17,8 @@ devdir = $(includedir)/chrysalide/$(subdir:src/%=%)
dev_HEADERS = $(libmangling_la_SOURCES:%c=)
-# Partie Java
-
-libjavamangling_la_SOURCES = \
- java.h \
- java_gram.y \
- java_tok.l
-
-libjavamangling_la_YFLAGS = -d -p java_ -o y.tab.c
-
-libjavamangling_la_LFLAGS = -P java_ -o lex.yy.c
-
-
-
-
AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
-
-# Automake fait les choses à moitié
-CLEANFILES = java_gram.h java_gram.c libjavamangling_la-java_tok.c
-
SUBDIRS =
diff --git a/src/mangling/java.h b/src/mangling/java.h
deleted file mode 100644
index f56aef7..0000000
--- a/src/mangling/java.h
+++ /dev/null
@@ -1,59 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * java.h - prototypes pour le décodage des noms d'éléments selon 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_MANGLING_JAVA_H
-#define _FORMAT_MANGLING_JAVA_H
-
-
-#include <stdbool.h>
-
-
-#include "context.h"
-#include "demangler.h"
-
-
-
-/* ------------------------- CONTEXTE POUR LE DECODAGE JAVA ------------------------- */
-
-
-/* Contexte de décodage Java (instance) */
-typedef struct _GJavaDContext GJavaDContext;
-
-/* Contexte de décodage Java (classe) */
-typedef struct _GJavaDContextClass GJavaDContextClass;
-
-
-/* Prépare de quoi effectuer un décodage Java. */
-GDemanglingContext *g_java_dcontext_new(void);
-
-
-
-/* ----------------------- TRAITEMENT DE L'ENCODAGE TYPE JAVA ----------------------- */
-
-
-/* Procède au décodage d'une chaîne de caractères. */
-bool demangle_java_type(GJavaDContext *, const char *);
-
-
-
-#endif /* _FORMAT_MANGLING_JAVA_H */
diff --git a/src/mangling/java_gram.y b/src/mangling/java_gram.y
deleted file mode 100644
index 9f167c2..0000000
--- a/src/mangling/java_gram.y
+++ /dev/null
@@ -1,279 +0,0 @@
-
-%{
-
-
-
-#include "context-int.h"
-#include "java.h"
-#include "../analysis/types/cse.h"
-
-
-
-/* ------------------------- CONTEXTE POUR LE DECODAGE JAVA ------------------------- */
-
-
-#define G_TYPE_JAVA_DCONTEXT g_java_dcontext_get_type()
-#define G_JAVA_DCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_java_dcontext_get_type(), GJavaDContext))
-#define G_IS_JAVA_DCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_java_dcontext_get_type()))
-#define G_JAVA_DCONTEXT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_java_dcontext_get_type(), GJavaDContextIface))
-#define G_JAVA_DCONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_JAVA_DCONTEXT, GJavaDContextClass))
-
-
-/* Contexte de décodage Java (instance) */
-struct _GJavaDContext
-{
- GDemanglingContext parent; /* A laisser en premier */
-
-};
-
-/* Contexte de décodage Java (classe) */
-struct _GJavaDContextClass
-{
- GDemanglingContextClass parent; /* A laisser en premier */
-
-};
-
-
-/* Indique le type défini pour un contexte de décodage. */
-static GType g_java_dcontext_get_type(void);
-
-/* Initialise la classe des contextes de décodage. */
-static void g_java_dcontext_class_init(GJavaDContextClass *);
-
-/* Initialise une instance de contexte pour décodage. */
-static void g_java_dcontext_init(GJavaDContext *);
-
-/* Affiche un message d'erreur concernant l'analyse. */
-static int java_error(/*const YYLTYPE *yyloc, bool hunt, char **ucode, unsigned char *index, */GJavaDContext *, char *);
-
-
-
-
-
-
-%}
-
-
-%union {
-
- void /*GDataType*/ *type;
-
- size_t adeep; /* Dimension d'un tableau */
-
- char *text; /* Chaîne de caractères */
-
-}
-
-%parse-param { GJavaDContext *context }
-
-%token V Z B S C I J F D
-%token ARRAY
-%token L SEMICOLON
-%token SLASH DOLLAR
-%token TEXT
-
-%type <type> type_descriptor field_type_descriptor non_array_field_type_descriptor full_class_name
-
-%type <text> TEXT
-
-
-%{
-
-/* De lexi.c... */
-/*int yylex(YYSTYPE *, YYLTYPE *);*/
-void java_restart(FILE *);
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-extern YY_BUFFER_STATE java__scan_string(const char *);
-extern void java__delete_buffer(YY_BUFFER_STATE);
-
- extern int java_lex (void);
-
-
-/* Affiche un message d'erreur concernant l'analyse. */
-/*int yyerror(const YYLTYPE *, bool, char **, unsigned char *, char *);*/
-
-%}
-
-
-%%
-
-
-input:
- type_descriptor { G_DEMANGLING_CONTEXT(context)->type = $1; }
- ;
-
-type_descriptor:
- V { $$ = g_basic_type_new(BTP_VOID); }
- | field_type_descriptor { $$ = $1; }
- ;
-
-field_type_descriptor:
- non_array_field_type_descriptor { $$ = $1; }
- | ARRAY non_array_field_type_descriptor { $$ = $2; }
- ;
-
-non_array_field_type_descriptor:
- Z { $$ = g_basic_type_new(BTP_BOOL); }
- | B { $$ = g_basic_type_new(BTP_UCHAR); }
- | S { $$ = g_basic_type_new(BTP_SHORT); }
- | C { $$ = g_basic_type_new(BTP_CHAR); }
- | I { $$ = g_basic_type_new(BTP_INT); }
- | J { $$ = g_basic_type_new(BTP_LONG); }
- | F { $$ = g_basic_type_new(BTP_FLOAT); }
- | D { $$ = g_basic_type_new(BTP_DOUBLE); }
- | L full_class_name SEMICOLON { $$ = $2; }
- ;
-
-full_class_name:
- TEXT { $$ = g_class_enum_type_new(CET_CLASS, $1); }
- | full_class_name SLASH TEXT {
- $$ = g_class_enum_type_new(CET_CLASS, $3);
- g_data_type_set_namespace($$, $1, ".");
- }
- | full_class_name DOLLAR TEXT {
- $$ = g_class_enum_type_new(CET_CLASS, $3);
- g_data_type_set_namespace($$, $1, ".");
- }
- ;
-
-
-%%
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* CONTEXTE POUR LE DECODAGE JAVA */
-/* ---------------------------------------------------------------------------------- */
-
-
-/* Indique le type défini pour un contexte de décodage. */
-G_DEFINE_TYPE(GJavaDContext, g_java_dcontext, G_TYPE_DEMANGLING_CONTEXT);
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe à initialiser. *
-* *
-* Description : Initialise la classe des contextes de décodage. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_java_dcontext_class_init(GJavaDContextClass *klass)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : context = instance à initialiser. *
-* *
-* Description : Initialise une instance de contexte pour décodage. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_java_dcontext_init(GJavaDContext *context)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Prépare de quoi effectuer un décodage Java. *
-* *
-* Retour : Instance du contexte mis en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GDemanglingContext *g_java_dcontext_new(void)
-{
- GDemanglingContext *result; /* Structure à retourner */
-
- result = g_object_new(G_TYPE_JAVA_DCONTEXT, NULL);
-
- return result;
-
-}
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* TRAITEMENT DE L'ENCODAGE TYPE JAVA */
-/* ---------------------------------------------------------------------------------- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- * Affiche un message d'erreur concernant l'analyse.
- * @param yyloc informations concernant les coordonnées du soucis.
- * @param hunt indique le type de passe réalisée.
- * @param ucode code résultant compilé.
- * @param index indice de commande à mettre à jour.
- * @param msg indications humaines sur l'événement.
- * @return 0.
- */
-static int java_error(/*const YYLTYPE *yyloc, bool hunt, char **ucode, unsigned char *index, */GJavaDContext *context, char *msg)
-{
-
-
-
- fprintf(stderr, "ERREUR !\n");
- fprintf(stderr, "%s\n", msg);
-
- return -1;
-
-}
-
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : context = contexte de décodage à utiliser. *
-* desc = chaîne de caractères à décoder. *
-* *
-* Description : Procède au décodage d'une chaîne de caractères. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool demangle_java_type(GJavaDContext *context, const char *desc)
-{
- YY_BUFFER_STATE buffer; /* Tampon pour bison */
- int ret; /* Bilan de l'appel */
-
- buffer = java__scan_string(desc);
- ret = yyparse(context);
- java__delete_buffer(buffer);
-
- return (ret == 0);
-
-}
diff --git a/src/mangling/java_tok.l b/src/mangling/java_tok.l
deleted file mode 100644
index 4adf623..0000000
--- a/src/mangling/java_tok.l
+++ /dev/null
@@ -1,37 +0,0 @@
-
-%{
-
-#include "java.h"
-#include "libjavamangling_la-java_gram.h"
-
-%}
-
-
-%option noyywrap
-%option yylineno
-%option nounput
-%option noinput
-
-%x string
-
-
-%%
-
-V { return V; }
-Z { return Z; }
-B { return B; }
-S { return S; }
-C { return C; }
-I { return I; }
-J { return J; }
-F { return F; }
-D { return D; }
-L { BEGIN(string); return L; }
-[[]* { java_lval.adeep = strlen(yytext); return ARRAY; }
-<string>[/] { return SLASH; }
-<string>[$] { return DOLLAR; }
-<string>[;] { BEGIN(INITIAL); return SEMICOLON; }
-
-<string>[A-Za-z0-9]* { java_lval.text = yytext; return TEXT; }
-
-%%