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