diff options
Diffstat (limited to 'src/format/elf/section.h')
-rw-r--r-- | src/format/elf/section.h | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/format/elf/section.h b/src/format/elf/section.h index b84fe76..6bc3a75 100644 --- a/src/format/elf/section.h +++ b/src/format/elf/section.h @@ -25,15 +25,47 @@ #define _FORMAT_ELF_SECTION_H +#include <elf.h> + + #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. */ -bool find_elf_section(const elf_format *, const char *, off_t *, off_t *, uint64_t *); +/* 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 *); |