summaryrefslogtreecommitdiff
path: root/plugins/dwarf/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/dwarf/core.c')
-rw-r--r--plugins/dwarf/core.c145
1 files changed, 145 insertions, 0 deletions
diff --git a/plugins/dwarf/core.c b/plugins/dwarf/core.c
new file mode 100644
index 0000000..fa7e0ec
--- /dev/null
+++ b/plugins/dwarf/core.c
@@ -0,0 +1,145 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * core.c - intégration du support du format DWARF
+ *
+ * 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "core.h"
+
+
+#include <plugins/plugin-def.h>
+
+
+#include "format.h"
+
+
+
+DEFINE_CHRYSALIDE_PLUGIN("dwarf", "Add support for the DWARF format", "0.1.0",
+ RL("PyChrysalide"), AL(PGA_PLUGIN_INIT, PGA_FORMAT_ATTACH_DEBUG));
+
+
+
+/* Conservation d'une référence au greffon pour les messages */
+static GPluginModule *_this = NULL;
+
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = greffon à manipuler. *
+* *
+* Description : Prend acte du chargement du greffon. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
+{
+ bool result; /* Bilan à retourner */
+
+ _this = plugin;
+
+ result = true;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = greffon à manipuler. *
+* action = type d'action attendue. *
+* format = format de binaire à manipuler pendant l'opération. *
+* *
+* Description : Procède au rattachement d'éventuelles infos de débogage. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+G_MODULE_EXPORT void chrysalide_plugin_attach_debug(const GPluginModule *plugin, PluginAction action, GExeFormat *format)
+{
+ GDbgFormat *info;
+
+ info = check_dwarf_format(format);
+
+ if (info != NULL)
+ g_exe_format_add_debug_info(format, info);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : msg = message à faire apparaître à l'écran. *
+* *
+* Description : Présente dans le journal un message simple. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void log_dwarf_simple_message(LogMessageType type, const char *msg)
+{
+ g_plugin_module_log_simple_message(_this, 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 : Présente dans le journal un message complexe. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void log_dwarf_variadic_message(LogMessageType type, const char *fmt, ...)
+{
+ va_list ap; /* Liste d'arguments variable */
+ char *buffer; /* Tampon du msg reconstitué */
+
+ va_start(ap, fmt);
+ buffer = build_variadic_message(fmt, ap);
+ va_end(ap);
+
+ if (buffer != NULL)
+ {
+ g_plugin_module_log_simple_message(_this, type, buffer);
+
+ free(buffer);
+
+ }
+
+}