1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

stash work-in-progress

modified:   stub/src/amd64-darwin.macho-entry.S
	modified:   stub/src/arm.v5a-darwin.macho-entry.S
	modified:   stub/src/arm64-darwin.macho-entry.S
This commit is contained in:
John Reiser 2017-12-17 15:02:57 -08:00
parent c9b09555c4
commit 576d9a4e7e
7 changed files with 1465 additions and 1204 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* arm64-darwin.macho-entry.h
created from arm64-darwin.macho-entry.bin, 7768 (0x1e58) bytes
created from arm64-darwin.macho-entry.bin, 7997 (0x1f3d) bytes
This file is part of the UPX executable compressor.
@ -31,14 +31,14 @@
*/
#define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 7768
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xdf5a6a8d
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0xc5aa2667
#define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 7997
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xc3a0cd93
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0x23734600
unsigned char stub_arm64_darwin_macho_entry[7768] = {
unsigned char stub_arm64_darwin_macho_entry[7997] = {
/* 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, 32, 22, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 8, 23, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 255, 35, 0,209,224, 7,177,169,226, 15, 1,169,228, 23, 2,169,
/* 0x0050 */ 230, 31, 3,169,232, 39, 4,169,234, 47, 5,169,236, 55, 6,169,
@ -332,194 +332,208 @@ unsigned char stub_arm64_darwin_macho_entry[7768] = {
/* 0x1250 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42,
/* 0x1260 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121,
/* 0x1270 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75,
/* 0x1280 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,195, 15, 64,185,
/* 0x1290 */ 193, 19, 64,185,194, 67, 33,139, 66, 48, 0,145,192, 67, 35,139,
/* 0x12a0 */ 0, 0, 3,145,228, 3, 1, 42, 73,204, 95,184,132, 16, 0, 81,
/* 0x12b0 */ 9,204, 31,184,164,255,255, 53,196, 11, 64,185,222, 3, 2,145,
/* 0x12c0 */ 227, 15, 31,184,227, 3, 0,145,226, 3, 30,170,171, 32, 1,209,
/* 0x12d0 */ 234, 3, 30,170,160, 0, 63,214, 64, 1, 31,214,229, 3, 30,170,
/* 0x12e0 */ 235,255,255,151, 0, 0, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x12f0 */ 109, 97,116, 32,101,108,102, 54, 52, 45,108,105,116,116,108,101,
/* 0x1300 */ 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,
/* 0x1310 */ 115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32,
/* 0x1320 */ 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86,
/* 0x1330 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1340 */ 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1350 */ 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,
/* 0x1360 */ 110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 77, 65, 67,
/* 0x1370 */ 72, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x1380 */ 48, 52, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1390 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13a0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52,
/* 0x13b0 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x13c0 */ 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x13d0 */ 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32,
/* 0x13e0 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x13f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1400 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1410 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, 32, 50, 42, 42,
/* 0x1420 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x1430 */ 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32,
/* 0x1440 */ 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 56,
/* 0x1450 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1460 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1470 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, 32,
/* 0x1480 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x1490 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86,
/* 0x14a0 */ 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x14b0 */ 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x14c0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x14d0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 97,
/* 0x14e0 */ 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x14f0 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32,
/* 0x1500 */ 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48,
/* 0x1510 */ 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1520 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1530 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x1540 */ 48, 50, 99, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1550 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32,
/* 0x1560 */ 32, 53, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32,
/* 0x1570 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1580 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1590 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x15a0 */ 48, 48, 48, 48, 51, 98, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x15b0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x15c0 */ 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48,
/* 0x15d0 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32, 48, 48,
/* 0x15e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x15f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1600 */ 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32, 50, 42, 42, 48,
/* 0x1610 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79,
/* 0x1620 */ 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32,
/* 0x1630 */ 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48,
/* 0x1640 */ 48, 48, 48, 57, 54, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1650 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1660 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x1670 */ 48, 52, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1680 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32,
/* 0x1690 */ 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32,
/* 0x16a0 */ 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48, 48, 48,
/* 0x16b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x16d0 */ 48, 48, 48, 48,100,102, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x16e0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x16f0 */ 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48,
/* 0x1700 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1710 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1720 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1730 */ 32, 32, 48, 48, 48, 48, 49, 50, 56, 99, 32, 32, 50, 42, 42, 48,
/* 0x1740 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68,
/* 0x1750 */ 79, 78, 76, 89, 10, 32, 49, 48, 32, 77, 65, 67, 72, 77, 65, 73,
/* 0x1760 */ 78, 89, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1770 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1780 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1790 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 56, 99, 32, 32, 50,
/* 0x17a0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x17b0 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 77, 65, 67, 72,
/* 0x17c0 */ 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x17d0 */ 53, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17e0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17f0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 56, 99,
/* 0x1800 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1810 */ 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x1820 */ 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10,
/* 0x1830 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1840 */ 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x1850 */ 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1860 */ 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10,
/* 0x1870 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1880 */ 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73,
/* 0x1890 */ 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18a0 */ 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 10, 48, 48,
/* 0x18b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x18c0 */ 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88,
/* 0x18d0 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18e0 */ 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48,
/* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x1900 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48,
/* 0x1910 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78,
/* 0x1920 */ 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1930 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1940 */ 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1950 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48,
/* 0x1960 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1970 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48,
/* 0x1980 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82,
/* 0x1990 */ 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19a0 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86,
/* 0x19b0 */ 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19c0 */ 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48,
/* 0x19d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x19e0 */ 100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86,
/* 0x1a00 */ 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a10 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76,
/* 0x1a20 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48,
/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95,
/* 0x1a40 */ 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76,
/* 0x1a60 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48,
/* 0x1a70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95,
/* 0x1a80 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a90 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76,
/* 0x1aa0 */ 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48,
/* 0x1ab0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95,
/* 0x1ac0 */ 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77,
/* 0x1ae0 */ 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65,
/* 0x1b00 */ 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67,
/* 0x1b20 */ 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b30 */ 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48,
/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1b50 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48,
/* 0x1b60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117,
/* 0x1b70 */ 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109,112,114,
/* 0x1b80 */ 101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32,
/* 0x1ba0 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bb0 */ 48, 48, 48, 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100,
/* 0x1bc0 */ 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48,
/* 0x1bd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1be0 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117,
/* 0x1c00 */ 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,
/* 0x1c10 */ 101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c20 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x1c30 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97,
/* 0x1c50 */ 68,101, 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x1c70 */ 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48,
/* 0x1c80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,
/* 0x1c90 */ 101, 99,111,109,112,114,101,115,115, 10, 48, 48, 48, 48, 48, 48,
/* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32,
/* 0x1cb0 */ 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 79, 95, 66, 73, 78, 70,
/* 0x1cd0 */ 79, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x1ce0 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77,
/* 0x1cf0 */ 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32,
/* 0x1d00 */ 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32,
/* 0x1d10 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 48,
/* 0x1d30 */ 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50,
/* 0x1d40 */ 54, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120, 48,
/* 0x1d50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 10,
/* 0x1d60 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x1d70 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76,
/* 0x1d80 */ 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32,
/* 0x1d90 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x1da0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32,
/* 0x1dc0 */ 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82,
/* 0x1dd0 */ 49, 57, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 10,
/* 0x1de0 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x1df0 */ 68, 83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, 78,
/* 0x1e00 */ 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32,
/* 0x1e10 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x1e20 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48,
/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 56, 32, 82, 95,
/* 0x1e40 */ 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32, 32,
/* 0x1e50 */ 79, 95, 66, 73, 78, 70, 79, 10
/* 0x1280 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,232, 3, 30,170,
/* 0x1290 */ 7, 1, 64,185,226, 3, 8,170, 66, 0, 12,203, 66, 64, 39,139,
/* 0x12a0 */ 226, 11, 0,249,225, 3, 2,170, 5, 0,128, 82, 4, 0,128, 18,
/* 0x12b0 */ 67, 4,128, 82, 98, 0,128, 82, 0, 0,128,210,168, 24,128, 82,
/* 0x12c0 */ 1, 0, 0,212,224, 7, 0,249, 74, 1, 12,203, 74, 1, 0,139,
/* 0x12d0 */ 5, 0,128,210,228, 3, 64,185, 67, 2,128, 82, 98, 0,128, 82,
/* 0x12e0 */ 1, 1, 12,203,168, 24,128, 82, 1, 0, 0,212,226, 11, 64,249,
/* 0x12f0 */ 227, 19, 64,249, 66, 0, 7,139,236, 0, 3,203,231, 0, 9,139,
/* 0x1300 */ 233,143, 31,248,231,252, 76,211,231,204,116,211,231,143, 31,248,
/* 0x1310 */ 66, 0, 7,203,226,143, 31,248, 7, 1, 64,185,231,131, 31,248,
/* 0x1320 */ 227, 3, 0,145, 2, 1, 12,139,230, 3, 2,170, 7, 5, 64,185,
/* 0x1330 */ 4, 9, 64,185, 0, 49, 0,145,225, 3, 7,170, 32, 1, 63,214,
/* 0x1340 */ 255, 35, 0,145,225,135, 64,248,224,135, 64,248,233,135, 64,248,
/* 0x1350 */ 162, 0,128, 82, 72, 9,128, 82, 1, 0, 0,212,192, 0, 31,214,
/* 0x1360 */ 101,120,101, 99,117,116, 97, 98,108,101, 95,112, 97,116,104, 61,
/* 0x1370 */ 0, 0, 32,212,229, 3, 30,170,226, 35, 0,145, 64,132, 64,248,
/* 0x1380 */ 224,255,255,181, 64,132, 64,248,224,255,255,181, 64,132, 64,248,
/* 0x1390 */ 0,255,255,180, 97,254,255, 16, 3, 2,128, 82, 4, 20, 64, 56,
/* 0x13a0 */ 37, 20, 64, 56, 99, 4, 0, 81,159, 0, 5,107, 1,255,255, 84,
/* 0x13b0 */ 99,255,255, 53, 1, 0,128,210,168, 0,128, 82, 1, 0, 0,212,
/* 0x13c0 */ 229,143, 29,248, 1, 0, 0, 16,236, 3, 1,170, 32, 68, 64,184,
/* 0x13d0 */ 140, 65, 32,203,236, 19, 0,249,234, 3, 1,170, 32, 68, 64,184,
/* 0x13e0 */ 74, 65, 32,203, 11, 32, 0,209,169,255,255,151,102,105,108,101,
/* 0x13f0 */ 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,108,105,
/* 0x1400 */ 116,116,108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,
/* 0x1410 */ 116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32,
/* 0x1420 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32,
/* 0x1430 */ 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1440 */ 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1450 */ 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32,
/* 0x1460 */ 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48,
/* 0x1470 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 48,
/* 0x1480 */ 48, 48, 48, 48, 48, 52, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1490 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x14a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x14b0 */ 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x14c0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69,
/* 0x14d0 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72,
/* 0x14e0 */ 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x14f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1500 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1510 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32,
/* 0x1520 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1530 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82,
/* 0x1540 */ 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1550 */ 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1560 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1570 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1580 */ 56, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1590 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51,
/* 0x15a0 */ 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48,
/* 0x15b0 */ 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x15c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x15d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x15e0 */ 48, 48, 49, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x15f0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x1600 */ 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32,
/* 0x1610 */ 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48,
/* 0x1620 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1630 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1640 */ 48, 48, 48, 48, 48, 50, 99, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1650 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1660 */ 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32,
/* 0x1670 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1680 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1690 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16a0 */ 48, 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32, 50, 42, 42,
/* 0x16b0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x16c0 */ 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 69,
/* 0x16d0 */ 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,100, 48,
/* 0x16e0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16f0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1700 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32,
/* 0x1710 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x1720 */ 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x1730 */ 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32,
/* 0x1740 */ 32, 32, 48, 48, 48, 48, 48, 57, 54, 56, 32, 32, 48, 48, 48, 48,
/* 0x1750 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1760 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1770 */ 48, 48, 48, 48, 48, 52, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1780 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1790 */ 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49,
/* 0x17a0 */ 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, 32, 48,
/* 0x17b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x17c0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17d0 */ 48, 32, 32, 48, 48, 48, 48, 48,100,102, 48, 32, 32, 50, 42, 42,
/* 0x17e0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x17f0 */ 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 68,
/* 0x1800 */ 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1810 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1820 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1830 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 56, 99, 32, 32,
/* 0x1840 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x1850 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 77, 65, 67,
/* 0x1860 */ 72, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x1870 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1880 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1890 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 56,
/* 0x18a0 */ 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x18b0 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32,
/* 0x18c0 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 48, 48,
/* 0x18d0 */ 48, 48, 48, 49, 54, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x1900 */ 49, 50, 56, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1910 */ 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65,
/* 0x1920 */ 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66,
/* 0x1930 */ 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77,
/* 0x1950 */ 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1960 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x1970 */ 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1980 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67,
/* 0x1990 */ 72, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78,
/* 0x19b0 */ 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19c0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77,
/* 0x19d0 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 10,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a00 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65,
/* 0x1a10 */ 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a20 */ 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48,
/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x1a40 */ 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50,
/* 0x1a60 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a70 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68,
/* 0x1a80 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a90 */ 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1aa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1ab0 */ 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ac0 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48,
/* 0x1ad0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1ae0 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9,
/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b00 */ 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1b20 */ 100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48,
/* 0x1b30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1b40 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x1b50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1b60 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48,
/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1b80 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1ba0 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48,
/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1bc0 */ 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x1bd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1be0 */ 100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65,
/* 0x1c00 */ 67, 72, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32,
/* 0x1c20 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48,
/* 0x1c30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,
/* 0x1c40 */ 114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c50 */ 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50,
/* 0x1c60 */ 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49,
/* 0x1c70 */ 50, 56, 32,117, 99,108, 95,110,114,118, 50,101, 95,100,101, 99,
/* 0x1c80 */ 111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48,
/* 0x1c90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32,
/* 0x1ca0 */ 32, 32, 70, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48,
/* 0x1cb0 */ 48, 48, 48, 48, 48, 48, 48, 49, 49, 99, 32,117, 99,108, 95,110,
/* 0x1cc0 */ 114,118, 50,100, 95,100,101, 99,111,109,112,114,101,115,115, 95,
/* 0x1cd0 */ 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ce0 */ 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50,
/* 0x1cf0 */ 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d00 */ 102, 48, 32,117, 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,
/* 0x1d10 */ 111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32,
/* 0x1d30 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48,
/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d50 */ 76,122,109, 97, 68,101, 99,111,100,101, 10, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32,
/* 0x1d70 */ 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48,
/* 0x1d80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,
/* 0x1d90 */ 110,100, 95,100,101, 99,111,109,112,114,101,115,115, 10, 10, 82,
/* 0x1da0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68,
/* 0x1db0 */ 83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, 78, 88,
/* 0x1dc0 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x1dd0 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1de0 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x1df0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 48, 32, 82, 95, 65,
/* 0x1e00 */ 65, 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50, 54, 32, 32, 77,
/* 0x1e10 */ 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, 48,
/* 0x1e20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48,101, 56, 10, 10, 82, 69, 76,
/* 0x1e30 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x1e40 */ 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93,
/* 0x1e50 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1e60 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1e70 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x1e80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65,
/* 0x1e90 */ 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32,
/* 0x1ea0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 10, 82, 69, 76, 79,
/* 0x1eb0 */ 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70,
/* 0x1ec0 */ 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, 78, 90, 93, 58, 10,
/* 0x1ed0 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1ee0 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1ef0 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f00 */ 48, 48, 48, 48, 48, 48, 49, 51, 56, 32, 82, 95, 65, 65, 82, 67,
/* 0x1f10 */ 72, 54, 52, 95, 65, 68, 82, 95, 80, 82, 69, 76, 95, 76, 79, 50,
/* 0x1f20 */ 49, 32, 32, 95,115,116, 97,114,116, 45, 48,120, 48, 48, 48, 48,
/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 10
};

View File

@ -282,7 +282,7 @@ unfold:
// Remember new f_exp region for PROT_EXEC.
movq 2*NBPW(%rsp),%rdx // LENU
movq 4*NBPW(%rsp),%rcx // &Mach_header64
addq %rax,%rdx // new last of unfoded
addq %rax,%rdx // new last of unfolded
subq %rcx,%rax // new - old
movq %rax,%r_RELOC // relocation constant
addq %rbp,%rax; push %rax // P_10 new f_exp

View File

@ -29,8 +29,8 @@
* <jreiser@users.sourceforge.net>
*/
//#define SIMULATE_ON_DEBIAN_EABI4 1
#undef SIMULATE_ON_DEBIAN_EABI4
#define SIMULATE_ON_DEBIAN_EABI4 1
//#undef SIMULATE_ON_DEBIAN_EABI4
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
#define LINUX_ARM_CACHEFLUSH 1 /* SIMULATE_ON_DEBIAN_EABI4 */
@ -40,6 +40,7 @@
#define ARMEL_DARWIN 1
#endif /*}*/
NBPW= 4
#include "arch/arm/v5a/macros.S"
#define bkpt .long 0xe1200070
@ -60,20 +61,31 @@ MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20
PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT)
PAGE_MASK = (~0<<PAGE_SHIFT)
PAGE_SIZE = -PAGE_MASK
__NR_SYSCALL_BASE = 0
__NR_exit = 1 + __NR_SYSCALL_BASE
__NR_write = 4 + __NR_SYSCALL_BASE
__NR_open = 5 + __NR_SYSCALL_BASE
#if defined(SIMULATE_ON_DEBIAN_EABI4) //{
__NR_mmap = 0xc0 + __NR_SYSCALL_BASE
__NR_mprotect=0x7d + __NR_SYSCALL_BASE
#else //}{ real Mach-o
__NR_mmap = 197 + __NR_SYSCALL_BASE
__NR_mprotect = 74 + __NR_SYSCALL_BASE
#endif //}
// DEBUG ONLY:
__ARM_NR_BASE = 0xf0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
//.long sz_pack2 // placed there by ::pack3()
//0: .word 0b - &Mach_header // backwards distance to Mach_header
//0: .word 0b - l_info // backwards distance to l_info
section MACHMAINX
_start: .globl _start
sub sp,sp,#4 // space for mhdrp
sub sp,sp,#NBPW // space for mhdrp
stmdb sp!,{r0-r12,r14,r15} // paranoia [omit sp===r13]
bl main
L20:
@ -101,37 +113,135 @@ end_decompress: .globl end_decompress
/* IDENTSTR goes here */
r_RELOC .req r12 // same as r_MHDR
r_MHDR .req r12
r_LENX .req r11
r_ADRX .req r10
r_FOLD .req r6
arg1 .req r0
arg2 .req r1
arg3 .req r2
arg4 .req r3
arg5 .req r4
arg6 .req r5
rdi .req r0
//rsi .req r1
rdx .req r2
rcx .req r3
rax .req r7
rbx .req r8
rbp .req r9
section MACHMAINZ
unfold: // lr= &L100
ldr ldst,[lr,#sz_unc]
ldr lsrc,[lr,#sz_cpr]
add dst,lsrc,lr; add dst,dst,#sz_b_info
add src,ldst,lr; add src,src,#GAP+NO_LAP // defend against prefetch and overlap
unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header
mov rbx,lr // &b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_fold...}
ldr rax,[rbx,#sz_unc] // LENU.dynamic
mov rdx,rbx
sub rdx,rdx,r_MHDR // LENU.static
add rdx,rdx,rax
str rdx,[sp,#2*NBPW] // LENU
mov r4,lsrc // loop count
movup: // descending copy folded_loader to higher address
ldrb ip,[dst,#-1]!
subs r4,r4,#1
strb ip,[src,#-1]!
bne movup
// Reserve space for input file and unfolded stub.
mov arg2,rdx // len
mov arg6,#0 // offset
mov arg5,#-1 // FD_ANON
mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS
mov arg3,#PROT_READ|PROT_WRITE
mov arg1,#0 // kernel chooses addr
do_sys __NR_mmap
str r0,[sp,#1*NBPW] // ADRU
sub r_ADRX,r_ADRX,r_MHDR // offset(&l_info)
add r_ADRX,r_ADRX,r0 // new &l_info
ldr r4, [lr,#b_method]
add lr,lr,#GAP
PUSH {ldst}; mov ldst,sp // LZMA needs for EOF
mov dst,lr // unfolded result
sub r11,r5,#4+ L20 - _start // &sz_pack2 param to unfolded loader
PUSH {r4} // 5th param to decompressor
mov r10,lr // DEBUG ONLY
blx r5 // bx r5
bx r10 // DEBUG ONLY
// Duplicate the input data.
mov arg6,#0 // offset
ldr arg5,[sp,#0*NBPW] // fd
mov arg4,#MAP_PRIVATE|MAP_FIXED
mov arg3,#PROT_READ|PROT_WRITE
sub arg2,rbx,r_MHDR // len
// mov arg1,r0 // same address
do_sys __NR_mmap
// Remember new f_exp region for PROT_EXEC.
ldr rdx,[sp,#2*NBPW] // LENU
ldr rcx,[sp,#4*NBPW] // &Mach_header
add rdx,rdx,rax // new last of unfolded
sub r_RELOC,rax,rcx // relocation constant = new - old
add rax,rax,rbp; str rbp,[sp,#-NBPW]! // P_10 new f_exp
mov rax,rax,lsr #PAGE_SHIFT
mov rax,rax,lsl #PAGE_SHIFT
str rax,[sp,#-NBPW]! // P_11 address
sub rdx,rdx,rax
str rdx,[sp,#-NBPW]! // P_12 length
// Unfold
ldr rax,[rbx,#sz_unc] // dstlen
str rax,[sp,#-NBPW]; mov arg4,sp // P_13 &dstlen
add arg3,rbx,r_RELOC // dst= new unfold
mov r_FOLD,arg3 // execute here
ldr rax,[rbx,#sz_cpr] // srclen
ldr arg5,[rbx,#b_method]
add arg1,rbx,#sz_b_info // src
mov arg2,rax // srclen
blx rbp // old f_exp
add sp,sp,#NBPW // P_13 toss dstlen
// PROT_EXEC
ldr arg2,[sp],#NBPW // P_12 length
ldr arg1,[sp],#NBPW // P_11 addr
ldr rbp,[sp],#NBPW // P_10 new f_exp
mov arg3,#PROT_READ|PROT_EXEC
do_sys __NR_mprotect
// Use the copy.
// r10= ADRX; r11= LENX; r9= f_exp
// rsp/ fd,ADRU,LENU,%entry,&Mach_header
bx r_FOLD
execp:
.ascii "executable_path=" // 16 bytes
L99:
bkpt
main:
mov r5,lr // &f_decompress
bl unfold
L100:
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
add r2,sp,#NBPW // &argv[0]
0:
ldr r0,[r2],#NBPW
cmp r0,#0; bne 0b // past argv
0:
ldr r0,[r2],#NBPW
cmp r0,#0; bne 0b // past envp
L30:
ldr r0,[r2],#NBPW // r0= *apple++
cmp r0,#0; beq L99
adr r1,execp; mov r3,#16
L40:
ldrb r4,[r0],#1
ldrb r5,[r1],#1
cmp r4,r5; bne L30 // mismatch ==> next apple[]
subs r3,r3,#1; bne L40 // not entire prefix
GAP= 128 // > farthest prefetch; must match ../../p_mach.cpp
NO_LAP= 64 // avoid overlap for folded loader; must match ../../p_mach.cpp
mov arg2,#0 // O_RDONLY
do_sys __NR_open
str r5,[sp,#-5*NBPW]! // fd,%ADRU,%LENU,%entry,%&Mach_header
adr r1,-2*4 + _start
mov r_MHDR,r1
ldr r0,[r1],#4
sub r_MHDR,r_MHDR,r0 // &Mach_header
str r_MHDR,[sp,#4*NBPW]
mov r_ADRX,r1
ldr r0,[r1],#4
sub r_ADRX,r_ADRX,r0 // &l_info
sub r_LENX,r0,#2*4 // omit words before _start
bl unfold
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
/* vim:set ts=8 sw=8 et: */

View File

@ -29,6 +29,7 @@
* <jreiser@users.sourceforge.net>
*/
NBPW= 8
#include "arch/arm64/v8/macros.S"
sz_b_info= 12
@ -49,18 +50,25 @@ MAP_ANONYMOUS= 0x20
PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT)
__NR_SYSCALL_BASE = 0
__NR_exit = 1 + __NR_SYSCALL_BASE
__NR_write = 4 + __NR_SYSCALL_BASE
__NR_mmap = 197 + __NR_SYSCALL_BASE
__NR_open = 5 + __NR_SYSCALL_BASE
__NR_mmap = 197 + __NR_SYSCALL_BASE
__NR_mprotect= 74 + __NR_SYSCALL_BASE
// DEBUG ONLY:
__ARM_NR_BASE = 0xf0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
//.long sz_pack2 // placed there by ::pack3()
//0: .word 0b - &Mach64_header // backwards distance to Mach64_header
//0: .word 0b - l_info // backwards distance to l_info
section MACHMAINX
_start: .globl _start
sub sp,sp,#8 // space for mhdrp
sub sp,sp,#NBPW // space for mhdrp
stp x0,x1,[sp,#-30*8]! // paranoia; omit r30(lr), r31(sp)
stp x2,x3,[sp,#2*8]
stp x4,x5,[sp,#4*8]
@ -102,40 +110,139 @@ end_decompress: .globl end_decompress
/* IDENTSTR goes here */
r_RELOC .req x12 // same as r_MHDR
r_MHDR .req x12
r_LENX .req x11
r_ADRX .req x10
r_FOLD .req x6
arg1 .req x0; arg1w .req w0
arg2 .req x1; arg2w .req w1
arg3 .req x2; arg3w .req w2
arg4 .req x3; arg4w .req w3
arg5 .req x4; arg5w .req w4
arg6 .req x5; arg6w .req w5
rdi .req x0
//rsi .req x1
rdx .req x2
rcx .req x3
rax .req x7; eax .req w7
rbx .req x8
rbp .req x9
section MACHMAINZ
lsrc .req w1
ldst .req w3
ldstx .req x3
unfold: // lr= -4+ &L100
ldr ldst,[lr,#sz_unc+sz_b_info]
ldr lsrc,[lr,#sz_cpr+sz_b_info]
add dst,lr,lsrc,uxtw; add dst,dst,#sz_b_info
add src,lr,ldst,uxtw; add src,src,#GAP+NO_LAP // defend against prefetch and overlap
mov w4,lsrc // loop count
t0 .req w9
movup: // descending copy folded_loader to higher address
ldr t0,[dst,#-4]!; sub w4,w4,#4
str t0,[src,#-4]!; cbnz w4,movup
unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header
mov rbx,lr // &b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_fold...}
ldr eax,[rbx,#sz_unc] // LENU.dynamic
mov rdx,rbx
sub rdx,rdx,r_MHDR // LENU.static
add rdx,rdx,eax,uxtw
str rdx,[sp,#2*NBPW] // LENU
ldr w4, [lr,#b_method] // 5th param to decompressor
add lr,lr,#GAP
PUSH1(ldst); mov ldstx,sp // LZMA needs for EOF
mov dst,lr // unfolded result
sub x11,x5,#4+ L20 - _start // &sz_pack2 param to unfolded loader
mov x10,lr // DEBUG ONLY
blr x5 // br r5
br x10 // DEBUG ONLY
// Reserve space for input file and unfolded stub.
mov arg2,rdx // len
mov arg6w,#0 // offset
mov arg5w,#-1 // FD_ANON
mov arg4w,#MAP_PRIVATE|MAP_ANONYMOUS
mov arg3w,#PROT_READ|PROT_WRITE
mov arg1,#0 // kernel chooses addr
do_sys __NR_mmap
str x0,[sp,#1*NBPW] // ADRU
sub r_ADRX,r_ADRX,r_MHDR // offset(&l_info)
add r_ADRX,r_ADRX,x0 // new &l_info
// Duplicate the input data.
mov arg6,#0 // offset
ldr arg5w,[sp,#0*NBPW] // fd
mov arg4w,#MAP_PRIVATE|MAP_FIXED
mov arg3w,#PROT_READ|PROT_WRITE
sub arg2,rbx,r_MHDR // len
// mov arg1,x0 // same address
do_sys __NR_mmap
// Remember new f_exp region for PROT_EXEC.
ldr rdx,[sp,#2*NBPW] // LENU
ldr rcx,[sp,#4*NBPW] // &Mach_header
add rdx,rdx,rax // new last of unfolded
sub r_RELOC,rax,rcx // relocation constant = new - old
add rax,rax,rbp; str rbp,[sp,#-NBPW]! // P_10 new f_exp
lsr rax,rax,#PAGE_SHIFT
lsl rax,rax,#PAGE_SHIFT
str rax,[sp,#-NBPW]! // P_11 address
sub rdx,rdx,rax
str rdx,[sp,#-NBPW]! // P_12 length
// Unfold
ldr eax,[rbx,#sz_unc] // dstlen
str rax,[sp,#-NBPW]; mov arg4,sp // P_13 &dstlen
add arg3,rbx,r_RELOC // dst= new unfold
mov r_FOLD,arg3 // execute here
ldr eax,[rbx,#sz_cpr] // srclen
ldr arg5w,[rbx,#b_method]
add arg1,rbx,#sz_b_info // src
mov arg2,rax // srclen
blr rbp // old f_exp
add sp,sp,#NBPW // P_13 toss dstlen
// PROT_EXEC
ldr arg2,[sp],#NBPW // P_12 length
ldr arg1,[sp],#NBPW // P_11 addr
ldr rbp,[sp],#NBPW // P_10 new f_exp
mov arg3w,#PROT_READ|PROT_EXEC
do_sys __NR_mprotect
// Use the copy.
// r10= ADRX; r11= LENX; r9= f_exp
// rsp/ fd,ADRU,LENU,%entry,&Mach_header
br r_FOLD
execp:
.ascii "executable_path=" // 16 bytes
L99:
brk #0
main:
mov x5,lr // &f_decompress
bl unfold
o_binfo:
.long O_BINFO // .int4
L100:
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
add x2,sp,#NBPW // &argv[0]
0:
ldr x0,[x2],#NBPW
cbnz x0,0b // past argv
0:
ldr x0,[x2],#NBPW
cbnz x0,0b // past envp
L30:
ldr x0,[x2],#NBPW // x0= *apple++
cbz x0,L99
adr x1,execp; mov w3,#16
L40:
ldrb w4,[x0],#1
ldrb w5,[x1],#1
sub w3,w3,#1
cmp w4,w5; bne L30 // mismatch ==> next apple[]
cbnz w3,L40 // not entire prefix
GAP= 128 // > farthest prefetch; must match ../../p_mach.cpp
NO_LAP= 64 // avoid overlap for folded loader; must match ../../p_mach.cpp
mov arg2,#0 // O_RDONLY
do_sys __NR_open
str x5,[sp,#-5*NBPW]! // fd,%ADRU,%LENU,%entry,%&Mach_header
adr x1,-2*4 + _start
mov r_MHDR,x1
ldr w0,[x1],#4
sub r_MHDR,r_MHDR,w0,uxtw // &Mach_header
str r_MHDR,[sp,#4*NBPW]
mov r_ADRX,x1
ldr w0,[x1],#4
sub r_ADRX,r_ADRX,w0,uxtw // &l_info
sub r_LENX,x0,#2*4 // omit words before _start
bl unfold
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
/* vim:set ts=8 sw=8 et: */

View File

@ -4,16 +4,16 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags
0 MACHMAINX 0000000c 00000000 00000000 00000034 2**0 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000000 00000000 00000000 00000040 2**0 CONTENTS, READONLY
2 NRV2E 00000144 00000000 00000000 00000040 2**0 CONTENTS, RELOC, READONLY
3 NRV2D 00000130 00000000 00000000 00000184 2**0 CONTENTS, RELOC, READONLY
4 NRV2B 000000f4 00000000 00000000 000002b4 2**0 CONTENTS, RELOC, READONLY
5 NRV_TAIL 00000000 00000000 00000000 000003a8 2**0 CONTENTS, READONLY
6 LZMA_ELF00 000000bc 00000000 00000000 000003a8 2**0 CONTENTS, RELOC, READONLY
7 LZMA_DEC20 00000938 00000000 00000000 00000464 2**0 CONTENTS, RELOC, READONLY
8 LZMA_DEC10 00000478 00000000 00000000 00000d9c 2**0 CONTENTS, RELOC, READONLY
9 LZMA_DEC30 00000000 00000000 00000000 00001214 2**0 CONTENTS, READONLY
10 MACHMAINY 00000000 00000000 00000000 00001214 2**0 CONTENTS, READONLY
11 MACHMAINZ 0000005c 00000000 00000000 00001214 2**0 CONTENTS, RELOC, READONLY
2 NRV2E 0000013c 00000000 00000000 00000040 2**0 CONTENTS, RELOC, READONLY
3 NRV2D 00000128 00000000 00000000 0000017c 2**0 CONTENTS, RELOC, READONLY
4 NRV2B 000000ec 00000000 00000000 000002a4 2**0 CONTENTS, RELOC, READONLY
5 NRV_TAIL 00000000 00000000 00000000 00000390 2**0 CONTENTS, READONLY
6 LZMA_ELF00 000000b8 00000000 00000000 00000390 2**0 CONTENTS, RELOC, READONLY
7 LZMA_DEC20 00000938 00000000 00000000 00000448 2**0 CONTENTS, RELOC, READONLY
8 LZMA_DEC10 00000478 00000000 00000000 00000d80 2**0 CONTENTS, RELOC, READONLY
9 LZMA_DEC30 00000000 00000000 00000000 000011f8 2**0 CONTENTS, READONLY
10 MACHMAINY 00000000 00000000 00000000 000011f8 2**0 CONTENTS, READONLY
11 MACHMAINZ 0000018c 00000000 00000000 000011f8 2**0 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
00000000 l d NRV2E 00000000 NRV2E
00000000 l d NRV2D 00000000 NRV2D
@ -28,9 +28,9 @@ SYMBOL TABLE:
00000000 l d NRV_TAIL 00000000 NRV_TAIL
00000000 l d MACHMAINY 00000000 MACHMAINY
00000000 g MACHMAINX 00000000 _start
00000000 g F NRV2E 00000144 ucl_nrv2e_decompress_8
00000000 g F NRV2D 00000130 ucl_nrv2d_decompress_8
00000000 g F NRV2B 000000f4 ucl_nrv2b_decompress_8
00000000 g F NRV2E 0000013c ucl_nrv2e_decompress_8
00000000 g F NRV2D 00000128 ucl_nrv2d_decompress_8
00000000 g F NRV2B 000000ec ucl_nrv2b_decompress_8
00000000 g LZMA_DEC10 00000000 LzmaDecode
00000000 g MACHMAINY 00000000 end_decompress
@ -41,68 +41,68 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
00000010 R_ARM_PC24 NRV2E
00000074 R_ARM_PC24 NRV2E
0000006c R_ARM_PC24 NRV2E
00000070 R_ARM_PC24 NRV2E
00000078 R_ARM_PC24 NRV2E
00000080 R_ARM_PC24 NRV2E
0000008c R_ARM_PC24 NRV2E
00000098 R_ARM_PC24 NRV2E
000000a4 R_ARM_PC24 NRV2E
000000a8 R_ARM_PC24 NRV2E
000000b4 R_ARM_PC24 NRV2E
00000084 R_ARM_PC24 NRV2E
00000090 R_ARM_PC24 NRV2E
0000009c R_ARM_PC24 NRV2E
000000a0 R_ARM_PC24 NRV2E
000000ac R_ARM_PC24 NRV2E
000000bc R_ARM_PC24 NRV2E
000000c4 R_ARM_PC24 NRV2E
000000cc R_ARM_PC24 NRV2E
000000c8 R_ARM_PC24 NRV2E
000000d0 R_ARM_PC24 NRV2E
000000d8 R_ARM_PC24 NRV2E
000000dc R_ARM_PC24 NRV2E
000000e8 R_ARM_PC24 NRV2E
000000d4 R_ARM_PC24 NRV2E
000000e0 R_ARM_PC24 NRV2E
000000e4 R_ARM_PC24 NRV2E
000000ec R_ARM_PC24 NRV2E
000000f4 R_ARM_PC24 NRV2E
00000100 R_ARM_PC24 NRV2E
000000f8 R_ARM_PC24 NRV2E
000000fc R_ARM_PC24 NRV2E
00000104 R_ARM_PC24 NRV2E
0000010c R_ARM_PC24 NRV2E
00000114 R_ARM_PC24 NRV2E
0000013c R_ARM_PC24 NRV2E
00000140 R_ARM_PC24 NRV2E
00000134 R_ARM_PC24 NRV2E
00000138 R_ARM_PC24 NRV2E
RELOCATION RECORDS FOR [NRV2D]:
OFFSET TYPE VALUE
00000010 R_ARM_PC24 NRV2D
00000074 R_ARM_PC24 NRV2D
0000006c R_ARM_PC24 NRV2D
00000070 R_ARM_PC24 NRV2D
00000078 R_ARM_PC24 NRV2D
00000080 R_ARM_PC24 NRV2D
0000008c R_ARM_PC24 NRV2D
00000098 R_ARM_PC24 NRV2D
000000a4 R_ARM_PC24 NRV2D
000000a8 R_ARM_PC24 NRV2D
000000b4 R_ARM_PC24 NRV2D
00000084 R_ARM_PC24 NRV2D
00000090 R_ARM_PC24 NRV2D
0000009c R_ARM_PC24 NRV2D
000000a0 R_ARM_PC24 NRV2D
000000ac R_ARM_PC24 NRV2D
000000bc R_ARM_PC24 NRV2D
000000c4 R_ARM_PC24 NRV2D
000000cc R_ARM_PC24 NRV2D
000000d4 R_ARM_PC24 NRV2D
000000d8 R_ARM_PC24 NRV2D
000000e0 R_ARM_PC24 NRV2D
000000e8 R_ARM_PC24 NRV2D
000000f4 R_ARM_PC24 NRV2D
00000100 R_ARM_PC24 NRV2D
00000104 R_ARM_PC24 NRV2D
00000128 R_ARM_PC24 NRV2D
0000012c R_ARM_PC24 NRV2D
000000ec R_ARM_PC24 NRV2D
000000f8 R_ARM_PC24 NRV2D
000000fc R_ARM_PC24 NRV2D
00000120 R_ARM_PC24 NRV2D
00000124 R_ARM_PC24 NRV2D
RELOCATION RECORDS FOR [NRV2B]:
OFFSET TYPE VALUE
00000010 R_ARM_PC24 NRV2B
00000070 R_ARM_PC24 NRV2B
00000078 R_ARM_PC24 NRV2B
00000080 R_ARM_PC24 NRV2B
00000084 R_ARM_PC24 NRV2B
0000007c R_ARM_PC24 NRV2B
0000008c R_ARM_PC24 NRV2B
00000090 R_ARM_PC24 NRV2B
00000094 R_ARM_PC24 NRV2B
00000098 R_ARM_PC24 NRV2B
0000009c R_ARM_PC24 NRV2B
000000a8 R_ARM_PC24 NRV2B
000000b8 R_ARM_PC24 NRV2B
000000a0 R_ARM_PC24 NRV2B
000000b0 R_ARM_PC24 NRV2B
000000b4 R_ARM_PC24 NRV2B
000000bc R_ARM_PC24 NRV2B
000000c4 R_ARM_PC24 NRV2B
000000cc R_ARM_PC24 NRV2B
000000d0 R_ARM_PC24 NRV2B
000000ec R_ARM_PC24 NRV2B
000000f0 R_ARM_PC24 NRV2B
000000c8 R_ARM_PC24 NRV2B
000000e4 R_ARM_PC24 NRV2B
000000e8 R_ARM_PC24 NRV2B
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
@ -245,5 +245,9 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [MACHMAINZ]:
OFFSET TYPE VALUE
00000028 R_ARM_PC24 MACHMAINZ
00000058 R_ARM_PC24 MACHMAINZ
00000110 R_ARM_PC24 MACHMAINZ
0000011c R_ARM_PC24 MACHMAINZ
00000128 R_ARM_PC24 MACHMAINZ
00000140 R_ARM_PC24 MACHMAINZ
00000148 R_ARM_PC24 MACHMAINZ
00000188 R_ARM_PC24 MACHMAINZ

View File

@ -13,7 +13,7 @@ Idx Name Size VMA LMA File off Algn
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000df0 2**0 CONTENTS, READONLY
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, READONLY
10 MACHMAINY 00000000 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, READONLY
11 MACHMAINZ 0000005c 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, RELOC, READONLY
11 MACHMAINZ 00000160 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ
@ -33,11 +33,10 @@ SYMBOL TABLE:
0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g MACHMAINY 0000000000000000 end_decompress
0000000000000000 *UND* 0000000000000000 O_BINFO
RELOCATION RECORDS FOR [MACHMAINX]:
OFFSET TYPE VALUE
0000000000000040 R_AARCH64_CALL26 MACHMAINZ+0x0000000000000050
0000000000000040 R_AARCH64_CALL26 MACHMAINZ+0x00000000000000e8
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
@ -45,4 +44,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [MACHMAINZ]:
OFFSET TYPE VALUE
0000000000000058 R_AARCH64_ABS32 O_BINFO
0000000000000138 R_AARCH64_ADR_PREL_LO21 _start-0x0000000000000008