summaryrefslogtreecommitdiff
path: root/src/format/mangling/itanium/context.h
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2013-12-29 14:07:38 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2013-12-29 14:07:38 (GMT)
commit944461f7af1995b08783dc761772908ec7c204a6 (patch)
tree21a50208c650390e9649bb0892f94bab26d5fc8f /src/format/mangling/itanium/context.h
parent11634a93003e7b5dd339bb52f2cde04f29f4c4e4 (diff)
Handled Itanium demangling with C code (first part).
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@361 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/format/mangling/itanium/context.h')
-rw-r--r--src/format/mangling/itanium/context.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/format/mangling/itanium/context.h b/src/format/mangling/itanium/context.h
new file mode 100644
index 0000000..54c3294
--- /dev/null
+++ b/src/format/mangling/itanium/context.h
@@ -0,0 +1,117 @@
+
+/* OpenIDA - Outil d'analyse de fichiers binaires
+ * context.h - prototypes pour le contexte de décodage à la sauce ABI C++ Itanium
+ *
+ * Copyright (C) 2013 Cyrille Bagard
+ *
+ * This file is part of OpenIDA.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _FORMAT_MANGLING_ITANIUM_CONTEXT_H
+#define _FORMAT_MANGLING_ITANIUM_CONTEXT_H
+
+
+#include <glib-object.h>
+#include <stdbool.h>
+
+#include "../context.h"
+
+
+
+#define G_TYPE_ITANIUM_DCONTEXT g_itanium_dcontext_get_type()
+#define G_ITANIUM_DCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_itanium_dcontext_get_type(), GItaniumDContext))
+#define G_IS_ITANIUM_DCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_itanium_dcontext_get_type()))
+#define G_ITANIUM_DCONTEXT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_itanium_dcontext_get_type(), GItaniumDContextIface))
+#define G_ITANIUM_DCONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_ITANIUM_DCONTEXT, GItaniumDContextClass))
+
+
+/* Contexte de décodage Itanium (instance) */
+typedef struct _GItaniumDContext GItaniumDContext;
+
+/* Contexte de décodage Itanium (classe) */
+typedef struct _GItaniumDContextClass GItaniumDContextClass;
+
+
+/* Indique le type défini pour un contexte de décodage. */
+GType g_itanium_dcontext_get_type(void);
+
+/* Prépare de quoi effectuer un décodage Itanium. */
+GDemanglingContext *g_itanium_dcontext_new(void);
+
+/* Tente de décoder une chaîne de caractères donnée. */
+void /*GBinRoutine **/g_itanium_dcontext_demangle_routine(GItaniumDContext *, const char *);
+
+/* Sauvegarde d'un état courant */
+typedef struct _itd_state
+{
+ size_t pos; /* Position courante */
+ size_t subst_count; /* Nombre de substitutions */
+
+} itd_state;
+
+/* Fournit l'état courant à une fin de retour en arrière. */
+void g_itanium_dcontext_push_state(const GItaniumDContext *, itd_state *);
+
+/* Définit l'état courant suite à un retour en arrière. */
+void g_itanium_dcontext_pop_state(GItaniumDContext *, const itd_state *);
+
+/* Fournit la valeur du caractère courant. */
+char g_itanium_dcontext_peek_char(const GItaniumDContext *);
+
+/* Avance la tête de lecture courante. */
+void g_itanium_dcontext_advance(GItaniumDContext *, size_t);
+
+/* Fournit et avance la tête de lecture courante. */
+char g_itanium_dcontext_next_char(GItaniumDContext *);
+
+/* Vérifie la nature du caractère courant. */
+bool g_itanium_dcontext_check_char(GItaniumDContext *, char);
+
+/* Fournit la chaîne de caractère restant à traiter. */
+const char *g_itanium_dcontext_get_string(const GItaniumDContext *, size_t *);
+
+
+
+
+/* Composant extrait de l'encodage */
+typedef struct _itanium_component itanium_component;
+
+
+/* Fournit un nouveau composant vierge. */
+itanium_component *g_itanium_dcontext_get_empty_component(GItaniumDContext *);
+
+/* Marque un composant comme étant disponible pour un usage. */
+void g_itanium_dcontext_mark_component_as_free(GItaniumDContext *, itanium_component *);
+
+/* Indexe un composant comme future substitution potentielle. */
+void g_itanium_dcontext_add_substitution(GItaniumDContext *, itanium_component *);
+
+/* Fournit un composant en place pour une substitution. */
+itanium_component *g_itanium_dcontext_get_substitution(GItaniumDContext *, size_t);
+
+
+
+
+
+
+void test_itanium(void);
+
+
+
+
+
+#endif /* _FORMAT_MANGLING_ITANIUM_CONTEXT_H */