ELF2: stub for i386 shared library

WIP: stub is debugged, but compressed input needs work
	modified:   stub/src/arm.v4a-linux.elf-so_entry.S
	modified:   stub/src/i386-linux.elf-so_entry.S
	modified:   stub/src/i386-linux.elf-so_fold.S
	modified:   stub/src/i386-linux.elf-so_main.c
	modified:   stub/src/include/linux.h
           plus generated *.h *.dump
This commit is contained in:
John Reiser 2024-08-12 07:53:00 -07:00
parent 94eebc3ee5
commit cb39e6e0b8
15 changed files with 8104 additions and 7049 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* i386-linux.elf-entry.h /* i386-linux.elf-entry.h
created from i386-linux.elf-entry.bin, 3772 (0xebc) bytes created from i386-linux.elf-entry.bin, 3678 (0xe5e) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@ -32,14 +32,14 @@
/* clang-format off */ /* clang-format off */
#define STUB_I386_LINUX_ELF_ENTRY_SIZE 3772 #define STUB_I386_LINUX_ELF_ENTRY_SIZE 3678
#define STUB_I386_LINUX_ELF_ENTRY_ADLER32 0xc89f6db4 #define STUB_I386_LINUX_ELF_ENTRY_ADLER32 0x5d286322
#define STUB_I386_LINUX_ELF_ENTRY_CRC32 0xc0a3e8ec #define STUB_I386_LINUX_ELF_ENTRY_CRC32 0x4cbc0239
unsigned char stub_i386_linux_elf_entry[3772] = { unsigned char stub_i386_linux_elf_entry[3678] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 168, 6, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, /* 0x0020 */ 196, 6, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0030 */ 8, 0, 5, 0,243, 15, 30,251,232,252,255,255,255, 1,219,116, /* 0x0030 */ 8, 0, 5, 0,243, 15, 30,251,232,252,255,255,255, 1,219,116,
/* 0x0040 */ 2,243,195,139, 30,131,238,252, 17,219,195, 94,131,236, 28,141, /* 0x0040 */ 2,243,195,139, 30,131,238,252, 17,219,195, 94,131,236, 28,141,
/* 0x0050 */ 124, 36, 32,232,190, 1, 0, 0,232,185, 1, 0, 0,139, 7,139, /* 0x0050 */ 124, 36, 32,232,190, 1, 0, 0,232,185, 1, 0, 0,139, 7,139,
@ -71,206 +71,200 @@ unsigned char stub_i386_linux_elf_entry[3772] = {
/* 0x01f0 */ 229, 87,139, 77, 16,139, 69, 12,139,125, 8,243,170, 95, 93,195, /* 0x01f0 */ 229, 87,139, 77, 16,139, 69, 12,139,125, 8,243,170, 95, 93,195,
/* 0x0200 */ 85,137,229, 87, 86,139, 77, 16,139,117, 12,139,125, 8,243,164, /* 0x0200 */ 85,137,229, 87, 86,139, 77, 16,139,117, 12,139,125, 8,243,164,
/* 0x0210 */ 137,248, 94, 95, 93,195,139, 7,131,199, 4,133,192,117,247,195, /* 0x0210 */ 137,248, 94, 95, 93,195,139, 7,131,199, 4,133,192,117,247,195,
/* 0x0220 */ 204,195, 0, 0, 85,137,229, 86, 83,131,236, 64,139,117, 8,106, /* 0x0220 */ 204,195, 0, 0, 85,137,229, 86, 83,131,236, 72,106, 64,104,255,
/* 0x0230 */ 64,104,255, 0, 0, 0,141, 93,184, 83,232,252,255,255,255, 83, /* 0x0230 */ 0, 0, 0,141,117,184, 86,232,252,255,255,255,131,196, 12,139,
/* 0x0240 */ 86,232,252,255,255,255,137,194,131,196, 20,133,192,120, 21, 15, /* 0x0240 */ 93, 8,137,241,106,106, 88,205,128,137,194,133,192,120, 21, 15,
/* 0x0250 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64, /* 0x0250 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64,
/* 0x0260 */ 0, 0,116, 23,131,250,254,117, 16,104,192, 1, 0, 0, 86,232, /* 0x0260 */ 0, 0,116, 22,131,250,254,117, 15,185,192, 1, 0, 0,139, 93,
/* 0x0270 */ 252,255,255,255,137,194,131,196, 8,137,209,137,200,141,101,248, /* 0x0270 */ 8,106, 39, 88,205,128,137,194,137,209,137,200,141,101,248, 91,
/* 0x0280 */ 91, 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63, /* 0x0280 */ 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63,131,
/* 0x0290 */ 131,250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232, /* 0x0290 */ 250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232, 43,
/* 0x02a0 */ 43,131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12, /* 0x02a0 */ 131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12, 0,
/* 0x02b0 */ 0, 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90, /* 0x02b0 */ 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90,139,
/* 0x02c0 */ 139, 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66, /* 0x02c0 */ 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66, 8,
/* 0x02d0 */ 8,102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81, /* 0x02d0 */ 102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81,232,
/* 0x02e0 */ 232, 63,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114, /* 0x02e0 */ 64,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114,111,
/* 0x02f0 */ 111, 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0, /* 0x02f0 */ 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0, 94,
/* 0x0300 */ 94,185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137, /* 0x0300 */ 185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137, 69,
/* 0x0310 */ 69,232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3, /* 0x0310 */ 232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3, 88,
/* 0x0320 */ 88,205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133, /* 0x0320 */ 205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133,255,
/* 0x0330 */ 255, 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6, /* 0x0330 */ 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6, 70,
/* 0x0340 */ 70,128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62, /* 0x0340 */ 128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62, 47,
/* 0x0350 */ 47,117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252, /* 0x0350 */ 117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252,255,
/* 0x0360 */ 255,255,255,137,195,198, 0, 0,255,117, 8,232,180,254,255,255, /* 0x0360 */ 255,255,137,195,198, 0, 0,255,117, 8,232,181,254,255,255,131,
/* 0x0370 */ 131,196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90, /* 0x0370 */ 196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90,139,
/* 0x0380 */ 139, 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198, /* 0x0380 */ 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198, 3,
/* 0x0390 */ 3, 0,255,117, 8,232,138,254,255,255,232, 5, 0, 0, 0, 47, /* 0x0390 */ 0,255,117, 8,232,139,254,255,255,232, 5, 0, 0, 0, 47,117,
/* 0x03a0 */ 117,112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205, /* 0x03a0 */ 112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205,128,
/* 0x03b0 */ 128,137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193, /* 0x03b0 */ 137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193,232,
/* 0x03c0 */ 232, 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193, /* 0x03c0 */ 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193,232,
/* 0x03d0 */ 232, 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2, /* 0x03d0 */ 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2,198,
/* 0x03e0 */ 198, 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201, /* 0x03e0 */ 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201,195,
/* 0x03f0 */ 195, 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73, /* 0x03f0 */ 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73,131,
/* 0x0400 */ 131,249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131, /* 0x0400 */ 249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131,200,
/* 0x0410 */ 200, 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249, /* 0x0410 */ 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249,255,
/* 0x0420 */ 255,117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86, /* 0x0420 */ 117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86, 83,
/* 0x0430 */ 83,129,236, 60, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0, /* 0x0430 */ 129,236, 68, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0, 0,
/* 0x0440 */ 0,117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0, /* 0x0440 */ 117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,137,
/* 0x0450 */ 137,243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0, /* 0x0450 */ 243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,137,
/* 0x0460 */ 137,243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0, /* 0x0460 */ 243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0, 0,
/* 0x0470 */ 0, 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0, /* 0x0470 */ 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0,190,
/* 0x0480 */ 190,192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199, /* 0x0480 */ 192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,133,
/* 0x0490 */ 133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99, /* 0x0490 */ 192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,114,
/* 0x04a0 */ 114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4, /* 0x04a0 */ 101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,141,
/* 0x04b0 */ 141,157,244,239,255,255, 83,232,252,255,255,255,190, 0, 0, 0, /* 0x04b0 */ 181,244,239,255,255,137,243,106,122, 88,205,128,199,133,220,239,
/* 0x04c0 */ 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,199, 4, 36, 3, 0, /* 0x04c0 */ 255,255, 0, 0, 0, 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,
/* 0x04d0 */ 0, 0, 83, 80,232, 24,255,255,255,131,196, 12,133,192,116, 39, /* 0x04d0 */ 106, 3, 86, 80,232, 23,255,255,255,131,196, 12,133,192,116, 45,
/* 0x04e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 83, 80,232,254, /* 0x04e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 86, 80,232,253,
/* 0x04f0 */ 254,255,255,131,196, 12,133,192,117, 13,128,189,118,240,255,255, /* 0x04f0 */ 254,255,255,131,196, 12,133,192,117, 19,128,189,118,240,255,255,
/* 0x0500 */ 52,126, 4,102,190, 1, 0,133,246,117,123,131,125, 16, 0,117, /* 0x0500 */ 52,126, 10,199,133,220,239,255,255, 1, 0, 0, 0,131,189,220,
/* 0x0510 */ 28,232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244, /* 0x0510 */ 239,255,255, 0, 15,133,128, 0, 0, 0,131,125, 16, 0,117, 28,
/* 0x0520 */ 239,255,255,137, 69, 16,198,133,244,239,255,255, 0,133,246,117, /* 0x0520 */ 232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,239,
/* 0x0530 */ 85,131,255,218,117, 80,131,125, 16, 0,116, 74,139, 85, 16,128, /* 0x0530 */ 255,255,137, 69, 16,198,133,244,239,255,255, 0,131,189,220,239,
/* 0x0540 */ 58, 0,117, 26,141,133,244,239,255,255, 80, 82,232, 84,253,255, /* 0x0540 */ 255,255, 0,117, 85,131,255,218,117, 80,131,125, 16, 0,116, 74,
/* 0x0550 */ 255,131,196, 8,137,193,133,192, 15,136, 1, 1, 0, 0,185,194, /* 0x0550 */ 139, 85, 16,128, 58, 0,117, 26,141,133,244,239,255,255, 80, 82,
/* 0x0560 */ 0, 0, 0,191,192, 1, 0, 0,139, 93, 16,137,250,106, 5, 88, /* 0x0560 */ 232, 63,253,255,255,131,196, 8,137,193,133,192, 15,136, 6, 1,
/* 0x0570 */ 205,128,137,199,137,193,133,192, 15,136,225, 0, 0, 0,139, 93, /* 0x0570 */ 0, 0,185,194, 0, 0, 0,190,192, 1, 0, 0,139, 93, 16,137,
/* 0x0580 */ 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,148, 0, 0, 0, /* 0x0580 */ 242,106, 5, 88,205,128,137,199,137,193,133,192, 15,136,230, 0,
/* 0x0590 */ 133,246,116, 22,137,251,139, 77, 12,106, 93, 88,205,128,137,193, /* 0x0590 */ 0, 0,139, 93, 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,
/* 0x05a0 */ 133,192, 15,136,183, 0, 0, 0,235,122,141,133,244,239,255,255, /* 0x05a0 */ 153, 0, 0, 0,131,189,220,239,255,255, 0,116, 22,137,251,139,
/* 0x05b0 */ 104, 0, 16, 0, 0,106, 0, 80,232,252,255,255,255,139, 69, 12, /* 0x05b0 */ 77, 12,106, 93, 88,205,128,137,193,133,192, 15,136,183, 0, 0,
/* 0x05c0 */ 137,133,208,239,255,255,131,196, 12,133,192,116, 73,141,181,244, /* 0x05c0 */ 0,235,122,141,133,244,239,255,255,104, 0, 16, 0, 0,106, 0,
/* 0x05d0 */ 239,255,255,139,149,208,239,255,255,137,149,184,239,255,255,129, /* 0x05d0 */ 80,232,252,255,255,255,139, 69, 12,137,133,200,239,255,255,131,
/* 0x05e0 */ 250, 0, 16, 0, 0,118, 10,199,133,184,239,255,255, 0, 16, 0, /* 0x05e0 */ 196, 12,133,192,116, 73,141,181,244,239,255,255,139,149,200,239,
/* 0x05f0 */ 0,137,251,137,241,139,149,184,239,255,255,106, 4, 88,205,128, /* 0x05f0 */ 255,255,137,149,176,239,255,255,129,250, 0, 16, 0, 0,118, 10,
/* 0x0600 */ 59,133,184,239,255,255,117, 73,139,133,184,239,255,255, 41,133, /* 0x0600 */ 199,133,176,239,255,255, 0, 16, 0, 0,137,251,137,241,139,149,
/* 0x0610 */ 208,239,255,255,117,189,185, 0, 0, 0, 0,137,251,137,202,106, /* 0x0610 */ 176,239,255,255,106, 4, 88,205,128, 59,133,176,239,255,255,117,
/* 0x0620 */ 19, 88,205,128,106, 0, 87,131,125, 8, 1, 25,192,131,224,240, /* 0x0620 */ 73,139,133,176,239,255,255, 41,133,200,239,255,255,117,189,185,
/* 0x0630 */ 131,192, 17, 80,106, 3,255,117, 12,255,117, 8,232,252,255,255, /* 0x0630 */ 0, 0, 0, 0,137,251,137,202,106, 19, 88,205,128,106, 0, 87,
/* 0x0640 */ 255,137,194,131,196, 24,137,193, 61, 0,240,255,255,119, 16,235, /* 0x0640 */ 131,125, 8, 1, 25,192,131,224,240,131,192, 17, 80,106, 3,255,
/* 0x0650 */ 7,185,228,255,255,255,235, 7,141, 71, 1,137,193, 9,209,137, /* 0x0650 */ 117, 12,255,117, 8,232,252,255,255,255,137,194,131,196, 24,137,
/* 0x0660 */ 200,141,101,244, 91, 94, 95,201,195, 90,232, 19, 0, 0, 0, 0, /* 0x0660 */ 193, 61, 0,240,255,255,119, 16,235, 7,185,228,255,255,255,235,
/* 0x0670 */ 0, 0, 0, 0, 46,115,121,109,116, 97, 98, 0, 46,115,116,114, /* 0x0670 */ 7,141, 71, 1,137,193, 9,209,137,200,141,101,244, 91, 94, 95,
/* 0x0680 */ 116, 97, 98, 0, 46,115,104,115,116,114,116, 97, 98, 0, 46,114, /* 0x0680 */ 201,195, 90,232, 19, 0, 0, 0, 0, 0, 0, 0, 0, 46,115,121,
/* 0x0690 */ 101,108, 69, 76, 70, 77, 65, 73, 78, 88, 0, 46,114,101,108, 69, /* 0x0690 */ 109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,104,
/* 0x06a0 */ 76, 70, 77, 65, 73, 78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06a0 */ 115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76, 70, 77, 65,
/* 0x06b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06b0 */ 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x06c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06d0 */ 31, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, /* 0x06d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06e0 */ 52, 0, 0, 0, 53, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
/* 0x06f0 */ 4, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, /* 0x06f0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
/* 0x0700 */ 0, 0, 0, 0, 0, 0, 0, 0, 36, 9, 0, 0, 96, 0, 0, 0, /* 0x0700 */ 78, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
/* 0x0710 */ 6, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, /* 0x0710 */ 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0720 */ 44, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0720 */ 0, 0, 0, 0, 64, 9, 0, 0, 72, 0, 0, 0, 6, 0, 0, 0,
/* 0x0730 */ 105, 6, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0730 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0,
/* 0x0740 */ 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, /* 0x0740 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130, 6, 0, 0,
/* 0x0750 */ 0, 0, 0, 0, 0, 0, 0, 0,132, 9, 0, 0, 16, 0, 0, 0, /* 0x0750 */ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0760 */ 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, /* 0x0760 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0770 */ 17, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0770 */ 0, 0, 0, 0,136, 9, 0, 0, 16, 0, 0, 0, 6, 0, 0, 0,
/* 0x0780 */ 115, 6, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0780 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0,
/* 0x0790 */ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, /* 0x0790 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 6, 0, 0,
/* 0x07a0 */ 0, 0, 0, 0, 0, 0, 0, 0,232, 7, 0, 0,224, 0, 0, 0, /* 0x07a0 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x07b0 */ 7, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, /* 0x07b0 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x07c0 */ 9, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x07c0 */ 0, 0, 0, 0, 4, 8, 0, 0,224, 0, 0, 0, 7, 0, 0, 0,
/* 0x07d0 */ 200, 8, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x07d0 */ 3, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
/* 0x07e0 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x07e0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 8, 0, 0,
/* 0x07f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x07f0 */ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0800 */ 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0800 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0810 */ 0, 0, 0, 0, 3, 0, 3, 0, 1, 0, 0, 0,247, 3, 0, 0, /* 0x0810 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0820 */ 62, 2, 0, 0, 18, 0, 1, 0, 17, 0, 0, 0, 0, 0, 0, 0, /* 0x0820 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0830 */ 0, 0, 0, 0, 16, 0, 0, 0, 25, 0, 0, 0,204, 1, 0, 0, /* 0x0830 */ 3, 0, 3, 0, 1, 0, 0, 0,246, 3, 0, 0, 88, 2, 0, 0,
/* 0x0840 */ 0, 0, 0, 0, 16, 0, 1, 0, 33, 0, 0, 0,114, 1, 0, 0, /* 0x0840 */ 18, 0, 1, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0850 */ 0, 0, 0, 0, 16, 0, 1, 0, 38, 0, 0, 0,149, 1, 0, 0, /* 0x0850 */ 16, 0, 0, 0, 25, 0, 0, 0,204, 1, 0, 0, 0, 0, 0, 0,
/* 0x0860 */ 0, 0, 0, 0, 16, 0, 1, 0, 44, 0, 0, 0,128, 1, 0, 0, /* 0x0860 */ 16, 0, 1, 0, 33, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0,
/* 0x0870 */ 0, 0, 0, 0, 16, 0, 1, 0, 59, 0, 0, 0, 0, 0, 0, 0, /* 0x0870 */ 16, 0, 1, 0, 38, 0, 0, 0,149, 1, 0, 0, 0, 0, 0, 0,
/* 0x0880 */ 0, 0, 0, 0, 16, 0, 1, 0, 66, 0, 0, 0,186, 1, 0, 0, /* 0x0880 */ 16, 0, 1, 0, 44, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0,
/* 0x0890 */ 0, 0, 0, 0, 16, 0, 1, 0, 73, 0, 0, 0,236, 1, 0, 0, /* 0x0890 */ 16, 0, 1, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08a0 */ 0, 0, 0, 0, 16, 0, 1, 0, 81, 0, 0, 0,131, 1, 0, 0, /* 0x08a0 */ 16, 0, 1, 0, 66, 0, 0, 0,186, 1, 0, 0, 0, 0, 0, 0,
/* 0x08b0 */ 0, 0, 0, 0, 16, 0, 1, 0, 86, 0, 0, 0,164, 1, 0, 0, /* 0x08b0 */ 16, 0, 1, 0, 73, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0,
/* 0x08c0 */ 0, 0, 0, 0, 16, 0, 1, 0, 0,117,112,120, 95,109,109, 97, /* 0x08c0 */ 16, 0, 1, 0, 81, 0, 0, 0,131, 1, 0, 0, 0, 0, 0, 0,
/* 0x08d0 */ 112, 95, 97,110,100, 95,102,100, 0, 79, 95, 66, 73, 78, 70, 79, /* 0x08d0 */ 16, 0, 1, 0, 86, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0,
/* 0x08e0 */ 0,109,101,109,112, 99,112,121, 0,109,109, 97,112, 0,117,110, /* 0x08e0 */ 16, 0, 1, 0, 0,117,112,120, 95,109,109, 97,112, 95, 97,110,
/* 0x08f0 */ 97,109,101, 0,103,101,116, 95,117,112,120,102,110, 95,112, 97, /* 0x08f0 */ 100, 95,102,100, 0, 79, 95, 66, 73, 78, 70, 79, 0,109,101,109,
/* 0x0900 */ 116,104, 0, 95,115,116, 97,114,116, 0,109,101,109,115,101,116, /* 0x0900 */ 112, 99,112,121, 0,109,109, 97,112, 0,117,110, 97,109,101, 0,
/* 0x0910 */ 0,109,121, 95, 98,107,112,116, 0,115,116, 97,116, 0,109,107, /* 0x0910 */ 103,101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 0, 95,
/* 0x0920 */ 100,105,114, 0, 5, 0, 0, 0, 2, 2, 0, 0,165, 0, 0, 0, /* 0x0920 */ 115,116, 97,114,116, 0,109,101,109,115,101,116, 0,109,121, 95,
/* 0x0930 */ 2, 3, 0, 0, 74, 1, 0, 0, 2, 6, 0, 0, 7, 2, 0, 0, /* 0x0930 */ 98,107,112,116, 0,115,116, 97,116, 0,109,107,100,105,114, 0,
/* 0x0940 */ 2, 10, 0, 0, 14, 2, 0, 0, 2, 12, 0, 0, 60, 2, 0, 0, /* 0x0940 */ 5, 0, 0, 0, 2, 2, 0, 0,165, 0, 0, 0, 2, 3, 0, 0,
/* 0x0950 */ 2, 13, 0, 0, 43, 3, 0, 0, 2, 5, 0, 0,117, 4, 0, 0, /* 0x0950 */ 74, 1, 0, 0, 2, 6, 0, 0, 4, 2, 0, 0, 2, 10, 0, 0,
/* 0x0960 */ 2, 11, 0, 0,132, 4, 0, 0, 2, 7, 0, 0,222, 4, 0, 0, /* 0x0960 */ 42, 3, 0, 0, 2, 5, 0, 0,116, 4, 0, 0, 2, 11, 0, 0,
/* 0x0970 */ 2, 8, 0, 0,133, 5, 0, 0, 2, 10, 0, 0, 9, 6, 0, 0, /* 0x0970 */ 237, 4, 0, 0, 2, 8, 0, 0,158, 5, 0, 0, 2, 10, 0, 0,
/* 0x0980 */ 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0, 6, 0, 0, 0, /* 0x0980 */ 34, 6, 0, 0, 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0,
/* 0x0990 */ 1, 4, 0, 0,102,105,108,101, 32,102,111,114,109, 97,116, 32, /* 0x0990 */ 6, 0, 0, 0, 1, 4, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x09a0 */ 101,108,102, 51, 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116, /* 0x09a0 */ 109, 97,116, 32,101,108,102, 51, 50, 45,105, 51, 56, 54, 10, 10,
/* 0x09b0 */ 105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, /* 0x09b0 */ 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,
/* 0x09c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, /* 0x09c0 */ 109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101,
/* 0x09d0 */ 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, /* 0x09d0 */ 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32,
/* 0x09e0 */ 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, /* 0x09e0 */ 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,
/* 0x09f0 */ 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, /* 0x09f0 */ 102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10,
/* 0x0a00 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 54, /* 0x0a00 */ 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32,
/* 0x0a10 */ 51, 53, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, /* 0x0a10 */ 32, 32, 48, 54, 52,101, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51,
/* 0x0a20 */ 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, /* 0x0a20 */ 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x0a30 */ 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, /* 0x0a30 */ 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32,
/* 0x0a40 */ 48, 97, 32, 32, 48, 32, 32, 48, 32, 32, 48, 54, 54, 57, 32, 32, /* 0x0a40 */ 32, 32, 32, 32, 48, 97, 32, 32, 48, 32, 32, 48, 32, 32, 48, 54,
/* 0x0a50 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, /* 0x0a50 */ 56, 50, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x0a60 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, /* 0x0a60 */ 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58,
/* 0x0a70 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, /* 0x0a70 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x0a80 */ 70, 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x0a80 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70,
/* 0x0a90 */ 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x0a90 */ 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x0aa0 */ 100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, /* 0x0aa0 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x0ab0 */ 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 51,102, 55, 32, /* 0x0ab0 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48,
/* 0x0ac0 */ 103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x0ac0 */ 51,102, 54, 32,103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77,
/* 0x0ad0 */ 32, 48, 50, 51,101, 32,117,112,120, 95,109,109, 97,112, 95, 97, /* 0x0ad0 */ 65, 73, 78, 88, 32, 48, 50, 53, 56, 32,117,112,120, 95,109,109,
/* 0x0ae0 */ 110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x0ae0 */ 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48,
/* 0x0af0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, /* 0x0af0 */ 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42,
/* 0x0b00 */ 95, 66, 73, 78, 70, 79, 10, 48, 48, 48, 48, 48, 49, 99, 99, 32, /* 0x0b00 */ 32, 48, 32, 79, 95, 66, 73, 78, 70, 79, 10, 48, 48, 48, 48, 48,
/* 0x0b10 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x0b10 */ 49, 99, 99, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x0b20 */ 32, 48, 32,109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, /* 0x0b20 */ 65, 73, 78, 88, 32, 48, 32,109,101,109,112, 99,112,121, 10, 48,
/* 0x0b30 */ 49, 55, 50, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x0b30 */ 48, 48, 48, 48, 49, 55, 50, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x0b40 */ 65, 73, 78, 88, 32, 48, 32,109,109, 97,112, 10, 48, 48, 48, 48, /* 0x0b40 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,109, 97,112, 10,
/* 0x0b50 */ 48, 49, 57, 53, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, /* 0x0b50 */ 48, 48, 48, 48, 48, 49, 57, 53, 32,103, 32, 32, 32, 32, 32, 32,
/* 0x0b60 */ 77, 65, 73, 78, 88, 32, 48, 32,117,110, 97,109,101, 10, 48, 48, /* 0x0b60 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,117,110, 97,109,
/* 0x0b70 */ 48, 48, 48, 49, 56, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, /* 0x0b70 */ 101, 10, 48, 48, 48, 48, 48, 49, 56, 48, 32,103, 32, 32, 32, 32,
/* 0x0b80 */ 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,103,101,116, 95,117,112, /* 0x0b80 */ 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,103,101,
/* 0x0b90 */ 120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x0b90 */ 116, 95,117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48, 48,
/* 0x0ba0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, /* 0x0ba0 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76,
/* 0x0bb0 */ 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, /* 0x0bb0 */ 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10,
/* 0x0bc0 */ 48, 49, 98, 97, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, /* 0x0bc0 */ 48, 48, 48, 48, 48, 49, 98, 97, 32,103, 32, 32, 32, 32, 32, 32,
/* 0x0bd0 */ 77, 65, 73, 78, 88, 32, 48, 32,109,101,109,115,101,116, 10, 48, /* 0x0bd0 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,101,109,115,
/* 0x0be0 */ 48, 48, 48, 48, 49,101, 99, 32,103, 32, 32, 32, 32, 32, 32, 32, /* 0x0be0 */ 101,116, 10, 48, 48, 48, 48, 48, 49,101, 99, 32,103, 32, 32, 32,
/* 0x0bf0 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,121, 95, 98,107, /* 0x0bf0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,
/* 0x0c00 */ 112,116, 10, 48, 48, 48, 48, 48, 49, 56, 51, 32,103, 32, 32, 32, /* 0x0c00 */ 121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 49, 56, 51, 32,
/* 0x0c10 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,115, /* 0x0c10 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0c20 */ 116, 97,116, 10, 48, 48, 48, 48, 48, 49, 97, 52, 32,103, 32, 32, /* 0x0c20 */ 32, 48, 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 49, 97, 52,
/* 0x0c30 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, /* 0x0c30 */ 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0c40 */ 109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, /* 0x0c40 */ 88, 32, 48, 32,109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67,
/* 0x0c50 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, /* 0x0c50 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79,
/* 0x0c60 */ 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, /* 0x0c60 */ 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70,
/* 0x0c70 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0c70 */ 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x0c80 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, /* 0x0c80 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x0c90 */ 48, 48, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, /* 0x0c90 */ 48, 48, 48, 48, 48, 48, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67,
/* 0x0ca0 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, /* 0x0ca0 */ 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0cb0 */ 48, 48, 48, 48, 48, 97, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, /* 0x0cb0 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 97, 53, 32, 82, 95, 51, 56,
/* 0x0cc0 */ 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,112,120, 95,109,109, /* 0x0cc0 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,112,
/* 0x0cd0 */ 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 49, /* 0x0cd0 */ 120, 95,109,109, 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48,
/* 0x0ce0 */ 52, 97, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, /* 0x0ce0 */ 48, 48, 48, 49, 52, 97, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0cf0 */ 32, 32, 32, 32, 32,109,109, 97,112, 10, 48, 48, 48, 48, 48, 50, /* 0x0cf0 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,112, 10, 48, 48,
/* 0x0d00 */ 48, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, /* 0x0d00 */ 48, 48, 48, 50, 48, 52, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0d10 */ 32, 32, 32, 32, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, /* 0x0d10 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,116, 10,
/* 0x0d20 */ 48, 50, 48,101, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, /* 0x0d20 */ 48, 48, 48, 48, 48, 51, 50, 97, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0d30 */ 32, 32, 32, 32, 32, 32, 32,115,116, 97,116, 10, 48, 48, 48, 48, /* 0x0d30 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,112, 99,
/* 0x0d40 */ 48, 50, 51, 99, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, /* 0x0d40 */ 112,121, 10, 48, 48, 48, 48, 48, 52, 55, 52, 32, 82, 95, 51, 56,
/* 0x0d50 */ 32, 32, 32, 32, 32, 32, 32,109,107,100,105,114, 10, 48, 48, 48, /* 0x0d50 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,121,
/* 0x0d60 */ 48, 48, 51, 50, 98, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, /* 0x0d60 */ 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 52,101,100, 32, 82,
/* 0x0d70 */ 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,112, 99,112,121, 10, /* 0x0d70 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0d80 */ 48, 48, 48, 48, 48, 52, 55, 53, 32, 82, 95, 51, 56, 54, 95, 80, /* 0x0d80 */ 32,103,101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 10,
/* 0x0d90 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,121, 95, 98,107, /* 0x0d90 */ 48, 48, 48, 48, 48, 53, 57,101, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0da0 */ 112,116, 10, 48, 48, 48, 48, 48, 52, 56, 52, 32, 82, 95, 51, 56, /* 0x0da0 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,
/* 0x0db0 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,110, /* 0x0db0 */ 116, 10, 48, 48, 48, 48, 48, 54, 50, 50, 32, 82, 95, 51, 56, 54,
/* 0x0dc0 */ 97,109,101, 10, 48, 48, 48, 48, 48, 52,100,101, 32, 82, 95, 51, /* 0x0dc0 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,
/* 0x0dd0 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,103, /* 0x0dd0 */ 112, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x0de0 */ 101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48, /* 0x0de0 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65,
/* 0x0df0 */ 48, 48, 48, 53, 56, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, /* 0x0df0 */ 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84,
/* 0x0e00 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,116, 10, /* 0x0e00 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0e10 */ 48, 48, 48, 48, 48, 54, 48, 57, 32, 82, 95, 51, 56, 54, 95, 80, /* 0x0e10 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32,
/* 0x0e20 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,112, 10, /* 0x0e20 */ 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32,
/* 0x0e30 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, /* 0x0e30 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48,
/* 0x0e40 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, /* 0x0e40 */ 48, 48, 54, 32, 82, 95, 51, 56, 54, 95, 51, 50, 32, 32, 32, 32,
/* 0x0e50 */ 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, /* 0x0e50 */ 32, 32, 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
/* 0x0e60 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x0e70 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95,
/* 0x0e80 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0e90 */ 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ea0 */ 54, 32, 82, 95, 51, 56, 54, 95, 51, 50, 32, 32, 32, 32, 32, 32,
/* 0x0eb0 */ 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
}; };

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* i386-linux.elf-so_entry.h /* i386-linux.elf-so_entry.h
created from i386-linux.elf-so_entry.bin, 3297 (0xce1) bytes created from i386-linux.elf-so_entry.bin, 3358 (0xd1e) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@ -32,216 +32,219 @@
/* clang-format off */ /* clang-format off */
#define STUB_I386_LINUX_ELF_SO_ENTRY_SIZE 3297 #define STUB_I386_LINUX_ELF_SO_ENTRY_SIZE 3358
#define STUB_I386_LINUX_ELF_SO_ENTRY_ADLER32 0xd917c0ec #define STUB_I386_LINUX_ELF_SO_ENTRY_ADLER32 0x7fd8155f
#define STUB_I386_LINUX_ELF_SO_ENTRY_CRC32 0x87c4b4db #define STUB_I386_LINUX_ELF_SO_ENTRY_CRC32 0xa9882795
unsigned char stub_i386_linux_elf_so_entry[3297] = { unsigned char stub_i386_linux_elf_so_entry[3358] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 164, 5, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, /* 0x0020 */ 180, 6, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0030 */ 8, 0, 5, 0,144, 96,232,252,255,255,255, 1,219,116, 2,243, /* 0x0030 */ 8, 0, 5, 0, 96,232, 71, 0, 0, 0, 1,219,116, 2,243,195,
/* 0x0040 */ 195,139, 30,131,238,252, 17,219,195, 94,102,131,126, 8, 2,116, /* 0x0040 */ 139, 30,131,238,252, 17,219,195, 94,102,131,126, 8, 2,116, 1,
/* 0x0050 */ 1,244,141, 74,233, 81,139, 6, 80,137,229, 41,196,131,228,248, /* 0x0050 */ 244,139, 14,141,137, 24, 1, 0, 0, 81,106, 90, 87,141, 66,234,
/* 0x0060 */ 137,231, 85,139, 78, 4,141,118, 12, 1,241, 81, 49,219, 49,201, /* 0x0060 */ 80, 82, 86,137,229,129,236, 24, 1, 0, 0,131,228,248,106, 0,
/* 0x0070 */ 131,205,255,252,168,164,255,210,114,251,141, 65, 1,255,210, 17, /* 0x0070 */ 137,231, 87, 81,106, 0,232,252,255,255,255,131,196, 12,137,194,
/* 0x0080 */ 192,255,210,115,248,131,232, 3,114, 11,193,224, 8,172,131,240, /* 0x0080 */ 193,232, 12,193,224, 12, 41,194, 74,139,117, 0,139, 62, 1,199,
/* 0x0090 */ 255,116, 45,137,197,141, 65, 1,255,210, 17,201,255,210, 17,201, /* 0x0090 */ 137,120, 8,137,230,185, 24, 1, 0, 0,243,164,137,236,137, 68,
/* 0x00a0 */ 117, 13,137,193,131,192, 2,255,210, 17,201,255,210,115,248,129, /* 0x00a0 */ 36, 16, 94, 82,255, 54, 84,139, 78, 4,141,118, 12,137,199, 1,
/* 0x00b0 */ 253, 0,243,255,255, 17,193, 86,141, 52, 47,243,164, 94,235,182, /* 0x00b0 */ 241, 81,139, 84, 36, 16, 49,219, 49,201,131,205,255,252,168,164,
/* 0x00c0 */ 89, 57,206,116, 1,244, 93, 49,201,232, 4, 0, 0, 0,117,112, /* 0x00c0 */ 255,210,114,251,141, 65, 1,255,210, 17,192,255,210,115,248,131,
/* 0x00d0 */ 120, 0, 91,104,100, 1, 0, 0, 88,205,128,137,199,139, 85, 0, /* 0x00d0 */ 232, 3,114, 11,193,224, 8,172,131,240,255,116, 45,137,197,141,
/* 0x00e0 */ 137,225,137,251,106, 4, 88,205,128,137,236,106, 0, 87,106, 2, /* 0x00e0 */ 65, 1,255,210, 17,201,255,210, 17,201,117, 13,137,193,131,192,
/* 0x00f0 */ 106, 5,255,116, 36, 16,106, 0,137,227,106, 90, 88,205,128,131, /* 0x00f0 */ 2,255,210, 17,201,255,210,115,248,129,253, 0,243,255,255, 17,
/* 0x0100 */ 196, 24, 80,137,251,106, 6, 88,205,128, 88, 80,255,224,141, 92, /* 0x0100 */ 193, 86,141, 52, 47,243,164, 94,235,182, 89, 57,206,116, 1,244,
/* 0x0110 */ 36, 4,106, 90, 88,205,128, 61, 0,240,255,255,114, 1,244,194, /* 0x0110 */ 89,139,124, 36, 20,139, 68, 36, 16,137, 7, 88,137, 71, 8,139,
/* 0x0120 */ 24, 0, 0, 0, 85,137,229, 86, 83,131,236, 64,139,117, 8,106, /* 0x0120 */ 84, 36, 20,137,249, 91, 88,106, 0, 83,106, 4, 88,205,128,106,
/* 0x0130 */ 64,104,255, 0, 0, 0,141, 93,184, 83,232,252,255,255,255, 83, /* 0x0130 */ 18,106, 5, 82, 87,137,227,106, 90, 88,205,128,139, 92, 36, 16,
/* 0x0140 */ 86,232,252,255,255,255,137,194,131,196, 20,133,192,120, 21, 15, /* 0x0140 */ 131,196, 24,106, 6, 88,205,128,131,199, 12,255,231,141, 92, 36,
/* 0x0150 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64, /* 0x0150 */ 4,106, 90, 88,205,128, 61, 0,240,255,255,114, 1,244,194, 24,
/* 0x0160 */ 0, 0,116, 23,131,250,254,117, 16,104,192, 1, 0, 0, 86,232, /* 0x0160 */ 0, 0, 0, 0, 85,137,229, 86, 83,131,236, 72,106, 64,104,255,
/* 0x0170 */ 252,255,255,255,137,194,131,196, 8,137,209,137,200,141,101,248, /* 0x0170 */ 0, 0, 0,141,117,184, 86,232,252,255,255,255,131,196, 12,139,
/* 0x0180 */ 91, 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63, /* 0x0180 */ 93, 8,137,241,106,106, 88,205,128,137,194,133,192,120, 21, 15,
/* 0x0190 */ 131,250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232, /* 0x0190 */ 183, 69,192, 37, 0,240, 0, 0,185, 0, 0, 0, 0, 61, 0, 64,
/* 0x01a0 */ 43,131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12, /* 0x01a0 */ 0, 0,116, 22,131,250,254,117, 15,185,192, 1, 0, 0,139, 93,
/* 0x01b0 */ 0, 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90, /* 0x01b0 */ 8,106, 39, 88,205,128,137,194,137,209,137,200,141,101,248, 91,
/* 0x01c0 */ 139, 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66, /* 0x01c0 */ 94,201,195,139, 68, 36, 4,137,194,131,226, 31,131,224, 63,131,
/* 0x01d0 */ 8,102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81, /* 0x01d0 */ 250, 26,118, 12,168, 32,116, 5,131,232, 70,235, 3,131,232, 43,
/* 0x01e0 */ 232, 63,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114, /* 0x01e0 */ 131,192, 64,195, 85,137,229, 87, 86, 83,131,236, 20,232, 12, 0,
/* 0x01f0 */ 111, 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0, /* 0x01f0 */ 0, 0, 47,100, 97,116, 97, 47,100, 97,116, 97, 47, 0, 90,139,
/* 0x0200 */ 94,185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137, /* 0x0200 */ 2,139, 77, 8,137, 1,139, 66, 4,137, 65, 4,102,139, 66, 8,
/* 0x0210 */ 69,232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3, /* 0x0210 */ 102,137, 65, 8,138, 66, 10,136, 65, 10,198, 65, 11, 0, 81,232,
/* 0x0220 */ 88,205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133, /* 0x0220 */ 64,255,255,255,131,196, 4,232, 19, 0, 0, 0, 47,112,114,111,
/* 0x0230 */ 255, 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6, /* 0x0230 */ 99, 47,115,101,108,102, 47, 99,109,100,108,105,110,101, 0, 94,
/* 0x0240 */ 70,128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62, /* 0x0240 */ 185, 0, 0, 0, 0,137,243,137,202,106, 5, 88,205,128,137, 69,
/* 0x0250 */ 47,117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252, /* 0x0250 */ 232,139,117, 12,186,255, 15, 0, 0,137,195,137,241,106, 3, 88,
/* 0x0260 */ 255,255,255,137,195,198, 0, 0,255,117, 8,232,180,254,255,255, /* 0x0260 */ 205,128,137,199,139, 93,232,106, 6, 88,205,128,137,248,133,255,
/* 0x0270 */ 131,196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90, /* 0x0270 */ 15,136,178, 0, 0, 0,198, 4, 62, 0,128, 62, 0,116, 6, 70,
/* 0x0280 */ 139, 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198, /* 0x0280 */ 128, 62, 0,117,250,137,240,128, 62, 47,116, 6, 78,128, 62, 47,
/* 0x0290 */ 3, 0,255,117, 8,232,138,254,255,255,232, 5, 0, 0, 0, 47, /* 0x0290 */ 117,250, 41,240, 80, 86,139, 69, 8,131,192, 10, 80,232,252,255,
/* 0x02a0 */ 117,112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205, /* 0x02a0 */ 255,255,137,195,198, 0, 0,255,117, 8,232,181,254,255,255,131,
/* 0x02b0 */ 128,137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193, /* 0x02b0 */ 196, 16,232, 7, 0, 0, 0, 47, 99, 97, 99,104,101, 0, 90,139,
/* 0x02c0 */ 232, 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193, /* 0x02c0 */ 2,137, 3,102,139, 66, 4,102,137, 67, 4,131,195, 6,198, 3,
/* 0x02d0 */ 232, 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2, /* 0x02d0 */ 0,255,117, 8,232,139,254,255,255,232, 5, 0, 0, 0, 47,117,
/* 0x02e0 */ 198, 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201, /* 0x02e0 */ 112,120, 0, 88,139, 0,137, 3,141,115, 4,106, 20, 88,205,128,
/* 0x02f0 */ 195, 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73, /* 0x02f0 */ 137,195,137, 4, 36,232,201,254,255,255,136, 6,137,216,193,232,
/* 0x0300 */ 131,249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131, /* 0x0300 */ 6,137, 4, 36,232,186,254,255,255,136, 70, 1,137,216,193,232,
/* 0x0310 */ 200, 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249, /* 0x0310 */ 12,137, 4, 36,232,170,254,255,255,131,196, 4,136, 70, 2,198,
/* 0x0320 */ 255,117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86, /* 0x0320 */ 70, 3, 0,184, 0, 0, 0, 0,141,101,244, 91, 94, 95,201,195,
/* 0x0330 */ 83,129,236, 60, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0, /* 0x0330 */ 86, 83,139,116, 36, 12,139, 92, 36, 16,139, 76, 36, 20, 73,131,
/* 0x0340 */ 0,117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0, /* 0x0340 */ 249,255,116, 30,138, 22,131,202, 32, 15,190,210,138, 3,131,200,
/* 0x0350 */ 137,243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0, /* 0x0350 */ 32, 15,190,192, 67, 70, 41,194,137,208,117, 11, 73,131,249,255,
/* 0x0360 */ 137,243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0, /* 0x0360 */ 117,226,184, 0, 0, 0, 0, 91, 94,195, 85,137,229, 87, 86, 83,
/* 0x0370 */ 0, 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0, /* 0x0370 */ 129,236, 68, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0, 0,
/* 0x0380 */ 190,192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199, /* 0x0380 */ 117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,137,
/* 0x0390 */ 133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99, /* 0x0390 */ 243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,137,
/* 0x03a0 */ 114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4, /* 0x03a0 */ 243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0, 0,
/* 0x03b0 */ 141,157,244,239,255,255, 83,232,252,255,255,255,190, 0, 0, 0, /* 0x03b0 */ 47,100,101,118, 47,115,104,109, 0, 95,185, 2, 0, 65, 0,190,
/* 0x03c0 */ 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,199, 4, 36, 3, 0, /* 0x03c0 */ 192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,133,
/* 0x03d0 */ 0, 0, 83, 80,232, 24,255,255,255,131,196, 12,133,192,116, 39, /* 0x03d0 */ 192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,114,
/* 0x03e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 83, 80,232,254, /* 0x03e0 */ 101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,141,
/* 0x03f0 */ 254,255,255,131,196, 12,133,192,117, 13,128,189,118,240,255,255, /* 0x03f0 */ 181,244,239,255,255,137,243,106,122, 88,205,128,199,133,220,239,
/* 0x0400 */ 52,126, 4,102,190, 1, 0,133,246,117,123,131,125, 16, 0,117, /* 0x0400 */ 255,255, 0, 0, 0, 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,
/* 0x0410 */ 28,232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244, /* 0x0410 */ 106, 3, 86, 80,232, 23,255,255,255,131,196, 12,133,192,116, 45,
/* 0x0420 */ 239,255,255,137, 69, 16,198,133,244,239,255,255, 0,133,246,117, /* 0x0420 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 86, 80,232,253,
/* 0x0430 */ 85,131,255,218,117, 80,131,125, 16, 0,116, 74,139, 85, 16,128, /* 0x0430 */ 254,255,255,131,196, 12,133,192,117, 19,128,189,118,240,255,255,
/* 0x0440 */ 58, 0,117, 26,141,133,244,239,255,255, 80, 82,232, 84,253,255, /* 0x0440 */ 52,126, 10,199,133,220,239,255,255, 1, 0, 0, 0,131,189,220,
/* 0x0450 */ 255,131,196, 8,137,193,133,192, 15,136, 1, 1, 0, 0,185,194, /* 0x0450 */ 239,255,255, 0, 15,133,128, 0, 0, 0,131,125, 16, 0,117, 28,
/* 0x0460 */ 0, 0, 0,191,192, 1, 0, 0,139, 93, 16,137,250,106, 5, 88, /* 0x0460 */ 232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,239,
/* 0x0470 */ 205,128,137,199,137,193,133,192, 15,136,225, 0, 0, 0,139, 93, /* 0x0470 */ 255,255,137, 69, 16,198,133,244,239,255,255, 0,131,189,220,239,
/* 0x0480 */ 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,148, 0, 0, 0, /* 0x0480 */ 255,255, 0,117, 85,131,255,218,117, 80,131,125, 16, 0,116, 74,
/* 0x0490 */ 133,246,116, 22,137,251,139, 77, 12,106, 93, 88,205,128,137,193, /* 0x0490 */ 139, 85, 16,128, 58, 0,117, 26,141,133,244,239,255,255, 80, 82,
/* 0x04a0 */ 133,192, 15,136,183, 0, 0, 0,235,122,141,133,244,239,255,255, /* 0x04a0 */ 232, 63,253,255,255,131,196, 8,137,193,133,192, 15,136, 6, 1,
/* 0x04b0 */ 104, 0, 16, 0, 0,106, 0, 80,232,252,255,255,255,139, 69, 12, /* 0x04b0 */ 0, 0,185,194, 0, 0, 0,190,192, 1, 0, 0,139, 93, 16,137,
/* 0x04c0 */ 137,133,208,239,255,255,131,196, 12,133,192,116, 73,141,181,244, /* 0x04c0 */ 242,106, 5, 88,205,128,137,199,137,193,133,192, 15,136,230, 0,
/* 0x04d0 */ 239,255,255,139,149,208,239,255,255,137,149,184,239,255,255,129, /* 0x04d0 */ 0, 0,139, 93, 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,
/* 0x04e0 */ 250, 0, 16, 0, 0,118, 10,199,133,184,239,255,255, 0, 16, 0, /* 0x04e0 */ 153, 0, 0, 0,131,189,220,239,255,255, 0,116, 22,137,251,139,
/* 0x04f0 */ 0,137,251,137,241,139,149,184,239,255,255,106, 4, 88,205,128, /* 0x04f0 */ 77, 12,106, 93, 88,205,128,137,193,133,192, 15,136,183, 0, 0,
/* 0x0500 */ 59,133,184,239,255,255,117, 73,139,133,184,239,255,255, 41,133, /* 0x0500 */ 0,235,122,141,133,244,239,255,255,104, 0, 16, 0, 0,106, 0,
/* 0x0510 */ 208,239,255,255,117,189,185, 0, 0, 0, 0,137,251,137,202,106, /* 0x0510 */ 80,232,252,255,255,255,139, 69, 12,137,133,200,239,255,255,131,
/* 0x0520 */ 19, 88,205,128,106, 0, 87,131,125, 8, 1, 25,192,131,224,240, /* 0x0520 */ 196, 12,133,192,116, 73,141,181,244,239,255,255,139,149,200,239,
/* 0x0530 */ 131,192, 17, 80,106, 3,255,117, 12,255,117, 8,232,252,255,255, /* 0x0530 */ 255,255,137,149,176,239,255,255,129,250, 0, 16, 0, 0,118, 10,
/* 0x0540 */ 255,137,194,131,196, 24,137,193, 61, 0,240,255,255,119, 16,235, /* 0x0540 */ 199,133,176,239,255,255, 0, 16, 0, 0,137,251,137,241,139,149,
/* 0x0550 */ 7,185,228,255,255,255,235, 7,141, 71, 1,137,193, 9,209,137, /* 0x0550 */ 176,239,255,255,106, 4, 88,205,128, 59,133,176,239,255,255,117,
/* 0x0560 */ 200,141,101,244, 91, 94, 95,201,195, 90,232, 17, 0, 0, 0, 0, /* 0x0560 */ 73,139,133,176,239,255,255, 41,133,200,239,255,255,117,189,185,
/* 0x0570 */ 46,115,121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, /* 0x0570 */ 0, 0, 0, 0,137,251,137,202,106, 19, 88,205,128,106, 0, 87,
/* 0x0580 */ 46,115,104,115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76, /* 0x0580 */ 131,125, 8, 1, 25,192,131,224,240,131,192, 17, 80,106, 3,255,
/* 0x0590 */ 70, 77, 65, 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65, /* 0x0590 */ 117, 12,255,117, 8,232,252,255,255,255,137,194,131,196, 24,137,
/* 0x05a0 */ 73, 78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x05a0 */ 193, 61, 0,240,255,255,119, 16,235, 7,185,228,255,255,255,235,
/* 0x05b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x05b0 */ 7,141, 71, 1,137,193, 9,209,137,200,141,101,244, 91, 94, 95,
/* 0x05c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, /* 0x05c0 */ 201,195, 49,192,195, 85,137,229, 87,139, 77, 16,139, 69, 12,139,
/* 0x05d0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x05d0 */ 125, 8,243,170, 95, 93,195, 85,137,229, 87, 86,139, 77, 16,139,
/* 0x05e0 */ 53, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, /* 0x05e0 */ 117, 12,139,125, 8,243,164,137,248, 94, 95, 93,195,204,195, 83,
/* 0x05f0 */ 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, /* 0x05f0 */ 141, 92, 36, 8,176, 90,232, 2, 0, 0, 0, 91,195, 15,182,192,
/* 0x0600 */ 0, 0, 0, 0, 8, 8, 0, 0, 80, 0, 0, 0, 6, 0, 0, 0, /* 0x0600 */ 80,205,128, 90, 61, 0,240,255,255,115, 1,195,244,129,236, 0,
/* 0x0610 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0, /* 0x0610 */ 2, 0, 0, 49,210,232, 16, 0, 0, 0, 47,112,114,111, 99, 47,
/* 0x0620 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 5, 0, 0, /* 0x0620 */ 115,101,108,102, 47, 97,117,120,118, 0, 89,106,156, 91,184, 39,
/* 0x0630 */ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x0630 */ 1, 0, 0,205,128,133,192,124, 40,137,197,186, 0, 2, 0, 0,
/* 0x0640 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, /* 0x0640 */ 137,225,137,195,106, 3, 88,205,128,133,192,124, 20,137,193,137,
/* 0x0650 */ 0, 0, 0, 0, 88, 8, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, /* 0x0650 */ 230,173,133,192,116, 11,131,248, 6,173,116, 10,131,233, 8,117,
/* 0x0660 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0, /* 0x0660 */ 240,184, 0, 16, 0, 0,247,216,129,196, 0, 2, 0, 0, 80,137,
/* 0x0670 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 5, 0, 0, /* 0x0670 */ 235,106, 6, 88,205,128, 95, 90,232, 16, 0, 0, 0, 0, 46,115,
/* 0x0680 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x0680 */ 121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,
/* 0x0690 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x0690 */ 104,115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76, 70, 77,
/* 0x06a0 */ 0, 0, 0, 0,228, 6, 0, 0,208, 0, 0, 0, 7, 0, 0, 0, /* 0x06a0 */ 65, 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78,
/* 0x06b0 */ 4, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, /* 0x06b0 */ 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06c0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 7, 0, 0, /* 0x06c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06d0 */ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x06d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
/* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06e0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
/* 0x06f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06f0 */ 142, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
/* 0x0700 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0700 */ 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0710 */ 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0710 */ 0, 0, 0, 0,216, 8, 0, 0, 64, 0, 0, 0, 6, 0, 0, 0,
/* 0x0720 */ 0, 0, 1, 0, 8, 0, 0, 0,247, 2, 0, 0, 62, 2, 0, 0, /* 0x0720 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0,
/* 0x0730 */ 18, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0730 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 5, 0, 0,
/* 0x0740 */ 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0740 */ 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0750 */ 16, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0750 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
/* 0x0760 */ 16, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0760 */ 0, 0, 0, 0, 24, 9, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0,
/* 0x0770 */ 16, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0770 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0,
/* 0x0780 */ 16, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0780 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,125, 6, 0, 0,
/* 0x0790 */ 16, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0790 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x07a0 */ 16, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x07a0 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x07b0 */ 16, 0, 0, 0, 0, 95,115,116, 97,114,116, 0,117,112,120, 95, /* 0x07b0 */ 0, 0, 0, 0,244, 7, 0, 0,160, 0, 0, 0, 7, 0, 0, 0,
/* 0x07c0 */ 109,109, 97,112, 95, 97,110,100, 95,102,100, 0,109,101,109,112, /* 0x07c0 */ 4, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
/* 0x07d0 */ 99,112,121, 0,109,109, 97,112, 0,117,110, 97,109,101, 0,103, /* 0x07d0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 8, 0, 0,
/* 0x07e0 */ 101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 0,109,101, /* 0x07e0 */ 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x07f0 */ 109,115,101,116, 0,109,121, 95, 98,107,112,116, 0,115,116, 97, /* 0x07f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0800 */ 116, 0,109,107,100,105,114, 0, 3, 0, 0, 0, 2, 2, 0, 0, /* 0x0800 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0810 */ 7, 1, 0, 0, 2, 9, 0, 0, 14, 1, 0, 0, 2, 11, 0, 0, /* 0x0810 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0820 */ 60, 1, 0, 0, 2, 12, 0, 0, 43, 2, 0, 0, 2, 5, 0, 0, /* 0x0820 */ 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0830 */ 117, 3, 0, 0, 2, 10, 0, 0,132, 3, 0, 0, 2, 7, 0, 0, /* 0x0830 */ 0, 0, 1, 0, 8, 0, 0, 0, 54, 3, 0, 0, 88, 2, 0, 0,
/* 0x0840 */ 222, 3, 0, 0, 2, 8, 0, 0,133, 4, 0, 0, 2, 9, 0, 0, /* 0x0840 */ 18, 0, 1, 0, 24, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
/* 0x0850 */ 9, 5, 0, 0, 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0, /* 0x0850 */ 16, 0, 3, 0, 32, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,
/* 0x0860 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51, /* 0x0860 */ 16, 0, 3, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0870 */ 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,105,111,110,115, /* 0x0870 */ 16, 0, 3, 0, 52, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
/* 0x0880 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, /* 0x0880 */ 16, 0, 3, 0, 59, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0,
/* 0x0890 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, /* 0x0890 */ 16, 0, 3, 0, 0, 95,115,116, 97,114,116, 0,117,112,120, 95,
/* 0x08a0 */ 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, /* 0x08a0 */ 109,109, 97,112, 95, 97,110,100, 95,102,100, 0,109,101,109,112,
/* 0x08b0 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, /* 0x08b0 */ 99,112,121, 0,109,109, 97,112, 0,103,101,116, 95,117,112,120,
/* 0x08c0 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, /* 0x08c0 */ 102,110, 95,112, 97,116,104, 0,109,101,109,115,101,116, 0,109,
/* 0x08d0 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 53, 51, 53, 32, 32, /* 0x08d0 */ 121, 95, 98,107,112,116, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0,
/* 0x08e0 */ 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32, /* 0x08e0 */ 67, 0, 0, 0, 2, 4, 0, 0, 68, 1, 0, 0, 2, 8, 0, 0,
/* 0x08f0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, /* 0x08f0 */ 106, 2, 0, 0, 2, 5, 0, 0,180, 3, 0, 0, 2, 9, 0, 0,
/* 0x0900 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 54, 32, 32, /* 0x0900 */ 45, 4, 0, 0, 2, 7, 0, 0,222, 4, 0, 0, 2, 8, 0, 0,
/* 0x0910 */ 48, 32, 32, 48, 32, 32, 48, 53, 54, 57, 32, 32, 50, 42, 42, 48, /* 0x0910 */ 98, 5, 0, 0, 2, 6, 0, 0,183, 0, 0, 0, 2, 1, 0, 0,
/* 0x0920 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, /* 0x0920 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51,
/* 0x0930 */ 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x0930 */ 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,105,111,110,115,
/* 0x0940 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, /* 0x0940 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32,
/* 0x0950 */ 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, /* 0x0950 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77,
/* 0x0960 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, /* 0x0960 */ 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32,
/* 0x0970 */ 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, /* 0x0970 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110,
/* 0x0980 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x0980 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77,
/* 0x0990 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 95, /* 0x0990 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 53, 56,101, 32, 32,
/* 0x09a0 */ 115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 50,102, 55, 32,103, /* 0x09a0 */ 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32,
/* 0x09b0 */ 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, /* 0x09b0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76,
/* 0x09c0 */ 48, 50, 51,101, 32,117,112,120, 95,109,109, 97,112, 95, 97,110, /* 0x09c0 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 98, 98, 32,
/* 0x09d0 */ 100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, /* 0x09d0 */ 32, 48, 32, 32, 48, 32, 32, 48, 53, 99, 50, 32, 32, 50, 42, 42,
/* 0x09e0 */ 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,101, /* 0x09e0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66,
/* 0x09f0 */ 109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x09f0 */ 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48,
/* 0x0a00 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109, /* 0x0a00 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65,
/* 0x0a10 */ 109, 97,112, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, /* 0x0a10 */ 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48,
/* 0x0a20 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,117,110, 97, /* 0x0a20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x0a30 */ 109,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, /* 0x0a30 */ 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x0a40 */ 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,103,101,116, 95, /* 0x0a40 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x0a50 */ 117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, /* 0x0a50 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x0a60 */ 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, /* 0x0a60 */ 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 51, 51, 54, 32,
/* 0x0a70 */ 42, 32, 48, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, /* 0x0a70 */ 103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0a80 */ 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, /* 0x0a80 */ 32, 48, 50, 53, 56, 32,117,112,120, 95,109,109, 97,112, 95, 97,
/* 0x0a90 */ 42, 32, 48, 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, /* 0x0a90 */ 110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 49, 53, 32,103,
/* 0x0aa0 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, /* 0x0aa0 */ 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x0ab0 */ 68, 42, 32, 48, 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 48, /* 0x0ab0 */ 48, 32,109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 48,
/* 0x0ac0 */ 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, /* 0x0ac0 */ 50,100, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65,
/* 0x0ad0 */ 32, 48, 32,109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65, /* 0x0ad0 */ 73, 78, 90, 32, 48, 32,109,109, 97,112, 10, 48, 48, 48, 48, 48,
/* 0x0ae0 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, /* 0x0ae0 */ 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x0af0 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, /* 0x0af0 */ 65, 73, 78, 90, 32, 48, 32,103,101,116, 95,117,112,120,102,110,
/* 0x0b00 */ 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x0b00 */ 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48, 51, 32,103,
/* 0x0b10 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x0b10 */ 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x0b20 */ 48, 48, 48, 48, 48, 51, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, /* 0x0b20 */ 48, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 48, 50,
/* 0x0b30 */ 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x0b30 */ 98, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0b40 */ 90, 10, 48, 48, 48, 48, 48, 49, 48, 55, 32, 82, 95, 51, 56, 54, /* 0x0b40 */ 78, 90, 32, 48, 32,109,121, 95, 98,107,112,116, 10, 10, 82, 69,
/* 0x0b50 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109, /* 0x0b50 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83,
/* 0x0b60 */ 115,101,116, 10, 48, 48, 48, 48, 48, 49, 48,101, 32, 82, 95, 51, /* 0x0b60 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58,
/* 0x0b70 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,115, /* 0x0b70 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x0b80 */ 116, 97,116, 10, 48, 48, 48, 48, 48, 49, 51, 99, 32, 82, 95, 51, /* 0x0b80 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x0b90 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109, /* 0x0b90 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95, 51, 56, 54,
/* 0x0ba0 */ 107,100,105,114, 10, 48, 48, 48, 48, 48, 50, 50, 98, 32, 82, 95, /* 0x0ba0 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0bb0 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0bb0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 52, 51, 32, 82,
/* 0x0bc0 */ 109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 51, 55, 53, /* 0x0bc0 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0bd0 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, /* 0x0bd0 */ 32,117,112,120, 95,109,109, 97,112, 95, 97,110,100, 95,102,100,
/* 0x0be0 */ 32, 32, 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, /* 0x0be0 */ 10, 48, 48, 48, 48, 48, 49, 52, 52, 32, 82, 95, 51, 56, 54, 95,
/* 0x0bf0 */ 51, 56, 52, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, /* 0x0bf0 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,
/* 0x0c00 */ 32, 32, 32, 32, 32, 32,117,110, 97,109,101, 10, 48, 48, 48, 48, /* 0x0c00 */ 101,116, 10, 48, 48, 48, 48, 48, 50, 54, 97, 32, 82, 95, 51, 56,
/* 0x0c10 */ 48, 51,100,101, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, /* 0x0c10 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,
/* 0x0c20 */ 32, 32, 32, 32, 32, 32, 32,103,101,116, 95,117,112,120,102,110, /* 0x0c20 */ 109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 51, 98, 52, 32, 82,
/* 0x0c30 */ 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 52, 56, 53, 32, 82, /* 0x0c30 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0c40 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, /* 0x0c40 */ 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 52, 50,
/* 0x0c50 */ 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 53, 48, 57, /* 0x0c50 */ 100, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32,
/* 0x0c60 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, /* 0x0c60 */ 32, 32, 32, 32,103,101,116, 95,117,112,120,102,110, 95,112, 97,
/* 0x0c70 */ 32, 32, 32,109,109, 97,112, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x0c70 */ 116,104, 10, 48, 48, 48, 48, 48, 52,100,101, 32, 82, 95, 51, 56,
/* 0x0c80 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x0c80 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,
/* 0x0c90 */ 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, /* 0x0c90 */ 109,115,101,116, 10, 48, 48, 48, 48, 48, 53, 54, 50, 32, 82, 95,
/* 0x0ca0 */ 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, /* 0x0ca0 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0cb0 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, /* 0x0cb0 */ 109,109, 97,112, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x0cc0 */ 48, 48, 48, 48, 50, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, /* 0x0cc0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76,
/* 0x0cd0 */ 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x0cd0 */ 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x0ce0 */ 10 /* 0x0ce0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0cf0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x0d00 */ 98, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0d10 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10
}; };

File diff suppressed because it is too large Load Diff

View File

@ -172,7 +172,7 @@ _start: .globl _start // in Thumb mode (via PackLinuxElf32::pack3)
// argc,argv,envp, r3 convenience, r4-r7 callee-saved, lr ret_addr // argc,argv,envp, r3 convenience, r4-r7 callee-saved, lr ret_addr
stmfd sp!,{r0,r1,r2, r3, r4,r5,r6,r7, lr} // MATCH_99 stmfd sp!,{r0,r1,r2, r3, r4,r5,r6,r7, lr} // MATCH_99
sub sp,sp,#3*NBPW // space for ADRU, LENU, PMASK sub sp,sp,#F_ARGC // space for ADRU, LENU, PMASK
F_ADRU= 0 * NBPW F_ADRU= 0 * NBPW
F_LENU= 1 * NBPW F_LENU= 1 * NBPW
F_PMASK=2 * NBPW F_PMASK=2 * NBPW
@ -195,7 +195,8 @@ L70_ret:
mov arg1,#0 // any page address mov arg1,#0 // any page address
call upx_mmap_and_fd call upx_mmap_and_fd
add arg4,sp,#F_LENU // &dstlen add arg4,sp,#F_LENU // &dstlen
and arg3,r0,rPMASK // dst for decompress mov arg3,r0,lsr #12
mov arg3,arg3,lsl #12 // dst for decompress
str arg3,[sp,#F_ADRU] str arg3,[sp,#F_ADRU]
mov arg2,r7 // srclen mov arg2,r7 // srclen
sub mfd,r0,arg3 sub mfd,r0,arg3

View File

@ -49,9 +49,10 @@ MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20 MAP_ANONYMOUS= 0x20
__NR_memfd_create= 0x164 // 356 __NR_memfd_create= 0x164 // 356
__NR_mmap= 90
__NR_mprotect=125 __NR_mprotect=125
__NR_munmap= 91 __NR_munmap= 91
__NR_oldmmap= 90 // old mmap: %ebx -> args[6]
__NR_read= 3
__NR_close= 6 __NR_close= 6
__NR_exit= 1 __NR_exit= 1
@ -60,11 +61,20 @@ __NR_write= 4
PAGE_SHIFT= 12 PAGE_SHIFT= 12
PAGE_MASK= (~0<<PAGE_SHIFT) PAGE_MASK= (~0<<PAGE_SHIFT)
PAGE_SIZE= -PAGE_MASK PAGE_SIZE= -PAGE_MASK
AT_PAGESZ= 6
NAME_MAX= 255 // # chars in file name; linux/include/uapi/linux/limits.h
M_NRV2B_LE32=2 // ../conf.h M_NRV2B_LE32=2 // ../conf.h
M_NRV2D_LE32=5 M_NRV2D_LE32=5
M_NRV2E_LE32=8 M_NRV2E_LE32=8
// syscall arguments
#define arg5 edi
#define arg4 esi
#define arg3 edx
#define arg2 ecx
#define arg1 ebx
/* Arguments to decompress() */ /* Arguments to decompress() */
#define src %esi #define src %esi
#define lsrc %ecx #define lsrc %ecx
@ -78,7 +88,7 @@ M_NRV2E_LE32=8
// .long offset({l_info; p_info; b_info; compressed data}) // .long offset({l_info; p_info; b_info; compressed data})
section ELFMAINX section ELFMAINX
_start: // C-called: %esp: ret_addr,argc,argv,envp; must save %ebx,%esi,%edi,%ebp _start: // C-called: %esp: ret_addr,argc,argv,envp; must save %ebx,%esi,%edi,%ebp
nop // int3 // DEBUG i386 so_entry.S // int3 // DEBUG i386 so_entry.S
pusha // MATCH_03 pusha // MATCH_03
call L70 // MATCH_08 push $&getbit call L70 // MATCH_08 push $&getbit
L70ret: L70ret:
@ -104,20 +114,57 @@ refill:
adc bits,bits // LSB= 1 (CarryIn); CarryOut= next bit adc bits,bits // LSB= 1 (CarryIn); CarryOut= next bit
ret // infrequent (1/32) ret // infrequent (1/32)
#define foldi %esi
#define old_sp %ebp #define old_sp %ebp
#define foldi %esi
L20: L20:
pop foldi // MATCH_09 &fold_info pop foldi // MATCH_09 &fold_info
cmpw $M_NRV2B_LE32|(0<<8),b_method(foldi); je 0f; hlt; 0: // check method and filter bytes cmpw $M_NRV2B_LE32|(0<<8),b_method(foldi); je 0f; hlt; 0: // check method and filter
lea _start - 4*NBPW - L70ret(%edx),%ecx // &so_info
push %ecx // MATCH_14 &so_info movl /*sz_unc*/(foldi),%ecx
mov /*sz_unc*/(foldi),%eax; push %eax // MATCH_15 F_LENU LEN_PATH= 1+ 11 + NAME_MAX + 13 // "/data/data/$APP_NAME/cache/upxAAA"
lea LEN_PATH(%ecx),%ecx; push %ecx // P_10 F_LENU
push $0x5A // P_11 %F_ADRU,F_LENU
push %edi // P_12 PMASK,%F_ADRU,F_LENU
lea _start - 4*NBPW - L70ret(%edx),%eax
push %eax // P_13 &so_info,PMASK,%F_ADRU,F_LENU
push %edx // P_14 &refill,so_info,PMASK,%F_ADRU,F_LENU
push foldi // P_14 foldi,&refill,&so_info,PMASK,%F_ADRU,F_LENU
mov %esp,old_sp mov %esp,old_sp
#define F_LENU 0*NBPW sub $LEN_PATH,%esp; and $-2*NBPW,%esp; push $0 // pathname[0]= '\0';
mov %esp,%edi
sub %eax,%esp // alloca push %edi // arg3 pathname; pathname[0] = '\0'
and $-2*NBPW,%esp // align stack push %ecx // arg2 F_LENU
push $0 // arg1 any page address
call upx_mmap_and_fd // %eax= page_addr | (1+fd)
add $3*NBPW,%esp
#define mfd %edx
mov %eax,mfd
shrl $12,%eax
shll $12,%eax // page addr
sub %eax,mfd; dec mfd
mov (old_sp),foldi
mov sz_unc(foldi),%edi
add %eax,%edi
mov %edi,2*NBPW(%eax) // forward upxfn_path FIXME: after decompress ?
mov %esp,%esi
mov $LEN_PATH,%ecx
rep movsb
mov old_sp,%esp // foldi,&refill,&so_info,PMASK,%F_ADRU,F_LENU
#undef old_sp
mov %eax,4*NBPW(%esp) // F_ADRU
pop foldi // P_14 &refill,&so_info,PMASK,F_ADRU,F_LENU
push mfd // P_15 mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
#undef mfd
push sz_unc(foldi) // P_16 sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
push %esp // P_17 &dst_len,sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
mov sz_cpr(foldi),lsrc
lea sz_b_info(foldi),src
#undef foldi
mov %eax,dst
// This is nrv2b_d32, inlined and optimized for small space (about 160 bytes). // This is nrv2b_d32, inlined and optimized for small space (about 160 bytes).
// The task is to de-compress the folded pieces for shared library init: // The task is to de-compress the folded pieces for shared library init:
@ -129,28 +176,26 @@ L20:
// and compressability of C-coded de-compressors for Lzma and Zstd // and compressability of C-coded de-compressors for Lzma and Zstd
// in contrast to the simple and small assembly-coded NRV. // in contrast to the simple and small assembly-coded NRV.
mov %esp,dst // &unfolded_code
push old_sp // MATCH_16
mov sz_cpr(foldi),lsrc
lea sz_b_info(foldi),src // foldi dead
decompress: // inlined: (uchar const *src, uint len, uchar *dst /*, u32 &ldst, uint method */) decompress: // inlined: (uchar const *src, uint len, uchar *dst /*, u32 &ldst, uint method */)
add src,lsrc; push lsrc // MATCH_05 &input_eof add src,lsrc; push lsrc // P_20 eof,&dst_len,sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
//subq src,lsrc // restore the value of lsrc; dead for inlined nrv2b
//%esp: //%esp:
// MATCH_05 &input_eof // MATCH_05 &input_eof
// MATCH_16 old_sp // &dst_len (==> sz_unc in next word)
// space for de-compressed code // sz_unc
// mfd
//old_sp: // &refill
// MATCH_10 len unfolded_code
// MATCH_14 &so_info // MATCH_14 &so_info
// PMASK
// P_11 F_ADRU
// MATCH_10 F_LENU
// MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax} // MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax}
// ret_addr // ret_addr
// MATCH_00 argc // MATCH_00 argc
// MATCH_01 argv // MATCH_01 argv
// MATCH_07 envp // MATCH_07 envp
mov 4*NBPW(%esp),%edx // &refill
xor bits,bits // empty; force refill xor bits,bits // empty; force refill
xor len,len // create loop invariant xor len,len // create loop invariant
or $~0,disp // -1: initial dispacement or $~0,disp // -1: initial dispacement
@ -188,41 +233,41 @@ gotlen_n2b:
jmp top_n2b jmp top_n2b
eof_n2b: eof_n2b:
pop %ecx // MATCH_05 &input_eof pop %ecx // MATCH_05 &input_eof; &dst_len,sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
cmp %ecx,%esi; je 0f; hlt; 0: // test for ending in correct place cmp %ecx,%esi; je 0f; hlt; 0: // test for ending in correct place
pop old_sp // MATCH_16 pop %ecx // toss &dst_len; sz_unc,mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
xor %ecx,%ecx // zero // Forward data to unfolded segment
call 0f; .asciz "upx"; 0: pop %ebx mov 5*NBPW(%esp),%edi // F_ADRU
push $__NR_memfd_create; pop %eax; int $0x80 mov 4*NBPW(%esp),%eax; mov %eax, (%edi) // fold.PAGE_MASK
#define mfd %edi pop %eax; mov %eax,2*NBPW(%edi) // fold.upx_fn_path sz_unc
mov %eax,mfd // mfd,&refill,&so_info,PMASK,F_ADRU,F_LENU
mov F_LENU(old_sp),%edx
mov %esp,%ecx
mov %edi,%ebx
push $__NR_write; pop %eax; int $0x80
mov old_sp,%esp // de-alloca
mov 5*NBPW(%esp),%arg3 // F_LENU
mov %edi,%arg2 // F_ADRU
pop %arg1 // mfd; &refill,&so_info,PMASK,F_ADRU,F_LENU
pop %eax // toss &refill; &so_info,PMASK,F_ADRU,F_LENU
push $0 // arg6 push $0 // arg6
push mfd // arg5 push %arg1 // arg5 mfd
push $MAP_PRIVATE // arg4 push $__NR_write; pop %eax; int $0x80
push $PROT_READ|PROT_EXEC // arg3
push 4*NBPW(%esp) // arg2 F_LENU push $MAP_FIXED|MAP_PRIVATE // arg4
push $0 // arg1 push $PROT_READ|PROT_EXEC // arg3
mov %esp,%ebx push %arg3 // arg2 F_LENU
push $__NR_mmap; pop %eax; int $0x80; add $6*NBPW,%esp push %edi // arg1: F_ADRU
mov %esp,%ebx; push $__NR_oldmmap; pop %eax; int $0x80
mov 4*NBPW(%esp),%arg1 // mfd
add $6*NBPW,%esp
push %eax // MATCH_13 ptr unfolded_code
mov mfd,%ebx
push $__NR_close; pop %eax; int $0x80 push $__NR_close; pop %eax; int $0x80
pop %eax; push %eax add $3*NBPW,%edi
jmp *%eax jmp *%edi // %esp/ &so_info,PMASK,F_ADRU,F_LENU
// %esp: // %esp:
// MATCH_13 ptr unfolded_code; for escape hatch
// MATCH_12 len unfolded code; for escape hatch
// MATCH_14 &so_info // MATCH_14 &so_info
// PMASK
// ADRU
// LENU
// MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax} // MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax}
// ret_addr // ret_addr
// MATCH_00 argc // MATCH_00 argc
@ -232,14 +277,95 @@ eof_n2b:
old_mmap: // oldmmap: ebx -> 6 arguments; remove arguments on return old_mmap: // oldmmap: ebx -> 6 arguments; remove arguments on return
lea 4(%esp),%ebx lea 4(%esp),%ebx
push $__NR_mmap; pop %eax; int $0x80 push $__NR_oldmmap; pop %eax; int $0x80
cmp $PAGE_MASK,%eax; jb 0f; hlt; 0: cmp $PAGE_MASK,%eax; jb 0f; hlt; 0:
ret $6*4 ret $6*4
// IDENTSTR goes here // IDENTSTR goes here
section ELFMAINZ section ELFMAINZ
get_upxfn_path: .globl get_upxfn_path // char * (*)(void)
xor %eax,%eax // persistence not desired
ret
memset: .globl memset // (dst, val, n)
push %ebp; mov %esp,%ebp
push %edi
mov (2+ 2)*NBPW(%ebp),%ecx
mov (2+ 1)*NBPW(%ebp),%eax
mov (2+ 0)*NBPW(%ebp),%edi
rep stosb
pop %edi
pop %ebp
ret
mempcpy: .globl mempcpy // (dst, src, n)
push %ebp; mov %esp,%ebp
push %edi; push %esi
mov (2+ 2)*NBPW(%ebp),%ecx
mov (2+ 1)*NBPW(%ebp),%esi
mov (2+ 0)*NBPW(%ebp),%edi
rep movsb
mov %edi,%eax
pop %esi; pop %edi; pop %ebp
ret
.globl my_bkpt
my_bkpt:
int3 // my_bkpt
ret
// C-callable, so do NOT remove arguments as part of return
mmap: .globl mmap // oldmmap: ebx -> 6 arguments
push %ebx // save register
lea 2*NBPW(%esp),%ebx
mov $__NR_oldmmap,%al; call sys_check_al
pop %ebx // restore register
ret
sys_check_al:
movzbl %al,%eax
sys_check:
push %eax // save __NR_ for debug
int $0x80
pop %edx // recover __NR_ for debug
cmp $-0x1000,%eax; jae 0f; ret; 0:
hlt
L70: L70:
// Get PAGE_MASK from AT_PAGESZ in /proc/self/auxv
BUFLEN= 512
FD_CWD = -100
__NR_openat= 295
sub $BUFLEN,%esp
xor %arg3,%arg3 // O_RDONLY
call 0f; .asciz "/proc/self/auxv"; 0: pop %arg2
push $FD_CWD; pop %arg1
mov $__NR_openat,%eax; int $0x80
test %eax,%eax; jl no_psa
#define mfd %ebp
mov %eax,mfd // fd
mov $BUFLEN,%arg3
mov %esp,%arg2 // buf
mov %eax,%arg1 // fd
push $__NR_read; pop %eax; int $0x80; test %eax,%eax; jl no_psa
mov %eax,%ecx // len
mov %esp,%esi // src
0:
lodsl; test %eax,%eax; jz no_psa
cmp $AT_PAGESZ,%eax
lodsl; je 6f
sub $2*NBPW,%ecx; jnz 0b
no_psa:
movl $0x1000,%eax // default PAGE_SIZE
6:
neg %eax // PAGE_MASK
add $BUFLEN,%esp
push %eax // PAGE_MASK
mov mfd,%arg1; push $__NR_close; pop %eax; int $0x80
#undef mfd
pop %edi // PAGE_MASK
pop %edx // &getbit (also L70ret) pop %edx // &getbit (also L70ret)
call L20 // MATCH_09 push $&fold_info call L20 // MATCH_09 push $&fold_info
fold_info: fold_info:

View File

@ -8,13 +8,10 @@ NBPW= 4
#endif //} #endif //}
// %esp: // %esp:
// MATCH_13 ptr unfolded_code; for escape hatch // MATCH_14 &so_info
// MATCH_12 len unfolded code; for escape hatch // PMASK
// MATCH_14 &so_info: // ADRU
// .long offset(.) // detect relocation // LENU
// .long offset(user DT_INIT)
// .long offset(escape_hatch)
// .long offset({l_info; p_info; b_info; compressed data})
// MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax} // MATCH_03 pusha regs {%edi,%esi,%ebp,%esp,%ebx,%edx,%ecx,%eax}
// ret_addr // ret_addr
// MATCH_00 argc // MATCH_00 argc
@ -22,27 +19,46 @@ NBPW= 4
// MATCH_07 envp // MATCH_07 envp
section SO_HEAD section SO_HEAD
fold: ZERO:
mov %esp,%eax PAGE_MASK: .int 0xfffff000 // default
mov 2*NBPW(%eax),%ecx // &so_info qflg_data: .int 0 // QNX vs Linux: MAP_PRIVATE | MAP_ANONYMOUS
upxfn_path:.int 0 // displacement from ZERO
fold_begin: .globl fold_begin
jmp L05
get_page_mask: .globl get_page_mask
call 0f; 0: pop %eax
movl PAGE_MASK-0b(%eax),%eax
ret
get_upxfn_path: .globl get_upxfn_path // char * (*)(void)
call 0f; 0: pop %ecx; lea ZERO-0b(%ecx),%ecx
mov upxfn_path-ZERO(%ecx),%eax // offset(upxfn_path)
test %eax,%eax; jz 1f
add %ecx,%eax; 1: // &path
ret
L05: // %esp/ &so_info,PMASK,F_ADRU,F_LENU,8regs,ret_addr,argc
int3
pop %ecx // &so_info
lea (3+8+1)*NBPW(%esp),%eax // &{argc,argv,envp}
sub $MAX_ELF_HDR_32,%esp; push %esp // &elf_tmp sub $MAX_ELF_HDR_32,%esp; push %esp // &elf_tmp
add $(3+8+1)*NBPW,%eax; push %eax // &{argc,argv,envp} push %eax // &{argc,argv,envp}
push %ecx // &so_info push %ecx // &so_info
call upx_so_main // (&so_info, &{argc, argv, envp}, &elf_tmp); returns &escape_hatch call upx_so_main // (&so_info, &{argc, argv, envp}, &elf_tmp); returns &escape_hatch
add $MAX_ELF_HDR_32 + 3*NBPW,%esp // remove args add $MAX_ELF_HDR_32 + (3+1)*NBPW,%esp // remove args and PMASK
mov %eax,%ebp // save &escape_hatch mov %eax,%ebp // save &escape_hatch
pop %ebx // MATCH_13 ptr unfolded code #define sys1 ebx
pop %ecx // MATCH_12 len unfolded code #define sys2 ecx
pop %edx // MATCH_14 discard &so_info pop %sys1 // MATCH_13 ADRU
pop %sys2 // MATCH_12 LENU
push $__NR_munmap; pop %eax push $__NR_munmap; pop %eax
jmp *%ebp // goto &escape_hatch jmp *%ebp // goto &escape_hatch
ret // MATCH_30 ==>escape_hatch:
// syscall // syscall
// pop %ebx // popa
// pop %ebp // ret
// ???
L10: L10:
section ptr_NEXT section ptr_NEXT
@ -103,6 +119,17 @@ memcpy: .globl memcpy // void (memcpy(void *dst, void const *src, size_t len)
push %edx // ret_addr push %edx // ret_addr
ret ret
mempcpy: .globl mempcpy // (dst, src, n)
push %ebp; mov %esp,%ebp
push %edi; push %esi
mov (2+ 2)*NBPW(%ebp),%ecx
mov (2+ 1)*NBPW(%ebp),%esi
mov (2+ 0)*NBPW(%ebp),%edi
rep movsb
mov %edi,%eax
pop %esi; pop %edi; pop %ebp
ret
/* 32-bit mode only! */ /* 32-bit mode only! */
__NR_read= 3 __NR_read= 3
__NR_write= 4 __NR_write= 4

View File

@ -34,7 +34,7 @@
extern void my_bkpt(void const *arg1, ...); extern void my_bkpt(void const *arg1, ...);
#define DEBUG 0 #define DEBUG 1
// Pprotect is mprotect, but page-aligned on the lo end (Linux requirement) // Pprotect is mprotect, but page-aligned on the lo end (Linux requirement)
unsigned Pprotect(void *, size_t, unsigned); unsigned Pprotect(void *, size_t, unsigned);
@ -469,7 +469,7 @@ typedef struct {
typedef struct { typedef struct {
unsigned off_reloc; // distance back to &Elf32_Ehdr unsigned off_reloc; // distance back to &Elf32_Ehdr
unsigned off_user_DT_INIT; unsigned off_user_DT_INIT;
unsigned off_xct_off; // where un-compressed bytes end [unused?] unsigned off_xct_off; // where un-compressed bytes end
unsigned off_info; // xct_off: {l_info; p_info; b_info; compressed data) unsigned off_info; // xct_off: {l_info; p_info; b_info; compressed data)
} So_info; } So_info;
@ -484,6 +484,7 @@ upx_so_main( // returns &escape_hatch
Elf32_Ehdr *elf_tmp // scratch for Elf32_Ehdr and Elf32_Phdrs Elf32_Ehdr *elf_tmp // scratch for Elf32_Ehdr and Elf32_Phdrs
) )
{ {
my_bkpt((void *)0x1234, so_info, so_args, elf_tmp);
unsigned long const page_mask = get_page_mask(); unsigned long const page_mask = get_page_mask();
char *const va_load = (char *)&so_info->off_reloc - so_info->off_reloc; char *const va_load = (char *)&so_info->off_reloc - so_info->off_reloc;
So_info so_infc; // So_info Copy So_info so_infc; // So_info Copy

View File

@ -175,12 +175,15 @@ struct timespec {
#define __NR_lseek 19 #define __NR_lseek 19
#define __NR_getpid 20 #define __NR_getpid 20
#define __NR_access 33 #define __NR_access 33
#define __NR_mkdir 39
#define __NR_brk 45 #define __NR_brk 45
#define __NR_fcntl 55 #define __NR_fcntl 55
#define __NR_gettimeofday 78 #define __NR_gettimeofday 78
#define __NR_mmap 90 #define __NR_mmap 90
#define __NR_munmap 91 #define __NR_munmap 91
#define __NR_ftruncate 93 #define __NR_ftruncate 93
#define __NR_stat 106
#define __NR_uname 122
#define __NR_adjtimex 124 #define __NR_adjtimex 124
#define __NR_mprotect 125 #define __NR_mprotect 125
#define __NR_nanosleep 162 #define __NR_nanosleep 162
@ -342,6 +345,9 @@ type name(type1 arg1,type2 arg2,type3 arg3) \
#define _exit syscall_exit #define _exit syscall_exit
#define exit syscall_exit #define exit syscall_exit
struct stat;
struct utsname;
static inline _syscall2(int,access,const char *,file,int,mode) static inline _syscall2(int,access,const char *,file,int,mode)
static inline _syscall1(int,adjtimex,struct timex *,ntx) static inline _syscall1(int,adjtimex,struct timex *,ntx)
static inline _syscall1(void *,brk,void *,high) static inline _syscall1(void *,brk,void *,high)
@ -355,13 +361,16 @@ static inline _syscall0(pid_t,getpid)
static inline _syscall2(int,gettimeofday,struct timeval *,tv,void *,tz) static inline _syscall2(int,gettimeofday,struct timeval *,tv,void *,tz)
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,whence) static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,whence)
static inline _syscall2(int,memfd_create,char const *,name,unsigned,flags); static inline _syscall2(int,memfd_create,char const *,name,unsigned,flags);
static inline _syscall2(int,mkdir,char const *,name,unsigned,mode);
static inline _syscall3(int,mprotect,void *,addr,size_t,len,int,prot) static inline _syscall3(int,mprotect,void *,addr,size_t,len,int,prot)
static inline _syscall2(int,munmap,void *,start,size_t,length) static inline _syscall2(int,munmap,void *,start,size_t,length)
static inline _syscall2(int,nanosleep,const struct timespec *,rqtp,struct timespec *,rmtp) static inline _syscall2(int,nanosleep,const struct timespec *,rqtp,struct timespec *,rmtp)
static inline _syscall3(int,open,const char *,file,int,flag,int,mode) static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
static inline _syscall3(ssize_t,read,int,fd,void *,buf,size_t,count) static inline _syscall3(ssize_t,read,int,fd,void *,buf,size_t,count)
static inline _syscall2(int,stat,char const *,path,struct stat *,buf)
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
static inline _syscall3(ssize_t,write,int,fd,const void *,buf,size_t,count) static inline _syscall3(ssize_t,write,int,fd,const void *,buf,size_t,count)
static inline _syscall1(int,uname,struct utsname *,buf)
static inline _syscall1(int,unlink,const char *,file) static inline _syscall1(int,unlink,const char *,file)
static inline _syscall2(int,link,const char *,src, const char *,dst) static inline _syscall2(int,link,const char *,src, const char *,dst)

View File

@ -2,12 +2,12 @@ file format elf32-i386
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0635 0 0 034 2**2 CONTENTS 0 ELFMAINX 064e 0 0 034 2**2 CONTENTS
1 ELFMAINZ 0a 0 0 0669 2**0 CONTENTS 1 ELFMAINZ 0a 0 0 0682 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d ELFMAINX 0 ELFMAINX 00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
000003f7 g F ELFMAINX 023e upx_mmap_and_fd 000003f6 g F ELFMAINX 0258 upx_mmap_and_fd
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
000001cc g ELFMAINX 0 mempcpy 000001cc g ELFMAINX 0 mempcpy
00000172 g ELFMAINX 0 mmap 00000172 g ELFMAINX 0 mmap
@ -24,15 +24,12 @@ OFFSET TYPE VALUE
00000005 R_386_PC32 ELFMAINZ 00000005 R_386_PC32 ELFMAINZ
000000a5 R_386_PC32 upx_mmap_and_fd 000000a5 R_386_PC32 upx_mmap_and_fd
0000014a R_386_PC32 mmap 0000014a R_386_PC32 mmap
00000207 R_386_PC32 memset 00000204 R_386_PC32 memset
0000020e R_386_PC32 stat 0000032a R_386_PC32 mempcpy
0000023c R_386_PC32 mkdir 00000474 R_386_PC32 my_bkpt
0000032b R_386_PC32 mempcpy 000004ed R_386_PC32 get_upxfn_path
00000475 R_386_PC32 my_bkpt 0000059e R_386_PC32 memset
00000484 R_386_PC32 uname 00000622 R_386_PC32 mmap
000004de R_386_PC32 get_upxfn_path
00000585 R_386_PC32 memset
00000609 R_386_PC32 mmap
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE

16
src/stub/tmp/i386-linux.elf-fold.map generated vendored
View File

@ -7,18 +7,18 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0x176e .text 0x0000000000000000 0x1786
.text 0x0000000000000000 0x18b tmp/i386-linux.elf-fold.o .text 0x0000000000000000 0x18b tmp/i386-linux.elf-fold.o
0x000000000000000c get_page_mask 0x000000000000000c get_page_mask
0x0000000000000019 get_upxfn_path 0x0000000000000019 get_upxfn_path
*fill* 0x000000000000018b 0x1 00 *fill* 0x000000000000018b 0x1 00
.text 0x000000000000018c 0x445 tmp/i386-linux.elf-upxfd_android.o .text 0x000000000000018c 0x45e tmp/i386-linux.elf-upxfd_android.o
0x0000000000000393 upx_mmap_and_fd 0x0000000000000392 upx_mmap_and_fd
*fill* 0x00000000000005d1 0x3 00 *fill* 0x00000000000005ea 0x2 00
.text 0x00000000000005d4 0x0 tmp/i386-expand.o .text 0x00000000000005ec 0x0 tmp/i386-expand.o
.text 0x00000000000005d4 0x119a tmp/i386-linux.elf-main2.o .text 0x00000000000005ec 0x119a tmp/i386-linux.elf-main2.o
0x00000000000016f1 underlay 0x0000000000001709 underlay
0x0000000000001475 upx_main 0x000000000000148d upx_main
.data 0x0000000000000000 0x0 .data 0x0000000000000000 0x0
.data 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o .data 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o