#include <stdio.h>
#include <stdlib.h>
+#include <sys/types.h>
#include <libelf.h>
#include <gelf.h>
ElfuElf* elfu_modelFromElf(Elf *e)
{
ElfuElf *me;
+ Elf_Scn *scn;
+ size_t shstrndx;
+ size_t i, n;
+
+ if (elf_getshdrstrndx(e, &shstrndx) != 0) {
+ shstrndx = 0;
+ }
me = malloc(sizeof(ElfuElf));
if (!me) {
CIRCLEQ_INIT(&me->scnList);
CIRCLEQ_INIT(&me->phdrList);
+ me->shstrtab = NULL;
/*
* General stuff
/*
* Sections
*/
- Elf_Scn *scn;
-
scn = elf_getscn(e, 1);
+ i = 1;
while (scn) {
ElfuScn *ms = elfu_modelFromSection(scn);
if (ms) {
CIRCLEQ_INSERT_TAIL(&me->scnList, ms, elem);
+ if (i == shstrndx) {
+ me->shstrtab = ms;
+ }
} else {
goto out;
}
scn = elf_nextscn(e, scn);
+ i++;
}
/*
* Segments
*/
- size_t i, n;
-
if (elf_getphdrnum(e, &n)) {
fprintf(stderr, "elf_getphdrnum() failed: %s\n", elf_errmsg(-1));
}