Decompression escape hatch for ELF can require a new page.

If not enough room on last page of .text, and ElfXX_Ehdr not PF_X,
then the escape hatch must use a new page.
https://github.com/upx/upx/issues/308
	modified:   ../.github/travis_testsuite_1-expected_sha256sums.sh
	modified:   stub/src/amd64-linux.elf-main.c
	modified:   stub/src/i386-linux.elf-main.c
    Plus stub/*-linux.elf-fold.h and stub/tmp/*-linux.elf-fold.map
This commit is contained in:
John Reiser
2020-01-19 13:25:55 -08:00
parent fdf2eddc73
commit 936013f60c
25 changed files with 1494 additions and 1366 deletions
+81 -74
View File
@@ -1,5 +1,5 @@
/* i386-linux.elf-fold.h
created from i386-linux.elf-fold.bin, 1836 (0x72c) bytes
created from i386-linux.elf-fold.bin, 1940 (0x794) bytes
This file is part of the UPX executable compressor.
@@ -31,17 +31,17 @@
*/
#define STUB_I386_LINUX_ELF_FOLD_SIZE 1836
#define STUB_I386_LINUX_ELF_FOLD_ADLER32 0x1aee22db
#define STUB_I386_LINUX_ELF_FOLD_CRC32 0x090ce958
#define STUB_I386_LINUX_ELF_FOLD_SIZE 1940
#define STUB_I386_LINUX_ELF_FOLD_ADLER32 0xbea946e7
#define STUB_I386_LINUX_ELF_FOLD_CRC32 0x0c8aec52
unsigned char stub_i386_linux_elf_fold[1836] = {
unsigned char stub_i386_linux_elf_fold[1940] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 2, 0, 3, 0, 1, 0, 0, 0,128, 16,192, 0, 52, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0,
/* 0x0040 */ 0, 16,192, 0, 44, 7, 0, 0, 44, 7, 0, 0, 5, 0, 0, 0,
/* 0x0050 */ 0, 16, 0, 0, 1, 0, 0, 0, 44, 7, 0, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 16,192, 0,148, 7, 0, 0,148, 7, 0, 0, 5, 0, 0, 0,
/* 0x0050 */ 0, 16, 0, 0, 1, 0, 0, 0,148, 7, 0, 0, 0, 0, 0, 0,
/* 0x0060 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0070 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0080 */ 87, 81, 80,137,230,129,236, 0, 16, 0, 0,137,231,106, 8, 89,
@@ -56,7 +56,7 @@ unsigned char stub_i386_linux_elf_fold[1836] = {
/* 0x0110 */ 49,248,131,224, 4, 41,199, 90, 1,250,175,173,193,233, 2, 73,
/* 0x0120 */ 243,165,252,141, 79, 4, 49,192, 41,225,137,231,193,233, 2,243,
/* 0x0130 */ 171,137,252,137,215, 88, 93, 88, 94, 89,129,236, 0, 10, 0, 0,
/* 0x0140 */ 137,226, 81,139, 24,139, 72, 4,131,193, 12, 96, 71,232,208, 4,
/* 0x0140 */ 137,226, 81,139, 24,139, 72, 4,131,193, 12, 96, 71,232, 56, 5,
/* 0x0150 */ 0, 0, 79,137,198,137,250,137,231,185,137, 2, 0, 0, 49,192,
/* 0x0160 */ 243,171,137,252, 88, 89, 95, 91, 86, 81, 80, 82, 87, 41,237,106,
/* 0x0170 */ 2, 94,106, 1, 90,185, 0, 16, 0, 0, 41,219,104,192, 0, 0,
@@ -84,71 +84,78 @@ unsigned char stub_i386_linux_elf_fold[1836] = {
/* 0x02d0 */ 255,141,101,244, 91, 94, 95,201,195,133,192,116, 13,168, 1,117,
/* 0x02e0 */ 9, 57, 16,116, 7,131,192, 8,235,247, 49,192,133,192,116, 3,
/* 0x02f0 */ 137, 72, 4,195,184, 0,240,255,255,195, 85,137,229, 87, 86, 83,
/* 0x0300 */ 131,236, 84,137, 69,228,139, 77, 16,137, 85,224,139, 69, 8,139,
/* 0x0300 */ 131,236,112,137, 69,228,139, 77, 16,137, 85,224,139, 69, 8,139,
/* 0x0310 */ 85, 12,137, 77,212,139, 93, 20,137, 69,220,137, 85,216,137, 93,
/* 0x0320 */ 208,232,206,255,255,255,137,195,137,198,139, 69,224,247,214,139,
/* 0x0330 */ 85,224,137,117,204, 3, 64, 28,137,223, 15,183, 74, 44,137, 69,
/* 0x0340 */ 200, 49,192,102,131,122, 16, 2,137, 77,196,139,117,200, 15,148,
/* 0x0350 */ 192,131,203,255,193,224, 4,137, 69,176,232,149,255,255,255,139,
/* 0x0360 */ 69,196, 49,210, 72,120, 31,139, 77,196,131, 62, 1,117, 18,139,
/* 0x0370 */ 70, 8, 57,216,115, 2,137,195, 3, 70, 20, 57,194,115, 2,137,
/* 0x0380 */ 194,131,198, 32,226,228, 33,251,106, 0, 41,218,106,255, 41,250,
/* 0x0390 */ 131, 77,176, 34,141,114,255,255,117,176,106, 0, 33,254, 86, 83,
/* 0x03a0 */ 232,251,253,255,255,139, 85,224, 1,198,131,196, 24, 41,216,102,
/* 0x03b0 */ 131,122, 44, 0,137,117,240,137, 69,192,199, 69,188, 0, 0, 0,
/* 0x03c0 */ 0, 15,132, 33, 2, 0, 0,131,125,220, 0,116, 35,139, 77,200,
/* 0x03d0 */ 131, 57, 6,117, 27,139, 93,200,186, 3, 0, 0, 0,139, 77,192,
/* 0x03e0 */ 3, 75, 8,139, 69,216,232,238,254,255,255,233,225, 1, 0, 0,
/* 0x03f0 */ 139,117,200,131, 62, 1, 15,133,213, 1, 0, 0,131,125,220, 0,
/* 0x0400 */ 116, 71,131,126, 4, 0,117, 65,139, 69,224,186, 3, 0, 0, 0,
/* 0x0410 */ 139, 77,192, 3, 78, 8, 3, 72, 28,139, 69,216,232,184,254,255,
/* 0x0420 */ 255,139, 85,224,139, 69,216, 15,183, 74, 44,186, 5, 0, 0, 0,
/* 0x0430 */ 232,164,254,255,255,139, 93,224,139, 69,216,186, 4, 0, 0, 0,
/* 0x0440 */ 15,183, 75, 42,232,144,254,255,255,139,117,200,187, 64, 98, 81,
/* 0x0450 */ 115,139, 78, 24,139, 86, 16,131,225, 7,193,225, 2,137, 85,232,
/* 0x0460 */ 211,235,139, 78, 20,137,216,131,224, 7,137, 69,184,139, 69,192,
/* 0x0470 */ 3, 70, 8, 1,193,137,198,137, 77,180,139, 77,204,137, 69,236,
/* 0x0480 */ 33,193, 41,206,131,125,220, 0,141, 60, 10,116, 58,106, 0,106,
/* 0x0490 */ 255,106, 50,141, 71, 3,106, 3, 80, 86,232, 1,253,255,255,131,
/* 0x04a0 */ 196, 24, 57,198, 15,133,219, 0, 0, 0,128,227, 4,139, 69,208,
/* 0x04b0 */ 117, 2, 49,192, 80,139, 69,220,255,117,228,141, 85,232,232, 54,
/* 0x04c0 */ 253,255,255, 88, 90,235, 35,139, 93,200,139, 67, 4, 41,200, 80,
/* 0x04d0 */ 255,117,228,106, 18,255,117,184, 87, 86,232,193,252,255,255,131,
/* 0x04e0 */ 196, 24, 57,198, 15,133,155, 0, 0, 0,137,248,139, 85,204,247,
/* 0x04f0 */ 216, 33,208,246, 69,184, 2,137, 69,172,116, 18,131,125,172, 0,
/* 0x0500 */ 141, 4, 62,116, 9,139, 77,172,198, 0, 0, 64,226,250,131,125,
/* 0x0510 */ 220, 0,116,123,139, 77,200,131, 57, 1,117, 89,246, 65, 24, 1,
/* 0x0520 */ 116, 83,139, 81, 20,139, 89, 8,139, 69,200,141, 12, 26, 3, 77,
/* 0x0530 */ 192, 59, 80, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131,
/* 0x0540 */ 248, 3,119, 17,139, 85,200,107, 69,192, 52,131,122, 4, 0,141,
/* 0x0550 */ 76, 3, 12,117, 32,139, 1, 61,205,128, 97,195,116, 6,199, 1,
/* 0x0560 */ 205,128, 97,195,133,201,116, 13,139, 69,216, 49,210,131,224,254,
/* 0x0570 */ 232,100,253,255,255,137,243,137,249,139, 85,184,106,125, 88,205,
/* 0x0580 */ 128,133,192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139,
/* 0x0590 */ 85,172,141, 4, 23,141, 28, 6, 59, 93,180,115, 30,106, 0,106,
/* 0x05a0 */ 255,106, 50,255,117,184, 41, 93,180,255,117,180, 83,232,238,251,
/* 0x05b0 */ 255,255,131,196, 24, 57,195,116, 24,235,254,131,125,220, 0,116,
/* 0x05c0 */ 16,141, 79, 3, 35, 77,204,131,249, 3,119, 5,106, 91, 88,205,
/* 0x05d0 */ 128,139, 77,224,255, 69,188, 15,183, 65, 44,131, 69,200, 32, 57,
/* 0x05e0 */ 69,188, 15,140,223,253,255,255,131,125,220, 0,116, 18,139, 93,
/* 0x05f0 */ 224,102,131,123, 16, 3,116, 8,139, 93,240,106, 45, 88,205,128,
/* 0x0600 */ 131,125,212, 0,116, 8,139, 69,192,139,117,212,137, 6,139, 85,
/* 0x0610 */ 224,139, 82, 24, 1, 85,192,139, 69,192,141,101,244, 91, 94, 95,
/* 0x0620 */ 201,195, 85,137,229, 87, 86, 83,131,236, 32,199, 69,232, 0, 0,
/* 0x0630 */ 0, 0,139, 69, 8,139,117, 16,137, 69,236,128, 62,235,117, 6,
/* 0x0640 */ 141, 86, 2,137, 85,232,106, 0,139,125, 28,141, 85, 24,139, 93,
/* 0x0650 */ 32,141, 69, 32, 86,232,159,251,255,255,139, 69, 12, 41, 93, 36,
/* 0x0660 */ 137,250,141, 93,240,255,117,232,137, 69, 32,139, 69, 40, 83,255,
/* 0x0670 */ 117,236,137, 69,240,141, 69, 32,141, 79, 52, 80,137,240,137, 77,
/* 0x0680 */ 228,232,116,252,255,255,137,193,137, 69,224,139, 69,236,186, 9,
/* 0x0690 */ 0, 0, 0,232, 65,252,255,255,102,139, 79, 44,131,196, 24, 49,
/* 0x06a0 */ 210,102,133,201,116,123,139, 69,228,131, 56, 3,117,103,139, 93,
/* 0x06b0 */ 240, 49,201, 3, 88, 8,137,202,106, 5, 88,205,128,133,192,137,
/* 0x06c0 */ 198,120, 21,186, 0, 2, 0, 0,137,195,137,249,106, 3, 88,205,
/* 0x06d0 */ 128, 61, 0, 2, 0, 0,116, 10,106,127, 91,106, 1, 88,205,128,
/* 0x06e0 */ 235,254,141, 69,240,137,250,106, 0,137,243, 80,137,240,255,117,
/* 0x06f0 */ 236,106, 0,232, 2,252,255,255,139, 77,240,137, 69,224,139, 69,
/* 0x0700 */ 236,186, 7, 0, 0, 0,232,206,251,255,255,131,196, 16,106, 6,
/* 0x0710 */ 88,205,128,235, 12, 66, 15,183,193,131, 69,228, 32, 57,194,124,
/* 0x0720 */ 133,139, 69,224,141,101,244, 91, 94, 95,201,195
/* 0x0320 */ 208,232,206,255,255,255,137, 69,200,247,208,137, 69,204,139,117,
/* 0x0330 */ 224,139, 69,224, 3,118, 28,102,131,120, 16, 2,139, 85,224,137,
/* 0x0340 */ 117,196, 15,148,192, 15,183,122, 44, 15,182,192,131,203,255,193,
/* 0x0350 */ 224, 4,137, 69,148,232,154,255,255,255,139, 77,200,137,248, 49,
/* 0x0360 */ 210, 72,137, 77,188,120, 30,137,249,131, 62, 1,117, 18,139, 70,
/* 0x0370 */ 8, 57,216,115, 2,137,195, 3, 70, 20, 57,194,115, 2,137,194,
/* 0x0380 */ 131,198, 32,226,228,139,125,188,106, 0,106,255, 33,223,131, 77,
/* 0x0390 */ 148, 34, 41,250,255,117,148, 43, 85,188,106, 0,141,114,255, 35,
/* 0x03a0 */ 117,188, 86, 87,232,247,253,255,255,139, 85,224, 1,198,131,196,
/* 0x03b0 */ 24, 41,248,102,131,122, 44, 0,137,117,240,137, 69,192,199, 69,
/* 0x03c0 */ 184, 0, 0, 0, 0, 15,132,128, 2, 0, 0,131,125,220, 0,116,
/* 0x03d0 */ 35,139, 77,196,131, 57, 6,117, 27,139, 93,196,186, 3, 0, 0,
/* 0x03e0 */ 0,139, 77,192, 3, 75, 8,139, 69,216,232,234,254,255,255,233,
/* 0x03f0 */ 64, 2, 0, 0,139,117,196,131, 62, 1, 15,133, 52, 2, 0, 0,
/* 0x0400 */ 131,125,220, 0,116, 71,131,126, 4, 0,117, 65,139, 69,224,186,
/* 0x0410 */ 3, 0, 0, 0,139, 77,192, 3, 78, 8, 3, 72, 28,139, 69,216,
/* 0x0420 */ 232,180,254,255,255,139, 85,224,139, 69,216, 15,183, 74, 44,186,
/* 0x0430 */ 5, 0, 0, 0,232,160,254,255,255,139, 93,224,139, 69,216,186,
/* 0x0440 */ 4, 0, 0, 0, 15,183, 75, 42,232,140,254,255,255,139,117,196,
/* 0x0450 */ 187, 64, 98, 81,115,139, 78, 24,139, 86, 16,131,225, 7,193,225,
/* 0x0460 */ 2,137, 85,232,211,235,139, 78, 20,137,216,131,224, 7,137, 69,
/* 0x0470 */ 180,139, 69,192, 3, 70, 8, 1,193,137,198,137, 77,176,139, 77,
/* 0x0480 */ 204,137, 69,236, 33,193, 41,206,131,125,220, 0,141, 60, 10,116,
/* 0x0490 */ 58,106, 0,106,255,106, 50,141, 71, 3,106, 3, 80, 86,232,253,
/* 0x04a0 */ 252,255,255,131,196, 24, 57,198, 15,133, 57, 1, 0, 0,128,227,
/* 0x04b0 */ 4,139, 69,208,117, 2, 49,192, 80,139, 69,220,255,117,228,141,
/* 0x04c0 */ 85,232,232, 50,253,255,255, 88, 90,235, 35,139, 93,196,139, 67,
/* 0x04d0 */ 4, 41,200, 80,255,117,228,106, 18,255,117,180, 87, 86,232,189,
/* 0x04e0 */ 252,255,255,131,196, 24, 57,198, 15,133,249, 0, 0, 0,137,248,
/* 0x04f0 */ 139, 85,204,247,216, 33,208,246, 69,180, 2,137, 69,144,116, 18,
/* 0x0500 */ 131,125,144, 0,141, 4, 62,116, 9,139, 77,144,198, 0, 0, 64,
/* 0x0510 */ 226,250,131,125,220, 0, 15,132,213, 0, 0, 0,139, 77,196,199,
/* 0x0520 */ 69,172, 0, 0, 0, 0,131, 57, 1, 15,133,168, 0, 0, 0,246,
/* 0x0530 */ 65, 24, 1, 15,132,158, 0, 0, 0,139, 81, 20,139, 73, 8,139,
/* 0x0540 */ 69,196,141, 28, 10, 3, 93,192, 59, 80, 16,137, 93,140,117, 14,
/* 0x0550 */ 137,216,247,216, 37,255, 15, 0, 0,131,248, 3,119, 57,107, 69,
/* 0x0560 */ 192, 52,139, 85,196,131,122, 4, 0,141, 76, 1, 12,137, 77,140,
/* 0x0570 */ 116, 37,106, 0,106,255,106, 34,106, 3,104, 0, 16, 0, 0,106,
/* 0x0580 */ 0,199, 69,172, 1, 0, 0, 0,232, 19,252,255,255,131,196, 24,
/* 0x0590 */ 133,192,137, 69,140,116, 64,139, 77,140,139, 1, 61,205,128, 97,
/* 0x05a0 */ 195,116, 6,199, 1,205,128, 97,195,131,125,172, 0,116, 18,185,
/* 0x05b0 */ 4, 0, 0, 0,186, 5, 0, 0, 0,139, 93,140,106,125, 88,205,
/* 0x05c0 */ 128,131,125,140, 0,116, 16,139, 69,216, 49,210,139, 77,140,131,
/* 0x05d0 */ 224,254,232, 2,253,255,255,137,243,137,249,139, 85,180,106,125,
/* 0x05e0 */ 88,205,128,133,192,116, 10,106,127, 91,106, 1, 88,205,128,235,
/* 0x05f0 */ 254,139, 85,144,141, 4, 23, 1,198, 59,117,176,115, 30,106, 0,
/* 0x0600 */ 106,255,106, 50,255,117,180, 41,117,176,255,117,176, 86,232,141,
/* 0x0610 */ 251,255,255,131,196, 24, 57,198,116, 26,235,254,131,125,220, 0,
/* 0x0620 */ 116, 18,141, 79, 3, 35, 77,204,131,249, 3,119, 7,137,243,106,
/* 0x0630 */ 91, 88,205,128,139,117,224,255, 69,184, 15,183, 70, 44,131, 69,
/* 0x0640 */ 196, 32, 57, 69,184, 15,140,128,253,255,255,131,125,220, 0,116,
/* 0x0650 */ 23,139, 69,224,102,131,120, 16, 3,116, 13,139, 85,240,137, 85,
/* 0x0660 */ 156,137,211,106, 45, 88,205,128,131,125,212, 0,116, 8,139, 69,
/* 0x0670 */ 192,139,117,212,137, 6,139, 85,224,139, 82, 24, 1, 85,192,139,
/* 0x0680 */ 69,192,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83,
/* 0x0690 */ 131,236, 32,199, 69,232, 0, 0, 0, 0,139, 69, 8,139,117, 16,
/* 0x06a0 */ 137, 69,236,128, 62,235,117, 6,141, 86, 2,137, 85,232,106, 0,
/* 0x06b0 */ 139,125, 28,141, 85, 24,139, 93, 32,141, 69, 32, 86,232, 55,251,
/* 0x06c0 */ 255,255,139, 69, 12, 41, 93, 36,137,250,141, 93,240,255,117,232,
/* 0x06d0 */ 137, 69, 32,139, 69, 40, 83,255,117,236,137, 69,240,141, 69, 32,
/* 0x06e0 */ 141, 79, 52, 80,137,240,137, 77,228,232, 12,252,255,255,137,193,
/* 0x06f0 */ 137, 69,224,139, 69,236,186, 9, 0, 0, 0,232,217,251,255,255,
/* 0x0700 */ 102,139, 79, 44,131,196, 24, 49,210,102,133,201,116,123,139, 69,
/* 0x0710 */ 228,131, 56, 3,117,103,139, 93,240, 49,201, 3, 88, 8,137,202,
/* 0x0720 */ 106, 5, 88,205,128,133,192,137,198,120, 21,186, 0, 2, 0, 0,
/* 0x0730 */ 137,195,137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,
/* 0x0740 */ 106,127, 91,106, 1, 88,205,128,235,254,141, 69,240,137,250,106,
/* 0x0750 */ 0,137,243, 80,137,240,255,117,236,106, 0,232,154,251,255,255,
/* 0x0760 */ 139, 77,240,137, 69,224,139, 69,236,186, 7, 0, 0, 0,232,102,
/* 0x0770 */ 251,255,255,131,196, 16,106, 6, 88,205,128,235, 12, 66, 15,183,
/* 0x0780 */ 193,131, 69,228, 32, 57,194,124,133,139, 69,224,141,101,244, 91,
/* 0x0790 */ 94, 95,201,195
};