diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/binary.c | 3 | ||||
-rw-r--r-- | src/analysis/db/certs.c | 3 | ||||
-rw-r--r-- | src/analysis/db/client.c | 2 | ||||
-rw-r--r-- | src/analysis/db/server.c | 2 | ||||
-rw-r--r-- | src/analysis/disass/area.c | 2 | ||||
-rw-r--r-- | src/analysis/disass/disassembler.c | 1 | ||||
-rw-r--r-- | src/analysis/disass/output.c | 2 | ||||
-rw-r--r-- | src/analysis/disass/routines.c | 2 | ||||
-rw-r--r-- | src/analysis/loading.c | 2 | ||||
-rw-r--r-- | src/analysis/project.c | 2 | ||||
-rwxr-xr-x | src/core/Makefile.am | 1 | ||||
-rw-r--r-- | src/core/logs.c | 188 | ||||
-rw-r--r-- | src/core/logs.h | 60 | ||||
-rw-r--r-- | src/debug/debugger.c | 2 | ||||
-rw-r--r-- | src/debug/gdbrsp/stream.c | 2 | ||||
-rw-r--r-- | src/debug/jdwp/debugger.c | 2 | ||||
-rw-r--r-- | src/debug/jdwp/tcp.c | 2 | ||||
-rw-r--r-- | src/format/executable.c | 2 | ||||
-rw-r--r-- | src/format/format.c | 1 | ||||
-rw-r--r-- | src/gui/core/theme.c | 2 | ||||
-rw-r--r-- | src/gui/dialogs/identity.c | 2 | ||||
-rw-r--r-- | src/gui/menus/debug.c | 1 | ||||
-rw-r--r-- | src/gui/panels/log.c | 91 | ||||
-rw-r--r-- | src/gui/panels/log.h | 19 | ||||
-rw-r--r-- | src/main.c | 24 |
25 files changed, 293 insertions, 127 deletions
diff --git a/src/analysis/binary.c b/src/analysis/binary.c index 5b2caf0..2769291 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -46,14 +46,15 @@ #include "../core/collections.h" #include "../core/formats.h" #include "../core/global.h" +#include "../core/logs.h" #include "../core/params.h" #include "../core/processors.h" //#include "../glibext/chrysamarshal.h" +#include "../glibext/gloadedpanel.h" #include "../gtkext/easygtk.h" #include "../gtkext/gtkblockdisplay.h" #include "../gtkext/gtkdisplaypanel.h" #include "../gtkext/gtkgraphdisplay.h" -#include "../gui/panels/log.h" diff --git a/src/analysis/db/certs.c b/src/analysis/db/certs.c index c6b49a8..083ef7d 100644 --- a/src/analysis/db/certs.c +++ b/src/analysis/db/certs.c @@ -24,6 +24,7 @@ #include "certs.h" +#include <glib.h> #include <malloc.h> #include <stdio.h> #include <openssl/err.h> @@ -37,7 +38,7 @@ #include <i18n.h> -#include "../../gui/panels/log.h" +#include "../../core/logs.h" diff --git a/src/analysis/db/client.c b/src/analysis/db/client.c index 769eab7..aff235c 100644 --- a/src/analysis/db/client.c +++ b/src/analysis/db/client.c @@ -41,7 +41,7 @@ #include "misc/rlestr.h" #include "../../common/io.h" #include "../../common/xdg.h" -#include "../../gui/panels/log.h" +#include "../../core/logs.h" diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c index 6155b6d..219b8b6 100644 --- a/src/analysis/db/server.c +++ b/src/analysis/db/server.c @@ -41,8 +41,8 @@ #include "misc/rlestr.h" #include "../../common/io.h" #include "../../common/xdg.h" +#include "../../core/logs.h" #include "../../core/params.h" -#include "../../gui/panels/log.h" diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c index f97a5c9..f7acb72 100644 --- a/src/analysis/disass/area.c +++ b/src/analysis/disass/area.c @@ -38,9 +38,9 @@ #include "../../common/bits.h" #include "../../common/sort.h" #include "../../core/global.h" +#include "../../core/logs.h" #include "../../format/format.h" #include "../../glibext/delayed-int.h" -#include "../../gui/panels/log.h" diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c index 7a066fc..bb69c0e 100644 --- a/src/analysis/disass/disassembler.c +++ b/src/analysis/disass/disassembler.c @@ -41,7 +41,6 @@ #include "../../format/format.h" #include "../../glibext/delayed-int.h" #include "../../glibext/generators/prologue.h" -#include "../../gui/panels/log.h" #include "../../plugins/pglist.h" diff --git a/src/analysis/disass/output.c b/src/analysis/disass/output.c index f9656cf..3cc282a 100644 --- a/src/analysis/disass/output.c +++ b/src/analysis/disass/output.c @@ -30,9 +30,9 @@ #include <i18n.h> +#include "../../core/logs.h" #include "../../format/format.h" #include "../../glibext/generators/rborder.h" -#include "../../gui/panels/log.h" diff --git a/src/analysis/disass/routines.c b/src/analysis/disass/routines.c index 63a32cf..bc4247c 100644 --- a/src/analysis/disass/routines.c +++ b/src/analysis/disass/routines.c @@ -28,8 +28,8 @@ #include "limit.h" #include "loop.h" #include "rank.h" +#include "../../core/logs.h" #include "../../glibext/delayed-int.h" -#include "../../gui/panels/log.h" diff --git a/src/analysis/loading.c b/src/analysis/loading.c index f8dc2c3..38d130e 100644 --- a/src/analysis/loading.c +++ b/src/analysis/loading.c @@ -26,9 +26,9 @@ #include "../core/formats.h" #include "../core/global.h" +#include "../core/logs.h" #include "../glibext/delayed-int.h" #include "../glibext/signal.h" -#include "../gui/panels/log.h" diff --git a/src/analysis/project.c b/src/analysis/project.c index 31376de..a600788 100644 --- a/src/analysis/project.c +++ b/src/analysis/project.c @@ -37,10 +37,10 @@ #include "loading.h" #include "../common/xml.h" #include "../core/global.h" +#include "../core/logs.h" #include "../core/params.h" #include "../glibext/delayed-int.h" #include "../gui/core/panels.h" -#include "../gui/panels/log.h" #include "../gui/panels/panel.h" #include "../format/format.h" diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 26d43a5..c7700a6 100755 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -6,6 +6,7 @@ libcore_la_SOURCES = \ core.h core.c \ formats.h formats.c \ global.h global.c \ + logs.h logs.c \ params.h params.c \ processors.h processors.c diff --git a/src/core/logs.c b/src/core/logs.c new file mode 100644 index 0000000..f92e581 --- /dev/null +++ b/src/core/logs.c @@ -0,0 +1,188 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * logs.c - diffusion de messages d'alerte ou informatifs + * + * Copyright (C) 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 "logs.h" + + +#include "../gui/core/panels.h" +#include "../gui/panels/log.h" + + + +/* Conserve le niveau de filtre des messages */ +static LogMessageType _verbosity = LMT_COUNT; + + +/* Affiche un message dans le terminal courant. */ +static void print_message_without_gui(LogMessageType, const char *); + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Fournit la verbosité des messages système. * +* * +* Retour : Plus faible niveau des types de message affichés. * +* * +* Remarques : - * +* * +******************************************************************************/ + +LogMessageType get_log_verbosity(void) +{ + return _verbosity; + +} + + +/****************************************************************************** +* * +* Paramètres : level = plus faible niveau des types de message affichés. * +* * +* Description : Définit la verbosité des messages système. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void set_log_verbosity(LogMessageType level) +{ + _verbosity = level; + +} + + +/****************************************************************************** +* * +* Paramètres : type = espèce du message à ajouter. * +* msg = message à faire apparaître à l'écran. * +* * +* Description : Affiche un message dans le journal des messages système. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void log_simple_message(LogMessageType type, const char *msg) +{ + GPanelItem *item; /* Eventuel affichage présent */ + + if (type >= _verbosity) + { + item = get_panel_item_by_name(PANEL_LOG_ID); + + if (item != NULL) + g_log_panel_add_message(G_LOG_PANEL(item), type, msg); + + else + print_message_without_gui(type, msg); + + } + +} + + +/****************************************************************************** +* * +* Paramètres : type = espèce du message à ajouter. * +* fmt = format du message à faire apparaître à l'écran. * +* ... = éventuels arguments venant compléter le message. * +* * +* Description : Affiche un message dans le journal des messages système. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void log_variadic_message(LogMessageType type, const char *fmt, ...) +{ + size_t len; /* Taille tampon disponible */ + char *buffer; /* Tampon du msg reconstitué */ + int ret; /* Bilan d'une impression */ + char *ptr; /* Nouvelle allocation */ + va_list ap; /* Liste d'arguments variable */ + + len = VARIADIC_LOG_BUFSIZE; + buffer = calloc(len, sizeof(char)); + + while (buffer != NULL) + { + va_start(ap, fmt); + ret = vsnprintf(buffer, len, fmt, ap); + va_end(ap); + + if (ret >= 0 && ret < len) break; + + else + { + if (ret > -1) len += 1; /* glibc 2.1 */ + else len *= 2; /* glibc 2.0 */ + + if ((ptr = realloc(buffer, len)) == NULL) + { + free(buffer); + buffer = NULL; + } + else buffer = ptr; + + } + + } + + if (buffer != NULL) + { + log_simple_message(type, buffer); + + free(buffer); + + } + +} + + +/****************************************************************************** +* * +* Paramètres : type = espèce du message à ajouter. * +* msg = message à faire apparaître à l'écran. * +* * +* Description : Affiche un message dans le terminal courant. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void print_message_without_gui(LogMessageType type, const char *msg) +{ + printf("!! MSG :: %s\n", msg); + +} diff --git a/src/core/logs.h b/src/core/logs.h new file mode 100644 index 0000000..2199cc1 --- /dev/null +++ b/src/core/logs.h @@ -0,0 +1,60 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * logs.h - prototypes pour la diffusion de messages d'alerte ou informatifs + * + * Copyright (C) 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 _CORE_LOGS_H +#define _CORE_LOGS_H + + +#include <i18n.h> + + + +/* Type de messages disponibles */ +typedef enum _LogMessageType +{ + LMT_INFO, /* Information sur l'exécution */ + LMT_PROCESS, /* Début de tâche quelconque */ + LMT_WARNING, /* Avertissment à remonter */ + LMT_ERROR, /* Erreur de traitement */ + LMT_BAD_BINARY, /* Binaire malformé */ + + LMT_COUNT + +} LogMessageType; + + +/* Fournit la verbosité des messages système. */ +LogMessageType get_log_verbosity(void); + +/* Définit la verbosité des messages système. */ +void set_log_verbosity(LogMessageType); + +/* Affiche un message dans le journal des messages système. */ +void log_simple_message(LogMessageType, const char *); + +/* Affiche un message dans le journal des messages système. */ +void log_variadic_message(LogMessageType, const char *, ...); + + + +#endif /* _CORE_LOGS_H */ diff --git a/src/debug/debugger.c b/src/debug/debugger.c index 85ca241..4635d0e 100644 --- a/src/debug/debugger.c +++ b/src/debug/debugger.c @@ -35,8 +35,8 @@ #include "debugger-int.h" #include "../common/sort.h" +#include "../core/logs.h" #include "../glibext/chrysamarshal.h" -#include "../gui/panels/log.h" #include "../plugins/pglist.h" diff --git a/src/debug/gdbrsp/stream.c b/src/debug/gdbrsp/stream.c index 979ed9b..d75cff4 100644 --- a/src/debug/gdbrsp/stream.c +++ b/src/debug/gdbrsp/stream.c @@ -36,7 +36,7 @@ #include "stream-int.h" #include "utils.h" #include "../../common/dllist.h" -#include "../../gui/panels/log.h" +#include "../../core/logs.h" diff --git a/src/debug/jdwp/debugger.c b/src/debug/jdwp/debugger.c index efe00d0..b73c8a3 100644 --- a/src/debug/jdwp/debugger.c +++ b/src/debug/jdwp/debugger.c @@ -35,7 +35,7 @@ #include "tcp.h" #include "../debugger-int.h" #include "../stream.h" -#include "../../gui/panels/log.h" +#include "../../core/logs.h" diff --git a/src/debug/jdwp/tcp.c b/src/debug/jdwp/tcp.c index 92dae0a..5059419 100644 --- a/src/debug/jdwp/tcp.c +++ b/src/debug/jdwp/tcp.c @@ -40,7 +40,7 @@ #include "sets/list.h" #include "../stream-int.h" #include "../../common/net.h" -#include "../../gui/panels/log.h" +#include "../../core/logs.h" diff --git a/src/format/executable.c b/src/format/executable.c index 6afe8b5..1f46721 100644 --- a/src/format/executable.c +++ b/src/format/executable.c @@ -32,7 +32,7 @@ #include "executable-int.h" #include "format.h" -#include "../gui/panels/log.h" +#include "../core/logs.h" diff --git a/src/format/format.c b/src/format/format.c index ec8e5fb..1ab7efa 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -34,7 +34,6 @@ #include "preload.h" #include "../arch/processor.h" #include "../common/sort.h" -#include "../gui/panels/log.h" #include "../plugins/pglist.h" diff --git a/src/gui/core/theme.c b/src/gui/core/theme.c index 895a1a5..9c3c63b 100644 --- a/src/gui/core/theme.c +++ b/src/gui/core/theme.c @@ -38,9 +38,9 @@ #include <i18n.h> -#include "../panels/log.h" #include "../../common/extstr.h" #include "../../common/xdg.h" +#include "../../core/logs.h" #include "../../core/params.h" diff --git a/src/gui/dialogs/identity.c b/src/gui/dialogs/identity.c index 0f6a111..3df2e91 100644 --- a/src/gui/dialogs/identity.c +++ b/src/gui/dialogs/identity.c @@ -30,8 +30,8 @@ #include <i18n.h> -#include "../panels/log.h" #include "../../analysis/db/keymgn.h" +#include "../../core/logs.h" diff --git a/src/gui/menus/debug.c b/src/gui/menus/debug.c index cb270ff..3e785b5 100644 --- a/src/gui/menus/debug.c +++ b/src/gui/menus/debug.c @@ -32,7 +32,6 @@ #include "../../debug/debugger.h" /* REMME ! */ #include "../../gtkext/easygtk.h" -#include "../../gui/panels/log.h" diff --git a/src/gui/panels/log.c b/src/gui/panels/log.c index 2fd8f4f..e547a03 100644 --- a/src/gui/panels/log.c +++ b/src/gui/panels/log.c @@ -88,9 +88,6 @@ static void g_log_panel_dispose(GLogPanel *); static void g_log_panel_finalize(GLogPanel *); /* Affiche un message dans le journal des messages système. */ -static void _log_simple_message(LogMessageType, char *); - -/* Affiche un message dans le journal des messages système. */ static gboolean log_message(log_data *); @@ -270,28 +267,9 @@ GPanelItem *g_log_panel_new(void) /****************************************************************************** * * -* Paramètres : type = espèce du message à ajouter. * -* msg = message à faire apparaître à l'écran. * -* * -* Description : Affiche un message dans le journal des messages système. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void log_simple_message(LogMessageType type, const char *msg) -{ - _log_simple_message(type, strdup(msg)); - -} - - -/****************************************************************************** -* * -* Paramètres : type = espèce du message à ajouter. * -* msg = message à faire apparaître à l'écran. * +* Paramètres : panel = instance d'objet GLib à traiter. * +* type = espèce du message à ajouter. * +* msg = message à faire apparaître à l'écran. * * * * Description : Affiche un message dans le journal des messages système. * * * @@ -301,18 +279,15 @@ void log_simple_message(LogMessageType type, const char *msg) * * ******************************************************************************/ -static void _log_simple_message(LogMessageType type, char *msg) +void g_log_panel_add_message(GLogPanel *panel, LogMessageType type, const char *msg) { - GPanelItem *item; /* Intermédiaire mis en place */ log_data *data; /* Paramètres à joindre */ - item = get_panel_item_by_name(PANEL_LOG_ID); - data = (log_data *)calloc(1, sizeof(log_data)); - data->item = item; + data->item = G_PANEL_ITEM(panel); data->type = type; - data->msg = msg; + data->msg = strdup(msg); g_object_ref(G_OBJECT(data->item)); @@ -323,60 +298,6 @@ static void _log_simple_message(LogMessageType type, char *msg) /****************************************************************************** * * -* Paramètres : type = espèce du message à ajouter. * -* fmt = format du message à faire apparaître à l'écran. * -* ... = éventuels arguments venant compléter le message. * -* * -* Description : Affiche un message dans le journal des messages système. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void log_variadic_message(LogMessageType type, const char *fmt, ...) -{ - size_t len; /* Taille tampon disponible */ - char *buffer; /* Tampon du msg reconstitué */ - int ret; /* Bilan d'une impression */ - char *ptr; /* Nouvelle allocation */ - va_list ap; /* Liste d'arguments variable */ - - len = VARIADIC_LOG_BUFSIZE; - buffer = calloc(len, sizeof(char)); - - while (buffer != NULL) - { - va_start(ap, fmt); - ret = vsnprintf(buffer, len, fmt, ap); - va_end(ap); - - if (ret >= 0 && ret < len) break; - - else - { - if (ret > -1) len += 1; /* glibc 2.1 */ - else len *= 2; /* glibc 2.0 */ - - if ((ptr = realloc(buffer, len)) == NULL) - { - free(buffer); - buffer = NULL; - } - else buffer = ptr; - - } - - } - - _log_simple_message(type, buffer); - -} - - -/****************************************************************************** -* * * Paramètres : data = paramètres destinés à l'affichage d'un message. * * * * Description : Affiche un message dans le journal des messages système. * diff --git a/src/gui/panels/log.h b/src/gui/panels/log.h index e37348a..dab8581 100644 --- a/src/gui/panels/log.h +++ b/src/gui/panels/log.h @@ -30,6 +30,7 @@ #include "panel.h" +#include "../../core/logs.h" @@ -55,19 +56,6 @@ typedef struct _GLogPanel GLogPanel; typedef struct _GLogPanelClass GLogPanelClass; -/* Type de messages disponibles */ -typedef enum _LogMessageType -{ - LMT_INFO, /* Information sur l'exécution */ - LMT_BAD_BINARY, /* Binaire malformé */ - LMT_PROCESS, /* Début de tâche quelconque */ - LMT_ERROR, /* Erreur de traitement */ - LMT_WARNING, /* Avertissment à remonter */ - - LMT_COUNT - -} LogMessageType; - /* Indique le type définit pour un panneau d'affichage de messages. */ GType g_log_panel_get_type(void); @@ -76,10 +64,7 @@ GType g_log_panel_get_type(void); GPanelItem *g_log_panel_new(void); /* Affiche un message dans le journal des messages système. */ -void log_simple_message(LogMessageType, const char *); - -/* Affiche un message dans le journal des messages système. */ -void log_variadic_message(LogMessageType, const char *, ...); +void g_log_panel_add_message(GLogPanel *, LogMessageType, const char *); @@ -36,6 +36,7 @@ #include "common/xdg.h" #include "core/core.h" #include "core/global.h" +#include "core/logs.h" #include "core/params.h" #include "glibext/delayed.h" #include "gui/editor.h" @@ -89,7 +90,8 @@ static void show_chrysalide_help(const char *name) printf("\n"); - printf("\t--batch\t\tExit after processing files.\n"); + printf("\t--verbosity=level\tSet the log level (0 for all messages, %u for none).\n", LMT_COUNT); + printf("\t--batch\t\t\tExit after processing files.\n"); printf("\n"); @@ -145,6 +147,7 @@ int main(int argc, char **argv) int result; /* Bilan de l'exécution */ bool show_help; /* Affichage de l'aide ? */ bool show_version; /* Affichage de la version ? */ + LogMessageType verbosity; /* Niveau de filtre de message */ bool batch_mode; /* Exécution sans GUI ? */ int index; /* Indice d'argument */ int ret; /* Bilan d'un appel */ @@ -160,10 +163,11 @@ int main(int argc, char **argv) bool welcome; /* Affichage de la bienvenue ? */ static struct option long_options[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, 'v' }, - { "batch", no_argument, NULL, 'b' }, - { NULL, 0, NULL, 0 } + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'v' }, + { "verbosity", required_argument, NULL, 'V' }, + { "batch", no_argument, NULL, 'b' }, + { NULL, 0, NULL, 0 } }; result = EXIT_FAILURE; @@ -180,11 +184,12 @@ int main(int argc, char **argv) show_help = false; show_version = false; + verbosity = LMT_INFO; batch_mode = false; while (true) { - ret = getopt_long(argc, argv, "hvb", long_options, &index); + ret = getopt_long(argc, argv, "hvV:b", long_options, &index); if (ret == -1) break; switch (ret) @@ -197,6 +202,10 @@ int main(int argc, char **argv) show_version = true; break; + case 'V': + verbosity = strtoul(optarg, NULL, 10); + break; + case 'b': batch_mode = true; break; @@ -235,6 +244,9 @@ int main(int argc, char **argv) gtk_init(&argc, &argv); /* Initialisation du programme */ + + set_log_verbosity(verbosity); + if (!load_all_basic_components()) return EXIT_FAILURE; |