1#include <stdlib.h>
2#include <common.h>
3#include <debug.h>
4
5void map_over_sections(Elf *elf,
6                       section_match_fn_t match,
7                       void *user_data)
8{
9    Elf_Scn* section = NULL;
10    while ((section = elf_nextscn(elf, section)) != NULL) {
11        if (match(elf, section, user_data))
12            return;
13    }
14}
15
16void map_over_segments(Elf *elf,
17                       segment_match_fn_t match,
18                       void *user_data)
19{
20    Elf32_Ehdr *ehdr;
21    Elf32_Phdr *phdr;
22    int index;
23
24    ehdr = elf32_getehdr(elf);
25    phdr = elf32_getphdr(elf);
26
27    INFO("Scanning over %d program segments...\n",
28         ehdr->e_phnum);
29
30    for (index = ehdr->e_phnum; index; index--) {
31        if (match(elf, phdr++, user_data))
32            return;
33    }
34}
35
36