diff options
Diffstat (limited to 'plugins/dwarf/d_dwarf.c')
-rw-r--r-- | plugins/dwarf/d_dwarf.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/plugins/dwarf/d_dwarf.c b/plugins/dwarf/d_dwarf.c new file mode 100644 index 0000000..67ab955 --- /dev/null +++ b/plugins/dwarf/d_dwarf.c @@ -0,0 +1,114 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * d_dwarf.c - support du format DWARF + * + * Copyright (C) 2008-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 "d_dwarf.h" + + +#include <malloc.h> + + +#include "abbrev.h" +#include "dwarf-int.h" +#include "info.h" + + + + + + + +/****************************************************************************** +* * +* Paramètres : content = contenu binaire à parcourir. * +* length = taille du contenu en question. * +* e_format = gestionnaire global (partie exécutable). * +* * +* Description : Prend en charge un nouveau DWARF. * +* * +* Retour : Adresse de la structure mise en place ou NULL en cas d'échec.* +* * +* Remarques : - * +* * +******************************************************************************/ + +dwarf_format *load_dwarf(const uint8_t *content, off_t length, exe_format *e_format) +{ + dwarf_format *result; /* Structure à retourner */ + bool test; /* Bilan d'une initialisation */ + + result = (dwarf_format *)calloc(1, sizeof(dwarf_format)); + + DBG_FORMAT(result)->content = content; + DBG_FORMAT(result)->length = length; + + DBG_FORMAT(result)->e_format = e_format; + + result->format = DWF_32_BITS; + + test = load_dwarf_abbreviations(result); + + test = load_dwarf_information(result); + + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : format = informations chargées à consulter. * +* comments = liste des commentaires à insérer. [OUT] * +* offsets = liste des indices des commentaires. [OUT] * +* * +* Description : Récupère tous les commentaires à insérer dans le code. * +* * +* Retour : Nombre d'éléments mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +size_t get_dwarf_comments(const dwarf_format *format, const char ***comments, uint64_t **offsets) +{ + size_t result; /* Quantité à retourner */ + size_t i; /* Boucle de parcours */ + + result = format->dbg_fc_count; + + if (result > 0) + { + *comments = (char **)calloc(result, sizeof(char *)); + *offsets = (uint64_t *)calloc(result, sizeof(uint64_t)); + + for (i = 0; i < result; i++) + { + (*comments)[i] = format->dbg_functions[i]->prototype; + (*offsets)[i] = format->dbg_functions[i]->low_pc; + } + + } + + return result; + +} |