/* OpenIDA - Outil d'analyse de fichiers binaires * demangler.c - décodage des noms d'éléments * * Copyright (C) 2008 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 . */ #include "demangler.h" #include #include "demangler-int.h" #include "itanium.h" static name_demangler **demanglers = NULL; static size_t demanglers_count = 0; /* Enregistre un nouveau décodeur de noms. */ void register_new_demangler(name_demangler *); /****************************************************************************** * * * Paramètres : - * * * * Description : Procède au chargement des différents décodeurs de noms. * * * * Retour : true pour indiquer un chargement réussi, false sinon. * * * * Remarques : - * * * ******************************************************************************/ bool init_all_demanglers(void) { register_new_demangler(create_itanium_demangler()); return true; } /****************************************************************************** * * * Paramètres : demangler = décodeur opérationnel. * * * * Description : Enregistre un nouveau décodeur de noms. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void register_new_demangler(name_demangler *demangler) { demanglers = (name_demangler **)realloc(demanglers, ++demanglers_count * sizeof(name_demangler *)); demanglers[demanglers_count - 1] = demangler; } /****************************************************************************** * * * Paramètres : type = identifiant du décodeur visé. * * * * Description : Fournit la référence correspondant à un décodeur donné. * * * * Retour : Adresse du décodeur trouvé ou NULL. * * * * Remarques : - * * * ******************************************************************************/ name_demangler *get_demangler_by_type(DemanglerType type) { name_demangler *result; /* Adresse à retourner */ result = demanglers[0]; return result; } /****************************************************************************** * * * Paramètres : demangler = décodeur à utiliser. * * name = chaîne de caractères à décoder. * * * * Description : Tente de décoder une chaîne de caractères donnée. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ GBinRoutine *try_to_demangle_routine(name_demangler *demangler, const char *name) { GBinRoutine *result; /* Construction à remonter */ result = NULL; if (demangler->can_be_demangled(demangler, name)) result = demangler->demangle_routine(demangler, name); return result; }