stash work-in-progress

modified:   linker.cpp
	modified:   p_mach.cpp
	modified:   p_mach.h
	modified:   packmast.cpp
	modified:   stub/Makefile
	modified:   stub/src/amd64-darwin.macho-main.c
	modified:   stub/src/arm.v5a-darwin.macho-entry.S
	modified:   stub/src/arm64-darwin.macho-entry.S
	modified:   stub/src/arm64-darwin.macho-fold.S
	modified:   stub/src/arm64-darwin.macho-main.c
This commit is contained in:
John Reiser 2017-12-19 17:32:15 -08:00
parent 576d9a4e7e
commit e8aa80f904
17 changed files with 1316 additions and 1420 deletions

View File

@ -656,6 +656,13 @@ void ElfLinkerArm64LE::relocate1(const Relocation *rel, upx_byte *location, upx_
set_le32(location, get_le32(location) + value); set_le32(location, get_le32(location) + value);
else if (!strcmp(type, "64")) else if (!strcmp(type, "64"))
set_le64(location, get_le64(location) + value); set_le64(location, get_le64(location) + value);
} else if (!strcmp(type, "ADR_PREL_LO21")) {
value -= rel->section->offset + rel->offset;
upx_uint32_t const m19 = ~(~0u << 19);
upx_uint32_t w = get_le32(location);
set_le32(location,
(w & ~((3u << 29) | ( m19 << 5)))
| ((3u & value) << 29) | ((m19 & (value >> 2)) << 5));
} else if (!strcmp(type, "ABS32")) { } else if (!strcmp(type, "ABS32")) {
set_le32(location, get_le32(location) + value); set_le32(location, get_le32(location) + value);
} else if (!strcmp(type, "ABS64")) { } else if (!strcmp(type, "ABS64")) {

View File

@ -152,15 +152,10 @@ const int *PackMachBase<T>::getCompressionMethods(int method, int level) const
const int *PackMachARMEL::getCompressionMethods(int method, int level) const const int *PackMachARMEL::getCompressionMethods(int method, int level) const
{ {
// Un-aligned fetch does not work on 32-bit ARM, so use 8-bit methods
return Packer::getDefaultCompressionMethods_8(method, level); return Packer::getDefaultCompressionMethods_8(method, level);
} }
const int *PackMachARM64EL::getCompressionMethods(int method, int level) const
{
return Packer::getDefaultCompressionMethods_8(method, level);
}
PackMachPPC32::PackMachPPC32(InputFile *f) : super(f, Mach_header::CPU_TYPE_POWERPC, PackMachPPC32::PackMachPPC32(InputFile *f) : super(f, Mach_header::CPU_TYPE_POWERPC,
Mach_header::MH_EXECUTE, Mach_thread_command::PPC_THREAD_STATE, Mach_header::MH_EXECUTE, Mach_thread_command::PPC_THREAD_STATE,
sizeof(Mach_ppc_thread_state)>>2, sizeof(threado)) sizeof(Mach_ppc_thread_state)>>2, sizeof(threado))
@ -210,7 +205,7 @@ PackMachARMEL::PackMachARMEL(InputFile *f) : super(f, Mach_header::CPU_TYPE_ARM,
sizeof(Mach_ARM_thread_state)>>2, sizeof(threado)) sizeof(Mach_ARM_thread_state)>>2, sizeof(threado))
{ } { }
PackMachARM64EL::PackMachARM64EL(InputFile *f) : super(f, Mach_header::CPU_TYPE_ARM, PackMachARM64EL::PackMachARM64EL(InputFile *f) : super(f, Mach_header::CPU_TYPE_ARM64,
Mach_header::MH_EXECUTE, (unsigned)Mach_thread_command::ARM_THREAD_STATE, Mach_header::MH_EXECUTE, (unsigned)Mach_thread_command::ARM_THREAD_STATE,
sizeof(Mach_ARM64_thread_state)>>2, sizeof(threado)) sizeof(Mach_ARM64_thread_state)>>2, sizeof(threado))
{ } { }
@ -1919,6 +1914,14 @@ bool PackMachBase<T>::canPack()
stub_arm_v5a_darwin_macho_fold, stub_arm_v5a_darwin_macho_fold,
0 0
}, },
{CPU_TYPE_ARM64, MH_EXECUTE,
sizeof(stub_arm64_darwin_macho_entry),
sizeof(stub_arm64_darwin_macho_fold),
0,
stub_arm64_darwin_macho_entry,
stub_arm64_darwin_macho_fold,
0
},
{CPU_TYPE_POWERPC, MH_EXECUTE, {CPU_TYPE_POWERPC, MH_EXECUTE,
sizeof(stub_powerpc_darwin_macho_entry), sizeof(stub_powerpc_darwin_macho_entry),
sizeof(stub_powerpc_darwin_macho_fold), sizeof(stub_powerpc_darwin_macho_fold),

View File

@ -1207,7 +1207,6 @@ public:
virtual const char *getName() const { return "macho/arm64"; } virtual const char *getName() const { return "macho/arm64"; }
virtual const char *getFullName(const options_t *) const { return "arm64-darwin.macho"; } virtual const char *getFullName(const options_t *) const { return "arm64-darwin.macho"; }
protected: protected:
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
virtual void pack1_setup_threado(OutputFile *const fo); virtual void pack1_setup_threado(OutputFile *const fo);

View File

@ -224,6 +224,7 @@ Packer *PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
D(PackMachI386); D(PackMachI386);
D(PackMachAMD64); D(PackMachAMD64);
D(PackMachARMEL); D(PackMachARMEL);
D(PackMachARM64EL);
// 2010-03-12 omit these because PackMachBase<T>::pack4dylib (p_mach.cpp) // 2010-03-12 omit these because PackMachBase<T>::pack4dylib (p_mach.cpp)
// does not understand what the Darwin (Apple Mac OS X) dynamic loader // does not understand what the Darwin (Apple Mac OS X) dynamic loader

View File

@ -732,7 +732,6 @@ tmp/arm64-darwin.macho-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -Os $< -o $@ $(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@) $(call tc,f-objstrip,$@)
# /*********************************************************************** # /***********************************************************************
# // i086-dos16.com # // i086-dos16.com
# ************************************************************************/ # ************************************************************************/

View File

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

View File

@ -32,8 +32,8 @@
#define STUB_ARM_V5A_DARWIN_MACHO_ENTRY_SIZE 14641 #define STUB_ARM_V5A_DARWIN_MACHO_ENTRY_SIZE 14641
#define STUB_ARM_V5A_DARWIN_MACHO_ENTRY_ADLER32 0x0ffa216f #define STUB_ARM_V5A_DARWIN_MACHO_ENTRY_ADLER32 0x8f2a1f61
#define STUB_ARM_V5A_DARWIN_MACHO_ENTRY_CRC32 0xbe87f3f4 #define STUB_ARM_V5A_DARWIN_MACHO_ENTRY_CRC32 0xb74e9697
unsigned char stub_arm_v5a_darwin_macho_entry[14641] = { unsigned char stub_arm_v5a_darwin_macho_entry[14641] = {
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0,
@ -331,8 +331,8 @@ unsigned char stub_arm_v5a_darwin_macho_entry[14641] = {
/* 0x1240 */ 0,160,138,224, 0, 80,160,227, 0, 64,157,229, 18, 48,160,227, /* 0x1240 */ 0,160,138,224, 0, 80,160,227, 0, 64,157,229, 18, 48,160,227,
/* 0x1250 */ 3, 32,160,227, 12, 16, 72,224, 7,192,160,225,192,112,160,227, /* 0x1250 */ 3, 32,160,227, 12, 16, 72,224, 7,192,160,225,192,112,160,227,
/* 0x1260 */ 0, 0, 0,239, 12,112,160,225, 8, 32,157,229, 16, 48,157,229, /* 0x1260 */ 0, 0, 0,239, 12,112,160,225, 8, 32,157,229, 16, 48,157,229,
/* 0x1270 */ 7, 32,130,224, 3,192, 71,224, 9,112,135,224, 4,144, 45,229, /* 0x1270 */ 0, 32,130,224, 3,192, 64,224, 12, 48,137,224, 4, 48, 45,229,
/* 0x1280 */ 39,118,160,225, 7,118,160,225, 4,112, 45,229, 7, 32, 66,224, /* 0x1280 */ 32, 6,160,225, 0, 6,160,225, 4, 0, 45,229, 0, 32, 66,224,
/* 0x1290 */ 4, 32, 45,229, 0,112,152,229, 4,112, 13,229, 13, 48,160,225, /* 0x1290 */ 4, 32, 45,229, 0,112,152,229, 4,112, 13,229, 13, 48,160,225,
/* 0x12a0 */ 12, 32,136,224, 2, 96,160,225, 4,112,152,229, 8, 64,152,229, /* 0x12a0 */ 12, 32,136,224, 2, 96,160,225, 4,112,152,229, 8, 64,152,229,
/* 0x12b0 */ 12, 0,136,226, 7, 16,160,225, 57,255, 47,225, 4,208,141,226, /* 0x12b0 */ 12, 0,136,226, 7, 16,160,225, 57,255, 47,225, 4,208,141,226,

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* arm64-darwin.macho-fold.h /* arm64-darwin.macho-fold.h
created from arm64-darwin.macho-fold.bin, 1920 (0x780) bytes created from arm64-darwin.macho-fold.bin, 4392 (0x1128) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@ -31,129 +31,284 @@
*/ */
#define STUB_ARM64_DARWIN_MACHO_FOLD_SIZE 1920 #define STUB_ARM64_DARWIN_MACHO_FOLD_SIZE 4392
#define STUB_ARM64_DARWIN_MACHO_FOLD_ADLER32 0x6158c999 #define STUB_ARM64_DARWIN_MACHO_FOLD_ADLER32 0x4d170c93
#define STUB_ARM64_DARWIN_MACHO_FOLD_CRC32 0x39554d8d #define STUB_ARM64_DARWIN_MACHO_FOLD_CRC32 0xa4e1bfcd
unsigned char stub_arm64_darwin_macho_fold[1920] = { unsigned char stub_arm64_darwin_macho_fold[4392] = {
/* 0x0000 */ 97, 1, 64,249,231, 3, 4,145, 96, 65, 33,203, 3, 24, 64,185, /* 0x0000 */ 224, 3, 20,170,225, 3, 21,170, 3, 24, 64,185, 9, 0,132, 82,
/* 0x0010 */ 9, 0,132, 82,127, 0, 9,107, 99,128,137, 26,255, 67, 35,203, /* 0x0010 */ 127, 0, 9,107, 99,128,137, 26, 99, 60, 0, 17, 99,108, 28, 18,
/* 0x0020 */ 226, 3, 0,145,101, 2, 0, 16, 44, 1, 0,148, 30,120, 64,249, /* 0x0020 */ 230,131, 0,145,243, 3, 0,145,255, 67, 35,203,226, 3, 0,145,
/* 0x0030 */ 252,119, 78,169,250,111, 77,169,248,103, 76,169,246, 95, 75,169, /* 0x0030 */ 228, 3, 28,170,165, 1, 0, 16, 39, 3, 0,148, 20,128, 64,249,
/* 0x0040 */ 244, 87, 74,169,242, 79, 73,169,240, 71, 72,169,238, 63, 71,169, /* 0x0040 */ 28, 0, 64,249,127, 2, 0,145,224, 3, 64,185, 39, 0, 0,148,
/* 0x0050 */ 236, 55, 70,169,234, 47, 69,169,232, 39, 68,169,230, 31, 67,169, /* 0x0050 */ 224, 7, 64,249,225, 19, 64,185, 40, 9,128, 82,254, 3, 20,170,
/* 0x0060 */ 228, 23, 66,169,226, 15, 65,169,224, 7,207,168,192, 3, 31,214, /* 0x0060 */ 255,131, 0,145,128, 3, 31,214, 99, 28, 0, 18,127, 72, 1,113,
/* 0x0070 */ 99, 28, 0, 18,127, 72, 1,113, 1, 2, 0, 84, 33,124, 2, 83, /* 0x0070 */ 1, 2, 0, 84, 33,124, 2, 83,192, 1, 0,180,161, 1, 0, 52,
/* 0x0080 */ 192, 1, 0,180,161, 1, 0, 52, 33, 4, 0, 81, 2, 88, 97,184, /* 0x0080 */ 33, 4, 0, 81, 2, 88, 97,184, 67,124, 26, 83,127,148, 0,113,
/* 0x0090 */ 67,124, 26, 83,127,148, 0,113,193, 0, 0, 84, 67, 20, 6, 18, /* 0x0090 */ 193, 0, 0, 84, 67, 20, 6, 18, 66, 0, 1, 75, 66,100, 0, 18,
/* 0x00a0 */ 66, 0, 1, 75, 66,100, 0, 18, 66, 0, 3, 42, 2, 88, 33,184, /* 0x00a0 */ 66, 0, 3, 42, 2, 88, 33,184, 63, 0, 0,113,161,254,255, 84,
/* 0x00b0 */ 63, 0, 0,113,161,254,255, 84,192, 3, 95,214,192, 3, 95,214, /* 0x00b0 */ 192, 3, 95,214,192, 3, 95,214,168, 11,128, 82, 1, 0, 0,212,
/* 0x00c0 */ 40, 0,128, 82, 1, 0, 0,212,104, 0,128, 82, 1, 0, 0,212, /* 0x00c0 */ 232, 7,128, 82, 1, 0, 0,212,192, 3, 95,214, 8, 8,128, 82,
/* 0x00d0 */ 192, 3, 95,214,136, 0,128, 82, 1, 0, 0,212,192, 3, 95,214, /* 0x00d0 */ 1, 0, 0,212,192, 3, 95,214, 0, 0, 32,212,168, 0,128, 82,
/* 0x00e0 */ 168, 0,128, 82, 1, 0, 0,212,192, 3, 95,214,200, 0,128, 82, /* 0x00e0 */ 1, 0, 0,212,192, 3, 95,214, 40, 7,128, 82, 1, 0, 0,212,
/* 0x00f0 */ 1, 0, 0,212,192, 3, 95,214,168, 5,128, 82, 1, 0, 0,212, /* 0x00f0 */ 192, 3, 95,214,168, 5,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0100 */ 192, 3, 95,214, 40, 9,128, 82, 1, 0, 0,212,192, 3, 95,214, /* 0x0100 */ 232, 26,128, 82, 1, 0, 0,212,192, 3, 95,214, 72, 28,128, 82,
/* 0x0110 */ 72, 9,128, 82, 1, 0, 0,212,192, 3, 95,214,168, 24,128, 82, /* 0x0110 */ 1, 0, 0,212,192, 3, 95,214,200, 27,128, 82, 1, 0, 0,212,
/* 0x0120 */ 1, 0, 0,212,192, 3, 95,214, 40, 19,128, 82, 1, 0, 0,212, /* 0x0120 */ 192, 3, 95,214,104, 8,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0130 */ 192, 3, 95,214,233, 31,128, 82, 41, 29, 16, 50, 6, 0, 0, 20, /* 0x0130 */ 233, 31,128, 82, 41, 29, 16, 50, 6, 0, 0, 20, 2, 0, 64,185,
/* 0x0140 */ 2, 0, 64,185, 35, 1, 2, 10, 34, 97,194, 10, 66, 32,195, 42, /* 0x0140 */ 35, 1, 2, 10, 34, 97,194, 10, 66, 32,195, 42, 2, 68, 0,184,
/* 0x0150 */ 2, 68, 0,184, 33, 16, 0,113, 74,255,255, 84,192, 3, 95,214, /* 0x0150 */ 33, 16, 0,113, 74,255,255, 84,192, 3, 95,214, 67, 1,128, 82,
/* 0x0160 */ 253,123,191,169, 3, 0,128,210,253, 3, 0,145, 5, 0, 64,249, /* 0x0160 */ 229, 3, 3, 42, 4, 8,195, 26,159, 36, 0,113,105, 0, 0, 84,
/* 0x0170 */ 4, 4, 64,249,191, 0, 2,235, 98, 0, 0, 84,224, 15,128, 82, /* 0x0170 */ 99,124, 5, 27,252,255,255, 23, 4, 0,128,210, 71, 1,128, 82,
/* 0x0180 */ 208,255,255,151,127, 0, 2,235,160, 0, 0, 84,133,104, 99, 56, /* 0x0180 */ 72,124, 64,147, 31, 36, 0,113, 69, 0, 4, 11, 41, 1, 0, 84,
/* 0x0190 */ 37,104, 35, 56, 99, 4, 0,145,251,255,255, 23, 1, 4, 64,249, /* 0x0190 */ 5, 8,195, 26, 38, 0, 8,139,160,128, 3, 27,165,192, 0, 17,
/* 0x01a0 */ 33, 0, 3,139, 1, 4, 0,249, 1, 0, 64,249, 35, 0, 3,203, /* 0x01a0 */ 197,104, 36, 56, 99, 8,199, 26,132, 4, 0,145,246,255,255, 23,
/* 0x01b0 */ 3, 0, 0,249,253,123,193,168,192, 3, 95,214,253,123,187,169, /* 0x01b0 */ 0,192, 0, 17, 32,200, 37, 56,160, 4, 0, 17,192, 3, 95,214,
/* 0x01c0 */ 253, 3, 0,145,243, 83, 1,169,245, 91, 2,169,244, 3, 0,170, /* 0x01c0 */ 229, 1,128, 82, 3, 0,254,210,127, 0, 0,234,129, 0, 0, 84,
/* 0x01d0 */ 243, 3, 1,170,246, 3, 2,170,245, 3, 3,170, 96, 2, 64,249, /* 0x01d0 */ 165, 4, 0,113, 99,252, 68,211,129,255,255, 84, 4, 0,128,210,
/* 0x01e0 */ 224, 7, 0,180,224, 3, 20,170,130, 1,128,210,161, 3, 1,145, /* 0x01e0 */ 230, 10,128, 82, 7, 6,128, 82,130, 8, 0, 17,163, 1, 0,180,
/* 0x01f0 */ 220,255,255,151,160, 67, 64,185,162, 71, 64,185, 0, 1, 0, 53, /* 0x01f0 */ 162, 0, 4, 75, 40, 0, 4,139, 66,116, 30, 83, 99,252, 68,211,
/* 0x0200 */ 160, 10,138, 82, 0, 43,164,114, 95, 0, 0,107,225, 0, 0, 84, /* 0x0200 */ 2, 36,194,154,132, 4, 0,145, 66, 12, 0, 18, 95, 36, 0,113,
/* 0x0210 */ 128, 2, 64,249, 64, 6, 0,180, 4, 0, 0, 20, 98, 0, 0, 52, /* 0x0210 */ 201,128,135, 26, 34, 1, 2, 11, 2, 9, 0, 57,243,255,255, 23,
/* 0x0220 */ 95, 0, 0,107,105, 0, 0, 84,224, 15,128, 82,165,255,255,151, /* 0x0220 */ 224, 3, 2, 42,192, 3, 95,214,253,123,171,169,253, 3, 0,145,
/* 0x0230 */ 97, 2, 64,249, 63, 64, 32,235,131,255,255, 84, 95, 0, 0,107, /* 0x0230 */ 245, 91, 2,169,247, 99, 3,169,243, 83, 1,169,161,143, 0,249,
/* 0x0240 */ 98, 3, 0, 84,160, 63, 0,185,225, 3, 2, 42,128, 6, 64,249, /* 0x0240 */ 161, 3, 4,145,162,147, 0,249,248, 3, 0,170,249,107, 4,169,
/* 0x0250 */ 163,243, 0,145, 98, 6, 64,249,164, 35, 65, 57,192, 2, 63,214, /* 0x0250 */ 163,151, 0,249,160, 67, 5,145,164,155, 0,249, 2, 0,128,210,
/* 0x0260 */ 64,254,255, 53,161, 63, 64,185,160, 67, 64,185, 63, 0, 0,107, /* 0x0260 */ 165,159, 0,249,243, 3, 2, 42,166,163, 0,249, 21, 6,128, 82,
/* 0x0270 */ 193,253,255, 84,163, 39, 65, 57,181, 0, 0,180,131, 0, 0, 52, /* 0x0270 */ 167,167, 0,249, 22, 15,128, 82,160, 39,128, 61,183, 5,128, 82,
/* 0x0280 */ 96, 6, 64,249,162, 43, 65, 57,160, 2, 63,214,163, 71, 64,185, /* 0x0280 */ 161, 43,128, 61,162, 47,128, 61,163, 51,128, 61,164, 55,128, 61,
/* 0x0290 */ 129, 6, 64,249,128, 2, 64,249, 33, 0, 3,139,129, 6, 0,249, /* 0x0290 */ 165, 59,128, 61,166, 63,128, 61, 39, 0,128, 61,160, 59, 0,249,
/* 0x02a0 */ 0, 0, 3,203,128, 2, 0,249, 5, 0, 0, 20, 97, 6, 64,249, /* 0x02a0 */ 160, 63, 0,249,160, 67, 4,145,160, 67, 0,249,224, 6,128, 18,
/* 0x02b0 */ 224, 3, 20,170,226, 3, 2, 42,170,255,255,151,163, 67, 64,185, /* 0x02b0 */ 160,139, 0,185,224, 15,128, 18,160,143, 0,185, 25, 3, 64, 57,
/* 0x02c0 */ 97, 6, 64,249, 96, 2, 64,249, 33, 0, 3,139, 97, 6, 0,249, /* 0x02c0 */ 20, 7, 0,145,250, 3, 20,170,121, 0, 0, 53, 34, 1, 0,181,
/* 0x02d0 */ 0, 0, 3,203, 96, 2, 0,249,193,255,255, 23,243, 83, 65,169, /* 0x02d0 */ 137, 0, 0, 20, 63,151, 0,113,160, 0, 0, 84, 95, 0, 31,235,
/* 0x02e0 */ 245, 91, 66,169,253,123,197,168,192, 3, 95,214,253,123,182,169, /* 0x02e0 */ 66, 16,148,154,248, 3, 20,170,245,255,255, 23,226, 0, 0,180,
/* 0x02f0 */ 253, 3, 0,145,232, 39, 6,109,234, 59, 0,253, 40, 0, 39, 30, /* 0x02f0 */ 65, 4, 0,209, 64, 0,128, 82,130, 2, 2,203,116,255,255,151,
/* 0x0300 */ 169, 0,103,158,202, 0,103,158,247, 99, 3,169,249,107, 4,169, /* 0x0300 */ 115, 2, 0, 11,153, 15, 0, 52, 0, 7, 64, 57, 20, 11, 0,145,
/* 0x0310 */ 243, 83, 1,169,245, 91, 2,169,251,115, 5,169,249, 3, 0,170, /* 0x0310 */ 31,192, 1,113,224, 6, 0, 84,168, 0, 0, 84,192, 14, 0, 52,
/* 0x0320 */ 245, 3, 2,170,250, 3, 3, 42,252, 3, 4,170, 20,112, 0,145, /* 0x0320 */ 31,144, 1,113,160, 3, 0, 84, 7, 0, 0, 20, 31,212, 1,113,
/* 0x0330 */ 24, 0,128, 82, 23, 0,128,210, 32, 19, 64,185, 31, 3, 0,107, /* 0x0330 */ 32, 1, 0, 84, 31,224, 1,113,224, 7, 0, 84, 31,204, 1,113,
/* 0x0340 */ 130, 11, 0, 84,128, 2, 64,185, 31,100, 0,113, 33, 9, 0, 84, /* 0x0340 */ 192, 10, 0, 84, 64, 0,128, 82,225, 3, 26,170, 34, 0,128,210,
/* 0x0350 */ 150, 18, 64,249,246, 8, 0,180,147, 14, 64,249,128, 26, 64,249, /* 0x0350 */ 78, 0, 0, 20,161,139, 64,185,160, 59, 64,249,161, 0,248, 54,
/* 0x0360 */ 179, 79, 0,249,118, 2, 22,139,123,206,116,146,115, 46, 64,146, /* 0x0360 */ 34, 32, 0, 17,162,139, 0,185, 95, 0, 31,107,173, 0, 0, 84,
/* 0x0370 */ 160, 75, 0,249,115, 2, 0,171, 96, 9, 0, 84, 31, 0, 31,235, /* 0x0370 */ 1, 44, 0,145, 33,240,125,146,161, 59, 0,249, 3, 0, 0, 20,
/* 0x0380 */ 67, 2,130, 82, 68, 19,159, 90,181, 0, 0,181, 31, 0, 31,235, /* 0x0380 */ 160, 63, 64,249, 0,192, 33,139, 0, 0, 64,185,161, 99, 1,145,
/* 0x0390 */ 65, 2,128, 82, 64, 2,130, 82, 3, 0,129, 26, 6, 1, 38, 30, /* 0x0390 */ 2, 0,128, 82, 21, 0, 0, 20,161,139, 64,185,160, 59, 64,249,
/* 0x03a0 */ 133, 22, 64,249,224, 3, 27,170,225, 3, 19,170, 98, 0,128, 82, /* 0x03a0 */ 161, 0,248, 54, 34, 32, 0, 17,162,139, 0,185, 95, 0, 31,107,
/* 0x03b0 */ 197, 0, 5, 11, 90,255,255,151,127, 3, 0,235, 96, 0, 0, 84, /* 0x03b0 */ 173, 0, 0, 84, 1, 44, 0,145, 33,240,125,146,161, 59, 0,249,
/* 0x03c0 */ 224, 15,128, 82, 63,255,255,151,117, 1, 0,180,128, 26, 64,249, /* 0x03c0 */ 3, 0, 0, 20,160, 63, 64,249, 0,192, 33,139, 0, 0, 64,185,
/* 0x03d0 */ 32, 1, 0,180,128, 22, 64,249, 64, 0, 0,181,155, 3, 0,249, /* 0x03d0 */ 2, 0,128, 82,128, 0,248, 54,224, 3, 0, 75,183, 99, 1, 57,
/* 0x03e0 */ 34, 1,102,158,224, 3, 21,170, 67, 1,102,158,161, 67, 2,145, /* 0x03e0 */ 34, 0,128, 82,161, 99, 1,145, 93,255,255,151, 36, 0, 0, 20,
/* 0x03f0 */ 115,255,255,151,227, 3, 19,203, 99, 44, 64,242,224, 0, 0, 84, /* 0x03f0 */ 161,139, 64,185,181, 99, 1, 57,182,103, 1, 57,160, 59, 64,249,
/* 0x0400 */ 97, 3, 19,139, 0, 0,128,210, 63,104, 32, 56, 0, 4, 0,145, /* 0x0400 */ 161, 0,248, 54, 34, 32, 0, 17,162,139, 0,185, 95, 0, 31,107,
/* 0x0410 */ 31, 0, 3,235,161,255,255, 84, 19, 1, 0,180,130, 62, 64,185, /* 0x0410 */ 173, 0, 0, 84, 1, 60, 0,145, 33,240,125,146,161, 59, 0,249,
/* 0x0420 */ 224, 3, 27,170,225, 3, 19,170,163, 71, 0,249, 57,255,255,151, /* 0x0420 */ 3, 0, 0, 20,160, 63, 64,249, 0,192, 33,139, 0, 0, 64,249,
/* 0x0430 */ 163, 71, 64,249, 96,252,255, 53,115, 0, 19,139,115, 3, 19,139, /* 0x0430 */ 17, 0, 0, 20,161,139, 64,185,160,103, 1, 57,181, 99, 1, 57,
/* 0x0440 */ 127, 2, 22,235,130, 2, 0, 84,130, 62, 64,185,224, 3, 19,170, /* 0x0440 */ 160, 59, 64,249,161, 0,248, 54, 34, 32, 0, 17,162,139, 0,185,
/* 0x0450 */ 193, 2, 19,203, 67, 2,130, 82, 4, 0,128, 18, 5, 0,128, 82, /* 0x0450 */ 95, 0, 31,107,173, 0, 0, 84, 1, 44, 0,145, 33,240,125,146,
/* 0x0460 */ 47,255,255,151,127, 2, 0,235, 96, 1, 0, 84,213,255,255, 23, /* 0x0460 */ 161, 59, 0,249, 3, 0, 0, 20,160, 63, 64,249, 0,192, 33,139,
/* 0x0470 */ 0, 16, 0, 81, 31, 4, 0,113,232, 0, 0, 84,130, 6, 64,249, /* 0x0470 */ 0, 0,128,185,161, 99, 1,145, 82,255,255,151, 2,124, 64,147,
/* 0x0480 */ 33, 0,128,210,129, 8,192,242,128, 66, 0,145, 95, 0, 1,235, /* 0x0480 */ 161, 99, 1,145, 64, 0,128, 82, 17,255,255,151,115, 2, 0, 11,
/* 0x0490 */ 247, 18,128,154,128, 6, 64,185, 24, 7, 0, 17,148, 2, 0,139, /* 0x0490 */ 2, 0,128,210,148,255,255, 23,161,139, 64,185,160, 59, 64,249,
/* 0x04a0 */ 166,255,255, 23,227, 3, 21,170, 53,249,255,181,227,255,255, 23, /* 0x04a0 */ 161, 0,248, 54, 34, 32, 0, 17,162,139, 0,185, 95, 0, 31,107,
/* 0x04b0 */ 224, 3, 23,170,232, 39, 70,109,243, 83, 65,169,245, 91, 66,169, /* 0x04b0 */ 173, 0, 0, 84, 1, 60, 0,145, 33,240,125,146,161, 59, 0,249,
/* 0x04c0 */ 247, 99, 67,169,249,107, 68,169,251,115, 69,169,234, 59, 64,253, /* 0x04c0 */ 3, 0, 0, 20,160, 63, 64,249, 0,192, 33,139, 1, 0, 64,249,
/* 0x04d0 */ 253,123,202,168,192, 3, 95,214,253,123,184,169,253, 3, 0,145, /* 0x04d0 */ 226, 3, 1,170,161, 0, 0,180, 64, 0, 64, 57, 96, 0, 0, 52,
/* 0x04e0 */ 243, 83, 1,169,244, 3, 4,170,243, 3, 2,170,161, 39, 0,249, /* 0x04e0 */ 66, 4, 0,145,253,255,255, 23, 64, 0,128, 82, 66, 0, 1,203,
/* 0x04f0 */ 1, 96, 0,145,161, 47, 0,249,161, 39, 64,249, 0, 24, 64,185, /* 0x04f0 */ 230,255,255, 23,224, 3, 19, 42,243, 83, 65,169,245, 91, 66,169,
/* 0x0500 */ 33, 96, 0,209,161, 43, 0,249,160, 51, 0,249,160, 7, 69,169, /* 0x0500 */ 247, 99, 67,169,249,107, 68,169,253,123,213,168,192, 3, 95,214,
/* 0x0510 */ 160, 7, 7,169,247, 99, 3,169,162, 55, 0,249,160, 67, 1,145, /* 0x0510 */ 253,123,189,169,253, 3, 0,145,243, 83, 1,169,243, 3, 0,170,
/* 0x0520 */ 161,131, 1,145,226, 3, 20,170,247, 3, 3,170, 3, 0,128,210, /* 0x0520 */ 244, 3, 2,170,245, 91, 2,169, 22, 4, 64,249,245, 3, 1,170,
/* 0x0530 */ 245, 91, 2,169,166, 35, 0,249,245, 3, 5,170, 32,255,255,151, /* 0x0530 */ 98, 2, 64,249,225, 3, 19,170,227, 3, 22,170,228, 3, 21,170,
/* 0x0540 */ 164, 35, 64,249, 1, 0,128, 82,230, 3, 21,170,224, 3, 19,170, /* 0x0540 */ 229, 3, 20,170, 7, 0, 0,148,120,114,101, 97,100, 32, 37,112,
/* 0x0550 */ 162,195, 1,145, 3, 0,128, 18,229, 3, 20,170,100,255,255,151, /* 0x0550 */ 40, 37,120, 32, 37,112, 41, 32, 37,112, 32, 37,120, 10, 0, 0,
/* 0x0560 */ 245, 3, 0,170, 96, 18, 64,185, 97,114, 0,145, 4, 0,128, 82, /* 0x0560 */ 224, 3, 30,170, 49,255,255,151, 98, 2, 64,249, 0, 0,128,210,
/* 0x0570 */ 159, 0, 0,107,160, 7, 0, 84, 34, 0, 64,185, 95, 56, 0,113, /* 0x0570 */ 95, 0, 20,235, 34, 2, 0, 84, 99, 6, 64,249,225, 3, 19,170,
/* 0x0580 */ 193, 6, 0, 84, 32, 4, 64,249, 22, 0,128, 82,152, 2,128, 82, /* 0x0580 */ 228, 3, 21,170,229, 3, 20,170, 8, 0, 0,148,120,114,101, 97,
/* 0x0590 */ 32, 0, 0,139, 1, 0,128, 82,226, 3, 1, 42,209,254,255,151, /* 0x0590 */ 100,102, 97,105,108, 32, 37,112, 40, 37,120, 32, 37,112, 41, 32,
/* 0x05a0 */ 244, 3, 0, 42,212, 2,248, 54,224, 15,128, 82,197,254,255,151, /* 0x05a0 */ 37,112, 32, 37,120, 10, 0, 0,224, 3, 30,170, 31,255,255,151,
/* 0x05b0 */ 97, 2, 64,185,192, 87,151, 82,192, 95,185,114, 63, 0, 0,107, /* 0x05b0 */ 224, 15,128, 82,193,254,255,151, 31, 0, 20,235,160, 0, 0, 84,
/* 0x05c0 */ 65, 3, 0, 84, 97, 30, 64, 57,224, 3, 19,170,117, 34, 0,145, /* 0x05c0 */ 193,106, 96, 56,161,106, 32, 56, 0, 4, 0,145,251,255,255, 23,
/* 0x05d0 */ 33,124, 24, 27, 33, 32, 0, 17,215,254,255,151, 97, 6, 64,185, /* 0x05d0 */ 97, 6, 64,249,245, 91, 66,169, 33, 0, 0,139, 97, 6, 0,249,
/* 0x05e0 */ 0, 0,128, 82, 31, 0, 1,107, 0, 2, 0, 84,162, 2, 64,185, /* 0x05e0 */ 97, 2, 64,249, 32, 0, 0,203, 96, 2, 0,249,243, 83, 65,169,
/* 0x05f0 */ 95, 48, 0,113, 65, 1, 0, 84,182, 10, 64,185,224, 3, 20, 42, /* 0x05f0 */ 253,123,195,168,192, 3, 95,214,253,123,190,169,253, 3, 0,145,
/* 0x0600 */ 225, 3, 19,170,226, 3, 23,170,227, 3, 22, 42,199,254,255,151, /* 0x0600 */ 243, 11, 0,249,243, 3, 0, 42,225, 3, 19, 42, 5, 0, 0,148,
/* 0x0610 */ 255, 2, 0,235,224,252,255, 84,228,255,255, 23, 0, 4, 0, 17, /* 0x0610 */ 101,114,114, 95,101,120,105,116, 32, 37,120, 10, 0, 0, 0, 0,
/* 0x0620 */ 181, 82, 0,145,240,255,255, 23, 2, 0,128,210,224, 3, 19,170, /* 0x0620 */ 224, 3, 30,170, 1,255,255,151,224, 3, 19, 42,163,254,255,151,
/* 0x0630 */ 225, 3, 22, 42,227, 3, 20, 42,228, 3, 2,170,229, 3, 2,170, /* 0x0630 */ 255,131, 1,209,253,123, 1,169,253, 67, 0,145,243, 83, 2,169,
/* 0x0640 */ 230, 3, 2,170, 42,255,255,151,245, 3, 0,170,224, 3, 20, 42, /* 0x0640 */ 244, 3, 0,170,243, 3, 1,170,245, 91, 3,169,227, 3, 0,249,
/* 0x0650 */ 167,254,255,151, 5, 0, 0, 20, 34, 4, 64,185,132, 4, 0, 17, /* 0x0650 */ 246, 3, 2,170,245, 3, 3,170,130, 2, 64,249,131, 6, 64,249,
/* 0x0660 */ 33, 0, 2,139,195,255,255, 23,224, 3, 21,170,243, 83, 65,169, /* 0x0660 */ 225, 3, 20,170,101, 2, 64,249,228, 3, 19,170,102, 6, 64,249,
/* 0x0670 */ 245, 91, 66,169,247, 99, 67,169,253,123,200,168,192, 3, 95,214, /* 0x0670 */ 231, 3, 22,170, 14, 0, 0,148,117,110,112, 97, 99,107, 69,120,
/* 0x0680 */ 20, 0, 0, 0, 0, 0, 0, 0, 1,122, 82, 0, 4,120, 30, 1, /* 0x0680 */ 116,101,110,116, 32,105,110, 61, 37,112, 40, 37,120, 32, 37,112,
/* 0x0690 */ 27, 12, 31, 0, 0, 0, 0, 0, 36, 0, 0, 0, 28, 0, 0, 0, /* 0x0690 */ 41, 32, 32,111,117,116, 61, 37,112, 40, 37,120, 32, 37,112, 41,
/* 0x06a0 */ 192,250,255,255, 92, 0, 0, 0, 0, 65, 14, 16,157, 2,158, 1, /* 0x06a0 */ 32, 32, 37,112, 32, 37,112, 10, 0, 0, 0, 0,224, 3, 30,170,
/* 0x06b0 */ 66, 13, 29, 83,222,221, 12, 31, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06b0 */ 222,254,255,151, 96, 2, 64,249,160, 10, 0,180,130, 1,128,210,
/* 0x06c0 */ 44, 0, 0, 0, 68, 0, 0, 0,244,250,255,255, 48, 1, 0, 0, /* 0x06c0 */ 224, 3, 20,170,161, 3, 1,145,146,255,255,151,162, 67, 64,185,
/* 0x06d0 */ 0, 65, 14, 80,157, 10,158, 9, 65, 13, 29, 66,147, 8,148, 7, /* 0x06d0 */ 164, 71, 64,185, 98, 1, 0, 53,160, 10,138, 82, 0, 43,164,114,
/* 0x06e0 */ 149, 6,150, 5, 2, 71,222,221,214,213,212,211, 12, 31, 0, 0, /* 0x06e0 */ 159, 0, 0,107, 96, 0, 0, 84, 64, 0,128, 82, 4, 0, 0, 20,
/* 0x06f0 */ 84, 0, 0, 0,116, 0, 0, 0,244,251,255,255,236, 1, 0, 0, /* 0x06f0 */ 128, 2, 64,249,192, 8, 0,180, 96, 0,128, 82,191,255,255,151,
/* 0x0700 */ 0, 65, 14,160, 1,157, 20,158, 19, 65, 13, 29, 66, 5, 72, 8, /* 0x0700 */ 100, 0, 0, 53,128, 0,128, 82,253,255,255, 23,159, 0, 2,107,
/* 0x0710 */ 5, 73, 7, 5, 74, 6, 72,151, 14,152, 13,153, 12,154, 11,147, /* 0x0710 */ 41, 2, 0, 84, 99, 2, 64,249,225, 3, 4, 42, 10, 0, 0,148,
/* 0x0720 */ 18,148, 17,149, 16,150, 15,155, 10,156, 9, 2,110,222,221, 6, /* 0x0720 */ 115,122, 95, 99,112,114, 61, 37,120, 32, 32,115,122, 95,117,110,
/* 0x0730 */ 74, 6, 73, 6, 72,220,219,218,217,216,215,214,213,212,211, 12, /* 0x0730 */ 99, 61, 37,120, 32, 32,120,111, 45, 62,115,105,122,101, 61, 37,
/* 0x0740 */ 31, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,204, 0, 0, 0, /* 0x0740 */ 120, 10, 0, 0,224, 3, 30,170,184,254,255,151,160, 0,128, 82,
/* 0x0750 */ 136,253,255,255,168, 1, 0, 0, 0, 65, 14,128, 1,157, 16,158, /* 0x0750 */ 235,255,255, 23, 97, 2, 64,249,224, 3, 2, 42, 31, 0, 1,235,
/* 0x0760 */ 15, 65, 13, 29, 65,147, 14,148, 13, 81,151, 10,152, 9, 67,149, /* 0x0760 */ 168,253,255, 84,159, 0, 2,107,162, 3, 0, 84,160, 31, 0,249,
/* 0x0770 */ 12,150, 11, 2, 82,222,221,216,215,214,213,212,211, 12, 31, 0 /* 0x0770 */ 225, 3, 4, 42,128, 6, 64,249,163,227, 0,145, 98, 6, 64,249,
/* 0x0780 */ 164, 35, 65, 57,192, 2, 63,214,160, 0, 0, 53,161, 31, 64,249,
/* 0x0790 */ 160, 67, 64,185, 63, 0, 0,235, 96, 0, 0, 84,224, 0,128, 82,
/* 0x07a0 */ 215,255,255, 23,163, 39, 65, 57,181, 0, 0,180,131, 0, 0, 52,
/* 0x07b0 */ 96, 6, 64,249,162, 43, 65, 57,160, 2, 63,214,162, 71, 64,185,
/* 0x07c0 */ 129, 6, 64,249,128, 2, 64,249, 33, 0, 2,139,129, 6, 0,249,
/* 0x07d0 */ 0, 0, 2,203,128, 2, 0,249, 5, 0, 0, 20, 97, 6, 64,249,
/* 0x07e0 */ 224, 3, 20,170,226, 3, 4, 42, 74,255,255,151,162, 67, 64,185,
/* 0x07f0 */ 97, 6, 64,249, 96, 2, 64,249, 33, 0, 2,139, 97, 6, 0,249,
/* 0x0800 */ 0, 0, 2,203, 96, 2, 0,249,171,255,255, 23,191, 67, 0,209,
/* 0x0810 */ 243, 83, 66,169,245, 91, 67,169,253,123, 65,169,255,131, 1,145,
/* 0x0820 */ 192, 3, 95,214,253,123,180,169,253, 3, 0,145,234, 47, 7,109,
/* 0x0830 */ 243, 83, 1,169,232, 39, 6,109,245, 91, 2,169,247, 99, 3,169,
/* 0x0840 */ 251,115, 5,169,249,107, 4,169,236, 67, 0,253,251, 3, 0,170,
/* 0x0850 */ 105, 0, 39, 30, 19,128, 0,145, 43, 0, 39, 30,246, 3, 2,170,
/* 0x0860 */ 248, 3, 4,170,227, 3, 4,170,172, 0,103,158,202, 0,103,158,
/* 0x0870 */ 17, 0, 0,148,100,111, 95,120,109, 97,112, 32, 32,102,100,105,
/* 0x0880 */ 61, 37,120, 32, 32,109,104,100,114, 61, 37,112, 32, 32, 42,109,
/* 0x0890 */ 104,100,114,112,112, 61, 37,112, 32, 32,120,105, 61, 37,112, 40,
/* 0x08a0 */ 37,120, 32, 37,112, 41, 32,102, 95,117,110,102, 61, 37,112, 10,
/* 0x08b0 */ 0, 0, 0, 0,224, 3, 30,170, 68, 0, 0,180,131, 0, 64,249,
/* 0x08c0 */ 150, 0, 0,180,197, 2, 64,249,198, 6, 64,249, 3, 0, 0, 20,
/* 0x08d0 */ 229, 3, 22,170,230, 3, 22,170, 33, 1, 38, 30, 23, 0,128,210,
/* 0x08e0 */ 71, 1,102,158,226, 3, 27,170,228, 3, 22,170, 28, 0,128, 82,
/* 0x08f0 */ 249, 3, 23,170, 77,254,255,151, 96, 19, 64,185,159, 3, 0,107,
/* 0x0900 */ 66, 29, 0, 84, 96, 2, 64,185, 31,100, 0,113,161, 26, 0, 84,
/* 0x0910 */ 97, 18, 64,249, 97, 26, 0,180, 96, 22, 64,249, 0, 2, 0,181,
/* 0x0920 */ 96, 26, 64,249,192, 1, 0,180, 0, 3, 64,249,128, 1, 0,180,
/* 0x0930 */ 1, 24, 64,185, 65, 1,168, 54,119, 14, 64,249, 23, 0, 23,203,
/* 0x0940 */ 225, 3, 23,170, 4, 0, 0,148,114,101,108,111, 99, 61, 37,112,
/* 0x0950 */ 10, 0, 0, 0,224, 3, 30,170, 52,254,255,151,116, 14, 64,249,
/* 0x0960 */ 98, 26, 64,249,244, 2, 20,139,122, 18, 64,249,137, 46, 64,146,
/* 0x0970 */ 180, 95, 0,249,128, 2, 26,139,162, 91, 0,249, 58, 1, 2,171,
/* 0x0980 */ 148, 2, 9,203, 8, 0,103,158,192, 10, 0, 84, 0, 3, 64,249,
/* 0x0990 */ 223, 2, 31,235,104, 0,128,210, 85, 0,128, 82, 8, 17,159,154,
/* 0x09a0 */ 31, 0, 31,235, 64, 2,128, 82, 8, 1, 26,139, 21, 16,149, 26,
/* 0x09b0 */ 223, 2, 31,235,234, 7,159, 26,106, 0, 0, 53,224, 3, 10, 42,
/* 0x09c0 */ 66, 0, 0,181, 0, 4,128, 82, 21, 0, 21, 42, 95, 0, 31,235,
/* 0x09d0 */ 32, 1, 38, 30,107, 22, 64,249,226, 3, 8,170,225, 3, 20,170,
/* 0x09e0 */ 99, 0,128, 82,228, 3, 21, 42,231, 3, 23,170,170, 75, 0,249,
/* 0x09f0 */ 12, 16,159, 90,168, 79, 0,249, 96, 1, 38, 30,229, 3, 12, 42,
/* 0x0a00 */ 172, 83, 0,249, 11, 0, 11, 11,171, 87, 0,249,230, 3, 11, 42,
/* 0x0a10 */ 18, 0, 0,148,109,109, 97,112, 32, 32, 97,100,100,114, 61, 37,
/* 0x0a20 */ 112, 32, 32,108,101,110, 61, 37,112, 32, 32,112,114,111,116, 61,
/* 0x0a30 */ 37,120, 32, 32,102,108, 97,103,115, 61, 37,120, 32, 32,102,100,
/* 0x0a40 */ 61, 37,100, 32, 32,111,102,102, 61, 37,112, 32, 32,114,101,108,
/* 0x0a50 */ 111, 99, 61, 37,112, 10, 0, 0,224, 3, 30,170,243,253,255,151,
/* 0x0a60 */ 168, 79, 64,249,224, 3, 20,170,172, 83, 64,249, 98, 0,128, 82,
/* 0x0a70 */ 171, 87, 64,249,225, 3, 8,170,227, 3, 21, 42,228, 3, 12, 42,
/* 0x0a80 */ 229, 3, 11, 42,165,253,255,151,225, 3, 0,170, 0, 3, 64,249,
/* 0x0a90 */ 170, 75, 64,249,192, 0, 0,181, 1, 3, 0,249,247, 3, 1,170,
/* 0x0aa0 */ 244, 3, 1,170, 42, 2, 0, 53, 26, 0, 0, 20,159, 2, 1,235,
/* 0x0ab0 */ 128, 15, 0, 84,226, 3, 20,170, 6, 0, 0,148,109, 97,100,100,
/* 0x0ac0 */ 114, 61, 37,112, 32, 32, 97,100,100,114, 61, 37,112, 10, 0, 0,
/* 0x0ad0 */ 224, 3, 30,170,213,253,255,151, 0, 1,128, 82, 70, 0, 0, 20,
/* 0x0ae0 */ 229, 3, 22, 42, 86, 6, 0,180, 96, 26, 64,249, 32, 1, 0,180,
/* 0x0af0 */ 96, 22, 64,249, 64, 0, 0,181, 20, 3, 0,249,130, 1,102,158,
/* 0x0b00 */ 224, 3, 22,170, 67, 1,102,158,161,195, 2,145,201,254,255,151,
/* 0x0b10 */ 95, 3, 31,235,229, 7,159, 26,165, 4, 0, 52, 0, 3, 64,249,
/* 0x0b20 */ 96, 4, 0,180, 96, 22, 64,249, 37, 0,128, 82, 0, 4, 0,181,
/* 0x0b30 */ 96, 66, 64,185,192, 3, 0, 52, 99, 2, 27,203,225, 3, 5, 42,
/* 0x0b40 */ 131, 2, 3,139, 1,128,186,114, 98, 32, 1,145,228, 3, 20,170,
/* 0x0b50 */ 165, 87, 0,249, 64, 48, 64,185, 0, 32, 0,209,153, 2, 0,139,
/* 0x0b60 */ 129,106, 32,184, 0,120,128, 82,224,203,186,114,225, 3, 25,170,
/* 0x0b70 */ 32, 7, 0,185, 11, 0, 0,148,104, 97,116, 99,104, 61, 37,112,
/* 0x0b80 */ 32, 32,115,101, 99,112, 61, 37,112, 32, 32,115,101,103,112, 61,
/* 0x0b90 */ 37,112, 32, 32,109,104,100,114, 61, 37,112, 10, 0, 0, 0, 0,
/* 0x0ba0 */ 224, 3, 30,170,161,253,255,151,165, 87, 64,249,245, 3, 26,203,
/* 0x0bb0 */ 181, 46, 64,242, 97, 0, 0, 84, 5, 2, 0, 52, 8, 0, 0, 20,
/* 0x0bc0 */ 129, 2, 26,139, 0, 0,128,210, 63,104, 32, 56, 0, 4, 0,145,
/* 0x0bd0 */ 31, 0, 21,235,161,255,255, 84,248,255,255, 23, 98, 62, 64,185,
/* 0x0be0 */ 224, 3, 20,170,225, 3, 26,170, 73,253,255,151, 96, 0, 0, 52,
/* 0x0bf0 */ 64, 1,128, 82,129,254,255,151, 0, 1,102,158,181, 2, 26,139,
/* 0x0c00 */ 148, 2, 21,139,159, 2, 0,235,194, 1, 0, 84, 52, 4, 0,180,
/* 0x0c10 */ 1, 1,102,158, 98, 62, 64,185,224, 3, 20,170, 67, 6,128, 82,
/* 0x0c20 */ 4, 0,128, 18, 5, 0,128, 82, 33, 0, 20,203, 59,253,255,151,
/* 0x0c30 */ 159, 2, 0,235,224, 2, 0, 84, 32, 1,128, 82,238,255,255, 23,
/* 0x0c40 */ 150, 2, 0,180, 65, 15, 0,145, 33, 44, 64,146, 63, 12, 0,241,
/* 0x0c50 */ 8, 2, 0, 84,224, 3, 20,170, 42,253,255,151, 13, 0, 0, 20,
/* 0x0c60 */ 0, 16, 0, 81, 31, 4, 0,113, 72, 1, 0, 84, 97, 6, 64,249,
/* 0x0c70 */ 128, 0,128,210,128, 8,192,242, 63, 0, 0,235,161, 0, 0, 84,
/* 0x0c80 */ 96,138, 64,249,121, 66, 0,145, 0, 0, 23,139, 96,138, 0,249,
/* 0x0c90 */ 96, 6, 64,185,156, 7, 0, 17,115, 2, 0,139, 23,255,255, 23,
/* 0x0ca0 */ 74,242,255, 53,160,255,255, 23,224, 3, 25,170,232, 39, 70,109,
/* 0x0cb0 */ 243, 83, 65,169,234, 47, 71,109,245, 91, 66,169,247, 99, 67,169,
/* 0x0cc0 */ 249,107, 68,169,251,115, 69,169,236, 67, 64,253,253,123,204,168,
/* 0x0cd0 */ 192, 3, 95,214,255, 3, 3,209,253,123, 2,169,253,131, 0,145,
/* 0x0ce0 */ 243, 83, 3,169,161, 47, 0,249,243, 3, 2,170, 2, 96, 0,145,
/* 0x0cf0 */ 162, 63, 0,249,167, 47, 64,249,244, 3, 4,170,245, 91, 4,169,
/* 0x0d00 */ 231, 96, 0,209,167, 59, 0,249,246, 3, 5,170, 5, 24, 64,185,
/* 0x0d10 */ 231, 3, 0,249,245, 3, 6,170,230, 11, 0,249,167,195, 1,145,
/* 0x0d20 */ 226, 7, 0,249,160, 7, 71,169,194, 0, 64,249,230, 3, 19,170,
/* 0x0d30 */ 160, 7, 9,169,161, 47, 64,249,247, 99, 5,169,226, 15, 0,249,
/* 0x0d40 */ 247, 3, 3,170,226, 3, 4,170,227, 3, 22,170,164, 3, 2,145,
/* 0x0d50 */ 165, 67, 0,249,249, 51, 0,249,179, 71, 0,249, 23, 0, 0,148,
/* 0x0d60 */ 117,112,120, 95,109, 97,105,110, 32,115,122, 99, 61, 37,120, 32,
/* 0x0d70 */ 32,102, 95,100,101, 99, 61, 37,112, 32, 32,102, 95,117,110,102,
/* 0x0d80 */ 61, 37,112, 32, 32, 32, 32,120,111, 61, 37,112, 40, 37,120, 32,
/* 0x0d90 */ 37,112, 41, 32, 32,120,105, 61, 37,112, 40, 37,120, 32, 37,112,
/* 0x0da0 */ 41, 32, 32,109,104,100,114,112,112, 61, 37,112, 32, 32,109,104,
/* 0x0db0 */ 100,114,112, 61, 37,112, 10, 0,224, 3, 30,170, 27,253,255,151,
/* 0x0dc0 */ 160,195, 1,145,161, 3, 2,145,226, 3, 20,170, 3, 0,128,210,
/* 0x0dd0 */ 24,254,255,151, 1, 0,128, 82,228, 3, 21,170,224, 3, 19,170,
/* 0x0de0 */ 162, 67, 2,145, 3, 0,128, 18,229, 3, 20,170,230, 3, 22,170,
/* 0x0df0 */ 141,254,255,151,248, 3, 0,170, 96, 18, 64,185, 97,130, 0,145,
/* 0x0e00 */ 4, 0,128, 82,159, 0, 0,107,224, 9, 0, 84, 34, 0, 64,185,
/* 0x0e10 */ 95, 56, 0,113, 1, 9, 0, 84, 52, 8, 64,185, 22, 0,128, 82,
/* 0x0e20 */ 4, 0, 0,148,100,121,108,100, 61, 32, 37,115, 10, 0, 0, 0,
/* 0x0e30 */ 224, 3, 30,170, 52, 0, 20,139,153, 2,128, 82,225, 3, 20,170,
/* 0x0e40 */ 250,252,255,151, 1, 0,128, 82,224, 3, 20,170,226, 3, 1, 42,
/* 0x0e50 */ 162,252,255,151,244, 3, 0, 42, 20, 3,248, 54, 64, 2,128, 82,
/* 0x0e60 */ 30, 0, 0, 20, 98, 2, 64,185, 64,217,159, 82, 64,215,183,114,
/* 0x0e70 */ 95, 0, 0,107, 65, 3, 0, 84, 97, 30, 64, 57,224, 3, 19,170,
/* 0x0e80 */ 117, 34, 0,145, 33,124, 25, 27, 33, 32, 0, 17,169,252,255,151,
/* 0x0e90 */ 96, 6, 64,185, 1, 0,128, 82, 63, 0, 0,107, 0, 3, 0, 84,
/* 0x0ea0 */ 163, 2, 64,185,226, 0,128, 82, 2, 32,160,114,127, 0, 2,107,
/* 0x0eb0 */ 1, 2, 0, 84,182, 10, 64,185,224, 3, 20, 42,225, 3, 19,170,
/* 0x0ec0 */ 226, 3, 23,170,227, 3, 22, 42,151,252,255,151,255, 2, 0,235,
/* 0x0ed0 */ 160,252,255, 84, 96, 2,128, 82,200,253,255,151,193, 87,151, 82,
/* 0x0ee0 */ 193, 95,185,114, 95, 0, 1,107,128,252,255, 84, 4, 0, 0, 20,
/* 0x0ef0 */ 33, 4, 0, 17,181, 82, 0,145,232,255,255, 23,164,131, 2,145,
/* 0x0f00 */ 2, 0,128,210,224, 3, 19,170,225, 3, 22, 42,227, 3, 20, 42,
/* 0x0f10 */ 229, 3, 2,170,159,140, 28,248,230, 3, 2,170, 66,254,255,151,
/* 0x0f20 */ 243, 3, 0,170, 24, 0, 0,249,224, 3, 20, 42,111,252,255,151,
/* 0x0f30 */ 6, 0, 0, 20, 34, 4, 64,185,132, 4, 0, 17, 33, 0, 2,139,
/* 0x0f40 */ 177,255,255, 23, 19, 0,128,210,191,131, 0,209,224, 3, 19,170,
/* 0x0f50 */ 243, 83, 67,169,245, 91, 68,169,247, 99, 69,169,249, 51, 64,249,
/* 0x0f60 */ 253,123, 66,169,255, 3, 3,145,192, 3, 95,214, 0, 0, 0, 0,
/* 0x0f70 */ 20, 0, 0, 0, 0, 0, 0, 0, 1,122, 82, 0, 4,120, 30, 1,
/* 0x0f80 */ 27, 12, 31, 0, 0, 0, 0, 0, 20, 0, 0, 0, 28, 0, 0, 0,
/* 0x0f90 */ 204,241,255,255,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0fa0 */ 20, 0, 0, 0, 52, 0, 0, 0, 24,242,255,255,104, 0, 0, 0,
/* 0x0fb0 */ 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 76, 0, 0, 0,
/* 0x0fc0 */ 104,242,255,255,232, 2, 0, 0, 0, 65, 14,208, 2,157, 42,158,
/* 0x0fd0 */ 41, 65, 13, 29, 70,149, 38,150, 37,151, 36,152, 35,147, 40,148,
/* 0x0fe0 */ 39, 66,153, 34,154, 33, 2,175,222,221,218,217,216,215,214,213,
/* 0x0ff0 */ 212,211, 12, 31, 0, 0, 0, 0, 44, 0, 0, 0,140, 0, 0, 0,
/* 0x1000 */ 16,245,255,255,232, 0, 0, 0, 0, 65, 14, 48,157, 6,158, 5,
/* 0x1010 */ 65, 13, 29, 65,147, 4,148, 3, 67,149, 2,150, 1,115,222,221,
/* 0x1020 */ 214,213,212,211, 12, 31, 0, 0, 28, 0, 0, 0,188, 0, 0, 0,
/* 0x1030 */ 200,245,255,255, 56, 0, 0, 0, 0, 65, 14, 32,157, 4,158, 3,
/* 0x1040 */ 65, 13, 29, 65,147, 2, 0, 0, 52, 0, 0, 0,220, 0, 0, 0,
/* 0x1050 */ 224,245,255,255,244, 1, 0, 0, 0, 65, 14, 96, 65,157, 10,158,
/* 0x1060 */ 9, 65, 12, 29, 80, 65,147, 8,148, 7, 67,149, 6,150, 5, 2,
/* 0x1070 */ 113, 12, 31, 96, 68,222,221,214,213,212,211, 14, 0, 0, 0, 0,
/* 0x1080 */ 92, 0, 0, 0, 20, 1, 0, 0,156,247,255,255,176, 4, 0, 0,
/* 0x1090 */ 0, 65, 14,192, 1,157, 24,158, 23, 65, 13, 29, 72, 5, 74, 10,
/* 0x10a0 */ 5, 75, 9,147, 22,148, 21, 5, 72, 12, 5, 73, 11,149, 20,150,
/* 0x10b0 */ 19,151, 18,152, 17,155, 14,156, 13,153, 16,154, 15, 5, 76, 8,
/* 0x10c0 */ 3, 33, 1,222,221, 6, 76, 6, 75, 6, 74, 6, 73, 6, 72,220,
/* 0x10d0 */ 219,218,217,216,215,214,213,212,211, 12, 31, 0, 0, 0, 0, 0,
/* 0x10e0 */ 68, 0, 0, 0,116, 1, 0, 0,236,251,255,255,152, 2, 0, 0,
/* 0x10f0 */ 0, 65, 14,192, 1, 65,157, 20,158, 19, 65, 12, 29,160, 1, 66,
/* 0x1100 */ 147, 18,148, 17, 72,149, 16,150, 15, 78,151, 14,152, 13, 70,153,
/* 0x1110 */ 12, 2,125, 12, 31,192, 1, 71,222,221,217,216,215,214,213,212,
/* 0x1120 */ 211, 14, 0, 0, 0, 0, 0, 0
}; };

View File

@ -34,7 +34,7 @@
#include "include/darwin.h" #include "include/darwin.h"
#ifndef DEBUG /*{*/ #ifndef DEBUG /*{*/
#define DEBUG 0 #define DEBUG 1
#endif /*}*/ #endif /*}*/
/************************************************************************* /*************************************************************************
@ -118,7 +118,7 @@ xread(Extent *x, void *buf, size_t count)
// util // util
**************************************************************************/ **************************************************************************/
#if 1 //{ save space #if 0 //{ save space
#define ERR_LAB error: exit(127); #define ERR_LAB error: exit(127);
#define err_exit(a) goto error #define err_exit(a) goto error
#else //}{ save debugging time #else //}{ save debugging time
@ -348,6 +348,27 @@ typedef struct {
uint64_t stacksize; // non-default initial stack size uint64_t stacksize; // non-default initial stack size
} Mach_main_command; } Mach_main_command;
#if defined(__AARCH64EL__) // {
typedef struct {
uint64_t x0, x1, x2, x3;
uint64_t x4, x5, x6, x7;
uint64_t x8, x9, x10, x11;
uint64_t x12, x13, x14, x15;
uint64_t x16, x17, x18, x19;
uint64_t x20, x21, x22, x23;
uint64_t x24, x25, x26, x27;
uint64_t x28, fp, lr, sp;
uint64_t pc;
uint32_t cpsr;
} Mach_thread_state; // Mach_ARM64_thread_state
enum e6 {
THREAD_STATE = 4 // ARM64_THREAD_STATE
};
enum e7 {
THREAD_STATE_COUNT = sizeof(Mach_thread_state)/4
};
#elif defined(__x86_64__) //}{
typedef struct { typedef struct {
uint64_t rax, rbx, rcx, rdx; uint64_t rax, rbx, rcx, rdx;
uint64_t rdi, rsi, rbp, rsp; uint64_t rdi, rsi, rbp, rsp;
@ -355,21 +376,23 @@ typedef struct {
uint64_t r12, r13, r14, r15; uint64_t r12, r13, r14, r15;
uint64_t rip, rflags; uint64_t rip, rflags;
uint64_t cs, fs, gs; uint64_t cs, fs, gs;
} Mach_AMD64_thread_state; } Mach_thread_state; // Mach_AMD64_thread_state;
enum e6 {
THREAD_STATE = 4 // AMD_THREAD_STATE
};
enum e7 {
THREAD_STATE_COUNT = sizeof(Mach_thread_state)/4
};
#endif //}
typedef struct { typedef struct {
unsigned cmd; /* LC_THREAD or LC_UNIXTHREAD */ unsigned cmd; /* LC_THREAD or LC_UNIXTHREAD */
unsigned cmdsize; /* total size of this command */ unsigned cmdsize; /* total size of this command */
unsigned flavor; unsigned flavor;
unsigned count; /* sizeof(following_thread_state)/4 */ unsigned count; /* sizeof(following_thread_state)/4 */
Mach_AMD64_thread_state state; Mach_thread_state state;
} Mach_thread_command; } Mach_thread_command;
enum e6 {
AMD64_THREAD_STATE = 4 // x86_THREAD_STATE64
};
enum e7 {
AMD64_THREAD_STATE_COUNT = sizeof(Mach_AMD64_thread_state)/4
};
typedef union { typedef union {
unsigned offset; /* from start of load command to string */ unsigned offset; /* from start of load command to string */
@ -377,8 +400,11 @@ typedef union {
#define MAP_FIXED 0x10 #define MAP_FIXED 0x10
#define MAP_PRIVATE 0x02 #define MAP_PRIVATE 0x02
#define MAP_ANON 0x1000 #define MAP_ANON 0x1000
//#define MAP_ANON 0x20 // x86 DEBUG ONLY #undef MAP_ANON // x86 DEBUG ONLY
#define MAP_ANON 0x20 // x86 DEBUG ONLY
#define PROT_READ 1 #define PROT_READ 1
#define PROT_WRITE 2 #define PROT_WRITE 2
#define PROT_EXEC 4 #define PROT_EXEC 4
@ -457,9 +483,15 @@ do_xmap(
// fold.S could do this easier, except PROT_WRITE is missing then. // fold.S could do this easier, except PROT_WRITE is missing then.
Mach_segment_command *segp = (Mach_segment_command *)(((char *)sc - (char *)mhdr) + addr); Mach_segment_command *segp = (Mach_segment_command *)(((char *)sc - (char *)mhdr) + addr);
Mach_section_command *const secp = (Mach_section_command *)(1+ segp); Mach_section_command *const secp = (Mach_section_command *)(1+ segp);
#if defined(__AARCH64EL__) //{
unsigned *hatch= -2+ (unsigned *)(secp->offset + (char *)addr);
hatch[0] = 0xd4000001; // syscall
hatch[1] = 0xd65f03c0; // ret
#elif defined(__x86_64__) //}{
unsigned *hatch= -1+ (unsigned *)(secp->offset + (char *)addr); unsigned *hatch= -1+ (unsigned *)(secp->offset + (char *)addr);
hatch[0] = 0xc3050f90; // nop; syscall; ret
#endif //}
DPRINTF("hatch=%%p secp=%%p segp=%%p mhdr=%%p\\n", hatch, secp, segp, addr); DPRINTF("hatch=%%p secp=%%p segp=%%p mhdr=%%p\\n", hatch, secp, segp, addr);
*hatch = 0xc3050f90; // nop; syscall; ret
rv= (unsigned char *)hatch; rv= (unsigned char *)hatch;
} }
/*bzero(addr, frag);*/ // fragment at lo end /*bzero(addr, frag);*/ // fragment at lo end
@ -489,9 +521,13 @@ ERR_LAB
} }
else if (LC_UNIXTHREAD==sc->cmd || LC_THREAD==sc->cmd) { else if (LC_UNIXTHREAD==sc->cmd || LC_THREAD==sc->cmd) {
Mach_thread_command *const thrc = (Mach_thread_command *)sc; Mach_thread_command *const thrc = (Mach_thread_command *)sc;
if (AMD64_THREAD_STATE ==thrc->flavor if (THREAD_STATE ==thrc->flavor
&& AMD64_THREAD_STATE_COUNT==thrc->count ) { && THREAD_STATE_COUNT==thrc->count ) {
#if defined(__AARCH64EL__) // {
thrc->state.pc += reloc;
#elif defined(__x86_64__) //}{
thrc->state.rip += reloc; thrc->state.rip += reloc;
#endif //}
rv = (unsigned char *)&thrc->state; rv = (unsigned char *)&thrc->state;
} }
} }
@ -503,8 +539,7 @@ ERR_LAB
// upx_main - called by our unfolded entry code // upx_main - called by our unfolded entry code
// //
**************************************************************************/ **************************************************************************/
Mach_thread_state const *
Mach_AMD64_thread_state const *
upx_main( upx_main(
struct l_info const *const li, struct l_info const *const li,
size_t volatile sz_compressed, // total length size_t volatile sz_compressed, // total length
@ -515,7 +550,7 @@ upx_main(
Mach_header64 **const mhdrpp // Out: *mhdrpp= &real Mach_header64 Mach_header64 **const mhdrpp // Out: *mhdrpp= &real Mach_header64
) )
{ {
Mach_AMD64_thread_state *ts = 0; Mach_thread_state *ts = 0;
unsigned char *hatch; unsigned char *hatch;
off_t_upx_stub fat_offset = 0; off_t_upx_stub fat_offset = 0;
Extent xi, xo, xi0; Extent xi, xo, xi0;
@ -545,6 +580,7 @@ upx_main(
) if (LC_LOAD_DYLINKER==lc->cmd) { ) if (LC_LOAD_DYLINKER==lc->cmd) {
char const *const dyld_name = ((Mach_lc_str const *)(1+ lc))->offset + char const *const dyld_name = ((Mach_lc_str const *)(1+ lc))->offset +
(char const *)lc; (char const *)lc;
DPRINTF("dyld= %%s\\n", dyld_name);
int const fdi = open(dyld_name, O_RDONLY, 0); int const fdi = open(dyld_name, O_RDONLY, 0);
if (0 > fdi) { if (0 > fdi) {
err_exit(18); err_exit(18);
@ -572,8 +608,12 @@ ERR_LAB
} break; } break;
} // switch } // switch
Mach_header64 *dyhdr = 0; Mach_header64 *dyhdr = 0;
ts = (Mach_AMD64_thread_state *)do_xmap(mhdr, fat_offset, 0, fdi, &dyhdr, 0, 0); ts = (Mach_thread_state *)do_xmap(mhdr, fat_offset, 0, fdi, &dyhdr, 0, 0);
ts->rax = (uint64_t)hatch; #if defined(__AARCH64EL__) // {
ts->x0 = (uint64_t)hatch;
#elif defined(__x86_64__) //}{
ts->rax = (uint64_t)hatch;
#endif //}
close(fdi); close(fdi);
break; break;
} }
@ -682,6 +722,11 @@ finish:
buf[1] = 'x'; buf[1] = 'x';
n+= write(2, buf, heximal(va_arg(va, int), buf, 2)); n+= write(2, buf, heximal(va_arg(va, int), buf, 2));
} break; } break;
case 's': {
char *s0= (char *)va_arg(va, char *), *s= s0;
if (s) while (*s) ++s;
n+= write(2, s0, s - s0);
} break;
} // 'switch' } // 'switch'
} }
done: done:

View File

@ -133,7 +133,7 @@ rcx .req r3
rax .req r7 rax .req r7
rbx .req r8 rbx .req r8
rbp .req r9 r_EXP .req r9
section MACHMAINZ section MACHMAINZ
unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header
@ -168,13 +168,14 @@ unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header
// Remember new f_exp region for PROT_EXEC. // Remember new f_exp region for PROT_EXEC.
ldr rdx,[sp,#2*NBPW] // LENU ldr rdx,[sp,#2*NBPW] // LENU
ldr rcx,[sp,#4*NBPW] // &Mach_header ldr rcx,[sp,#4*NBPW] // &Mach_header
add rdx,rdx,rax // new last of unfolded add rdx,rdx,r0 // new last of unfolded
sub r_RELOC,rax,rcx // relocation constant = new - old sub r_RELOC,r0,rcx // relocation constant = new - old
add rax,rax,rbp; str rbp,[sp,#-NBPW]! // P_10 new f_exp add rcx,r_EXP,r_RELOC
mov rax,rax,lsr #PAGE_SHIFT str rcx,[sp,#-NBPW]! // P_10 new f_exp
mov rax,rax,lsl #PAGE_SHIFT mov r0,r0,lsr #PAGE_SHIFT
str rax,[sp,#-NBPW]! // P_11 address mov r0,r0,lsl #PAGE_SHIFT
sub rdx,rdx,rax str r0,[sp,#-NBPW]! // P_11 address
sub rdx,rdx,r0
str rdx,[sp,#-NBPW]! // P_12 length str rdx,[sp,#-NBPW]! // P_12 length
// Unfold // Unfold
@ -186,13 +187,13 @@ unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header
ldr arg5,[rbx,#b_method] ldr arg5,[rbx,#b_method]
add arg1,rbx,#sz_b_info // src add arg1,rbx,#sz_b_info // src
mov arg2,rax // srclen mov arg2,rax // srclen
blx rbp // old f_exp blx r_EXP // old f_exp; new f_exp lacks PROT_EXEC
add sp,sp,#NBPW // P_13 toss dstlen add sp,sp,#NBPW // P_13 toss dstlen
// PROT_EXEC // PROT_EXEC
ldr arg2,[sp],#NBPW // P_12 length ldr arg2,[sp],#NBPW // P_12 length
ldr arg1,[sp],#NBPW // P_11 addr ldr arg1,[sp],#NBPW // P_11 addr
ldr rbp,[sp],#NBPW // P_10 new f_exp ldr r_EXP,[sp],#NBPW // P_10 new f_exp
mov arg3,#PROT_READ|PROT_EXEC mov arg3,#PROT_READ|PROT_EXEC
do_sys __NR_mprotect do_sys __NR_mprotect

View File

@ -29,6 +29,17 @@
* <jreiser@users.sourceforge.net> * <jreiser@users.sourceforge.net>
*/ */
#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 */
#define ARMEL_EABI4 1 /* SIMULATE_ON_DEBIAN_EABI4 */
#else /*}{ USUAL case */
#define DARWIN_ARM_CACHEFLUSH 1
#define ARMEL_DARWIN 1
#endif /*}*/
NBPW= 8 NBPW= 8
#include "arch/arm64/v8/macros.S" #include "arch/arm64/v8/macros.S"
@ -46,6 +57,7 @@ PROT_EXEC= 4
MAP_PRIVATE= 2 MAP_PRIVATE= 2
MAP_FIXED= 0x10 MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20 MAP_ANONYMOUS= 0x20
FD_ANON= -1
PAGE_SHIFT= 12 PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT) PAGE_SIZE = -(~0<<PAGE_SHIFT)
@ -58,6 +70,15 @@ __NR_open = 5 + __NR_SYSCALL_BASE
__NR_mmap = 197 + __NR_SYSCALL_BASE __NR_mmap = 197 + __NR_SYSCALL_BASE
__NR_mprotect= 74 + __NR_SYSCALL_BASE __NR_mprotect= 74 + __NR_SYSCALL_BASE
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
__NR_mmap = 0xde // 222 __GI___mmap64
__NR_munmap = 0xd7 // 215
__NR_mprotect = 0xe2 // 226
__NR_openat = 0x38 // 56
__NR_pread = 0x43 // 67
#endif /*}*/
FD_CWD = -100
// DEBUG ONLY: // DEBUG ONLY:
__ARM_NR_BASE = 0xf0000 + __NR_SYSCALL_BASE __ARM_NR_BASE = 0xf0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE __ARM_NR_cacheflush = 2 + __ARM_NR_BASE
@ -68,22 +89,7 @@ __ARM_NR_cacheflush = 2 + __ARM_NR_BASE
section MACHMAINX section MACHMAINX
_start: .globl _start _start: .globl _start
sub sp,sp,#NBPW // space for mhdrp mov x2,sp // &argc
stp x0,x1,[sp,#-30*8]! // paranoia; omit r30(lr), r31(sp)
stp x2,x3,[sp,#2*8]
stp x4,x5,[sp,#4*8]
stp x6,x7,[sp,#6*8]
stp x8,x9,[sp,#8*8]
stp x10,x11,[sp,#10*8]
stp x12,x13,[sp,#12*8]
stp x14,x15,[sp,#14*8]
stp x16,x17,[sp,#16*8]
stp x18,x19,[sp,#18*8]
stp x20,x21,[sp,#20*8]
stp x22,x23,[sp,#22*8]
stp x24,x25,[sp,#24*8]
stp x26,x27,[sp,#26*8]
stp x28,x29,[sp,#28*8]
bl main bl main
L20: L20:
f_decompress: f_decompress:
@ -110,11 +116,11 @@ end_decompress: .globl end_decompress
/* IDENTSTR goes here */ /* IDENTSTR goes here */
r_RELOC .req x12 // same as r_MHDR r_RELOC .req x23 // same as r_MHDR
r_MHDR .req x12 r_MHDR .req x22
r_LENX .req x11 r_LENX .req x21
r_ADRX .req x10 r_ADRX .req x20
r_FOLD .req x6 r_FOLD .req x19
arg1 .req x0; arg1w .req w0 arg1 .req x0; arg1w .req w0
arg2 .req x1; arg2w .req w1 arg2 .req x1; arg2w .req w1
@ -129,19 +135,18 @@ rdx .req x2
rcx .req x3 rcx .req x3
rax .req x7; eax .req w7 rax .req x7; eax .req w7
rbx .req x8 rbx .req x27
rbp .req x9 r_EXP .req x28
section MACHMAINZ section MACHMAINZ
lsrc .req w1 lsrc .req w1
ldst .req w3 ldst .req w3
ldstx .req x3 ldstx .req x3
unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header,HOLE
mov rbx,lr // &b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_fold...} mov rbx,lr // &b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_fold...}
ldr eax,[rbx,#sz_unc] // LENU.dynamic ldr eax,[rbx,#sz_unc] // LENU.dynamic
mov rdx,rbx sub rdx,rbx,r_MHDR // LENU.static
sub rdx,rdx,r_MHDR // LENU.static
add rdx,rdx,eax,uxtw add rdx,rdx,eax,uxtw
str rdx,[sp,#2*NBPW] // LENU str rdx,[sp,#2*NBPW] // LENU
@ -169,36 +174,37 @@ unfold: // lr= &b_info; sp/ fd,%ADRU,%LENU,%entry,%&Mach_header
// Remember new f_exp region for PROT_EXEC. // Remember new f_exp region for PROT_EXEC.
ldr rdx,[sp,#2*NBPW] // LENU ldr rdx,[sp,#2*NBPW] // LENU
ldr rcx,[sp,#4*NBPW] // &Mach_header ldr rcx,[sp,#4*NBPW] // &Mach_header
add rdx,rdx,rax // new last of unfolded add rdx,rdx,x0 // new last of unfolded
sub r_RELOC,rax,rcx // relocation constant = new - old sub r_RELOC,x0,rcx // relocation constant = new - old
add rax,rax,rbp; str rbp,[sp,#-NBPW]! // P_10 new f_exp add rcx,r_EXP,r_RELOC
lsr rax,rax,#PAGE_SHIFT str rcx,[sp,#-4*NBPW]! // P_10 new f_exp
lsl rax,rax,#PAGE_SHIFT and x0,x0,#~0<<PAGE_SHIFT
str rax,[sp,#-NBPW]! // P_11 address str x0,[sp,#1*NBPW] // P_11 address
sub rdx,rdx,rax sub rdx,rdx,x0
str rdx,[sp,#-NBPW]! // P_12 length str rdx,[sp,#2*NBPW] // P_12 length
// Unfold // Unfold
ldr eax,[rbx,#sz_unc] // dstlen ldr eax,[rbx,#sz_unc] // dstlen
str rax,[sp,#-NBPW]; mov arg4,sp // P_13 &dstlen add arg4,sp,#3*NBPW // P_13 &dstlen
str rax,[sp,#3*NBPW]
add arg3,rbx,r_RELOC // dst= new unfold add arg3,rbx,r_RELOC // dst= new unfold
mov r_FOLD,arg3 // execute here mov r_FOLD,arg3 // execute here
ldr eax,[rbx,#sz_cpr] // srclen ldr eax,[rbx,#sz_cpr] // srclen
ldr arg5w,[rbx,#b_method] ldr arg5w,[rbx,#b_method]
add arg1,rbx,#sz_b_info // src add arg1,rbx,#sz_b_info // src
mov arg2,rax // srclen mov arg2,rax // srclen
blr rbp // old f_exp blr r_EXP // old f_exp; new f_exp lacks PROT_EXEC
add sp,sp,#NBPW // P_13 toss dstlen
// PROT_EXEC // PROT_EXEC
ldr arg2,[sp],#NBPW // P_12 length ldr arg2,[sp, #2*NBPW] // P_12 length
ldr arg1,[sp],#NBPW // P_11 addr ldr arg1,[sp, #1*NBPW] // P_11 addr
ldr rbp,[sp],#NBPW // P_10 new f_exp ldr r_EXP,[sp],#4*NBPW // P_10 new f_exp
mov arg3w,#PROT_READ|PROT_EXEC mov arg3w,#PROT_READ|PROT_EXEC
do_sys __NR_mprotect do_sys __NR_mprotect
// Use the copy. // Use the copy.
// r10= ADRX; r11= LENX; r9= f_exp // x20=r_ADRX= ADRX = &l_info; x21=r_LENX= LENX; x28=r_EXP= f_exp
// rsp/ fd,ADRU,LENU,%entry,&Mach_header // rsp/ fd,ADRU,LENU,%entry,&Mach_header,HOLE
br r_FOLD br r_FOLD
execp: execp:
@ -206,9 +212,8 @@ execp:
L99: L99:
brk #0 brk #0
main: main: // IN: x2= &argc; lr= &f_exp
mov x5,lr // &f_decompress mov r_EXP,lr // &f_decompress
add x2,sp,#NBPW // &argv[0]
0: 0:
ldr x0,[x2],#NBPW ldr x0,[x2],#NBPW
cbnz x0,0b // past argv cbnz x0,0b // past argv
@ -226,9 +231,16 @@ L40:
cmp w4,w5; bne L30 // mismatch ==> next apple[] cmp w4,w5; bne L30 // mismatch ==> next apple[]
cbnz w3,L40 // not entire prefix cbnz w3,L40 // not entire prefix
#ifdef SIMULATE_ON_DEBIAN_EABI4 //{
mov arg3,#0 // O_RDONLY
mov arg2,arg1
mov arg1w,#FD_CWD
do_sys __NR_openat
#else //}{
mov arg2,#0 // O_RDONLY mov arg2,#0 // O_RDONLY
do_sys __NR_open do_sys __NR_open
str x5,[sp,#-5*NBPW]! // fd,%ADRU,%LENU,%entry,%&Mach_header #endif //}
str x0,[sp,#-6*NBPW]! // fd,%ADRU,%LENU,%entry,%&Mach_header,HOLE
adr x1,-2*4 + _start adr x1,-2*4 + _start

View File

@ -27,8 +27,8 @@
// <jreiser@users.sourceforge.net> // <jreiser@users.sourceforge.net>
// //
//#define SIMULATE_ON_DEBIAN_EABI4 1 #define SIMULATE_ON_DEBIAN_EABI4 1
#undef SIMULATE_ON_DEBIAN_EABI4 //#undef SIMULATE_ON_DEBIAN_EABI4
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/ #ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
#define LINUX_ARM_CACHEFLUSH 1 /* SIMULATE_ON_DEBIAN_EABI4 */ #define LINUX_ARM_CACHEFLUSH 1 /* SIMULATE_ON_DEBIAN_EABI4 */
@ -38,8 +38,17 @@
#define ARMEL_DARWIN 1 #define ARMEL_DARWIN 1
#endif /*}*/ #endif /*}*/
NBPW= 8
#include "arch/arm64/v8/macros.S" #include "arch/arm64/v8/macros.S"
arg1 .req x0
arg2 .req x1
arg3 .req x2
arg4 .req x3; arg4w .req w3
arg5 .req x4
arg6 .req x5
arg7 .req x6
sz_l_info = 12 sz_l_info = 12
sz_p_info = 12 sz_p_info = 12
sz_b_info = 12 sz_b_info = 12
@ -54,40 +63,48 @@ _start: .globl _start // ignored, but silence "cannot find entry symbol _start"
fold_begin: fold_begin:
/* In: /* In:
x11= &sz_pack2; follows compressed program {l_info; p_info; b_info; data...} rsp/ fd,ADRU,LENU,%entry,&Mach_header,HOLE
x4= f_decompress x20=r_ADRX= ADRX = &l_info
sp/ junk1,junk2,{30 original regs (omit sp,lr)},junk3,original_stack... x21=r_LENX= LENX
x28=r_EXP= f_exp
*/ */
r_OSTK .req x19
r_ADRX .req x20
r_LENX .req x21
r_EXP .req x28
#define t0w w9 /* scratch value */ #define t0w w9 /* scratch value */
ldr x1,[x11] // sz_pack2 mov arg1,r_ADRX // &{l_info; p_info; b_info}
add x7,sp,#8*(2+(32-2)) // &junk3; will become &mhdrp mov arg2,r_LENX
sub x0,x11,x1,uxtw // &{l_info; p_info; b_info} ldr arg4w,[arg1,#sz_unc + sz_l_info + sz_p_info] // sz_unc of Mach_header
ldr w3,[x0,#sz_unc + sz_l_info + sz_p_info] // sz_unc of Mach_header
mov t0w,#(1<<13) mov t0w,#(1<<13)
cmp w3,t0w cmp arg4w,t0w
csel w3,w3,t0w,hi // at least 8KiB csel arg4w,arg4w,t0w,hi // at least 8KiB
sub sp,sp,w3,uxtw // alloca add arg4w,arg4w,# 0xf
mov x2,sp // Mach_header *tmp and arg4w,arg4w,#~0xf // 16-byte align for stack pointer
adr x5,f_unfilter add arg7,sp,#4*NBPW
bl upx_main // (x0=l_info *, w1=sz_compressed, x2=Mach_header *tmp, mov r_OSTK,sp // where to un-alloca
// w3=sz_mhdr, x4=f_decompress, x5=f_unfilter, x6= &Mach_header *) sub sp,sp,arg4w,uxtw // alloca
ldr lr,[x0,#30*8] // entry: ((Mach_ARM_thread_state const *)dyld)->pc mov arg3,sp // Mach_header *tmp
ldp x28,x29,[sp,#8*28] mov arg5,r_EXP
ldp x26,x27,[sp,#8*26] adr arg6,f_unfilter
ldp x24,x25,[sp,#8*24] // upx_main(x0=&l_info, w1=len_cpr, x2=temp[sz_mhdr], w3=sz_mhdr, x4=f_exp, x5=f_unf, x6=mhdr **)
ldp x22,x23,[sp,#8*22] bl upx_main // OUT: x0= &Mach_thread_state of dyld; will be in temp mhdr[]
ldp x20,x21,[sp,#8*20]
ldp x18,x19,[sp,#8*18] ARM64_ts_pc= 32*NBPW
ldp x16,x17,[sp,#8*16] ldr r_ADRX,[x0,#ARM64_ts_pc] // dyld.entry
ldp x14,x15,[sp,#8*14] ldr r_EXP, [x0,#0] // &hatch
ldp x12,x13,[sp,#8*12] mov sp,r_OSTK // un-alloca
ldp x10,x11,[sp,#8*10]
ldp x8,x9,[sp,#8*8] ldr w0,[sp,#0*NBPW] // fd
ldp x6,x7,[sp,#8*6] bl close
ldp x4,x5,[sp,#8*4]
ldp x2,x3,[sp,#8*2] ldr x0,[sp,#1*NBPW] // ADRU
ldp x0,x1,[sp],#8*30 ldr w1,[sp,#2*NBPW] // LENU
br lr mov w8,#__NR_munmap
mov lr,r_ADRX // dyld.entry
add sp,sp,#4*NBPW // leave &Mach_header,HOLE
br r_EXP // goto hatch: syscall.munmap(ADRU,LENU); ret
f_unfilter: // (char *ptr, uint len, uint cto, uint fid) f_unfilter: // (char *ptr, uint len, uint cto, uint fid)
ptr .req x0 ptr .req x0
@ -146,10 +163,15 @@ __NR_mprotect = 74
__NR_pread = 153 __NR_pread = 153
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/ #ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
__NR_mmap = 192 // mmap2 __NR_close = 0x39 // 57
__NR_munmap = 91 __NR_exit = 0x5d // 93
__NR_mprotect = 125 __NR_mmap = 0xde // 222 __GI___mmap64
__NR_pread = 180 __NR_mprotect = 0xe2 // 226
__NR_munmap = 0xd7 // 215
__NR_openat = 0x38 // 56
__NR_pread = 0x43 // 67
__NR_read = 0x3f // 63
__NR_write = 0x40 // 64
#endif /*}*/ #endif /*}*/
.globl exit .globl exit
@ -166,6 +188,7 @@ write:
.globl open .globl open
open: open:
brk #0
do_sys __NR_open; ret do_sys __NR_open; ret
.globl close .globl close

View File

@ -1,465 +1 @@
/* arm64-darwin.macho-main.c -- loader stub for Mach-o #include "amd64-darwin.macho-main.c"
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<markus@oberhumer.com> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
//#define SIMULATE_ON_DEBIAN_EABI4 1
#undef SIMULATE_ON_DEBIAN_EABI4
#define __WORDSIZE 64
#include "include/darwin.h"
/*************************************************************************
// configuration section
**************************************************************************/
// In order to make it much easier to move this code at runtime and execute
// it at an address different from it load address: there must be no
// static data, and no string constants.
/*************************************************************************
// "file" util
**************************************************************************/
typedef struct {
size_t size; // must be first to match size[0] uncompressed size
void *buf;
} Extent;
static void
xread(Extent *x, void *buf, size_t count)
{
unsigned char *p=x->buf, *q=buf;
size_t j;
if (x->size < count) {
exit(127);
}
for (j = count; 0!=j--; ++p, ++q) {
*q = *p;
}
x->buf += count;
x->size -= count;
}
/*************************************************************************
// util
**************************************************************************/
#if 1 //{ save space
#define ERR_LAB error: exit(127);
#define err_exit(a) goto error
#else //}{ save debugging time
#define ERR_LAB /*empty*/
static void
err_exit(int a)
{
(void)a; // debugging convenience
exit(127);
}
#endif //}
/*************************************************************************
// UPX & NRV stuff
**************************************************************************/
struct l_info { // 12-byte trailer for loader (after macho headers)
unsigned l_checksum;
unsigned l_magic; // UPX_MAGIC_LE32
unsigned short l_lsize;
unsigned char l_version;
unsigned char l_format;
};
struct p_info { // 12-byte packed program header
unsigned p_progid;
unsigned p_filesize;
unsigned p_blocksize;
};
struct b_info { // 12-byte header before each compressed block
unsigned sz_unc; // uncompressed_size
unsigned sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
unsigned char b_unused;
};
typedef void f_unfilter(
nrv_byte *, // also addvalue
nrv_uint,
unsigned cto8, // junk in high 24 bits
unsigned ftid
);
typedef int f_expand(
const nrv_byte *, nrv_uint,
nrv_byte *, nrv_uint *, unsigned );
static void
unpackExtent(
Extent *const xi, // input
Extent *const xo, // output
f_expand *const f_decompress,
f_unfilter *f_unf
)
{
while (xo->size) {
struct b_info h;
// Note: if h.sz_unc == h.sz_cpr then the block was not
// compressible and is stored in its uncompressed form.
// Read and check block sizes.
xread(xi, (unsigned char *)&h, sizeof(h));
if (h.sz_unc == 0) { // uncompressed size 0 -> EOF
if (h.sz_cpr != UPX_MAGIC_LE32) // h.sz_cpr must be h->magic
err_exit(2);
if (xi->size != 0) // all bytes must be written
err_exit(3);
break;
}
if (h.sz_cpr <= 0) {
err_exit(4);
ERR_LAB
}
if (h.sz_cpr > h.sz_unc
|| h.sz_unc > xo->size ) {
err_exit(5);
}
// Now we have:
// assert(h.sz_cpr <= h.sz_unc);
// assert(h.sz_unc > 0 && h.sz_unc <= blocksize);
// assert(h.sz_cpr > 0 && h.sz_cpr <= blocksize);
if (h.sz_cpr < h.sz_unc) { // Decompress block
nrv_uint out_len = h.sz_unc; // EOF for lzma
int const j = (*f_decompress)(xi->buf, h.sz_cpr,
xo->buf, &out_len, h.b_method);
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
err_exit(7);
if (h.b_ftid!=0 && f_unf) { // have filter
(*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
}
xi->buf += h.sz_cpr;
xi->size -= h.sz_cpr;
}
else { // copy literal block
xread(xi, xo->buf, h.sz_cpr);
}
xo->buf += h.sz_unc;
xo->size -= h.sz_unc;
}
}
static void
upx_bzero(unsigned char *p, size_t len)
{
if (len) do {
*p++= 0;
} while (--len);
}
#define bzero upx_bzero
// The PF_* and PROT_* bits are {1,2,4}; the conversion table fits in 32 bits.
#define REP8(x) \
((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28))
#define EXP8(y) \
((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0)
#define PF_TO_PROT(pf) \
((PROT_READ|PROT_WRITE|PROT_EXEC) & ( \
( (REP8(PROT_EXEC ) & EXP8(PF_X)) \
|(REP8(PROT_READ ) & EXP8(PF_R)) \
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
typedef struct {
unsigned magic;
unsigned nfat_arch;
} Fat_header;
typedef struct {
unsigned cputype;
unsigned cpusubtype;
unsigned offset;
unsigned size;
unsigned align; /* shift count (log base 2) */
} Fat_arch;
enum e8 {
FAT_MAGIC = 0xcafebabe
};
enum e9 {
CPU_TYPE_I386 = 7,
CPU_TYPE_ARM = 12,
CPU_TYPE_POWERPC = 0x00000012,
CPU_TYPE_POWERPC64 = 0x01000012
};
typedef struct {
unsigned magic;
unsigned cputype;
unsigned cpysubtype;
unsigned filetype;
unsigned ncmds;
unsigned sizeofcmds;
unsigned flags;
} Mach_header;
enum e0 {
MH_MAGIC = 0xfeedface
};
enum e2 {
MH_EXECUTE = 2
};
enum e3 {
MH_NOUNDEFS = 1
};
typedef struct {
unsigned cmd;
unsigned cmdsize;
} Mach_load_command;
enum e4 {
LC_SEGMENT = 0x1,
LC_SEGMENT_64 = 0x19,
LC_THREAD = 0x4,
LC_UNIXTHREAD = 0x5,
LC_LOAD_DYLINKER = 0xe
};
typedef struct {
unsigned cmd;
unsigned cmdsize;
char segname[16];
unsigned long vmaddr;
unsigned long vmsize;
unsigned long fileoff;
unsigned long filesize;
unsigned maxprot;
unsigned initprot;
unsigned nsects;
unsigned flags;
} Mach_segment_command;
enum e5 {
VM_PROT_READ = 1,
VM_PROT_WRITE = 2,
VM_PROT_EXECUTE = 4
};
typedef struct {
unsigned long x0, x1, x2, x3;
unsigned long x4, x5, x6, x7;
unsigned long x8, x9, x10, x11;
unsigned long x12, x13, x14, x15;
unsigned long x16, x17, x18, x19;
unsigned long x20, x21, x22, x23;
unsigned long x24, x25, x26, x27;
unsigned long x28, fp, lr, sp;
unsigned long pc;
unsigned int cpsr;
} Mach_ARM_thread_state;
typedef struct {
unsigned cmd; /* LC_THREAD or LC_UNIXTHREAD */
unsigned cmdsize; /* total size of this command */
unsigned flavor;
unsigned count; /* sizeof(following_thread_state)/4 */
Mach_ARM_thread_state state;
} Mach_thread_command;
enum e6 {
ARM_THREAD_STATE = 1
};
enum e7 {
ARM_THREAD_STATE_COUNT = sizeof(Mach_ARM_thread_state)/4
};
typedef union {
unsigned long offset; /* from start of load command to string */
char *ptr;
} Mach_lc_str;
#define MAP_FIXED 0x10
#define MAP_PRIVATE 0x02
#define MAP_ANON 0x1000
//#define MAP_ANON 0x20 // x86 DEBUG ONLY
#define PROT_READ 1
#define PROT_WRITE 2
#define PROT_EXEC 4
#define MAP_ANON_FD -1
extern void *mmap(void *, size_t, unsigned, unsigned, int, off_t_upx_stub);
ssize_t pread(int, void *, size_t, off_t_upx_stub);
extern void bswap(void *, unsigned);
static Mach_ARM_thread_state const *
do_xmap(
Mach_header const *const mhdr,
off_t_upx_stub const fat_offset,
Extent *const xi,
int const fdi,
Mach_header **mhdrpp,
f_expand *const f_decompress,
f_unfilter *const f_unf
)
{
Mach_segment_command const *sc = (Mach_segment_command const *)(1+ mhdr);
Mach_ARM_thread_state const *entry = 0;
unsigned j;
for ( j=0; j < mhdr->ncmds; ++j,
(sc = (Mach_segment_command const *)(sc->cmdsize + (void const *)sc))
) if (LC_SEGMENT_64==sc->cmd && sc->vmsize!=0) {
Extent xo;
size_t mlen = xo.size = sc->filesize;
unsigned char *addr = xo.buf = (unsigned char *)sc->vmaddr;
unsigned char *haddr = sc->vmsize + addr;
size_t frag = (size_t)addr &~ PAGE_MASK;
addr -= frag;
mlen += frag;
if (0!=mlen && addr != mmap(addr, mlen, VM_PROT_READ | VM_PROT_WRITE,
MAP_FIXED | MAP_PRIVATE |
((xi || 0==sc->filesize) ? MAP_ANON : 0),
((0==sc->filesize) ? MAP_ANON_FD : fdi), sc->fileoff + fat_offset) ) {
err_exit(8);
}
if (xi && 0!=sc->filesize) {
if (0==sc->fileoff /*&& 0!=mhdrpp*/) {
*mhdrpp = (Mach_header *)(void *)addr;
}
unpackExtent(xi, &xo, f_decompress, f_unf);
}
/*bzero(addr, frag);*/ // fragment at lo end
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
bzero(mlen+addr, frag); // fragment at hi end
if (0!=mlen && 0!=mprotect(addr, mlen, sc->initprot)) {
err_exit(10);
ERR_LAB
}
addr += mlen + frag; /* page boundary on hi end */
if (
#if defined(SIMULATE_ON_DEBIAN_EABI4) /*{*/
0!=addr &&
#endif /*}*/
addr < haddr) { // need pages for .bss
if (addr != mmap(addr, haddr - addr, sc->initprot,
MAP_FIXED | MAP_PRIVATE | MAP_ANON, MAP_ANON_FD, 0 ) ) {
err_exit(9);
}
}
}
else if (LC_UNIXTHREAD==sc->cmd || LC_THREAD==sc->cmd) {
Mach_thread_command const *const thrc = (Mach_thread_command const *)sc;
if (ARM_THREAD_STATE ==thrc->flavor
&& ARM_THREAD_STATE_COUNT==thrc->count ) {
entry = &thrc->state;
}
}
return entry;
}
extern void spin(void *, ...);
/*************************************************************************
// upx_main - called by our entry code
//
**************************************************************************/
Mach_ARM_thread_state const *
upx_main(
struct l_info const *const li,
size_t volatile sz_compressed, // total length
Mach_header *const mhdr, // temp char[sz_mhdr] for decompressing
size_t const sz_mhdr,
f_expand *const f_decompress,
f_unfilter *const f_unf,
Mach_header **const mhdrpp // Out: *mhdrpp= &real Mach_header
)
{
Mach_ARM_thread_state const *entry;
off_t_upx_stub fat_offset = 0;
Extent xi, xo, xi0;
xi.buf = CONST_CAST(unsigned char *, 1+ (struct p_info const *)(1+ li)); // &b_info
xi.size = sz_compressed - (sizeof(struct l_info) + sizeof(struct p_info));
xo.buf = (unsigned char *)mhdr;
xo.size = ((struct b_info const *)(void const *)xi.buf)->sz_unc;
xi0 = xi;
// Uncompress Macho headers
unpackExtent(&xi, &xo, f_decompress, 0); // never filtered?
entry = do_xmap(mhdr, fat_offset, &xi0, MAP_ANON_FD, mhdrpp, f_decompress, f_unf);
{ // Map dyld dynamic loader
Mach_load_command const *lc = (Mach_load_command const *)(1+ mhdr);
unsigned j;
for (j=0; j < mhdr->ncmds; ++j,
(lc = (Mach_load_command const *)(lc->cmdsize + (void const *)lc))
) if (LC_LOAD_DYLINKER==lc->cmd) {
char const *const dyld_name = ((Mach_lc_str const *)(1+ lc))->offset +
(char const *)lc;
int const fdi = open(dyld_name, O_RDONLY, 0);
if (0 > fdi) {
err_exit(18);
}
fat:
if ((ssize_t)sz_mhdr!=pread(fdi, (void *)mhdr, sz_mhdr, fat_offset)) {
ERR_LAB
err_exit(19);
}
switch (mhdr->magic) {
case MH_MAGIC: break;
case FAT_MAGIC: {
// stupid Apple: waste code and a page fault on EVERY execve
Fat_header *const fh = (Fat_header *)mhdr;
Fat_arch *fa = (Fat_arch *)(1+ fh);
bswap(fh, sizeof(*fh) + (fh->nfat_arch>>24)*sizeof(*fa));
for (j= 0; j < fh->nfat_arch; ++j, ++fa) {
if (CPU_TYPE_ARM==fa->cputype) {
fat_offset= fa->offset;
goto fat;
}
}
} break;
} // switch
entry = do_xmap(mhdr, fat_offset, 0, fdi, 0, 0, 0);
close(fdi);
break;
}
}
return entry;
}
/* vim:set ts=4 sw=4 et: */

View File

@ -72,7 +72,7 @@ LOAD tmp/amd64-darwin.macho-main.o
.plt .plt
*(.plt) *(.plt)
.text 0x0000000008048000 0x6e0 .text 0x0000000008048000 0xe32
*(.text .stub .text.* .gnu.linkonce.t.*) *(.text .stub .text.* .gnu.linkonce.t.*)
.text 0x0000000008048000 0x157 tmp/amd64-darwin.macho-fold.o .text 0x0000000008048000 0x157 tmp/amd64-darwin.macho-fold.o
0x00000000080480b8 munmap 0x00000000080480b8 munmap
@ -87,17 +87,17 @@ LOAD tmp/amd64-darwin.macho-main.o
0x00000000080480b4 mprotect 0x00000000080480b4 mprotect
0x00000000080480c0 close 0x00000000080480c0 close
*fill* 0x0000000008048157 0x1 90909090 *fill* 0x0000000008048157 0x1 90909090
.text 0x0000000008048158 0x588 tmp/amd64-darwin.macho-main.o .text 0x0000000008048158 0xcda tmp/amd64-darwin.macho-main.o
0x0000000008048294 do_xmap 0x000000000804875f do_xmap
0x0000000008048558 upx_main 0x0000000008048be3 upx_main
*(.text.*personality*) *(.text.*personality*)
*(.gnu.warning) *(.gnu.warning)
.fini .fini
*(.fini) *(.fini)
0x00000000080486e0 PROVIDE (__etext, .) 0x0000000008048e32 PROVIDE (__etext, .)
0x00000000080486e0 PROVIDE (_etext, .) 0x0000000008048e32 PROVIDE (_etext, .)
0x00000000080486e0 PROVIDE (etext, .) 0x0000000008048e32 PROVIDE (etext, .)
.rodata .rodata
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
@ -113,8 +113,8 @@ LOAD tmp/amd64-darwin.macho-main.o
.gcc_except_table .gcc_except_table
*(.gcc_except_table .gcc_except_table.*) *(.gcc_except_table .gcc_except_table.*)
0x00000000080486e0 . = (ALIGN (0x1000) - ((0x1000 - .) & 0xfff)) 0x0000000008048e32 . = (ALIGN (0x1000) - ((0x1000 - .) & 0xfff))
0x00000000080496e0 . = (0x1000 DATA_SEGMENT_ALIGN 0x1000) 0x0000000008049e32 . = (0x1000 DATA_SEGMENT_ALIGN 0x1000)
.eh_frame .eh_frame
*(.eh_frame) *(.eh_frame)
@ -129,22 +129,22 @@ LOAD tmp/amd64-darwin.macho-main.o
*(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon) *(.tcommon)
.preinit_array 0x00000000080496e0 0x0 .preinit_array 0x0000000008049e32 0x0
0x00000000080496e0 PROVIDE (__preinit_array_start, .) 0x0000000008049e32 PROVIDE (__preinit_array_start, .)
*(.preinit_array) *(.preinit_array)
0x00000000080496e0 PROVIDE (__preinit_array_end, .) 0x0000000008049e32 PROVIDE (__preinit_array_end, .)
.init_array 0x00000000080496e0 0x0 .init_array 0x0000000008049e32 0x0
0x00000000080496e0 PROVIDE (__init_array_start, .) 0x0000000008049e32 PROVIDE (__init_array_start, .)
*(SORT(.init_array.*)) *(SORT(.init_array.*))
*(.init_array) *(.init_array)
0x00000000080496e0 PROVIDE (__init_array_end, .) 0x0000000008049e32 PROVIDE (__init_array_end, .)
.fini_array 0x00000000080496e0 0x0 .fini_array 0x0000000008049e32 0x0
0x00000000080496e0 PROVIDE (__fini_array_start, .) 0x0000000008049e32 PROVIDE (__fini_array_start, .)
*(.fini_array) *(.fini_array)
*(SORT(.fini_array.*)) *(SORT(.fini_array.*))
0x00000000080496e0 PROVIDE (__fini_array_end, .) 0x0000000008049e32 PROVIDE (__fini_array_end, .)
.ctors .ctors
*crtbegin*.o(.ctors) *crtbegin*.o(.ctors)
@ -170,35 +170,35 @@ LOAD tmp/amd64-darwin.macho-main.o
.got .got
*(.got) *(.got)
0x00000000080496e0 . = (. DATA_SEGMENT_RELRO_END 0xc) 0x0000000008049e32 . = (. DATA_SEGMENT_RELRO_END 0xc)
.got.plt .got.plt
*(.got.plt) *(.got.plt)
.data 0x00000000080496e0 0x0 .data 0x0000000008049e34 0x0
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
.data 0x00000000080496e0 0x0 tmp/amd64-darwin.macho-fold.o .data 0x0000000008049e34 0x0 tmp/amd64-darwin.macho-fold.o
.data 0x00000000080496e0 0x0 tmp/amd64-darwin.macho-main.o .data 0x0000000008049e34 0x0 tmp/amd64-darwin.macho-main.o
*(.gnu.linkonce.d.*personality*) *(.gnu.linkonce.d.*personality*)
.data1 .data1
*(.data1) *(.data1)
0x00000000080496e0 _edata = . 0x0000000008049e34 _edata = .
0x00000000080496e0 PROVIDE (edata, .) 0x0000000008049e34 PROVIDE (edata, .)
0x00000000080496e0 __bss_start = . 0x0000000008049e34 __bss_start = .
.bss 0x00000000080496e0 0x0 .bss 0x0000000008049e34 0x0
*(.dynbss) *(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x00000000080496e0 0x0 tmp/amd64-darwin.macho-fold.o .bss 0x0000000008049e34 0x0 tmp/amd64-darwin.macho-fold.o
.bss 0x00000000080496e0 0x0 tmp/amd64-darwin.macho-main.o .bss 0x0000000008049e34 0x0 tmp/amd64-darwin.macho-main.o
*(COMMON) *(COMMON)
0x00000000080496e0 . = ALIGN ((. != 0x0)?0x4:0x1) 0x0000000008049e34 . = ALIGN ((. != 0x0)?0x4:0x1)
0x00000000080496e0 . = ALIGN (0x4) 0x0000000008049e34 . = ALIGN (0x4)
0x00000000080496e0 . = ALIGN (0x4) 0x0000000008049e34 . = ALIGN (0x4)
0x00000000080496e0 _end = . 0x0000000008049e34 _end = .
0x00000000080496e0 PROVIDE (end, .) 0x0000000008049e34 PROVIDE (end, .)
0x00000000080496e0 . = DATA_SEGMENT_END (.) 0x0000000008049e34 . = DATA_SEGMENT_END (.)
.stab .stab
*(.stab) *(.stab)

View File

@ -2,18 +2,18 @@ file format elf64-littleaarch64
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 MACHMAINX 00000044 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY 0 MACHMAINX 00000008 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY 1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000048 2**0 CONTENTS, READONLY
2 NRV2E 00000128 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY 2 NRV2E 00000128 0000000000000000 0000000000000000 00000048 2**0 CONTENTS, READONLY
3 NRV2D 0000011c 0000000000000000 0000000000000000 000001ac 2**0 CONTENTS, READONLY 3 NRV2D 0000011c 0000000000000000 0000000000000000 00000170 2**0 CONTENTS, READONLY
4 NRV2B 000000f0 0000000000000000 0000000000000000 000002c8 2**0 CONTENTS, READONLY 4 NRV2B 000000f0 0000000000000000 0000000000000000 0000028c 2**0 CONTENTS, READONLY
5 NRV_TAIL 00000000 0000000000000000 0000000000000000 000003b8 2**0 CONTENTS, READONLY 5 NRV_TAIL 00000000 0000000000000000 0000000000000000 0000037c 2**0 CONTENTS, READONLY
6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 000003b8 2**0 CONTENTS, RELOC, READONLY 6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 0000037c 2**0 CONTENTS, RELOC, READONLY
7 LZMA_DEC20 00000968 0000000000000000 0000000000000000 00000488 2**0 CONTENTS, READONLY 7 LZMA_DEC20 00000968 0000000000000000 0000000000000000 0000044c 2**0 CONTENTS, READONLY
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000df0 2**0 CONTENTS, READONLY 8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000db4 2**0 CONTENTS, READONLY
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, READONLY 9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 00001250 2**0 CONTENTS, READONLY
10 MACHMAINY 00000000 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, READONLY 10 MACHMAINY 00000000 0000000000000000 0000000000000000 00001250 2**0 CONTENTS, READONLY
11 MACHMAINZ 00000160 0000000000000000 0000000000000000 0000128c 2**0 CONTENTS, RELOC, READONLY 11 MACHMAINZ 00000158 0000000000000000 0000000000000000 00001250 2**0 CONTENTS, RELOC, READONLY
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30 0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ 0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ
@ -36,7 +36,7 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR [MACHMAINX]: RELOCATION RECORDS FOR [MACHMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000040 R_AARCH64_CALL26 MACHMAINZ+0x00000000000000e8 0000000000000004 R_AARCH64_CALL26 MACHMAINZ+0x00000000000000dc
RELOCATION RECORDS FOR [LZMA_ELF00]: RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
@ -44,4 +44,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [MACHMAINZ]: RELOCATION RECORDS FOR [MACHMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000138 R_AARCH64_ADR_PREL_LO21 _start-0x0000000000000008 0000000000000130 R_AARCH64_ADR_PREL_LO21 _start-0x0000000000000008

View File

@ -67,35 +67,36 @@ LOAD tmp/arm64-darwin.macho-main.o
*(.iplt) *(.iplt)
.iplt 0x0000000000400080 0x0 tmp/arm64-darwin.macho-fold.o .iplt 0x0000000000400080 0x0 tmp/arm64-darwin.macho-fold.o
.text 0x0000000000400078 0x680 .text 0x0000000000400078 0xf6c
*(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*) *(.text.exit .text.exit.*)
*(.text.startup .text.startup.*) *(.text.startup .text.startup.*)
*(.text.hot .text.hot.*) *(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*) *(.text .stub .text.* .gnu.linkonce.t.*)
.text 0x0000000000400078 0x160 tmp/arm64-darwin.macho-fold.o .text 0x0000000000400078 0x15c tmp/arm64-darwin.macho-fold.o
0x0000000000400078 _start 0x0000000000400078 _start
0x0000000000400134 spin 0x000000000040012c spin
0x0000000000400138 exit 0x0000000000400130 exit
0x0000000000400140 read 0x0000000000400138 read
0x000000000040014c write 0x0000000000400144 write
0x0000000000400158 open 0x0000000000400150 open
0x0000000000400164 close 0x0000000000400160 close
0x0000000000400170 brk 0x000000000040016c brk
0x000000000040017c munmap 0x0000000000400178 munmap
0x0000000000400188 mprotect 0x0000000000400184 mprotect
0x0000000000400194 mmap 0x0000000000400190 mmap
0x00000000004001a0 pread 0x000000000040019c pread
0x00000000004001ac bswap 0x00000000004001a8 bswap
.text 0x00000000004001d8 0x520 tmp/arm64-darwin.macho-main.o .text 0x00000000004001d4 0xe10 tmp/arm64-darwin.macho-main.o
0x0000000000400550 upx_main 0x000000000040089c do_xmap
0x0000000000400d4c upx_main
*(.gnu.warning) *(.gnu.warning)
.fini .fini
*(SORT(.fini)) *(SORT(.fini))
0x00000000004006f8 PROVIDE (__etext, .) 0x0000000000400fe4 PROVIDE (__etext, .)
0x00000000004006f8 PROVIDE (_etext, .) 0x0000000000400fe4 PROVIDE (_etext, .)
0x00000000004006f8 PROVIDE (etext, .) 0x0000000000400fe4 PROVIDE (etext, .)
.rodata .rodata
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
@ -106,18 +107,18 @@ LOAD tmp/arm64-darwin.macho-main.o
.eh_frame_hdr .eh_frame_hdr
*(.eh_frame_hdr) *(.eh_frame_hdr)
.eh_frame 0x00000000004006f8 0x100 .eh_frame 0x0000000000400fe8 0x1b8
*(.eh_frame) *(.eh_frame)
.eh_frame 0x00000000004006f8 0x100 tmp/arm64-darwin.macho-main.o .eh_frame 0x0000000000400fe8 0x1b8 tmp/arm64-darwin.macho-main.o
0xf8 (size before relaxing) 0x1a8 (size before relaxing)
.gcc_except_table .gcc_except_table
*(.gcc_except_table .gcc_except_table.*) *(.gcc_except_table .gcc_except_table.*)
.exception_ranges .exception_ranges
*(.exception_ranges .exception_ranges*) *(.exception_ranges .exception_ranges*)
0x00000000004007f8 . = (ALIGN (0x10000) - ((0x10000 - .) & 0xffff)) 0x00000000004011a0 . = (ALIGN (0x10000) - ((0x10000 - .) & 0xffff))
0x00000000004107f8 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000) 0x00000000004111a0 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000)
.eh_frame .eh_frame
*(.eh_frame) *(.eh_frame)
@ -135,22 +136,22 @@ LOAD tmp/arm64-darwin.macho-main.o
*(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon) *(.tcommon)
.preinit_array 0x00000000004107f8 0x0 .preinit_array 0x00000000004111a0 0x0
0x00000000004107f8 PROVIDE (__preinit_array_start, .) 0x00000000004111a0 PROVIDE (__preinit_array_start, .)
*(.preinit_array) *(.preinit_array)
0x00000000004107f8 PROVIDE (__preinit_array_end, .) 0x00000000004111a0 PROVIDE (__preinit_array_end, .)
.init_array 0x00000000004107f8 0x0 .init_array 0x00000000004111a0 0x0
0x00000000004107f8 PROVIDE (__init_array_start, .) 0x00000000004111a0 PROVIDE (__init_array_start, .)
*(SORT(.init_array.*)) *(SORT(.init_array.*))
*(.init_array) *(.init_array)
0x00000000004107f8 PROVIDE (__init_array_end, .) 0x00000000004111a0 PROVIDE (__init_array_end, .)
.fini_array 0x00000000004107f8 0x0 .fini_array 0x00000000004111a0 0x0
0x00000000004107f8 PROVIDE (__fini_array_start, .) 0x00000000004111a0 PROVIDE (__fini_array_start, .)
*(SORT(.fini_array.*)) *(SORT(.fini_array.*))
*(.fini_array) *(.fini_array)
0x00000000004107f8 PROVIDE (__fini_array_end, .) 0x00000000004111a0 PROVIDE (__fini_array_end, .)
.ctors .ctors
*crtbegin.o(.ctors) *crtbegin.o(.ctors)
@ -179,43 +180,43 @@ LOAD tmp/arm64-darwin.macho-main.o
.got .got
*(.got) *(.got)
*(.igot) *(.igot)
0x00000000004107f8 . = DATA_SEGMENT_RELRO_END (., 0x18) 0x00000000004111a0 . = DATA_SEGMENT_RELRO_END (., 0x18)
.got.plt 0x00000000004107f8 0x0 .got.plt 0x00000000004111a0 0x0
*(.got.plt) *(.got.plt)
*(.igot.plt) *(.igot.plt)
.igot.plt 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o .igot.plt 0x00000000004111a0 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x00000000004107f8 0x0 .data 0x00000000004111a0 0x0
0x00000000004107f8 PROVIDE (__data_start, .) 0x00000000004111a0 PROVIDE (__data_start, .)
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
.data 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o .data 0x00000000004111a0 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-main.o .data 0x00000000004111a0 0x0 tmp/arm64-darwin.macho-main.o
.data1 .data1
*(.data1) *(.data1)
0x00000000004107f8 _edata = . 0x00000000004111a0 _edata = .
0x00000000004107f8 PROVIDE (edata, .) 0x00000000004111a0 PROVIDE (edata, .)
0x00000000004107f8 . = . 0x00000000004111a0 . = .
0x00000000004107f8 __bss_start = . 0x00000000004111a0 __bss_start = .
0x00000000004107f8 __bss_start__ = . 0x00000000004111a0 __bss_start__ = .
.bss 0x00000000004107f8 0x0 .bss 0x00000000004111a0 0x0
*(.dynbss) *(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o .bss 0x00000000004111a0 0x0 tmp/arm64-darwin.macho-fold.o
.bss 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-main.o .bss 0x00000000004111a0 0x0 tmp/arm64-darwin.macho-main.o
*(COMMON) *(COMMON)
0x00000000004107f8 . = ALIGN ((. != 0x0)?0x8:0x1) 0x00000000004111a0 . = ALIGN ((. != 0x0)?0x8:0x1)
0x00000000004107f8 _bss_end__ = . 0x00000000004111a0 _bss_end__ = .
0x00000000004107f8 __bss_end__ = . 0x00000000004111a0 __bss_end__ = .
0x00000000004107f8 . = ALIGN (0x8) 0x00000000004111a0 . = ALIGN (0x8)
0x00000000004107f8 . = SEGMENT_START ("ldata-segment", .) 0x00000000004111a0 . = SEGMENT_START ("ldata-segment", .)
0x00000000004107f8 . = ALIGN (0x8) 0x00000000004111a0 . = ALIGN (0x8)
0x00000000004107f8 __end__ = . 0x00000000004111a0 __end__ = .
0x00000000004107f8 _end = . 0x00000000004111a0 _end = .
0x00000000004107f8 PROVIDE (end, .) 0x00000000004111a0 PROVIDE (end, .)
0x00000000004107f8 . = DATA_SEGMENT_END (.) 0x00000000004111a0 . = DATA_SEGMENT_END (.)
.stab .stab
*(.stab) *(.stab)