summaryrefslogtreecommitdiff
path: root/src/analysis/segment-contains-section.c
blob: 298cf726477c25845880a5a4a0f5c3478a2507b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <libelf.h>
#include <gelf.h>

#include <libelfu/libelfu.h>


int elfu_segmentContainsSection(GElf_Phdr *phdr, GElf_Shdr *shdr)
{
  size_t secStart = shdr->sh_offset;
  size_t secEnd   = shdr->sh_offset + shdr->sh_size;
  size_t segStart = phdr->p_offset;
  size_t segEnd   = phdr->p_offset + phdr->p_memsz;

  if (secStart < segStart || secEnd > segEnd) {
    return 0;
  }

  return 1;
}