|
@@ -29,7 +29,6 @@
|
|
|
|
|
|
|
|
|
#define _GNU_SOURCE
|
|
|
-#include <features.h>
|
|
|
#include <stdlib.h>
|
|
|
#include <stdio.h>
|
|
|
#include <fcntl.h>
|
|
@@ -38,9 +37,14 @@
|
|
|
#include <sys/mman.h>
|
|
|
#include <sys/stat.h>
|
|
|
#include <sys/types.h>
|
|
|
-#include <endian.h>
|
|
|
-#include <byteswap.h>
|
|
|
+
|
|
|
+#include "bswap.h"
|
|
|
+#if defined (sun)
|
|
|
+#include "link.h"
|
|
|
+#else
|
|
|
#include "elf.h"
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef DMALLOC
|
|
|
#include <dmalloc.h>
|
|
|
#endif
|
|
@@ -102,7 +106,7 @@ void * elf_find_dynamic(int const key, Elf32_Dyn *dynp,
|
|
|
for (; DT_NULL!=byteswap32_to_host(dynp->d_tag); ++dynp) {
|
|
|
if (key == byteswap32_to_host(dynp->d_tag)) {
|
|
|
if (return_val == 1)
|
|
|
- return (void *)byteswap32_to_host(dynp->d_un.d_val);
|
|
|
+ return (void *)(intptr_t)byteswap32_to_host(dynp->d_un.d_val);
|
|
|
else
|
|
|
return (void *)(byteswap32_to_host(dynp->d_un.d_val) - tx_reloc + (char *)ehdr );
|
|
|
}
|
|
@@ -133,6 +137,7 @@ int check_elf_header(Elf32_Ehdr *const ehdr)
|
|
|
#else
|
|
|
#error Unknown host byte order!
|
|
|
#endif
|
|
|
+
|
|
|
|
|
|
if (byteswap==1) {
|
|
|
ehdr->e_type=bswap_16(ehdr->e_type);
|
|
@@ -457,7 +462,7 @@ foo:
|
|
|
dynsec = elf_find_section_type(SHT_DYNAMIC, ehdr);
|
|
|
find_elf_interpreter(ehdr, dynamic, dynstr, is_suid);
|
|
|
if (dynsec) {
|
|
|
- dynamic = (Elf32_Dyn*)(byteswap32_to_host(dynsec->sh_offset) + (int)ehdr);
|
|
|
+ dynamic = (Elf32_Dyn*)(byteswap32_to_host(dynsec->sh_offset) + (intptr_t)ehdr);
|
|
|
dynstr = (char *)elf_find_dynamic(DT_STRTAB, dynamic, ehdr, 0);
|
|
|
find_needed_libraries(ehdr, dynamic, dynstr, is_suid);
|
|
|
}
|