/* 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 . */ #include "core.h" #include #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); } }