3 #include <libelf/libelf.h>
4 #include <libelf/gelf.h>
7 void printHeader(Elf *e)
11 size_t shdrnum, shdrstrndx, phdrnum;
14 printf("ELF header:\n");
17 elfclass = gelf_getclass(e);
18 if (elfclass == ELFCLASSNONE) {
19 fprintf(stderr, "getclass() failed: %s\n", elf_errmsg(-1));
21 printf(" * %d-bit ELF object\n", elfclass == ELFCLASS32 ? 32 : 64);
24 if (!gelf_getehdr(e, &ehdr)) {
25 fprintf(stderr, "getehdr() failed: %s.", elf_errmsg(-1));
29 printf(" * type machine version entry phoff shoff flags ehsize phentsize shentsize\n");
30 printf(" %8jx %8jx %8jx %8jx %8jx %8jx %8jx %8jx %9jx %9jx\n",
31 (uintmax_t) ehdr.e_type,
32 (uintmax_t) ehdr.e_machine,
33 (uintmax_t) ehdr.e_version,
34 (uintmax_t) ehdr.e_entry,
35 (uintmax_t) ehdr.e_phoff,
36 (uintmax_t) ehdr.e_shoff,
37 (uintmax_t) ehdr.e_flags,
38 (uintmax_t) ehdr.e_ehsize,
39 (uintmax_t) ehdr.e_phentsize,
40 (uintmax_t) ehdr.e_shentsize);
43 if (elf_getshdrnum(e, &shdrnum) != 0) {
44 fprintf(stderr, "getshdrnum() failed: %s\n", elf_errmsg(-1));
46 printf(" * (shnum): %u\n", shdrnum);
49 if (elf_getshdrstrndx(e, &shdrstrndx) != 0) {
50 fprintf(stderr, "getshdrstrndx() failed: %s\n", elf_errmsg(-1));
52 printf(" * (shstrndx): %u\n", shdrstrndx);
55 if (elf_getphdrnum(e, &phdrnum) != 0) {
56 fprintf(stderr, "getphdrnum() failed: %s\n", elf_errmsg(-1));
58 printf(" * (phnum): %u\n", phdrnum);