summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2015-01-23 02:39:00 +0000
committeremaste <emaste@FreeBSD.org>2015-01-23 02:39:00 +0000
commit23ccab912a903dc5714f61e29d179fb7a18525d0 (patch)
tree571826ef286691d28bdb27cf57c02764bb59a1d0
parentfb31f7e88b7e2fdedda30a82110a080b8e71fc0e (diff)
downloadFreeBSD-src-23ccab912a903dc5714f61e29d179fb7a18525d0.zip
FreeBSD-src-23ccab912a903dc5714f61e29d179fb7a18525d0.tar.gz
crunchide: Correct 64-bit section header offset
For 64-bit binaries the Elf_Ehdr e_shoff is at offset 40, not 44. Instead of using an incorrect hardcoded offset, let the compiler figure it out for us with offsetof(). MFC of r277259
-rw-r--r--usr.sbin/crunch/crunchide/exec_elf32.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/usr.sbin/crunch/crunchide/exec_elf32.c b/usr.sbin/crunch/crunchide/exec_elf32.c
index 752007f..8813497 100644
--- a/usr.sbin/crunch/crunchide/exec_elf32.c
+++ b/usr.sbin/crunch/crunchide/exec_elf32.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <limits.h>
+#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -464,7 +465,7 @@ ELFNAMEEND(hide)(int fd, const char *fn)
if (layoutp[i].shdr == &shdrshdr &&
ehdr.e_shoff != shdrshdr.sh_offset) {
ehdr.e_shoff = shdrshdr.sh_offset;
- off = (ELFSIZE == 32) ? 32 : 44;
+ off = offsetof(Elf_Ehdr, e_shoff);
size = sizeof(Elf_Off);
if ((size_t)xwriteatoff(fd, &ehdr.e_shoff, off, size,
fn) != size)
OpenPOWER on IntegriCloud