From f49601027308047a94e3b2a6b3ec3bb528288c8a Mon Sep 17 00:00:00 2001 From: John Reiser Date: Wed, 7 Jun 2017 09:01:37 -0700 Subject: [PATCH] Fix reloc of stub for amd64-linux.elf modified: stub/src/arm64-linux.elf-main.c modified: stub/arm64-linux.elf-fold.h modified: stub/tmp/arm64-linux.elf-fold.map --- src/stub/arm64-linux.elf-fold.h | 54 +++++++++++++-------------- src/stub/src/arm64-linux.elf-main.c | 6 +-- src/stub/tmp/arm64-linux.elf-fold.map | 26 ++++++------- 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/stub/arm64-linux.elf-fold.h b/src/stub/arm64-linux.elf-fold.h index c24cb260..ac974949 100644 --- a/src/stub/arm64-linux.elf-fold.h +++ b/src/stub/arm64-linux.elf-fold.h @@ -1,5 +1,5 @@ /* arm64-linux.elf-fold.h - created from arm64-linux.elf-fold.bin, 2364 (0x93c) bytes + created from arm64-linux.elf-fold.bin, 2356 (0x934) bytes This file is part of the UPX executable compressor. @@ -31,20 +31,20 @@ */ -#define STUB_ARM64_LINUX_ELF_FOLD_SIZE 2364 -#define STUB_ARM64_LINUX_ELF_FOLD_ADLER32 0x05744b33 -#define STUB_ARM64_LINUX_ELF_FOLD_CRC32 0x9b059cc1 +#define STUB_ARM64_LINUX_ELF_FOLD_SIZE 2356 +#define STUB_ARM64_LINUX_ELF_FOLD_ADLER32 0x0cc94769 +#define STUB_ARM64_LINUX_ELF_FOLD_CRC32 0x8f081e00 -unsigned char stub_arm64_linux_elf_fold[2364] = { +unsigned char stub_arm64_linux_elf_fold[2356] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 2, 0,183, 0, 1, 0, 0, 0,188, 0, 16, 0, 0, 0, 0, 0, /* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, -/* 0x0060 */ 60, 9, 0, 0, 0, 0, 0, 0, 60, 9, 0, 0, 0, 0, 0, 0, +/* 0x0060 */ 52, 9, 0, 0, 0, 0, 0, 0, 52, 9, 0, 0, 0, 0, 0, 0, /* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -/* 0x0080 */ 60, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x0080 */ 52, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0090 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 35, 65,169, @@ -164,24 +164,24 @@ unsigned char stub_arm64_linux_elf_fold[2364] = { /* 0x07d0 */ 243, 3, 2,170, 84, 0, 1,145,162, 63, 0,249, 2, 0, 64,185, /* 0x07e0 */ 245, 91, 2,169,162, 59, 0,249,245, 3, 3,170,226, 3, 4,170, /* 0x07f0 */ 3, 0,128,210,160, 79, 0,249,161, 75, 0,249,160, 71, 0,249, -/* 0x0800 */ 160, 67, 2,145,161, 67, 0,249,161,195, 1,145,165, 43, 0,249, -/* 0x0810 */ 164, 47, 0,249,247, 99, 3,169,249, 35, 0,249,249, 3, 6,170, -/* 0x0820 */ 218,254,255,151, 23, 0,128, 82,130, 10, 64,249,224, 3, 21,170, -/* 0x0830 */ 97, 0,128, 82, 66, 0, 1,145,175,254,255,151, 98,114, 64,121, -/* 0x0840 */ 224, 3, 21,170,161, 0,128, 82,171,254,255,151,164, 47, 64,249, -/* 0x0850 */ 161, 3, 2,145,165, 43, 64,249, 2, 0,128, 82,227, 3, 21,170, -/* 0x0860 */ 230, 3, 25,170,224, 3, 19,170, 25,255,255,151,246, 3, 0,170, -/* 0x0870 */ 33, 1,128, 82,224, 3, 21,170,226, 3, 22,170,158,254,255,151, -/* 0x0880 */ 96,114, 64,121,255, 2, 0,107,202, 4, 0, 84,128, 2, 64,185, -/* 0x0890 */ 31, 12, 0,113, 1, 4, 0, 84,129, 10, 64,249, 32, 3, 64,249, -/* 0x08a0 */ 32, 0, 0,139, 1, 0,128, 82,226, 3, 1, 42,134,254,255,151, -/* 0x08b0 */ 248, 3, 0, 42, 96, 0,248, 54,224, 15,128, 82, 95,254,255,151, -/* 0x08c0 */ 225, 3, 19,170, 2,128,128,210, 94,254,255,151, 31, 0, 16,241, -/* 0x08d0 */ 65,255,255, 84, 1, 0,128,210,226, 3, 24, 42,227, 3, 1,170, -/* 0x08e0 */ 228, 3, 1,170,229, 3, 1,170,166,163, 1,145,224, 3, 19,170, -/* 0x08f0 */ 191, 55, 0,249,246,254,255,151,246, 3, 0,170,162, 55, 64,249, -/* 0x0900 */ 224, 3, 21,170,225, 0,128, 82,123,254,255,151,224, 3, 24, 42, -/* 0x0910 */ 82,254,255,151,148,226, 0,145,247, 6, 0, 17,217,255,255, 23, -/* 0x0920 */ 224, 3, 22,170,249, 35, 64,249,243, 83, 65,169,245, 91, 66,169, -/* 0x0930 */ 247, 99, 67,169,253,123,202,168,192, 3, 95,214 +/* 0x0800 */ 160, 67, 2,145,161, 67, 0,249,161,195, 1,145,165, 39, 0,249, +/* 0x0810 */ 166, 47, 0,249,164, 43, 0,249,247, 99, 3,169,219,254,255,151, +/* 0x0820 */ 23, 0,128, 82,130, 10, 64,249,224, 3, 21,170, 97, 0,128, 82, +/* 0x0830 */ 66, 0, 1,145,176,254,255,151, 98,114, 64,121,224, 3, 21,170, +/* 0x0840 */ 161, 0,128, 82,172,254,255,151,164, 43, 64,249,161, 3, 2,145, +/* 0x0850 */ 165, 39, 64,249, 2, 0,128, 82,227, 3, 21,170,166, 99, 1,145, +/* 0x0860 */ 224, 3, 19,170, 26,255,255,151,246, 3, 0,170, 33, 1,128, 82, +/* 0x0870 */ 224, 3, 21,170,226, 3, 22,170,159,254,255,151, 96,114, 64,121, +/* 0x0880 */ 255, 2, 0,107,202, 4, 0, 84,128, 2, 64,185, 31, 12, 0,113, +/* 0x0890 */ 1, 4, 0, 84,129, 10, 64,249,160, 47, 64,249, 32, 0, 0,139, +/* 0x08a0 */ 1, 0,128, 82,226, 3, 1, 42,135,254,255,151,248, 3, 0, 42, +/* 0x08b0 */ 96, 0,248, 54,224, 15,128, 82, 96,254,255,151,225, 3, 19,170, +/* 0x08c0 */ 2,128,128,210, 95,254,255,151, 31, 0, 16,241, 65,255,255, 84, +/* 0x08d0 */ 1, 0,128,210,226, 3, 24, 42,227, 3, 1,170,228, 3, 1,170, +/* 0x08e0 */ 229, 3, 1,170,166,163, 1,145,224, 3, 19,170,191, 55, 0,249, +/* 0x08f0 */ 247,254,255,151,246, 3, 0,170,162, 55, 64,249,224, 3, 21,170, +/* 0x0900 */ 225, 0,128, 82,124,254,255,151,224, 3, 24, 42, 83,254,255,151, +/* 0x0910 */ 148,226, 0,145,247, 6, 0, 17,217,255,255, 23,224, 3, 22,170, +/* 0x0920 */ 243, 83, 65,169,245, 91, 66,169,247, 99, 67,169,253,123,202,168, +/* 0x0930 */ 192, 3, 95,214 }; diff --git a/src/stub/src/arm64-linux.elf-main.c b/src/stub/src/arm64-linux.elf-main.c index 8c9dd205..6ac68031 100644 --- a/src/stub/src/arm64-linux.elf-main.c +++ b/src/stub/src/arm64-linux.elf-main.c @@ -355,7 +355,7 @@ upx_main( // returns entry address /*x3*/ Elf64_auxv_t *const av, /*x4*/ f_expand *const f_decompress, /*x5*/ f_unfilter *const f_unf, -/*x6*/ Elf64_Addr *preloc // IN OUT; value result for ET_DYN +/*x6*/ Elf64_Addr reloc // IN OUT; value result for ET_DYN ) { Elf64_Phdr const *phdr = (Elf64_Phdr const *)(1+ ehdr); @@ -376,13 +376,13 @@ upx_main( // returns entry address //auxv_up(av, AT_PHENT , ehdr->e_phentsize); /* this can never change */ //auxv_up(av, AT_PAGESZ, PAGE_SIZE); /* ld-linux.so.2 does not need this */ - entry = do_xmap(ehdr, &xi1, 0, av, f_decompress, f_unf, preloc); // "rewind" + entry = do_xmap(ehdr, &xi1, 0, av, f_decompress, f_unf, &reloc); // "rewind" auxv_up(av, AT_ENTRY , entry); { // Map PT_INTERP program interpreter int j; for (j=0; j < ehdr->e_phnum; ++phdr, ++j) if (PT_INTERP==phdr->p_type) { - char const *const iname = *preloc + (char const *)phdr->p_vaddr; + char const *const iname = reloc + (char const *)phdr->p_vaddr; int const fdi = open(iname, O_RDONLY, 0); if (0 > fdi) { err_exit(18); diff --git a/src/stub/tmp/arm64-linux.elf-fold.map b/src/stub/tmp/arm64-linux.elf-fold.map index ca484140..3432a8fa 100644 --- a/src/stub/tmp/arm64-linux.elf-fold.map +++ b/src/stub/tmp/arm64-linux.elf-fold.map @@ -8,7 +8,7 @@ Linker script and memory map 0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc) -.text 0x00000000001000bc 0x880 +.text 0x00000000001000bc 0x878 *(.text) .text 0x00000000001000bc 0x238 tmp/arm64-linux.elf-fold.o 0x0000000000100230 my_bkpt @@ -26,26 +26,26 @@ Linker script and memory map 0x00000000001002bc readlink 0x00000000001002c4 open 0x00000000001002e0 __clear_cache - .text 0x00000000001002f4 0x648 tmp/arm64-linux.elf-main.o + .text 0x00000000001002f4 0x640 tmp/arm64-linux.elf-main.o 0x00000000001007c4 upx_main *(.data) - .data 0x000000000010093c 0x0 tmp/arm64-linux.elf-fold.o - .data 0x000000000010093c 0x0 tmp/arm64-linux.elf-main.o + .data 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o + .data 0x0000000000100934 0x0 tmp/arm64-linux.elf-main.o -.iplt 0x000000000010093c 0x0 - .iplt 0x000000000010093c 0x0 tmp/arm64-linux.elf-fold.o +.iplt 0x0000000000100934 0x0 + .iplt 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o -.rela.dyn 0x0000000000100940 0x0 - .rela.iplt 0x0000000000100940 0x0 tmp/arm64-linux.elf-fold.o +.rela.dyn 0x0000000000100938 0x0 + .rela.iplt 0x0000000000100938 0x0 tmp/arm64-linux.elf-fold.o .data LOAD tmp/arm64-linux.elf-fold.o LOAD tmp/arm64-linux.elf-main.o OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64) -.igot.plt 0x0000000000100940 0x0 - .igot.plt 0x0000000000100940 0x0 tmp/arm64-linux.elf-fold.o +.igot.plt 0x0000000000100938 0x0 + .igot.plt 0x0000000000100938 0x0 tmp/arm64-linux.elf-fold.o -.bss 0x000000000010093c 0x0 - .bss 0x000000000010093c 0x0 tmp/arm64-linux.elf-fold.o - .bss 0x000000000010093c 0x0 tmp/arm64-linux.elf-main.o +.bss 0x0000000000100934 0x0 + .bss 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o + .bss 0x0000000000100934 0x0 tmp/arm64-linux.elf-main.o