From 51d2f876735e2d70647331cfd5981fbe737ba862 Mon Sep 17 00:00:00 2001 From: Armin Luntzer <armin.luntzer@univie.ac.at> Date: Wed, 15 Mar 2017 15:44:42 +0100 Subject: [PATCH] ELF: byte swap .symtab st_name entries, add warning notice --- lib/elf.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/elf.c b/lib/elf.c index a63e372..52446e8 100644 --- a/lib/elf.c +++ b/lib/elf.c @@ -138,6 +138,9 @@ Elf_Shdr *elf_get_sec_shstrtab(const Elf_Ehdr *ehdr) * @brief in-place swap the endianess of an ELF header * * @param ehdr an Elf_Ehdr + * + * @warning this is likely incomplete, so if there are issues with ELF + * interpretation, look here first */ void elf_hdr_endianess_swap(Elf_Ehdr *ehdr) @@ -149,6 +152,7 @@ void elf_hdr_endianess_swap(Elf_Ehdr *ehdr) Elf_Shdr *shdr; Elf_Phdr *phdr; + Elf_Sym *sym; @@ -197,6 +201,17 @@ void elf_hdr_endianess_swap(Elf_Ehdr *ehdr) shdr[i].sh_addralign = swab32(shdr[i].sh_addralign); shdr[i].sh_entsize = swab32(shdr[i].sh_entsize); } + + + shdr = elf_find_sec(ehdr, ".symtab"); + if (shdr) { + sym = (Elf_Sym *) (((char *) ehdr) + shdr->sh_offset); + + for (i = 0; i < shdr->sh_size / shdr->sh_entsize; i++) + sym[i].st_name = swab32(sym[i].st_name); + } + + } /** -- GitLab