| #include <stdlib.h> |
| #include <common.h> |
| #include <debug.h> |
| |
| void map_over_sections(Elf *elf, |
| section_match_fn_t match, |
| void *user_data) |
| { |
| Elf_Scn* section = NULL; |
| while ((section = elf_nextscn(elf, section)) != NULL) { |
| if (match(elf, section, user_data)) |
| return; |
| } |
| } |
| |
| void map_over_segments(Elf *elf, |
| segment_match_fn_t match, |
| void *user_data) |
| { |
| Elf32_Ehdr *ehdr; |
| Elf32_Phdr *phdr; |
| int index; |
| |
| ehdr = elf32_getehdr(elf); |
| phdr = elf32_getphdr(elf); |
| |
| INFO("Scanning over %d program segments...\n", |
| ehdr->e_phnum); |
| |
| for (index = ehdr->e_phnum; index; index--) { |
| if (match(elf, phdr++, user_data)) |
| return; |
| } |
| } |
| |