static uClibc on amd64 passes entry.%rdx to 'atexit'
https://github.com/upx/upx/issues/166 modified: ../.github/travis_testsuite_1.sh modified: stub/src/amd64-linux.elf-entry.S modified: stub/src/amd64-linux.elf-fold.S modified: stub/src/amd64-linux.elf-main.c
This commit is contained in:
parent
e04bf9e4bc
commit
4a35bf32ea
14
.github/travis_testsuite_1.sh
vendored
14
.github/travis_testsuite_1.sh
vendored
@ -149,7 +149,7 @@ c3f44b4d00a87384c03a6f9e7aec809c1addfe3e271244d38a474f296603088c *mipsel-linux.e
|
||||
b8c35fa2956da17ca505956e9f5017bb5f3a746322647e24ccb8ff28059cafa4 *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\
|
||||
5e69180feb2270dc14cc3d63cf441d4bc65eab42084870b578ad17c4907434c3 *amd64-linux.elf/upx-3.91
|
||||
22c460c6789b583566edcccb83e28d897f3ceb57e0f729ae50515bb4ef5da7e2 *amd64-linux.elf/upx-3.91
|
||||
c1a6ef9d0b8a26f1d6e3307af6f119bc95411a54421c7da3bd6ade9c4eead187 *arm-wince.pe/upx-3.91.exe
|
||||
7e35e651e9018cfe7c6935d6faa9ae31b5c7324be1112238dd407060a20286d9 *armeb-linux.elf/upx-3.91
|
||||
7d5f0fd6f18e4cd16655ef58805f228bcaddd5b035ce998faed446e290aea3d9 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -160,7 +160,7 @@ b45b537b1c3641a9993f908c5f19504c2ae83f727135bdd63b19a8ae06da31ec *mipsel-linux.e
|
||||
9b9ec6cc491ddc78752966f5be57d12e47c0c3105172ae599de3fce520526190 *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\
|
||||
a58d8691ca88a37961f0796ba32b9c10f40153123cc8b77e7fe2e9d343260d3a *amd64-linux.elf/upx-3.91
|
||||
1599f268ed239f20c52f14b17795cbe4ffc1b623e35b0e6dcefc89fd03ca3e74 *amd64-linux.elf/upx-3.91
|
||||
2bb2477bdf4643954b4bb707b1017459238b03f66883303cd20e9e8740764dd7 *arm-wince.pe/upx-3.91.exe
|
||||
174c480d7ad1262fa1b1a2ae91f06e2adb53e49443da043b2b7930f8f3cf0709 *armeb-linux.elf/upx-3.91
|
||||
c52473f5dbdac560c05d5d173e5342b5e696e604517359baef581672eb25a9e6 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -171,7 +171,7 @@ ef94d8b0e02a650c302bec9f2d50462f2accc2fbb8003cc4977bc550d2e5b9f2 *m68k-atari.tos
|
||||
50babab276c089f8562e0d38587c7ccc9e0bd84f8c6f0af523d6a07c94568094 *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\
|
||||
0d9c53dcdc006f3ccc92e6674e40386ee8e27995b11847d890a3afed56966769 *amd64-linux.elf/upx-3.91
|
||||
e836b54945ad009f3e382d4bf47e330e1aaa3d798cb9af800917d618dc250790 *amd64-linux.elf/upx-3.91
|
||||
0915344e0ee8e7c006e6cce71c024f518e097a88820c7ab3ca183ab1c614ce82 *arm-wince.pe/upx-3.91.exe
|
||||
40f6d18e983239020f5139d5c641d5504922d2ac42583fd0d67cf115da92b3b9 *armeb-linux.elf/upx-3.91
|
||||
5c5ff78652e76834f3f9ab110c42e3a34ef54c748bce212b0e942049f43f5d4d *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -182,7 +182,7 @@ dfc6abff2d3417b9708b1232d5791a9232c6623dcedb9dcb59428b67bbf864e9 *m68k-atari.tos
|
||||
f0c96dba224cafa2e1a3ffe92609c48235289337fac3761491bf2f0680017841 *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t140_compress_lzma_2_no_filter="\
|
||||
addd62594650895432f4f922be6eeb39f07afff5a96c2ed93c308109eee7e6ab *amd64-linux.elf/upx-3.91
|
||||
276ce52ad12153a340509da45e782ac482d6c5ca2cc4a42880946c6ac0590ed8 *amd64-linux.elf/upx-3.91
|
||||
3af2a2346a252dfacefb6209725907b2947dc1ccf5e99af139608354f852507c *arm-wince.pe/upx-3.91.exe
|
||||
4d6dbb67cea5b89956bab304633de379ed4ad4dfa808217a0d5014efe5f047fc *armeb-linux.elf/upx-3.91
|
||||
964fb400b0b4a2b1926ce7076610db8c3a8e41807fe030209af1615d43b6a020 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -193,7 +193,7 @@ f34a9691c617178582ab8b8cc50d9ccce1c37cd6074f9e146459121b1cdbaff9 *mipsel-linux.e
|
||||
85a97fbde61dcb34e6f32e9bd7dc13a74969f82baada2e1880777197b86dacd2 *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t150_compress_ucl_2_all_filters="\
|
||||
20682c50460f581ef947a80a4a76e99499d4d4a1644cf667e0e745c70ae5bcce *amd64-linux.elf/upx-3.91
|
||||
b364675455f455df5e2b2b3c784049053b83564f2ea8e2063ff974587247de56 *amd64-linux.elf/upx-3.91
|
||||
dc7323e753ce62e6a1c22112f139953dbaa1e5268530479f8ad48e0c54062295 *arm-wince.pe/upx-3.91.exe
|
||||
a63e457b523ba78919a00c0d818f697ff51d005ea1b8108a4bc96afe26e721db *armeb-linux.elf/upx-3.91
|
||||
8614d93ba30def6866b3be92ae5bdd5f294266e0fc4a26c078682917f127656d *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -204,7 +204,7 @@ a85707417a7ee7f81685272f460fde6cd3406cfe1457d656e337b1839d3cd3f2 *i386-linux.elf
|
||||
794737f95430181e3abe03a5e4ba879230afcef47bbbd984def7b05854e3032a *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t160_compress_all_methods_1_no_filter="\
|
||||
0dbee44c0d0e63f1d2af7d7a097165eaf0f7f6c19f23b26f16b197ffae12e9bb *amd64-linux.elf/upx-3.91
|
||||
fc894c1e0cde85dd7d3e565edaf6624c2e9c00ecea33eda459f107bc9f40ab85 *amd64-linux.elf/upx-3.91
|
||||
1c9c618741739404f40d198d2fc77010539589379bf260502af9f10f1ec0d05b *arm-wince.pe/upx-3.91.exe
|
||||
34412ce06f8ec8e0ff494803374caef537afeede157f705086cb5a7ec8c32bf3 *armeb-linux.elf/upx-3.91
|
||||
863bbf7f3cf41296987b085a4db8acba372e3d65d8d9c656f9a7276f2e7aa4d3 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -215,7 +215,7 @@ expected_sha256sums__t160_compress_all_methods_1_no_filter="\
|
||||
f9a432e027c4bb8c4c9dbb6855a5fbd0af170506ba2bf794fe800a45c3191ce6 *powerpc-linux.elf/upx-3.91
|
||||
"
|
||||
expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\
|
||||
1e73b524418dd16cc8b3f976966732f4e87801420f619b5b1efd0a2c020f7262 *amd64-linux.elf/upx-3.91
|
||||
c86cecea962925d488b416f0427a9165906d6c5e598fba6687ab74b1a8656b87 *amd64-linux.elf/upx-3.91
|
||||
66653a91c355a1ad1ab7b07c6c20b2d2899d0f42078683d0f4d540df476b1afb *arm-wince.pe/upx-3.91.exe
|
||||
9b979047e8849e30c38632f20a5f06a74240cf66e589897470676f8326119ee4 *armeb-linux.elf/upx-3.91
|
||||
490a196fbba4a8f21bfb9ac2a3b92a6dc7e287f255a3ab987f7d29d5a75d8db4 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -32,8 +32,8 @@
|
||||
|
||||
|
||||
#define STUB_AMD64_LINUX_ELF_FOLD_SIZE 2148
|
||||
#define STUB_AMD64_LINUX_ELF_FOLD_ADLER32 0x00ad254f
|
||||
#define STUB_AMD64_LINUX_ELF_FOLD_CRC32 0x43dc8ba8
|
||||
#define STUB_AMD64_LINUX_ELF_FOLD_ADLER32 0xd5552522
|
||||
#define STUB_AMD64_LINUX_ELF_FOLD_CRC32 0xfa491d41
|
||||
|
||||
unsigned char stub_amd64_linux_elf_fold[2148] = {
|
||||
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -53,7 +53,7 @@ unsigned char stub_amd64_linux_elf_fold[2148] = {
|
||||
/* 0x00e0 */ 119, 6,128,126,254, 15,116, 6, 44,232, 60, 1,119,228, 72, 57,
|
||||
/* 0x00f0 */ 206,115, 22, 86,173, 40,208,117,223, 95, 15,200, 41,248, 1,216,
|
||||
/* 0x0100 */ 171, 72, 57,206,115, 3,172,235,223, 91,195, 88, 65, 86, 65, 87,
|
||||
/* 0x0110 */ 80, 72,137,230, 72,129,236, 0, 16, 0, 0, 84, 95,106, 9, 89,
|
||||
/* 0x0110 */ 80, 72,137,230, 72,129,236, 0, 16, 0, 0, 84, 95,106, 10, 89,
|
||||
/* 0x0120 */ 243, 72,165, 72,131, 62, 0, 72,165,117,248, 73,137,254, 72,171,
|
||||
/* 0x0130 */ 72,131, 62, 0, 72,165,117,248, 73,137,252, 72,131, 62, 0, 72,
|
||||
/* 0x0140 */ 165, 72,165,117,246, 73,137,255, 73,137,245, 77, 41,252,186,255,
|
||||
@ -65,7 +65,7 @@ unsigned char stub_amd64_linux_elf_fold[2148] = {
|
||||
/* 0x01a0 */ 141,119,248, 72,193,233, 3,243, 72,165, 72,141,103, 8,252, 75,
|
||||
/* 0x01b0 */ 141, 12, 38,139, 67,252,131,224, 1, 72, 1,193, 65, 89, 94, 95,
|
||||
/* 0x01c0 */ 88, 72,129,236, 0, 8, 0, 0, 72,137,226, 80, 73,137,232,232,
|
||||
/* 0x01d0 */ 72, 5, 0, 0, 72,129,196, 8, 8, 0, 0, 72,137, 68, 36, 24,
|
||||
/* 0x01d0 */ 72, 5, 0, 0, 72,129,196, 8, 8, 0, 0, 72,137, 68, 36, 32,
|
||||
/* 0x01e0 */ 91, 69, 41,201, 65,137,216,106, 2, 65, 90,106, 1, 90,190, 0,
|
||||
/* 0x01f0 */ 16, 0, 0,106, 0, 95,106, 9, 88, 15, 5,137,223,106, 3, 88,
|
||||
/* 0x0200 */ 15, 5, 95, 94,106, 11, 88, 65,255,102,248,176, 9, 73,137,202,
|
||||
@ -139,7 +139,7 @@ unsigned char stub_amd64_linux_elf_fold[2148] = {
|
||||
/* 0x0640 */ 208,117, 82, 73,139, 84, 36, 40, 73,139,116, 36, 16, 73, 59, 84,
|
||||
/* 0x0650 */ 36, 32, 72,141, 4, 50, 74,141, 12, 40,117, 14,137,200,247,216,
|
||||
/* 0x0660 */ 37,255, 15, 0, 0,131,248, 3,119, 13, 73,131,124, 36, 8, 0,
|
||||
/* 0x0670 */ 74,141, 76, 46, 12,117, 30, 72,133,201,199, 1, 15, 5,195,144,
|
||||
/* 0x0670 */ 74,141, 76, 46, 12,117, 30, 72,133,201,199, 1, 15, 5, 90,195,
|
||||
/* 0x0680 */ 116, 19, 72,139,124, 36, 32, 72,137,202, 49,246, 72,131,231,254,
|
||||
/* 0x0690 */ 232,248,252,255,255,139, 84, 36, 8, 76,137,254, 72,137,239,232,
|
||||
/* 0x06a0 */ 146,251,255,255,133,192,116, 10,191,127, 0, 0, 0,232,112,251,
|
||||
|
||||
@ -65,11 +65,13 @@ M_NRV2D_LE32=5
|
||||
M_NRV2E_LE32=8
|
||||
|
||||
|
||||
// https://www.uclibc.org/docs/psABI-x86_64.pdf
|
||||
section ELFMAINX
|
||||
sz_pack2= .-4
|
||||
_start: .globl _start
|
||||
//// nop; int3 # uncomment for debugging
|
||||
push %rax // space for entry address
|
||||
push %rdx // register this function pointer with 'atexit'
|
||||
call main // push &decompress
|
||||
|
||||
/* Returns 0 on success; non-zero on failure. */
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
* <jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
NBPW= 8
|
||||
#include "arch/amd64/macros.S"
|
||||
#include "arch/amd64/regs.h"
|
||||
|
||||
@ -68,7 +69,7 @@ __NR_readlink= 89
|
||||
|
||||
// IN:
|
||||
// %rbx= &O_BINFO; %rbp= f_exp; %r14= ADRX; %r15= LENX;
|
||||
// rsp/ elfaddr,fd,ADRU,LENU,%entry, argc,argv,0,envp,0,auxv,0,strings
|
||||
// rsp/ elfaddr,fd,ADRU,LENU,rdx,%entry, argc,argv,0,envp,0,auxv,0,strings
|
||||
|
||||
fold_begin:
|
||||
//// int3 // DEBUG only
|
||||
@ -82,7 +83,7 @@ L90:
|
||||
mov %rsp,%rsi
|
||||
sub $PATH_MAX,%rsp
|
||||
push %rsp; pop %rdi
|
||||
push $9; pop %rcx; rep movsq # f_unf,LENX,ADRX,elfaddr,fd,ADRU,LENU,%entry,argc
|
||||
push $10; pop %rcx; rep movsq # f_unf,LENX,ADRX,elfaddr,fd,ADRU,LENU,rdx,%entry,argc
|
||||
0:
|
||||
cmpq $0,(%rsi); movsq; jne 0b # move past argv
|
||||
movq %rdi,%r14 # remember &new_env[0]
|
||||
@ -145,8 +146,8 @@ L90:
|
||||
Elf32_Auxv_t *arg4, f_decompr arg5, f_unf arg6,
|
||||
Elf64_Addr elfaddr )
|
||||
*/
|
||||
addq $1*8+OVERHEAD,%rsp # toss elfaddr, too
|
||||
movq %rax,3*8(%rsp) # entry
|
||||
addq $1*NBPW+OVERHEAD,%rsp # toss elfaddr, too
|
||||
movq %rax,4*NBPW(%rsp) # entry
|
||||
pop %rbx # fd
|
||||
|
||||
// Map 1 page of /proc/self/exe so that it does not disappear.
|
||||
@ -164,7 +165,7 @@ L90:
|
||||
pop %arg1 # ADRU
|
||||
pop %arg2 # LENU
|
||||
push $ __NR_munmap; pop %rax
|
||||
jmp *-8(%r14) # goto: syscall; ret
|
||||
jmp *-8(%r14) # goto: syscall; pop %rdx; ret
|
||||
|
||||
mmap: .globl mmap
|
||||
movb $ __NR_mmap,%al
|
||||
|
||||
@ -238,7 +238,7 @@ make_hatch_x86_64(
|
||||
(phdr->p_offset==0) )
|
||||
)
|
||||
{
|
||||
hatch[0] = 0x90c3050f; // syscall; ret; nop
|
||||
hatch[0] = 0xc35a050f; // syscall; pop %rdx; ret
|
||||
}
|
||||
else {
|
||||
hatch = 0;
|
||||
|
||||
@ -2,18 +2,18 @@ file format elf64-x86-64
|
||||
|
||||
Sections:
|
||||
Idx Name Size VMA LMA File off Algn Flags
|
||||
0 ELFMAINX 0000000e 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
|
||||
1 NRV_HEAD 00000066 0000000000000000 0000000000000000 0000004e 2**0 CONTENTS, READONLY
|
||||
2 NRV2E 000000b7 0000000000000000 0000000000000000 000000b4 2**0 CONTENTS, RELOC, READONLY
|
||||
3 NRV2D 0000009e 0000000000000000 0000000000000000 0000016b 2**0 CONTENTS, RELOC, READONLY
|
||||
4 NRV2B 00000090 0000000000000000 0000000000000000 00000209 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 00000064 0000000000000000 0000000000000000 00000299 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 000002fd 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000cf4 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000014 0000000000000000 0000000000000000 000016eb 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 00000000 0000000000000000 0000000000000000 000016ff 2**0 CONTENTS, READONLY
|
||||
10 ELFMAINY 0000003a 0000000000000000 0000000000000000 000016ff 2**0 CONTENTS, RELOC, READONLY
|
||||
11 ELFMAINZ 000000e4 0000000000000000 0000000000000000 00001739 2**0 CONTENTS, RELOC, READONLY
|
||||
0 ELFMAINX 0000000f 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
|
||||
1 NRV_HEAD 00000066 0000000000000000 0000000000000000 0000004f 2**0 CONTENTS, READONLY
|
||||
2 NRV2E 000000b7 0000000000000000 0000000000000000 000000b5 2**0 CONTENTS, RELOC, READONLY
|
||||
3 NRV2D 0000009e 0000000000000000 0000000000000000 0000016c 2**0 CONTENTS, RELOC, READONLY
|
||||
4 NRV2B 00000090 0000000000000000 0000000000000000 0000020a 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 00000064 0000000000000000 0000000000000000 0000029a 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 000002fe 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000cf5 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000014 0000000000000000 0000000000000000 000016ec 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 00000000 0000000000000000 0000000000000000 00001700 2**0 CONTENTS, READONLY
|
||||
10 ELFMAINY 0000003a 0000000000000000 0000000000000000 00001700 2**0 CONTENTS, RELOC, READONLY
|
||||
11 ELFMAINZ 000000e4 0000000000000000 0000000000000000 0000173a 2**0 CONTENTS, RELOC, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
|
||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||
@ -32,7 +32,7 @@ SYMBOL TABLE:
|
||||
|
||||
RELOCATION RECORDS FOR [ELFMAINX]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000002 R_X86_64_PC32 ELFMAINZ+0x00000000000000c7
|
||||
0000000000000003 R_X86_64_PC32 ELFMAINZ+0x00000000000000c7
|
||||
|
||||
RELOCATION RECORDS FOR [NRV2E]:
|
||||
OFFSET TYPE VALUE
|
||||
|
||||
Loading…
Reference in New Issue
Block a user