/* Chrysalide - Outil d'analyse de fichiers binaires * portion.h - prototypes pour la représentation graphique de portions de binaire * * Copyright (C) 2013-2024 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 . */ #ifndef _GLIBEXT_PORTION_H #define _GLIBEXT_PORTION_H #include #include "helpers.h" #include "../arch/vmpa.h" /* ------------------------------- PORTION DE BINAIRE ------------------------------- */ #define G_TYPE_BINARY_PORTION (g_binary_portion_get_type()) DECLARE_GTYPE(GBinaryPortion, g_binary_portion, G, BINARY_PORTION); /* Crée une description de partie de code vierge. */ GBinaryPortion *g_binary_portion_new(const vmpa2t *, phys_t); /* Etablit la comparaison ascendante entre deux portions. */ int g_binary_portion_compare(const GBinaryPortion **, const GBinaryPortion **); /* Attribue une description humaine à une partie de code. */ void g_binary_portion_set_desc(GBinaryPortion *, const char *); /* Fournit la description attribuée à une partie de code. */ const char *g_binary_portion_get_desc(const GBinaryPortion *); /* Fournit l'emplacement d'une partie de code binaire. */ const mrange_t *g_binary_portion_get_range(const GBinaryPortion *); /* Assure qu'une portion ne dépasse pas une position donnée. */ bool g_binary_portion_limit_range(GBinaryPortion *, phys_t); /* Définit la nature de la portion en terme d'originalité. */ void g_binary_portion_mark_as_continued(GBinaryPortion *, bool); /* Indique la nature de la portion en terme d'originalité. */ bool g_binary_portion_is_continuation(const GBinaryPortion *); /* Droits d'accès à une portion */ typedef enum _PortionAccessRights { PAC_NONE = (0 << 0), /* Aucun */ PAC_READ = (1 << 0), /* Lecture */ PAC_WRITE = (1 << 1), /* Ecriture */ PAC_EXEC = (1 << 2) /* Exécution */ } PortionAccessRights; #define PAC_ALL ((PortionAccessRights)(PAC_READ | PAC_WRITE | PAC_EXEC)) /* Définit les droits associés à une partie de code. */ void g_binary_portion_set_rights(GBinaryPortion *, PortionAccessRights); /* Fournit les droits associés à une partie de code. */ PortionAccessRights g_binary_portion_get_rights(const GBinaryPortion *); /* Procède à l'inclusion d'une portion dans une autre. */ bool g_binary_portion_include(GBinaryPortion *, GBinaryPortion *); /* Sens des visites */ typedef enum _BinaryPortionVisit { BPV_ENTER, /* Arrivée sur une branche */ BPV_SHOW, /* Visite d'une feuille */ BPV_EXIT /* Départ d'une branche */ } BinaryPortionVisit; /* Fonction appelée à chaque visite de portion.*/ typedef bool (* visit_portion_fc) (GBinaryPortion *, GBinaryPortion *, BinaryPortionVisit, void *); /* Parcourt un ensemble de portions binaires. */ bool g_binary_portion_visit(GBinaryPortion *, visit_portion_fc, void *); /* ------------------------ PARCOURS D'ENSEMBLES DE PORTIONS ------------------------ */ /* Recherche la portion présente à une adresse donnée. */ GBinaryPortion *g_binary_portion_find_at_addr(GBinaryPortion *, const vmpa2t *); /* Fournit l'emplacement correspondant à une position physique. */ bool g_binary_portion_translate_offset_into_vmpa(const GBinaryPortion *, phys_t, vmpa2t *); /* Fournit l'emplacement correspondant à une adresse virtuelle. */ bool g_binary_portion_translate_address_into_vmpa(const GBinaryPortion *, virt_t, vmpa2t *); #endif /* _GLIBEXT_BINPORTION_H */