Revamp --android-shlib

Android "Oreo" wants to deal with ElfXX_Shdr[].  So splice 4KiB into PT_LOAD[0]
with an "extra" copy of them.  This requires careful relocation processing.
It also costs a page at run time, and an average of a page in the file
(depending on fragmentation at the boundary between r-x and rw- .)

https://github.com/upx/upx/issues/124
https://github.com/upx/upx/issues/139
https://github.com/upx/upx/issues/142

	modified:   p_elf_enum.h
	modified:   p_lx_elf.cpp
	modified:   p_lx_elf.h
	modified:   stub/src/arm.v4a-linux.shlib-init.S
	modified:   stub/src/arm.v4t-linux.shlib-init.S
	modified:   stub/src/arm64-linux.shlib-init.S

	modified:   stub/arm.v5a-linux.shlib-init.h
	modified:   stub/arm.v5t-linux.shlib-init.h
	modified:   stub/arm64-linux.shlib-init.h

	modified:   ../.github/travis_testsuite_1.sh
This commit is contained in:
John Reiser
2018-01-15 16:08:34 -08:00
parent f3a7620ae8
commit c34fe09a79
12 changed files with 1497 additions and 1283 deletions
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -32,15 +32,15 @@
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_SIZE 15566
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_ADLER32 0x4b0e1f0a
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_CRC32 0x0f45a16c
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_ADLER32 0x0d0d1f66
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_CRC32 0x43a6af0c
unsigned char stub_arm_v5t_linux_shlib_init[15566] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 40, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 236, 20, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
/* 0x0030 */ 0, 0, 0, 0,192, 70,255,181, 0,161, 24, 57, 13, 28, 12,104,
/* 0x0040 */ 45, 27, 75,104, 91, 25, 8,147,200,104, 64, 25, 24, 33, 9, 24,
/* 0x0030 */ 0, 0, 0, 0,192, 70,255,181, 0,161, 28, 57, 11,104, 13, 29,
/* 0x0040 */ 76,104, 45, 27,140,104,100, 25, 8,148, 8,105, 64, 25, 89, 25,
/* 0x0050 */ 131,176, 0,181, 76,104, 12, 49, 9, 25, 0,240,166,248, 3, 5,
/* 0x0060 */ 27, 13,228, 24, 16,180,192, 26, 1,180,228, 26,192, 24,155, 8,
/* 0x0070 */ 8,180, 0, 0, 0,240, 57,248, 27, 6,137, 8, 27, 14,137, 0,
+247 -247
View File
@@ -1,5 +1,5 @@
/* arm64-linux.shlib-init.h
created from arm64-linux.shlib-init.bin, 8646 (0x21c6) bytes
created from arm64-linux.shlib-init.bin, 8654 (0x21ce) bytes
This file is part of the UPX executable compressor.
@@ -31,14 +31,14 @@
*/
#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8646
#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0xe9b387bd
#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0xb2aee707
#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8654
#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x8c2f89f3
#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0x0cefe3fe
unsigned char stub_arm64_linux_shlib_init[8646] = {
unsigned char stub_arm64_linux_shlib_init[8654] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,176, 24, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,184, 24, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 224, 7,180,169,226, 3, 1,169,254, 23, 0,249, 0, 0, 0,148,
/* 0x0050 */ 254, 15, 31,248,226, 15,191,169, 7, 64, 33,139, 5, 0,128, 18,
@@ -336,245 +336,245 @@ unsigned char stub_arm64_linux_shlib_init[8646] = {
/* 0x1290 */ 108,101,100, 46, 10, 0, 67,132, 64,248,227,255,255,181, 3, 0,
/* 0x12a0 */ 130,210, 64, 4,193,168, 96, 0, 0,180, 31, 24, 0,241,161,255,
/* 0x12b0 */ 255, 84, 33, 0,131,154,225, 3, 1,203,225,255,129,146,225, 19,
/* 0x12c0 */ 0,249,226, 3, 30,170, 65,128, 0,209,229, 3, 1,170, 36, 68,
/* 0x12d0 */ 64,184,165, 0, 4,203, 36, 68, 64,184,164, 0, 4,139,228, 15,
/* 0x12e0 */ 0,249, 36, 68, 64,184,164, 0, 4,139,228, 27, 0,249, 36, 68,
/* 0x12f0 */ 64,184,160, 0, 4,139, 1, 96, 0,145, 36, 4, 64,185, 33, 48,
/* 0x1300 */ 0,145, 33, 0, 4,139,229, 35, 64,185, 36, 68, 64,184, 5, 0,
/* 0x1310 */ 37, 10,165, 12, 0, 17,165,116, 30, 18,132, 0, 5, 11, 0, 64,
/* 0x1320 */ 37,203,224,147, 4,169, 0, 64, 37,139,132, 0, 5, 75, 16, 0,
/* 0x1330 */ 0,148, 99, 28, 0, 18,127, 72, 1,113,129, 1, 0, 84, 33,252,
/* 0x1340 */ 66,211, 65, 1, 0,180, 33, 4, 0,209, 2,120, 97,184, 67,120,
/* 0x1350 */ 26, 83,127, 20, 0,113,129, 0, 0, 84, 67, 0, 1, 75, 98,100,
/* 0x1360 */ 0, 51, 2,120, 33,184, 1,255,255,181,192, 3, 95,214,165,124,
/* 0x1370 */ 2, 83,254,151, 5,169, 35, 20, 64, 57, 38, 24, 64, 57,224,147,
/* 0x1380 */ 6,169,230,143, 7,169, 36, 68, 64,184,229, 3, 4, 42, 36, 68,
/* 0x1390 */ 64,184,226,147, 8,169,227,195, 1,145,225,151, 9,169,224,143,
/* 0x13a0 */ 10,169,165, 12, 0,145,227, 99, 64,185, 98, 8, 69,139,227, 71,
/* 0x13b0 */ 64,249, 99, 0, 0,148,227, 47, 64,249, 97, 0, 0,148, 53, 0,
/* 0x13c0 */ 0,148, 5, 0,128,210, 4, 0,128,146, 67, 6,128,210, 98, 0,
/* 0x13d0 */ 128,210,224,135, 68,169,230, 3, 0,170,200, 27,128, 82, 1, 0,
/* 0x13e0 */ 0,212, 31, 0, 6,235, 64, 0, 0, 84, 0, 0, 32,212,229, 99,
/* 0x13f0 */ 64,185,225, 31, 64,249, 29, 0, 0,148,228, 71, 64,249,224,135,
/* 0x1400 */ 73,169,226,143, 74,169,128, 0, 63,214, 4, 0, 0,148, 1, 0,
/* 0x1410 */ 0,212,224, 7,204,168, 96, 0, 31,214,228, 27, 64,249,192, 7,
/* 0x1420 */ 64,169,128, 0, 0,249,129, 8, 0,185,228, 47, 64,249,226,143,
/* 0x1430 */ 71,169,224,135, 70,169, 67, 0, 0,180,128, 0, 63,214,224,135,
/* 0x1440 */ 68,169,162, 0,128,210, 72, 28,128, 82, 1, 0, 0,212,254,147,
/* 0x1450 */ 66,169,224,135, 67,169,232, 26,128, 82,226, 15, 65,169,128, 0,
/* 0x1460 */ 31,214, 37,192, 95,184,165, 92, 0, 18,133, 0, 0, 54, 35, 68,
/* 0x1470 */ 64,184,165, 4, 0, 81, 3, 68, 0,184,165, 0, 0, 52, 34, 12,
/* 0x1480 */ 193, 40,165, 8, 0, 81, 2, 12,129, 40,165,255,255, 53,192, 3,
/* 0x1490 */ 95,214,254, 95, 0,249,227, 3, 30,170, 41, 0, 0,148, 65,244,
/* 0x14a0 */ 126,211, 5, 0,128,210, 4, 0,128,146, 67, 4,128,210, 98, 0,
/* 0x14b0 */ 128,210,225, 35, 0,249, 0, 0,128,210,200, 27,128, 82, 1, 0,
/* 0x14c0 */ 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,224, 31,
/* 0x14d0 */ 0,249,225, 39, 64,249,229, 99, 64,185,228,255,255,151,225,151,
/* 0x14e0 */ 73,169,224, 79, 0,249,165, 12, 0, 17,165,124, 2, 83,223,255,
/* 0x14f0 */ 255,151,226, 3, 0,170,225, 71, 64,249,224, 71, 0,249,217,255,
/* 0x1500 */ 255,151,225, 47, 64,249,224, 47, 0,249,214,255,255,151,225, 95,
/* 0x1510 */ 64,249,224, 95, 0,249,211,255,255,151,224,135, 67,169,162, 0,
/* 0x1520 */ 128,210, 72, 28,128, 82, 1, 0, 0,212, 31, 4, 64,177, 67, 0,
/* 0x1530 */ 0, 84, 0, 0, 32,212,254, 95, 64,249,192, 3, 31,214, 99,192,
/* 0x1540 */ 95,184, 99, 92, 0, 18, 66, 0, 3,139,192, 3, 95,214,102,105,
/* 0x1550 */ 108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,
/* 0x1560 */ 108,105,116,116,108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,
/* 0x1570 */ 101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,
/* 0x1580 */ 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32,
/* 0x1590 */ 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x15a0 */ 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32,
/* 0x15b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,
/* 0x15c0 */ 102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32,
/* 0x15d0 */ 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32,
/* 0x15e0 */ 32, 48, 48, 48, 48, 48, 48, 49, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x15f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1600 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1610 */ 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x1620 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32,
/* 0x1630 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86,
/* 0x1640 */ 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x1650 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1660 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53,
/* 0x1680 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1690 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32,
/* 0x16a0 */ 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48,
/* 0x16b0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x16d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x16e0 */ 48, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x16f0 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32,
/* 0x1700 */ 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1710 */ 32, 48, 48, 48, 48, 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48,
/* 0x1720 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1730 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1740 */ 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x1750 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x1760 */ 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32,
/* 0x1770 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48,
/* 0x1780 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1790 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 32, 32, 48, 48, 48, 48, 48, 49, 55, 56, 32, 32, 50, 42, 42, 48,
/* 0x17b0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68,
/* 0x17c0 */ 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66, 32, 32,
/* 0x17d0 */ 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32,
/* 0x17e0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1800 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 57, 52, 32, 32, 50,
/* 0x1810 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x1820 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65,
/* 0x1830 */ 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1840 */ 100, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1850 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1860 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 56, 52,
/* 0x1870 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1880 */ 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x1890 */ 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48,
/* 0x18a0 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 54, 56, 32, 32, 48, 48,
/* 0x18b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x18c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18d0 */ 32, 32, 48, 48, 48, 48, 48, 52, 53, 52, 32, 32, 50, 42, 42, 48,
/* 0x18e0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68,
/* 0x18f0 */ 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x1900 */ 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32,
/* 0x1910 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1920 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1930 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 99, 32, 32, 50,
/* 0x1940 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x1950 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65,
/* 0x1960 */ 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1970 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1980 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1990 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 56,
/* 0x19a0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x19b0 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 69,
/* 0x19c0 */ 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x19d0 */ 48, 48, 48, 51,101, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49,
/* 0x1a00 */ 50, 53, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x1a10 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49,
/* 0x1a20 */ 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32,
/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1a40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1a60 */ 48, 48, 49, 50, 57, 54, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x1a70 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x1a80 */ 10, 32, 49, 50, 32, 69, 76, 70, 77, 65, 74, 78, 90, 32, 32, 32,
/* 0x1a90 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 52, 32, 32, 48, 48, 48,
/* 0x1aa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1ab0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1ac0 */ 32, 48, 48, 48, 48, 49, 50, 57, 54, 32, 32, 50, 42, 42, 48, 32,
/* 0x1ad0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1ae0 */ 78, 76, 89, 10, 32, 49, 51, 32, 65, 78, 68, 77, 65, 74, 78, 90,
/* 0x1af0 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 52, 32, 32,
/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b20 */ 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 98, 97, 32, 32, 50, 42,
/* 0x1b30 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x1b40 */ 65, 68, 79, 78, 76, 89, 10, 32, 49, 52, 32, 69, 76, 70, 77, 65,
/* 0x1b50 */ 75, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50, 57,
/* 0x1b60 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b70 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b80 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 98,101, 32,
/* 0x1b90 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1ba0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76,
/* 0x1bb0 */ 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1bd0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48,
/* 0x1be0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77,
/* 0x1bf0 */ 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1c10 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48,
/* 0x1c20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65,
/* 0x1c30 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70,
/* 0x1c50 */ 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10,
/* 0x1c70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c80 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65,
/* 0x1c90 */ 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ca0 */ 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48,
/* 0x1cb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x1cc0 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48,
/* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78,
/* 0x1ce0 */ 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1d00 */ 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d10 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1d30 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48,
/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82,
/* 0x1d50 */ 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86,
/* 0x1d70 */ 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d80 */ 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48,
/* 0x1d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1da0 */ 100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1dc0 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x1dd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1de0 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48,
/* 0x1df0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1e00 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x1e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1e20 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48,
/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1e40 */ 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x1e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1e60 */ 100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48,
/* 0x1e70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70,
/* 0x1e80 */ 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e90 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69,
/* 0x1ea0 */ 76, 70, 77, 65, 74, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1eb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 74, 78,
/* 0x1ec0 */ 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ed0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 65, 78, 68, 77, 65,
/* 0x1ee0 */ 74, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ef0 */ 48, 48, 48, 48, 32, 65, 78, 68, 77, 65, 74, 78, 90, 10, 48, 48,
/* 0x1f00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1f10 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 75, 78, 90, 9,
/* 0x1f20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f30 */ 32, 69, 76, 70, 77, 65, 75, 78, 90, 10, 48, 48, 48, 48, 48, 48,
/* 0x1f40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32,
/* 0x1f50 */ 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48,
/* 0x1f60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116,
/* 0x1f70 */ 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f80 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86,
/* 0x1f90 */ 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1fa0 */ 49, 50, 56, 32,117, 99,108, 95,110,114,118, 50,101, 95,100,101,
/* 0x1fb0 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48,
/* 0x1fc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x1fd0 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48,
/* 0x1fe0 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 99, 32,117, 99,108, 95,
/* 0x1ff0 */ 110,114,118, 50,100, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x2000 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2010 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86,
/* 0x2020 */ 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2030 */ 48,102, 48, 32,117, 99,108, 95,110,114,118, 50, 98, 95,100,101,
/* 0x2040 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48,
/* 0x2050 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x2060 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9,
/* 0x2070 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2080 */ 32, 76,122,109, 97, 68,101, 99,111,100,101, 10, 48, 48, 48, 48,
/* 0x2090 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x20a0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48,
/* 0x20b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,
/* 0x20c0 */ 110,100, 95,100,101, 99,111,109,112,114,101,115,115, 10, 10, 82,
/* 0x20d0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68,
/* 0x20e0 */ 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93,
/* 0x20f0 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2100 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2110 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x2120 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 32, 82, 95, 65, 65,
/* 0x2130 */ 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50, 54, 32, 32, 69, 76,
/* 0x2140 */ 70, 77, 65, 73, 78, 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x2150 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x2160 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70,
/* 0x2170 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89,
/* 0x2180 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2190 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x21a0 */ 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52,
/* 0x21b0 */ 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95,
/* 0x21c0 */ 68, 69, 67, 51, 48, 10
/* 0x12c0 */ 0,249,226, 3, 30,170, 65,144, 0,209, 36, 68, 64,184,227, 3,
/* 0x12d0 */ 4, 42,229, 3, 1,170, 36, 68, 64,184,165, 0, 4,203, 36, 68,
/* 0x12e0 */ 64,184,132, 0, 5,139,228, 15, 0,249, 36, 68, 64,184,132, 0,
/* 0x12f0 */ 5,139,228, 27, 0,249, 36, 68, 64,184,128, 0, 5,139, 97, 0,
/* 0x1300 */ 5,139, 36, 4, 64,185, 33, 48, 0,145, 33, 0, 4,139,229, 35,
/* 0x1310 */ 64,185, 36, 68, 64,184, 5, 0, 37, 10,165, 12, 0, 17,165,116,
/* 0x1320 */ 30, 18,132, 0, 5, 11, 0, 64, 37,203,224,147, 4,169, 0, 64,
/* 0x1330 */ 37,139,132, 0, 5, 75, 16, 0, 0,148, 99, 28, 0, 18,127, 72,
/* 0x1340 */ 1,113,129, 1, 0, 84, 33,252, 66,211, 65, 1, 0,180, 33, 4,
/* 0x1350 */ 0,209, 2,120, 97,184, 67,120, 26, 83,127, 20, 0,113,129, 0,
/* 0x1360 */ 0, 84, 67, 0, 1, 75, 98,100, 0, 51, 2,120, 33,184, 1,255,
/* 0x1370 */ 255,181,192, 3, 95,214,165,124, 2, 83,254,151, 5,169, 35, 20,
/* 0x1380 */ 64, 57, 38, 24, 64, 57,224,147, 6,169,230,143, 7,169, 36, 68,
/* 0x1390 */ 64,184,229, 3, 4, 42, 36, 68, 64,184,226,147, 8,169,227,195,
/* 0x13a0 */ 1,145,225,151, 9,169,224,143, 10,169,165, 12, 0,145,227, 99,
/* 0x13b0 */ 64,185, 98, 8, 69,139,227, 71, 64,249, 99, 0, 0,148,227, 47,
/* 0x13c0 */ 64,249, 97, 0, 0,148, 53, 0, 0,148, 5, 0,128,210, 4, 0,
/* 0x13d0 */ 128,146, 67, 6,128,210, 98, 0,128,210,224,135, 68,169,230, 3,
/* 0x13e0 */ 0,170,200, 27,128, 82, 1, 0, 0,212, 31, 0, 6,235, 64, 0,
/* 0x13f0 */ 0, 84, 0, 0, 32,212,229, 99, 64,185,225, 31, 64,249, 29, 0,
/* 0x1400 */ 0,148,228, 71, 64,249,224,135, 73,169,226,143, 74,169,128, 0,
/* 0x1410 */ 63,214, 4, 0, 0,148, 1, 0, 0,212,224, 7,204,168, 96, 0,
/* 0x1420 */ 31,214,228, 27, 64,249,192, 7, 64,169,128, 0, 0,249,129, 8,
/* 0x1430 */ 0,185,228, 47, 64,249,226,143, 71,169,224,135, 70,169, 67, 0,
/* 0x1440 */ 0,180,128, 0, 63,214,224,135, 68,169,162, 0,128,210, 72, 28,
/* 0x1450 */ 128, 82, 1, 0, 0,212,254,147, 66,169,224,135, 67,169,232, 26,
/* 0x1460 */ 128, 82,226, 15, 65,169,128, 0, 31,214, 37,192, 95,184,165, 92,
/* 0x1470 */ 0, 18,133, 0, 0, 54, 35, 68, 64,184,165, 4, 0, 81, 3, 68,
/* 0x1480 */ 0,184,165, 0, 0, 52, 34, 12,193, 40,165, 8, 0, 81, 2, 12,
/* 0x1490 */ 129, 40,165,255,255, 53,192, 3, 95,214,254, 95, 0,249,227, 3,
/* 0x14a0 */ 30,170, 41, 0, 0,148, 65,244,126,211, 5, 0,128,210, 4, 0,
/* 0x14b0 */ 128,146, 67, 4,128,210, 98, 0,128,210,225, 35, 0,249, 0, 0,
/* 0x14c0 */ 128,210,200, 27,128, 82, 1, 0, 0,212, 31, 4, 64,177, 67, 0,
/* 0x14d0 */ 0, 84, 0, 0, 32,212,224, 31, 0,249,225, 39, 64,249,229, 99,
/* 0x14e0 */ 64,185,228,255,255,151,225,151, 73,169,224, 79, 0,249,165, 12,
/* 0x14f0 */ 0, 17,165,124, 2, 83,223,255,255,151,226, 3, 0,170,225, 71,
/* 0x1500 */ 64,249,224, 71, 0,249,217,255,255,151,225, 47, 64,249,224, 47,
/* 0x1510 */ 0,249,214,255,255,151,225, 95, 64,249,224, 95, 0,249,211,255,
/* 0x1520 */ 255,151,224,135, 67,169,162, 0,128,210, 72, 28,128, 82, 1, 0,
/* 0x1530 */ 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,254, 95,
/* 0x1540 */ 64,249,192, 3, 31,214, 99,192, 95,184, 99, 92, 0, 18, 66, 0,
/* 0x1550 */ 3,139,192, 3, 95,214,102,105,108,101, 32,102,111,114,109, 97,
/* 0x1560 */ 116, 32,101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97,
/* 0x1570 */ 114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58,
/* 0x1580 */ 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32,
/* 0x1590 */ 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65,
/* 0x15a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76,
/* 0x15b0 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x15c0 */ 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32,
/* 0x15d0 */ 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x15e0 */ 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49,
/* 0x15f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1600 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1610 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32,
/* 0x1620 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1630 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x1640 */ 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32,
/* 0x1650 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1660 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1680 */ 32, 48, 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32,
/* 0x1690 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x16a0 */ 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x16b0 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16d0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16e0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42,
/* 0x16f0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x1700 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 69,
/* 0x1710 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50,
/* 0x1720 */ 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1730 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1740 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 48, 32,
/* 0x1750 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1760 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82,
/* 0x1770 */ 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1780 */ 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1790 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49,
/* 0x17b0 */ 55, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x17c0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53,
/* 0x17d0 */ 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48,
/* 0x17e0 */ 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x17f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1800 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1810 */ 48, 48, 50, 57, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x1820 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x1830 */ 32, 32, 54, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32,
/* 0x1840 */ 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32, 48, 48, 48, 48,
/* 0x1850 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1860 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1870 */ 48, 48, 48, 48, 48, 51, 56, 52, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1880 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44,
/* 0x1890 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90,
/* 0x18a0 */ 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x18b0 */ 48, 57, 54, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18c0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52,
/* 0x18e0 */ 53, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x18f0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56,
/* 0x1900 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48,
/* 0x1910 */ 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1920 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1930 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1940 */ 48, 48,100, 98, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x1950 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x1960 */ 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32,
/* 0x1970 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x1980 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1990 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x19a0 */ 48, 48, 48, 48, 49, 50, 53, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x19b0 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x19c0 */ 76, 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32,
/* 0x19d0 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,101, 32, 32, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x19f0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a00 */ 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 56, 32, 32, 50, 42, 42,
/* 0x1a10 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x1a20 */ 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73,
/* 0x1a30 */ 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a40 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a60 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 57, 54, 32, 32,
/* 0x1a70 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x1a80 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 50, 32, 69, 76, 70,
/* 0x1a90 */ 77, 65, 74, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x1aa0 */ 48, 50, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ab0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ac0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 57,
/* 0x1ad0 */ 54, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1ae0 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 51, 32,
/* 0x1af0 */ 65, 78, 68, 77, 65, 74, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48,
/* 0x1b00 */ 48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x1b30 */ 49, 50, 98, 97, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1b40 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32,
/* 0x1b50 */ 49, 52, 32, 69, 76, 70, 77, 65, 75, 78, 90, 32, 32, 32, 32, 32,
/* 0x1b60 */ 32, 48, 48, 48, 48, 48, 50, 57, 56, 32, 32, 48, 48, 48, 48, 48,
/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1b80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1b90 */ 48, 48, 48, 49, 50, 98,101, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x1ba0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x1bb0 */ 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bd0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x1be0 */ 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bf0 */ 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10,
/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c10 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x1c20 */ 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c30 */ 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x1c50 */ 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48,
/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69,
/* 0x1c70 */ 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c80 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1c90 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48, 48,
/* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72,
/* 0x1cb0 */ 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cc0 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86,
/* 0x1cd0 */ 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10,
/* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d00 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48,
/* 0x1d10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d20 */ 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d30 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78,
/* 0x1d40 */ 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d50 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x1d70 */ 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48,
/* 0x1d80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50,
/* 0x1d90 */ 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1da0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95,
/* 0x1db0 */ 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1dc0 */ 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48,
/* 0x1dd0 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1de0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95,
/* 0x1df0 */ 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50,
/* 0x1e10 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e20 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95,
/* 0x1e30 */ 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49,
/* 0x1e50 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e60 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65,
/* 0x1e70 */ 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e80 */ 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, 48,
/* 0x1e90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1ea0 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 74, 78, 90, 9,
/* 0x1eb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ec0 */ 32, 69, 76, 70, 77, 65, 74, 78, 90, 10, 48, 48, 48, 48, 48, 48,
/* 0x1ed0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1ee0 */ 100, 32, 32, 65, 78, 68, 77, 65, 74, 78, 90, 9, 48, 48, 48, 48,
/* 0x1ef0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 78, 68,
/* 0x1f00 */ 77, 65, 74, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f10 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69,
/* 0x1f20 */ 76, 70, 77, 65, 75, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 75, 78,
/* 0x1f40 */ 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f50 */ 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65,
/* 0x1f60 */ 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f70 */ 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x1f80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x1f90 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48,
/* 0x1fa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95,
/* 0x1fb0 */ 110,114,118, 50,101, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x1fc0 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1fd0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86,
/* 0x1fe0 */ 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ff0 */ 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101,
/* 0x2000 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48,
/* 0x2010 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x2020 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48,
/* 0x2030 */ 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108, 95,
/* 0x2040 */ 110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x2050 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2060 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77,
/* 0x2070 */ 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2080 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99,
/* 0x2090 */ 111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x20a0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x20b0 */ 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x20c0 */ 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,109,
/* 0x20d0 */ 112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x20e0 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x20f0 */ 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x2100 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32,
/* 0x2110 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76,
/* 0x2120 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2130 */ 48, 48, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65,
/* 0x2140 */ 76, 76, 50, 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10,
/* 0x2150 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x2160 */ 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x2170 */ 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32,
/* 0x2180 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x2190 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x21a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82,
/* 0x21b0 */ 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49,
/* 0x21c0 */ 57, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10
};
+6 -3
View File
@@ -79,10 +79,11 @@ __ARM_NR_cacheflush = 2 + __ARM_NR_BASE
#define ecx r5
section ELFMAINX
// .long offset(b_info) src of f_exp
// .long offset(.) // detect relocation
// .long offset(user DT_INIT)
// .long offset(escape_hatch)
// .long offset({p_info; b_info; compressed data})
// .long offset(xct_off) dst of f_exp
_start: .globl _start
nop //; bkpt // for debugging
@@ -176,15 +177,17 @@ main:
// 12. goto user DT_INIT
mov edx,lr // &f_decompress
add esi,edx,# _start - f_decompress - 5*4
add esi,edx,# _start - f_decompress - 4*4
lodsl; mov tmp,eax // distance back to 1st b_info
mov ecx,esi
lodsl; sub ecx,ecx,eax; //str ecx,[fp,#o_reloc]
sub tmp,esi,tmp // &b_info
lodsl; add eax,ecx,eax; str eax,[fp,#o_uinit] // reloc DT_INIT for step 12
lodsl; add eax,ecx,eax; push eax // reloc &hatch for step 10
o_hatch= -1*4
lodsl; add edi,ecx,eax // &l_info; also destination for decompress
add esi,edi,#sz_l_info + sz_p_info // &b_info
mov esi,tmp // &b_info
sub sp,sp,#2*4 // param space: munmap temp pages step 9
p_unmap= -3*4
+22 -19
View File
@@ -29,13 +29,14 @@
* <jreiser@users.sourceforge.net>
*/
NBPW= 4
#define ARM_OLDABI 1
#include "arch/arm/v5a/macros.S"
#define bkpt .long 0xe7f001f0 /* reserved instr; Linux GNU eabi breakpoint */
#define bkpt_th .short 0xde01 /* reserved instr; Linux GNU eabi breakpoint */
sz_Elf32_Ehdr = 13*4
sz_Elf32_Phdr = 8*4
sz_Elf32_Ehdr = 13*NBPW
sz_Elf32_Phdr = 8*NBPW
sz_b_info= 12
sz_unc= 0
@@ -111,36 +112,38 @@ _=-1+_ // one less word on stack
#define lodslu bl get4u
section ELFMAINX
// .long offset(b_info) src for f_exp
//D_INFO:
// .long offset(.) // detect relocation
// .long offset(user DT_INIT)
// .long offset(escape_hatch) // override with round_up(2, PT_LOAD[0]{.p_memsz + .p_vaddr})
// .long offset({l_info; p_info; b_info; compressed data})
// .long offset(dst for f_exp)
#define DEBUG 0
.code 16 //; .balign 4
.real_start_ofELFMAINX:
.thumb_func
_start: .globl _start
nop
#if DEBUG //{
bkpt_th // for debugging
#else //}{
nop
#endif //}
push {r0,r1,r2,r3,r4,r5,r6,r7,lr}
_=9
o_uinit= 1 // lr
adr esi,here
sub esi,esi,#4*4 + 2*(4+ DEBUG) // D_INFO
sub esi,#(here - _start) + 5*NBPW // -NBPW + &D_INFO
here:
mov ecx,esi
ldr eax,[esi,#0*4]; sub ecx,eax; //str ecx,[SP(o_reloc)]
ldr tmp,[esi,#0*NBPW] // offset(b_info)
add ecx,esi,#NBPW // &D_INFO
ldr eax,[esi,#1*NBPW]; sub ecx,eax; //str ecx,[SP(o_reloc)]
// reloc DT_INIT for step 12
ldr tmp,[esi,#1*4]; add tmp,ecx; str tmp,[SP(o_uinit)]
ldr edi,[esi,#3*4]; add edi,ecx // &l_info; also destination for decompress
mov esi,#sz_l_info+sz_p_info
add esi,edi // &b_info
ldr eax,[esi,#2*NBPW]; add eax,ecx; str eax,[SP(o_uinit)]
ldr edi,[esi,#4*NBPW]; add edi,ecx // dst for f_exp
add esi,tmp,ecx // &b_info src for f_exp
sub sp,#3*4 // 3 slots of space
sub sp,#3*NBPW // 3 slots of space
_=1+_ // &escape_hatch (step 10)
o_hatch=_ // 10
_=2+_ // param space: munmap temp pages (step 9)
@@ -290,7 +293,7 @@ L710:
mov tmp,lr; sub tmp,#1; push_ tmp // &f_decompress (ARM mode)
o_uncpr=_ // 23
add tmp,SP(p_unflt)+1*4; push_ tmp // &dstlen
add tmp,SP(p_unflt)+1*NBPW; push_ tmp // &dstlen
push_ edi // dst
push_ ecx // srclen
push_ esi // src; arglist ready for decompress step 6
@@ -347,8 +350,8 @@ _=-6+_ // 15
tst arg4,arg4; beq 0f // 0==ftid ==> no filter
blx eax // f_unfilter
0:
ldr arg1,[sp,#0*4] // lo(dst)
ldr arg2,[sp,#1*4] // len
ldr arg1,[sp,#0*NBPW] // lo(dst)
ldr arg2,[sp,#1*NBPW] // len
add arg2,arg1 // hi(dst)
bl x__ARM_NR_cacheflush
@@ -439,7 +442,7 @@ o_super=_ // 28
mov arg5,#0; mvn arg5,arg5 // -1; cater to *BSD for fd of MAP_ANON
mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS
mov arg3,#PROT_READ|PROT_WRITE|PROT_EXEC
str arg2,[SP(p_unmap)+1*4] // length to unmap
str arg2,[SP(p_unmap)+1*NBPW] // length to unmap
mov arg1,#0 // any addr
thumb_sys7t __NR_mmap64; asr tmp,r0,#12; add tmp,#1; bne 0f; bkpt_th; 0:
str r0,[SP(p_unmap)] // address to unmap
@@ -449,14 +452,14 @@ o_super=_ // 28
ldr ecx,[SP(o_wfrag)] // w_fragment
bl movsl // copy the fragment
ldr esi,[SP(p_uncpr)+0*4] // src
ldr ecx,[SP(p_uncpr)+1*4] // len
ldr esi,[SP(p_uncpr)+0*NBPW] // src
ldr ecx,[SP(p_uncpr)+1*NBPW] // len
mov tmp,#3
and tmp,esi // length of prefix alignment
sub esi,tmp // down to word aligned
add ecx,tmp // prefix increases byte length
add tmp,edi // skip prefix at destination
str tmp,[SP(p_uncpr)+0*4] // dst
str tmp,[SP(p_uncpr)+0*NBPW] // dst
add ecx,#3 // round up to full words
lsr ecx,#2
bl movsl // copy all aligned words that contain compressed data
+11 -9
View File
@@ -120,10 +120,13 @@ sp_frame = 24 * NBPW
.endm
section ELFMAINX
// .long offset(b_info) src of f_exp
// .long offset(.) // detect relocation
// .long offset(user DT_INIT)
// .long offset(escape_hatch)
// .long offset({l_info; p_info; b_info; compressed data})
// .long offset(xct_off) dst of f_exp
_start: .globl _start
// brk #0 // debugging
slot f_argc // 0
slot f_argv // 1
@@ -132,8 +135,6 @@ sp_frame = 24 * NBPW
slot f_PMASK // 4 PAGE_MASK
slot f_my_ra // 5
_start: .globl _start
// brk #0 // debugging
stp arg1,arg2,[sp,#f_argc - sp_frame]! // f_argv
stp arg3,x0, [sp,#f_envp] // %f_uinit
str lr, [sp,#f_my_ra]
@@ -213,22 +214,23 @@ main:
// 12. goto user DT_INIT
mov rdx,lr // &f_decompress
add rsi,rdx,# _start - f_decompress - 4*4
add rsi,rdx,# _start - f_decompress - 5*4
#define lodsl ldr eax,[rsi],#4
#define lodslu lodsl
lodsl; mov tmp,eax // offset(b_info)
mov rcx,rsi
lodsl; sub rcx,rcx,rax; //str ecx,[sp,#o_reloc]
lodsl; add rax,rcx,rax; str rax,[sp,#f_uinit] // reloc DT_INIT for step 12
lodsl; add rax,rax,rcx; str rax,[sp,#f_uinit] // reloc DT_INIT for step 12
slot o_hatch // 6
lodsl; add rax,rcx,rax; str rax,[sp,#o_hatch] // reloc &hatch for step 10
lodsl; add rdi,rcx,rax // &l_info; also destination for decompress
add rsi,rdi,#sz_l_info + sz_p_info // &b_info
lodsl; add rax,rax,rcx; str rax,[sp,#o_hatch] // reloc &hatch for step 10
lodsl; add rdi,rax,rcx // destination for decompress
add rsi,tmpx,rcx // &b_info src for f_exp
slot p_unmap,2 // 7
ldr eax,[rsi,#sz_cpr]; add rsi,rsi,#sz_b_info // sz_cpr
ldr eax,[rsi,#sz_cpr]; add rsi,rsi,#sz_b_info
add rsi,rsi,rax // skip unpack helper block
ldr ecx,[sp,#f_PMASK]
+21 -21
View File
@@ -13,7 +13,7 @@ Idx Name Size VMA LMA File off Algn Flags
8 LZMA_DEC10 00000478 00000000 00000000 00000d84 2**0 CONTENTS, RELOC, READONLY
9 LZMA_DEC30 00000000 00000000 00000000 000011fc 2**0 CONTENTS, READONLY
10 ELFMAINY 0000003e 00000000 00000000 000011fc 2**0 CONTENTS, READONLY
11 ELFMAINZ 000002fc 00000000 00000000 0000123a 2**0 CONTENTS, RELOC, READONLY
11 ELFMAINZ 00000308 00000000 00000000 0000123a 2**0 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
00000000 l d NRV2E 00000000 NRV2E
00000000 l d NRV2D 00000000 NRV2D
@@ -245,26 +245,26 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE
00000048 R_ARM_PC24 ELFMAINZ
00000070 R_ARM_PC24 ELFMAINZ
0000009c R_ARM_PC24 ELFMAINZ
000000b8 R_ARM_PC24 ELFMAINZ
000000dc R_ARM_PC24 ELFMAINZ
000000e4 R_ARM_PC24 ELFMAINZ
0000011c R_ARM_PC24 ELFMAINZ
00000124 R_ARM_PC24 ELFMAINZ
00000054 R_ARM_PC24 ELFMAINZ
0000007c R_ARM_PC24 ELFMAINZ
000000a8 R_ARM_PC24 ELFMAINZ
000000c4 R_ARM_PC24 ELFMAINZ
000000e8 R_ARM_PC24 ELFMAINZ
000000f0 R_ARM_PC24 ELFMAINZ
00000128 R_ARM_PC24 ELFMAINZ
00000150 R_ARM_PC24 ELFMAINZ
00000160 R_ARM_PC24 ELFMAINZ
00000170 R_ARM_PC24 ELFMAINZ
00000190 R_ARM_PC24 ELFMAINZ
000001ec R_ARM_PC24 ELFMAINZ
000001f4 R_ARM_PC24 ELFMAINZ
00000208 R_ARM_PC24 ELFMAINZ
0000021c R_ARM_PC24 ELFMAINZ
00000244 R_ARM_PC24 ELFMAINZ
00000258 R_ARM_PC24 ELFMAINZ
00000280 R_ARM_PC24 ELFMAINZ
00000290 R_ARM_PC24 ELFMAINZ
00000130 R_ARM_PC24 ELFMAINZ
00000134 R_ARM_PC24 ELFMAINZ
0000015c R_ARM_PC24 ELFMAINZ
0000016c R_ARM_PC24 ELFMAINZ
0000017c R_ARM_PC24 ELFMAINZ
0000019c R_ARM_PC24 ELFMAINZ
000001f8 R_ARM_PC24 ELFMAINZ
00000200 R_ARM_PC24 ELFMAINZ
00000214 R_ARM_PC24 ELFMAINZ
00000228 R_ARM_PC24 ELFMAINZ
00000250 R_ARM_PC24 ELFMAINZ
00000264 R_ARM_PC24 ELFMAINZ
0000028c R_ARM_PC24 ELFMAINZ
0000029c R_ARM_PC24 ELFMAINZ
000002a8 R_ARM_PC24 ELFMAINZ
000002b4 R_ARM_PC24 ELFMAINZ
+1 -1
View File
@@ -16,7 +16,7 @@ Idx Name Size VMA LMA File off Algn
11 ELFMAINZ 00000000 0000000000000000 0000000000000000 00001296 2**0 CONTENTS, READONLY
12 ELFMAJNZ 00000024 0000000000000000 0000000000000000 00001296 2**0 CONTENTS, READONLY
13 ANDMAJNZ 00000004 0000000000000000 0000000000000000 000012ba 2**0 CONTENTS, READONLY
14 ELFMAKNZ 00000290 0000000000000000 0000000000000000 000012be 2**0 CONTENTS, READONLY
14 ELFMAKNZ 00000298 0000000000000000 0000000000000000 000012be 2**0 CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ