summaryrefslogtreecommitdiff
path: root/src/debug/remgdb
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-03-19 13:02:54 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-03-19 13:02:54 (GMT)
commit94fd405bb0c2e6dfa43324b04a336ffb611c58ce (patch)
treef3170587b4006fa358665a6bbfa301731503d3b3 /src/debug/remgdb
parent499f00977cd7f50ce0c4cf24dd59b1e920e5b180 (diff)
Provided initial features for debugging using GDB.
Diffstat (limited to 'src/debug/remgdb')
-rw-r--r--src/debug/remgdb/Makefile.am17
-rw-r--r--src/debug/remgdb/gdb.c363
-rw-r--r--src/debug/remgdb/gdb.h61
-rw-r--r--src/debug/remgdb/helpers.c139
-rw-r--r--src/debug/remgdb/helpers.h61
-rw-r--r--src/debug/remgdb/packet.c383
-rw-r--r--src/debug/remgdb/packet.h82
-rw-r--r--src/debug/remgdb/stream-int.h74
-rw-r--r--src/debug/remgdb/stream.c402
-rw-r--r--src/debug/remgdb/stream.h65
-rw-r--r--src/debug/remgdb/tcp.c263
-rw-r--r--src/debug/remgdb/tcp.h56
12 files changed, 0 insertions, 1966 deletions
diff --git a/src/debug/remgdb/Makefile.am b/src/debug/remgdb/Makefile.am
deleted file mode 100644
index 47e5fdc..0000000
--- a/src/debug/remgdb/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-
-noinst_LTLIBRARIES = libdebugremgdb.la
-
-libdebugremgdb_la_SOURCES = \
- gdb.h gdb.c \
- helpers.h helpers.c \
- packet.h packet.c \
- stream-int.h \
- stream.h stream.c \
- tcp.h tcp.c
-
-libdebugremgdb_la_CFLAGS = $(AM_CFLAGS)
-
-
-AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
-
-AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
diff --git a/src/debug/remgdb/gdb.c b/src/debug/remgdb/gdb.c
deleted file mode 100644
index 728eee6..0000000
--- a/src/debug/remgdb/gdb.c
+++ /dev/null
@@ -1,363 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * gdb.c - débogage à l'aide de gdb.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "gdb.h"
-
-
-#include "../debugger-int.h"
-
-
-
-#include "helpers.h"
-#include "tcp.h"
-
-
-
-
-/* Débogueur utilisant un serveur GDB (instance) */
-struct _GGdbDebugger
-{
- GBinaryDebugger parent; /* A laisser en premier */
-
- GGdbStream *stream; /* Flux de communication */
-
-
-#if 0
- GCond *cond; /* Poursuite du déroulement */
- GMutex *mutex; /* Accès à la condition */
-
- ptrace_options *options; /* Configuration du débogage */
-
- pid_t child; /* Processus suivi lancé */
-
- gboolean run_again; /* Reprise du débogage */
-#endif
-};
-
-/* Débogueur utilisant un serveur GDB (classe) */
-struct _GGdbDebuggerClass
-{
- GBinaryDebuggerClass parent; /* A laisser en premier */
-
-};
-
-
-
-
-
-/* Initialise la classe du débogueur utilisant gdb. */
-static void g_gdb_debugger_class_init(GGdbDebuggerClass *);
-
-/* Procède à l'initialisation du débogueur utilisant gdb. */
-static void g_gdb_debugger_init(GGdbDebugger *);
-
-
-/* Met en marche le débogueur utilisant un serveur GDB. */
-static bool g_gdb_debugger_run(GGdbDebugger *);
-
-/* Remet en marche le débogueur utilisant un serveur GDB. */
-static bool g_gdb_debugger_resume(GGdbDebugger *);
-
-/* Tue le débogueur utilisant un serveur GDB. */
-static bool g_gdb_debugger_kill(GGdbDebugger *);
-
-
-
-/* Indique le type défini par la GLib pour le débogueur gdb. */
-G_DEFINE_TYPE(GGdbDebugger, g_gdb_debugger, G_TYPE_BINARY_DEBUGGER);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe de débogueur à initialiser. *
-* *
-* Description : Initialise la classe du débogueur utilisant gdb. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_debugger_class_init(GGdbDebuggerClass *klass)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : debugger = instance de débogueur à préparer. *
-* *
-* Description : Procède à l'initialisation du débogueur utilisant gdb. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_debugger_init(GGdbDebugger *debugger)
-{
- GBinaryDebugger *parent; /* Instance parente */
-
- parent = G_BINARY_DEBUGGER(debugger);
-
- parent->run = (basic_debugger_fc)g_gdb_debugger_run;
- parent->resume = (resume_debugger_fc)g_gdb_debugger_resume;
- parent->kill = (basic_debugger_fc)g_gdb_debugger_kill;
-
- //parent->get_reg_values = (get_register_values_fc)get_register_values_using_gdb_debugger;
-
- //debugger->cond = g_cond_new();
- //debugger->mutex = g_mutex_new();
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : binary = binaire représenter à déboguer. *
-* options = paramètres destinés au débogage. *
-* *
-* Description : Crée un débogueur utilisant un serveur GDB distant. *
-* *
-* Retour : Instance de débogueur mise en place ou NULL. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinaryDebugger *g_gdb_debugger_new(GLoadedBinary *binary, void *options)
-{
- GBinaryDebugger *result; /* Débogueur à retourner */
-
- result = g_object_new(G_TYPE_GDB_DEBUGGER, NULL);
-
- return result;
-
-}
-
-
-
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : debugger = débogueur à lancer. *
-* *
-* Description : Met en marche le débogueur utilisant un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_gdb_debugger_run(GGdbDebugger *debugger)
-{
-
-
-
- GGdbPacket *packet;
-
- bool test;
-
- const char *data;
- size_t len;
-
-
- int sig;
- vmpa_t addr;
- pid_t thread;
-
-
- debugger->stream = g_gdb_tcp_client_new("127.0.0.1", "6666");
- if (debugger->stream == NULL) return false;
-
-
- printf("Connection done !\n");
-
-
-
- packet = g_gdb_stream_get_free_packet(debugger->stream);
-
- g_gdb_packet_start_new_command(packet);
- g_gdb_packet_append(packet, "?");
-
-
- test = g_gdb_stream_send_packet(debugger->stream, packet);
-
-
-
- printf(" >> Paquet '%s' bien envoyé ? %s\n", "?", test ? "oui" : "non");
-
-
-
- g_gdb_stream_mark_packet_as_free(debugger->stream, packet);
-
- packet = g_gdb_stream_recv_packet(debugger->stream);
-
- g_gdb_packet_get_data(packet, &data, &len, NULL);
-
- printf(" << Réception de '%s'\n", data);
-
-
-
-
-
- get_stop_reply_sig_info(packet, &sig, &addr, &thread, SRE_LITTLE);
-
- g_signal_emit_by_name(debugger, "halted", sig, addr, thread);
-
-
-
-
-
-
-
- return true;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : debugger = débogueur à relancer. *
-* *
-* Description : Remet en marche le débogueur utilisant un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_gdb_debugger_resume(GGdbDebugger *debugger)
-{
-
-
- /*
- g_mutex_lock(debugger->mutex);
- debugger->run_again = TRUE;
- g_cond_signal(debugger->cond);
- g_mutex_unlock(debugger->mutex);
- */
- return true;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : debugger = débogueur à relancer. *
-* *
-* Description : Tue le débogueur utilisant un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_gdb_debugger_kill(GGdbDebugger *debugger)
-{
-
-
-#if 0
- int ret; /* Bilan de l'appel système */
-
- ret = kill(debugger->child, SIGKILL);
- if (ret != 0) perror("kill");
-
- debugger->child = 0;
-
- g_mutex_lock(debugger->mutex);
- debugger->run_again = TRUE;
- g_cond_signal(debugger->cond);
- g_mutex_unlock(debugger->mutex);
-#endif
- return true;
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-void test_gdb(void)
-{
-
- GGdbStream *stream;
-
- GGdbPacket *packet;
-
- bool test;
-
- const char *data;
- size_t len;
-
- printf("GDB !!!!\n");
-
-
- stream = g_gdb_tcp_client_new("192.168.100.141", "6666");
-
-
-
- packet = g_gdb_stream_get_free_packet(stream);
-
- g_gdb_packet_start_new_command(packet);
- g_gdb_packet_append(packet, "g");
-
-
- test = g_gdb_stream_send_packet(stream, packet);
-
-
-
- printf(" >> Paquet '%s' bien envoyé ? %s\n", "g", test ? "oui" : "non");
-
-
-
- g_gdb_stream_mark_packet_as_free(stream, packet);
-
- packet = g_gdb_stream_recv_packet(stream);
-
- g_gdb_packet_get_data(packet, &data, &len, NULL);
-
- printf(" << Réception de '%s'\n", data);
-
-
-
-
-}
diff --git a/src/debug/remgdb/gdb.h b/src/debug/remgdb/gdb.h
deleted file mode 100644
index 38aa8fe..0000000
--- a/src/debug/remgdb/gdb.h
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * gdb.h - prototypes pour le débogage à l'aide de gdb.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _DEBUG_REMGDB_GDB_H
-#define _DEBUG_REMGDB_GDB_H
-
-
-#include <glib-object.h>
-
-
-#include "../debugger.h"
-
-
-
-#define G_TYPE_GDB_DEBUGGER (g_gdb_debugger_get_type())
-#define G_GDB_DEBUGGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_GDB_DEBUGGER, GGdbDebugger))
-#define G_IS_GDB_DEBUGGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_GDB_DEBUGGER))
-#define G_GDB_DEBUGGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_GDB_DEBUGGER, GGdbDebuggerClass))
-#define G_IS_GDB_DEBUGGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_GDB_DEBUGGER))
-#define G_GDB_DEBUGGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_GDB_DEBUGGER, GGdbDebuggerClass))
-
-
-/* Débogueur utilisant un serveur GDB (instance) */
-typedef struct _GGdbDebugger GGdbDebugger;
-
-/* Débogueur utilisant un serveur GDB (classe) */
-typedef struct _GGdbDebuggerClass GGdbDebuggerClass;
-
-
-/* Indique le type défini par la GLib pour le débogueur gdb. */
-GType g_gdb_debugger_get_type(void);
-
-/* Crée un débogueur utilisant un serveur GDB distant. */
-GBinaryDebugger *g_gdb_debugger_new(GLoadedBinary *, void *);
-
-
-void test_gdb(void);
-
-
-
-#endif /* _DEBUG_REMGDB_GDB_H */
diff --git a/src/debug/remgdb/helpers.c b/src/debug/remgdb/helpers.c
deleted file mode 100644
index bae7f0b..0000000
--- a/src/debug/remgdb/helpers.c
+++ /dev/null
@@ -1,139 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * helpers.c - assistanat dans la manipulation des paquets GDB
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "helpers.h"
-
-
-#include <regex.h>
-#include <string.h>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* -------------------------- PAQUETS DES REPONSES D'ARRET -------------------------- */
-
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet de deonnées à interpréter. *
-* sig = identifiant du signal source. [OUT] *
-* addr = adresse de l'instruction courante. [OUT] *
-* thread = identifiant du thread concerné. [OUT] *
-* endian = boutisme de la plateforme ciblée. *
-* *
-* Description : Récupère les informations liées à un arrêt suite à signal. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : Les données sont la forme : *
-* T0505:00000000;04:a08de6bf;08:505878b7;thread:50dc; *
-* *
-******************************************************************************/
-
-bool get_stop_reply_sig_info(const GGdbPacket *packet, int *sig, vmpa_t *addr, pid_t *thread, SourceEndian endian)
-{
- const char *data; /* Données brutes du paquet */
- size_t length; /* Quantité de ces données */
- uint8_t index; /* Indice de 8 bits quelconque */
- size_t pos; /* Tête de lecture courante */
- regex_t preg; /* Expression régulière */
- int ret; /* Bilan d'un appel */
- regmatch_t pmatch[3]; /* Zones remarquées */
- size_t key_len; /* Taille de l'indicatif */
-
- *addr = 0ull;
-
- g_gdb_packet_get_data(packet, &data, &length, NULL);
-
- pos = 1;
-
- /* Lecture du numéro du signal */
-
- if (!strtou8(&index, data, &pos, length, SRE_LITTLE))
- return false;
-
- *sig = index;
-
- /* Reste des informations */
-
- ret = regcomp(&preg, "([^:]+):([^;]+);", REG_EXTENDED | REG_ICASE);
- if (ret != 0) return false;
-
- for (ret = regexec(&preg, &data[pos], 3, pmatch, 0);
- ret != REG_NOMATCH;
- ret = regexec(&preg, &data[pos], 3, pmatch, 0))
- {
- key_len = pmatch[1].rm_eo - pmatch[1].rm_so;
-
- /* Indication sur le thread */
- if (key_len == strlen("thread")
- && strncmp(&data[pos + pmatch[1].rm_so], "thread", key_len) == 0)
- {
-
- /* TODO printf("Thread found !\n"); */
-
- }
-
- /* Valeur de registre ? */
- else if (key_len == 2)
- {
- if (!strtou8(&index, data, (size_t []) { pos + pmatch[1].rm_so }, length, SRE_LITTLE))
- return false;
-
- if (index != 8 /* FIXME */)
- goto next_field;
-
- if (!strtou32(addr, data, (size_t []) { pos + pmatch[2].rm_so }, length, SRE_LITTLE/* FIXME */))
- return false;
-
- }
-
- next_field:
- pos += pmatch[0].rm_eo;
-
- }
-
- regfree(&preg);
-
- return (*addr != 0ull);
-
-}
-
-
-
diff --git a/src/debug/remgdb/helpers.h b/src/debug/remgdb/helpers.h
deleted file mode 100644
index d68fc11..0000000
--- a/src/debug/remgdb/helpers.h
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * helpers.h - prototypes pour un assistanat dans la manipulation des paquets GDB
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _DEBUG_REMGDB_HELPERS_H
-#define _DEBUG_REMGDB_HELPERS_H
-
-
-#include "packet.h"
-
-
-#include "../../arch/archbase.h"
-#include "../../common/endianness.h"
-
-
-
-
-
-
-
-/* -------------------------- PAQUETS DES REPONSES D'ARRET -------------------------- */
-
-
-/* Récupère les informations liées à un arrêt suite à signal. */
-bool get_stop_reply_sig_info(const GGdbPacket *, int *, vmpa_t *, pid_t *, SourceEndian);
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* PAQUETS DES REPONSES D'ARRET */
-/* ---------------------------------------------------------------------------------- */
-
-
-
-
-
-
-
-
-
-
-#endif /* _DEBUG_REMGDB_HELPERS_H */
diff --git a/src/debug/remgdb/packet.c b/src/debug/remgdb/packet.c
deleted file mode 100644
index 8d798c6..0000000
--- a/src/debug/remgdb/packet.c
+++ /dev/null
@@ -1,383 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * packet.c - manipulation des paquets de données GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "packet.h"
-
-
-#include <malloc.h>
-#include <string.h>
-
-
-#include "../../common/dllist.h"
-
-
-
-/* Répresentation d'un paquet GDB (instance) */
-struct _GGdbPacket
-{
- GObject parent; /* A laisser en premier */
-
- DL_LIST_ITEM(link); /* Lien vers les autres */
-
- char *buffer; /* Données à traiter */
- size_t len; /* Quantité de ces données */
- size_t allocated; /* Taille du tampon */
-
- uint8_t checksum; /* Empreinte de contrôle */
-
-};
-
-
-/* Répresentation d'un paquet GDB (classe) */
-struct _GGdbPacketClass
-{
- GObjectClass parent; /* A laisser en premier */
-
-};
-
-
-/* Initialise la classe des représentations des paquets GDB. */
-static void g_gdb_packet_class_init(GGdbPacketClass *);
-
-/* Initialise une instance de représentation de paquet GDB. */
-static void g_gdb_packet_init(GGdbPacket *);
-
-
-
-/* Indique le type défini pour une répresentation de paquet GDB. */
-G_DEFINE_TYPE(GGdbPacket, g_gdb_packet, G_TYPE_OBJECT);
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe à initialiser. *
-* *
-* Description : Initialise la classe des représentations des paquets GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_packet_class_init(GGdbPacketClass *klass)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = instance à initialiser. *
-* *
-* Description : Initialise une instance de représentation de paquet GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_packet_init(GGdbPacket *packet)
-{
- DL_LIST_ITEM_INIT(&packet->link);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Crée une représentation de paquet GDB. *
-* *
-* Retour : Adresse de la structure mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GGdbPacket *g_gdb_packet_new(void)
-{
- GGdbPacket *result; /* Structure à retourner */
-
- result = g_object_new(G_TYPE_GDB_PACKET, NULL);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet à préparer pour une émission. *
-* *
-* Description : Prépare un paquet pour un envoi prochain. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_gdb_packet_start_new_command(GGdbPacket *packet)
-{
- if (packet->allocated == 0)
- {
- packet->allocated = 1;
- packet->buffer = (char *)calloc(packet->allocated, sizeof(char));
- }
-
- packet->buffer[0] = '\0';
- packet->len = 0;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet à préparer pour une émission. *
-* string = chaîne à inclure dans le paquet. *
-* *
-* Description : Complète un paquet pour un envoi prochain. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_gdb_packet_append(GGdbPacket *packet, const char *string)
-{
- size_t len; /* Taille de la chaîne donnée */
-
- len = strlen(string);
-
- /* Si la place n'est pas assez grande */
- if ((packet->len + len + 1) >= packet->allocated)
- {
- packet->buffer = (char *)realloc(packet->buffer, (packet->len + len + 1) * sizeof(char));
- packet->allocated = packet->len + len + 1;
- }
-
- strcat(packet->buffer, string);
-
- packet->len += len;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet à analyser. *
-* *
-* Description : Détermine l'empreinte des données d'un paquet GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_gdb_packet_compute_checksum(GGdbPacket *packet)
-{
- int sum; /* Valeur cumulée des données */
- size_t i; /* Boucle de parcours */
-
- sum = 0;
-
- for (i = 0; i < packet->len; i++)
- sum += packet->buffer[i];
-
- packet->checksum = sum % 256;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet à analyser. *
-* checksum = contrôle d'intégrité à retrouver. *
-* *
-* Description : Contrôle l'intégrité des données d'un paquet GDB. *
-* *
-* Retour : Bilan de la vérification. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_gdb_packet_verify_checksum(GGdbPacket *packet, uint8_t checksum)
-{
- g_gdb_packet_compute_checksum(packet);
-
- return checksum == packet->checksum;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet à décoder et/ou décompresser. *
-* *
-* Description : Décode et/ou décompresse un paquet GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_gdb_packet_decode(GGdbPacket *packet)
-{
- bool result; /* Bilan à retourner */
- char *buffer; /* Données transcrites */
- size_t allocated; /* Quantité de données gérées */
- size_t i; /* Boucle de parcours */
- size_t k; /* Point d'insertion */
- size_t repeat; /* Nombre de répétitions */
-
- result = true;
-
- allocated = packet->len + 1;
- buffer = (char *)calloc(allocated, sizeof(char));
-
- for (i = 0, k = 0; i < packet->len && result; i++)
- switch (packet->buffer[i])
- {
- case '#':
- case '$':
- result = false;
- break;
-
- case '*':
-
- if (++i == packet->len || k == 0)
- {
- result = false;
- break;
- }
-
- repeat = packet->buffer[i] - ' ' + 3;
-
- allocated += repeat;
- buffer = (char *)realloc(buffer, allocated * sizeof(char));
-
- memset(&buffer[k], buffer[k - 1], repeat);
- k += repeat;
-
- break;
-
- case '}':
-
- if (++i == packet->len)
- {
- result = false;
- break;
- }
-
- buffer[k++] = packet->buffer[i] ^ 0x20;
-
- break;
-
- default:
- buffer[k++] = packet->buffer[i];
- break;
-
- }
-
- if (packet->buffer != NULL)
- free(packet->buffer);
-
- packet->buffer = buffer;
- packet->len = k;
- packet->allocated = allocated;
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : packet = paquet à analyser. *
-* data = données contenues dans le paquet. [OUT] *
-* len = quantité de ces données. [OUT] *
-* checksum = contrôle d'intégrité des données ou NULL. [OUT] *
-* *
-* Description : Fournit le contenu du paquet. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_gdb_packet_get_data(const GGdbPacket *packet, const char **data, size_t *len, uint8_t *checksum)
-{
- *data = packet->buffer;
- *len = packet->len;
-
- if (checksum != NULL)
- *checksum = packet->checksum;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : list = liste de paquets à compléter. *
-* item = paquet à ajouter à la liste. *
-* *
-* Description : Ajoute un paquet à une liste de paquets. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_gdb_packet_push(GGdbPacket **list, GGdbPacket *item)
-{
- dl_list_push(item, list, GGdbPacket, link);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : list = liste de paquets à consulter. *
-* *
-* Description : Retire et fournit le premier élément d'une liste de paquets. *
-* *
-* Retour : Elément dépilé de la liste de paquets. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GGdbPacket *g_gdb_packet_pop(GGdbPacket **list)
-{
- return dl_list_pop(list, GGdbPacket, link);
-
-}
diff --git a/src/debug/remgdb/packet.h b/src/debug/remgdb/packet.h
deleted file mode 100644
index 9c44108..0000000
--- a/src/debug/remgdb/packet.h
+++ /dev/null
@@ -1,82 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * packet.h - prototypes pour la manipulation des paquets de données GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _DEBUG_REMGDB_PACKET_H
-#define _DEBUG_REMGDB_PACKET_H
-
-
-#include <glib-object.h>
-#include <stdbool.h>
-#include <stdint.h>
-
-
-
-#define G_TYPE_GDB_PACKET g_gdb_packet_get_type()
-#define G_GDB_PACKET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_gdb_packet_get_type(), GGdbPacket))
-#define G_IS_GDB_PACKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_gdb_packet_get_type()))
-#define G_GDB_PACKET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_GDB_PACKET, GGdbPacketClass))
-#define G_IS_GDB_PACKET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_GDB_PACKET))
-#define G_GDB_PACKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_GDB_PACKET, GGdbPacketClass))
-
-
-/* Répresentation d'un paquet GDB (instance) */
-typedef struct _GGdbPacket GGdbPacket;
-
-/* Répresentation d'un paquet GDB (classe) */
-typedef struct _GGdbPacketClass GGdbPacketClass;
-
-
-
-/* Indique le type défini pour une répresentation de paquet GDB. */
-GType g_gdb_packet_get_type(void);
-
-/* Crée une représentation de paquet GDB. */
-GGdbPacket *g_gdb_packet_new(void);
-
-/* Prépare un paquet pour un envoi prochain. */
-void g_gdb_packet_start_new_command(GGdbPacket *);
-
-/* Complète un paquet pour un envoi prochain. */
-void g_gdb_packet_append(GGdbPacket *, const char *);
-
-/* Détermine l'empreinte des données d'un paquet GDB. */
-void g_gdb_packet_compute_checksum(GGdbPacket *);
-
-/* Contrôle l'intégrité des données d'un paquet GDB. */
-bool g_gdb_packet_verify_checksum(GGdbPacket *, uint8_t);
-
-/* Décode et/ou décompresse un paquet GDB. */
-bool g_gdb_packet_decode(GGdbPacket *);
-
-/* Fournit le contenu du paquet. */
-void g_gdb_packet_get_data(const GGdbPacket *, const char **, size_t *, uint8_t *);
-
-/* Ajoute un paquet à une liste de paquets. */
-void g_gdb_packet_push(GGdbPacket **, GGdbPacket *);
-
-/* Retire et fournit le premier élément d'une liste de paquets. */
-GGdbPacket *g_gdb_packet_pop(GGdbPacket **);
-
-
-
-#endif /* _DEBUG_REMGDB_PACKET_H */
diff --git a/src/debug/remgdb/stream-int.h b/src/debug/remgdb/stream-int.h
deleted file mode 100644
index 8ac422d..0000000
--- a/src/debug/remgdb/stream-int.h
+++ /dev/null
@@ -1,74 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * stream-int.h - prototypes internes pour la gestion des connexions aux serveurs GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _DEBUG_REMGDB_STREAM_INT_H
-#define _DEBUG_REMGDB_STREAM_INT_H
-
-
-#include "stream.h"
-
-
-
-/* Envoie des données à un serveur GDB. */
-typedef bool (* send_gdb_data_fc) (GGdbStream *, const char *, size_t);
-
-/* Réceptionne un octet de donnée d'un serveur GDB. */
-typedef bool (* recv_gdb_byte_fc) (GGdbStream *, char *);
-
-
-/* Flux de communication avec un serveur GDB (instance) */
-struct _GGdbStream
-{
- GObject parent; /* A laisser en premier */
-
- int fd; /* Flux ouvert en L./E. */
-
- send_gdb_data_fc send_data; /* Envoi d'un paquet GDB */
- recv_gdb_byte_fc recv_byte; /* Réception d'un paquet GDB */
-
- GThread *listening; /* Thread pour les réceptions */
-
- GGdbPacket *free_packets; /* Liste des disponibles */
- GMutex free_mutex; /* Accès à la liste */
-
- GGdbPacket *recv_packets; /* Liste des paquets reçus */
- GCond recv_cond; /* Attente de disponibilité */
- GMutex recv_mutex; /* Accès à la liste */
-
-};
-
-
-/* Flux de communication avec un serveur GDB (classe) */
-struct _GGdbStreamClass
-{
- GObjectClass parent; /* A laisser en premier */
-
-};
-
-
-/* Lance l'écoute d'un flux de communication avec GDB. */
-bool g_gdb_stream_listen(GGdbStream *);
-
-
-
-#endif /* _DEBUG_REMGDB_STREAM_INT_H */
diff --git a/src/debug/remgdb/stream.c b/src/debug/remgdb/stream.c
deleted file mode 100644
index cd303c3..0000000
--- a/src/debug/remgdb/stream.c
+++ /dev/null
@@ -1,402 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * stream.c - gestion des connexions aux serveurs GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "stream.h"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <glib/gthread.h>
-#include <sys/select.h>
-
-
-#include "stream-int.h"
-#include "../../common/dllist.h"
-
-
-
-/* Initialise la classe des flux de communication avec GDB. */
-static void g_gdb_stream_class_init(GGdbStreamClass *);
-
-/* Initialise une instance de flux de communication avec GDB. */
-static void g_gdb_stream_init(GGdbStream *);
-
-/* Envoie un acquittement pour la dernière réception. */
-static bool gdb_stream_ack(GGdbStream *);
-
-/* Ecoute une connexion à un serveur GDB. */
-static void *gdb_stream_thread(GGdbStream *);
-
-/* Réceptionne un paquet d'un serveur GDB. */
-static bool g_gdb_stream_read_packet(GGdbStream *, GGdbPacket *);
-
-
-
-/* Indique le type défini pour un flux de communication avec un serveur GDB. */
-G_DEFINE_TYPE(GGdbStream, g_gdb_stream, G_TYPE_OBJECT);
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe à initialiser. *
-* *
-* Description : Initialise la classe des flux de communication avec GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_stream_class_init(GGdbStreamClass *klass)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = instance à initialiser. *
-* *
-* Description : Initialise une instance de flux de communication avec GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_stream_init(GGdbStream *stream)
-{
- g_mutex_init(&stream->free_mutex);
-
- g_cond_init(&stream->recv_cond);
- g_mutex_init(&stream->recv_mutex);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = instance à réellement lancer. *
-* *
-* Description : Lance l'écoute d'un flux de communication avec GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_gdb_stream_listen(GGdbStream *stream)
-{
- bool result; /* Bilan final à retourner */
-
- result = true;
-
- if (!g_thread_new("chrysalide_gdb_stream", (GThreadFunc)gdb_stream_thread, stream))
- result = false;
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = encadrement associée à l'opération. *
-* *
-* Description : Envoie un acquittement pour la dernière réception. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool gdb_stream_ack(GGdbStream *stream)
-{
- bool result; /* Bilan à retourner */
- GGdbPacket *packet; /* Paquet à envoyer */
-
- packet = g_gdb_stream_get_free_packet(stream);
-
- g_gdb_packet_start_new_command(packet);
- g_gdb_packet_append(packet, "+");
-
- result = g_gdb_stream_send_packet(stream, packet);
-
- g_gdb_stream_mark_packet_as_free(stream, packet);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = encadrement associée à l'opération. *
-* *
-* Description : Ecoute une connexion à un serveur GDB. *
-* *
-* Retour : ??? *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void *gdb_stream_thread(GGdbStream *stream)
-{
- fd_set rfds; /* Liste des flux à surveiller */
- int ret; /* Bilan d'un appel */
- GGdbPacket *packet; /* Nouveau paquet reçu */
-
- while (1)
- {
- FD_ZERO(&rfds);
- FD_SET(stream->fd, &rfds);
-
- ret = select(stream->fd + 1, &rfds, NULL, NULL, NULL);
-
- printf("ret :: %d\n", ret);
-
- switch (ret)
- {
- case -1:
- perror("select()");
- break;
-
- case 0:
- break;
-
- default:
-
- packet = g_gdb_stream_get_free_packet(stream);
-
- g_gdb_packet_start_new_command(packet);
-
- if (g_gdb_stream_read_packet(stream, packet))
- {
- /* Acquittement */
- if (!gdb_stream_ack(stream)) goto bad_recv;
-
- /* On conserve le résultat */
-
- g_mutex_lock(&stream->recv_mutex);
- g_gdb_packet_push(&stream->recv_packets, packet);
- g_mutex_unlock(&stream->recv_mutex);
-
- g_cond_signal(&stream->recv_cond);
-
- }
-
- bad_recv:
-
- printf("bad things happend...\n");
-
- g_gdb_stream_mark_packet_as_free(stream, packet);
-
- break;
-
- }
-
- }
-
- return NULL;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = flux de communication avec GDB à consulter. *
-* *
-* Description : Fournit un paquet prêt à emploi. *
-* *
-* Retour : Paquet prêt à emploi. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GGdbPacket *g_gdb_stream_get_free_packet(GGdbStream *stream)
-{
- GGdbPacket *result; /* Paquet à retourner */
-
- g_mutex_lock(&stream->free_mutex);
-
- if (dl_list_empty(stream->free_packets))
- result = g_gdb_packet_new();
-
- else
- result = g_gdb_packet_pop(&stream->free_packets);
-
- g_mutex_unlock(&stream->free_mutex);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = flux de communication avec GDB à mettre à jour. *
-* packet = paquet à considérer comme disponible. *
-* *
-* Description : Place un paquet en attente d'une future utilisation. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_gdb_stream_mark_packet_as_free(GGdbStream *stream, GGdbPacket *packet)
-{
- g_mutex_lock(&stream->free_mutex);
-
- g_gdb_packet_push(&stream->free_packets, packet);
-
- g_mutex_unlock(&stream->free_mutex);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = flux ouvert en lecture à utiliser. *
-* packet = données à recevoir. *
-* *
-* Description : Réceptionne un paquet d'un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_gdb_stream_read_packet(GGdbStream *stream, GGdbPacket *packet)
-{
- bool result; /* Bilan à renvoyer */
- char tmp[3]; /* Tampon de réception */
- uint8_t checksum; /* Contrôle d'intégrité */
-
- result = stream->recv_byte(stream, tmp);
-
- if (tmp[0] != '$') return false;
-
- tmp[1] = '\0';
-
- while ((result = stream->recv_byte(stream, tmp)))
- {
- if (tmp[0] == '#') break;
- else g_gdb_packet_append(packet, tmp);
- }
-
- if (result)
- {
- result = stream->recv_byte(stream, &tmp[0]);
- result &= stream->recv_byte(stream, &tmp[1]);
-
- tmp[2] = 0;
- checksum = strtol(tmp, NULL, 16);
-
- }
-
- if (result)
- result = g_gdb_packet_verify_checksum(packet, checksum);
-
- if (result)
- result = g_gdb_packet_decode(packet);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = flux ouvert en écriture à mettre à jour. *
-* packet = données à transmettre. *
-* *
-* Description : Envoie un paquet à un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_gdb_stream_send_packet(GGdbStream *stream, GGdbPacket *packet)
-{
- bool result; /* Bilan à renvoyer */
- const char *data; /* Données à envoyer */
- size_t len; /* Quantité de ces données */
- uint8_t checksum; /* Contrôle d'intégrité */
- char tmp[3]; /* Impression du checksum */
-
- result = stream->send_data(stream, "$", 1);
-
- g_gdb_packet_compute_checksum(packet);
- g_gdb_packet_get_data(packet, &data, &len, &checksum);
-
- result &= stream->send_data(stream, data, len);
-
- result = stream->send_data(stream, "#", 1);
-
- snprintf(tmp, 3, "%hhx", checksum);
- result &= stream->send_data(stream, tmp, 2);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : stream = flux de communication avec GDB à consulter. *
-* *
-* Description : Fournit un paquet reçu d'un serveur GDB. *
-* *
-* Retour : Paquet GDB. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GGdbPacket *g_gdb_stream_recv_packet(GGdbStream *stream)
-{
- GGdbPacket *result; /* Paquet à retourner */
-
- g_mutex_lock(&stream->recv_mutex);
-
- if (dl_list_empty(stream->recv_packets))
- g_cond_wait(&stream->recv_cond, &stream->recv_mutex);
-
- result = g_gdb_packet_pop(&stream->recv_packets);
-
- g_mutex_unlock(&stream->recv_mutex);
-
- return result;
-
-}
diff --git a/src/debug/remgdb/stream.h b/src/debug/remgdb/stream.h
deleted file mode 100644
index f93ff60..0000000
--- a/src/debug/remgdb/stream.h
+++ /dev/null
@@ -1,65 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * stream.h - prototypes pour la gestion des connexions aux serveurs GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _DEBUG_REMGDB_STREAM_H
-#define _DEBUG_REMGDB_STREAM_H
-
-
-#include "packet.h"
-
-
-
-#define G_TYPE_GDB_STREAM g_gdb_stream_get_type()
-#define G_GDB_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_gdb_stream_get_type(), GGdbStream))
-#define G_IS_GDB_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_gdb_stream_get_type()))
-#define G_GDB_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_GDB_STREAM, GGdbStreamClass))
-#define G_IS_GDB_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_GDB_STREAM))
-#define G_GDB_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_GDB_STREAM, GGdbStreamClass))
-
-
-/* Flux de communication avec un serveur GDB (instance) */
-typedef struct _GGdbStream GGdbStream;
-
-/* Flux de communication avec un serveur GDB (classe) */
-typedef struct _GGdbStreamClass GGdbStreamClass;
-
-
-
-/* Indique le type défini pour un flux de communication avec un serveur GDB. */
-GType g_gdb_stream_get_type(void);
-
-/* Fournit un paquet prêt à emploi. */
-GGdbPacket *g_gdb_stream_get_free_packet(GGdbStream *);
-
-/* Place un paquet en attente d'une future utilisation. */
-void g_gdb_stream_mark_packet_as_free(GGdbStream *, GGdbPacket *);
-
-/* Envoie un paquet à un serveur GDB. */
-bool g_gdb_stream_send_packet(GGdbStream *, GGdbPacket *);
-
-/* Fournit un paquet reçu d'un serveur GDB. */
-GGdbPacket *g_gdb_stream_recv_packet(GGdbStream *);
-
-
-
-#endif /* _DEBUG_REMGDB_STREAM_H */
diff --git a/src/debug/remgdb/tcp.c b/src/debug/remgdb/tcp.c
deleted file mode 100644
index aa10c54..0000000
--- a/src/debug/remgdb/tcp.c
+++ /dev/null
@@ -1,263 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * tcp.c - gestion des connexions TCP aux serveurs GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "tcp.h"
-
-
-#include <netdb.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-
-
-#include "stream-int.h"
-
-
-#include "../../common/net.h"
-
-
-/* Flux de communication TCP avec un serveur GDB (instance) */
-struct _GGdbTcpClient
-{
- GGdbStream parent; /* A laisser en premier */
-
-};
-
-
-/* Flux de communication TCP avec un serveur GDB (classe) */
-struct _GGdbTcpClientClass
-{
- GGdbStreamClass parent; /* A laisser en premier */
-
-};
-
-
-/* Initialise la classe des flux de communication TCP avec GDB. */
-static void g_gdb_tcp_client_class_init(GGdbTcpClientClass *);
-
-/* Initialise une instance de flux de communication avec GDB. */
-static void g_gdb_tcp_client_init(GGdbTcpClient *);
-
-/* Ouvre une connexion TCP à un serveur GDB. */
-//static int connect_via_tcp(const char *, const char *);
-
-/* Envoie des données à un serveur GDB. */
-static bool g_gdb_tcp_client_send_data(GGdbTcpClient *, const char *, size_t);
-
-/* Réceptionne un octet de donnée d'un serveur GDB. */
-static bool g_gdb_tcp_client_recv_byte(GGdbTcpClient *, char *);
-
-
-
-/* Indique le type défini pour un flux de communication TCP avec un serveur GDB. */
-G_DEFINE_TYPE(GGdbTcpClient, g_gdb_tcp_client, G_TYPE_GDB_STREAM);
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe à initialiser. *
-* *
-* Description : Initialise la classe des flux de communication TCP avec GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_tcp_client_class_init(GGdbTcpClientClass *klass)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : client = instance à initialiser. *
-* *
-* Description : Initialise une instance de flux de communication avec GDB. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_gdb_tcp_client_init(GGdbTcpClient *client)
-{
- GGdbStream *stream; /* Version parente */
-
- stream = G_GDB_STREAM(client);
-
- stream->send_data = (send_gdb_data_fc)g_gdb_tcp_client_send_data;
- stream->recv_byte = (recv_gdb_byte_fc)g_gdb_tcp_client_recv_byte;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : server = nom ou adresse du serveur à contacter. *
-* port = port de connexion. *
-* *
-* Description : Ouvre une connexion TCP à un serveur GDB. *
-* *
-* Retour : Flux ouvert en lecture/écriture ou -1 en cas d'échec. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-#if 0
-static int connect_via_tcp(const char *server, const char *port)
-{
- int result; /* Bilan à retourner */
- struct addrinfo hints; /* Type de connexion souhaitée */
- struct addrinfo *infos; /* Informations disponibles */
- int ret; /* Bilan d'un appel */
- struct addrinfo *iter; /* Boucle de parcours */
- struct sockaddr_in addr; /* Infos de connexion distante */
-
- memset(&hints, 0, sizeof(struct addrinfo));
-
- hints.ai_family = AF_UNSPEC; /* IPv4 ou IPv6 */
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_flags = 0;
- hints.ai_protocol = 0; /* N'importe quel protocole */
-
- ret = getaddrinfo(server, port, &hints, &infos);
- if (ret != 0)
- {
- fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));
- return -1;
- }
-
- for (iter = infos; iter != NULL; iter = iter->ai_next)
- {
- result = socket(iter->ai_family, iter->ai_socktype, iter->ai_protocol);
- if (result == -1) continue;
-
- ret = connect(result, iter->ai_addr, iter->ai_addrlen);
- if (ret == 0) break;
-
- perror("connect");
- close(result);
-
- }
-
- freeaddrinfo(infos);
-
- if (iter == NULL) return -1;
-
- ret = getpeername(result, (struct sockaddr *)&addr, (socklen_t []){ sizeof(struct sockaddr_in) });
- if (ret == -1)
- {
- perror("getpeername");
- close(result);
- return -1;
- }
-
- printf("Connecté à %s:%hd\n", server, ntohs(addr.sin_port));
-
- return result;
-
-}
-#endif
-
-/******************************************************************************
-* *
-* Paramètres : server = nom ou adresse du serveur à contacter. *
-* port = port de connexion. *
-* *
-* Description : Crée une nouvelle connexion TCP à un serveur GDB. *
-* *
-* Retour : Adresse de la structure mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GGdbStream *g_gdb_tcp_client_new(const char *server, const char *port)
-{
- GGdbTcpClient *result; /* Structure à retourner */
- int sock; /* Flux ouvert à construire */
-
- sock = connect_via_tcp(server, port, NULL);
- if (sock == -1) return NULL;
-
- result = g_object_new(G_TYPE_GDB_TCP_CLIENT, NULL);
-
- G_GDB_STREAM(result)->fd = sock;
-
- if (!g_gdb_stream_listen(G_GDB_STREAM(result)))
- goto ggtcn_error;
-
- return G_GDB_STREAM(result);
-
- ggtcn_error:
-
- return NULL;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : client = flux ouvert en écriture à utiliser. *
-* data = données à envoyer. *
-* len = quantité de ces données. *
-* *
-* Description : Envoie des données à un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_gdb_tcp_client_send_data(GGdbTcpClient *client, const char *data, size_t len)
-{
- return (send(G_GDB_STREAM(client)->fd, data, len, 0) == len);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : client = flux ouvert en lecture à utiliser. *
-* data = donnée à recevoir. *
-* *
-* Description : Réceptionne un octet de donnée d'un serveur GDB. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_gdb_tcp_client_recv_byte(GGdbTcpClient *client, char *data)
-{
- return (recv(G_GDB_STREAM(client)->fd, data, 1, 0) == 1);
-
-}
diff --git a/src/debug/remgdb/tcp.h b/src/debug/remgdb/tcp.h
deleted file mode 100644
index 7d40f16..0000000
--- a/src/debug/remgdb/tcp.h
+++ /dev/null
@@ -1,56 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * tcp.h - prototypes pour la gestion des connexions TCP aux serveurs GDB.
- *
- * 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _DEBUG_REMGDB_TCP_H
-#define _DEBUG_REMGDB_TCP_H
-
-
-#include "stream.h"
-
-
-
-#define G_TYPE_GDB_TCP_CLIENT g_gdb_tcp_client_get_type()
-#define G_GDB_TCP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_gdb_tcp_client_get_type(), GGdbTcpClient))
-#define G_IS_GDB_TCP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_gdb_tcp_client_get_type()))
-#define G_GDB_TCP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_GDB_TCP_CLIENT, GGdbTcpClientClass))
-#define G_IS_GDB_TCP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_GDB_TCP_CLIENT))
-#define G_GDB_TCP_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_GDB_TCP_CLIENT, GGdbTcpClientClass))
-
-
-/* Flux de communication TCP avec un serveur GDB (instance) */
-typedef struct _GGdbTcpClient GGdbTcpClient;
-
-/* Flux de communication TCP avec un serveur GDB (classe) */
-typedef struct _GGdbTcpClientClass GGdbTcpClientClass;
-
-
-
-/* Indique le type défini pour un flux de communication TCP avec un serveur GDB. */
-GType g_gdb_tcp_client_get_type(void);
-
-/* Crée une nouvelle connexion TCP à un serveur GDB. */
-GGdbStream *g_gdb_tcp_client_new(const char *, const char *);
-
-
-
-#endif /* _DEBUG_REMGDB_TCP_H */