/* OpenIDA - Outil d'analyse de fichiers binaires * section.h - prototypes pour la gestion des sections d'un ELF * * 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 . */ #ifndef _FORMAT_ELF_SECTION_H #define _FORMAT_ELF_SECTION_H #include #include "e_elf.h" /* En-tête de section ELF */ typedef union _Elf_Shdr { Elf32_Shdr section32; /* Version 32 bits */ Elf64_Shdr section64; /* Version 64 bits */ } Elf_Shdr; #define ELF_SIZEOF_SHDR(fmt) (fmt->is_32b ? sizeof(Elf32_Shdr) : sizeof(Elf64_Shdr)) #define ELF_SHDR(fmt, shdr, fld) (fmt->is_32b ? (shdr)->section32.fld : (shdr)->section64.fld) /* Charge en mémoire la liste humaine des sections. */ bool read_elf_section_names(elf_format *); /* Recherche une section donnée au sein de binaire par nom. */ bool find_elf_section_by_name(const elf_format *, const char *, Elf_Shdr *); /* Recherche une section donnée au sein de binaire par type. */ bool find_elf_section_by_type(const elf_format *, uint16_t, Elf_Shdr **, size_t *); /* Recherche une section donnée au sein de binaire par indice. */ bool find_elf_section_by_index(const elf_format *, uint16_t, Elf_Shdr *); /* Fournit les adresses et taille contenues dans une section. */ void get_elf_section_content(const elf_format *, const Elf_Shdr *, off_t *, off_t *, uint64_t *); /* Recherche une zone donnée au sein de binaire par nom. */ bool find_elf_section_content_by_name(const elf_format *, const char *, off_t *, off_t *, uint64_t *); /* Recherche une zone donnée au sein de binaire par indice. */ bool find_elf_section_content_by_index(const elf_format *, uint16_t, off_t *, off_t *, uint64_t *); #endif /* _FORMAT_ELF_SECTION_H */