ELF2: arm32 shared libraries; runs on Android 14 under TermUX

NYI: complex DT_INIT (R_RELR, etc.)
	modified:   p_lx_elf.cpp
	modified:   p_lx_elf.h
	modified:   stub/src/arm.v4a-expand.S
	modified:   stub/src/arm.v4a-linux.elf-entry.S
	modified:   stub/src/arm.v4a-linux.elf-so_entry.S
	modified:   stub/src/arm.v4a-linux.elf-so_fold.S
	modified:   stub/src/i386-linux.elf-main2.c
	modified:   stub/src/i386-linux.elf-so_main.c
	modified:   stub/src/upxfd_android.c
           plus generated *.h *.map *.dump
This commit is contained in:
John Reiser 2024-08-09 13:03:26 -07:00
parent 5d5f4d1765
commit 94eebc3ee5
37 changed files with 21229 additions and 18892 deletions

View File

@ -1485,6 +1485,7 @@ PackLinuxElf32::buildLinuxLoader(
}
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SO_TAIL,SO_MAIN");
(void)len; // Pacify the anal-retentive static analyzer which hates a good idiom.
NO_printf("%s\n", sec);
addLoader(sec, nullptr);
relocateLoader();
{
@ -1521,8 +1522,8 @@ PackLinuxElf32::buildLinuxLoader(
"LZMA_DAISY,LZMA_ELF00,LZMA_DEC20,LZMA_DEC30");
}
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SYSCALLS");
//fprintf(stderr, "%s\n", sec);
(void)len;
NO_printf("%s\n", sec);
addLoader(sec, nullptr);
relocateLoader();
{
@ -1645,6 +1646,7 @@ PackLinuxElf64::buildLinuxLoader(
}
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SO_TAIL,SO_MAIN");
(void)len;
NO_printf("\n%s\n", sec);
addLoader(sec, nullptr);
relocateLoader();
{
@ -1679,6 +1681,7 @@ PackLinuxElf64::buildLinuxLoader(
}
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SYSCALLS");
(void)len;
NO_printf("\n%s\n", sec);
addLoader(sec, nullptr);
relocateLoader();
{
@ -2656,6 +2659,161 @@ PackLinuxElf32::canPackOSABI(Elf32_Ehdr const *ehdr)
return true; // good so far
}
#define WANT_SHDR_ENUM
#include "p_elf_enum.h"
#undef WANT_SHDR_ENUM
upx_uint64_t PackLinuxElf32::canPack_Shdr(Elf32_Phdr const *pload_x0)
{
Elf32_Shdr const *shdr_xva = nullptr;
Elf32_Shdr const *shdr = shdri;
for (int j= e_shnum; --j>=0; ++shdr) {
unsigned const sh_type = get_te32(&shdr->sh_type);
if (Elf32_Shdr::SHF_EXECINSTR & get_te32(&shdr->sh_flags)) {
shdr_xva = shdr;
xct_va = umin((unsigned) xct_va, get_te32(&shdr->sh_addr));
}
// Hook the first slot of DT_PREINIT_ARRAY or DT_INIT_ARRAY.
if (!user_init_rp && (
( Elf32_Dyn::DT_PREINIT_ARRAY==upx_dt_init
&& Elf32_Shdr::SHT_PREINIT_ARRAY==sh_type)
|| ( Elf32_Dyn::DT_INIT_ARRAY ==upx_dt_init
&& Elf32_Shdr::SHT_INIT_ARRAY ==sh_type) )) {
unsigned user_init_ava = get_te32(&shdr->sh_addr);
user_init_off = get_te32(&shdr->sh_offset);
if ((u32_t)file_size <= user_init_off) {
char msg[70]; snprintf(msg, sizeof(msg),
"bad Elf32_Shdr[%d].sh_offset %#x",
-1+ e_shnum - j, user_init_off);
throwCantPack(msg);
}
// Check that &file_image[user_init_off] has
// *_RELATIVE or *_ABS* relocation, and fetch user_init_va.
// If Elf32_Rela then the actual value is in Rela.r_addend.
int z_rel = dt_table[Elf32_Dyn::DT_REL];
int z_rsz = dt_table[Elf32_Dyn::DT_RELSZ];
if (z_rel && z_rsz) {
unsigned rel_off = get_te32(&dynseg[-1+ z_rel].d_val);
if ((unsigned)file_size <= rel_off) {
char msg[70]; snprintf(msg, sizeof(msg),
"bad Elf32_Dynamic[DT_REL] %#x\n",
rel_off);
throwCantPack(msg);
}
Elf32_Rel *rp = (Elf32_Rel *)&file_image[rel_off];
unsigned relsz = get_te32(&dynseg[-1+ z_rsz].d_val);
if ((unsigned)file_size <= relsz) {
char msg[70]; snprintf(msg, sizeof(msg),
"bad Elf32_Dynamic[DT_RELSZ] %#x\n",
relsz);
throwCantPack(msg);
}
Elf32_Rel *last = (Elf32_Rel *)(relsz + (char *)rp);
for (; rp < last; ++rp) {
unsigned r_va = get_te32(&rp->r_offset);
if (r_va == user_init_ava) { // found the Elf32_Rel
user_init_rp = rp;
unsigned r_info = get_te32(&rp->r_info);
unsigned r_type = ELF32_R_TYPE(r_info);
set_te32(&dynsym[0].st_name, r_va); // for decompressor
set_te32(&dynsym[0].st_value, r_info);
if (Elf32_Ehdr::EM_ARM == e_machine) {
if (R_ARM_RELATIVE == r_type) {
user_init_va = get_te32(&file_image[user_init_off]);
}
else if (R_ARM_ABS32 == r_type) {
unsigned symj = ELF32_R_SYM(r_info);
user_init_va = get_te32(&dynsym[symj].st_value);
set_te32(&rp->r_info, ELF32_R_INFO(0, R_ARM_RELATIVE));
// pack3() will set &file_image[user_init_off]
}
else {
goto bad;
}
}
else if (Elf32_Ehdr::EM_386 == e_machine) {
if (R_386_RELATIVE == r_type) {
user_init_va = get_te32(&file_image[user_init_off]);
}
else if (R_386_32 == r_type) {
unsigned symj = ELF32_R_SYM(r_info);
user_init_va = get_te32(&dynsym[symj].st_value);
set_te32(&rp->r_info, ELF32_R_INFO(0, R_386_RELATIVE));
// pack3() will set &file_image[user_init_off]
}
else {
goto bad;
}
}
else {
bad:
char msg[50]; snprintf(msg, sizeof(msg),
"bad relocation %#x DT_INIT_ARRAY[0]",
r_info);
throwCantPack(msg);
}
break;
}
}
}
unsigned const p_filesz = get_te32(&pload_x0->p_filesz);
if (!((user_init_va - xct_va) < p_filesz)) {
// Not in executable portion of first executable PT_LOAD.
if (0==user_init_va && opt->o_unix.android_shlib) {
// Android allows (0 ==> skip) ?
upx_dt_init = 0; // force steal of 'extra' DT_NULL
// XXX: FIXME: depends on SHT_DYNAMIC coming later
}
else {
char msg[70]; snprintf(msg, sizeof(msg),
"bad init address %#x in Elf32_Shdr[%d].%#x\n",
(unsigned)user_init_va, -1+ e_shnum - j, user_init_off);
throwCantPack(msg);
}
}
}
// By default /usr/bin/ld leaves 4 extra DT_NULL to support pre-linking.
// Take one as a last resort.
if ((Elf32_Dyn::DT_INIT==upx_dt_init || !upx_dt_init)
&& Elf32_Shdr::SHT_DYNAMIC == sh_type) {
unsigned sh_offset = get_te32(&shdr->sh_offset);
unsigned sh_size = get_te32(&shdr->sh_size);
if ((unsigned)file_size < sh_size
|| (unsigned)file_size < sh_offset
|| ((unsigned)file_size - sh_offset) < sh_size) {
throwCantPack("bad SHT_DYNAMIC");
}
unsigned const n = get_te32(&shdr->sh_size) / sizeof(Elf32_Dyn);
Elf32_Dyn *dynp = (Elf32_Dyn *)&file_image[get_te32(&shdr->sh_offset)];
for (; Elf32_Dyn::DT_NULL != dynp->d_tag; ++dynp) {
if (upx_dt_init == get_te32(&dynp->d_tag)) {
break; // re-found DT_INIT
}
}
if ((1+ dynp) < (n+ dynseg)) { // not the terminator, so take it
user_init_va = get_te32(&dynp->d_val); // 0 if (0==upx_dt_init)
set_te32(&dynp->d_tag, upx_dt_init = Elf32_Dyn::DT_INIT);
user_init_off = (char const *)&dynp->d_val - (char const *)&file_image[0];
}
}
}
// If shdr_xva->sh_size is too small, then probably it won't compress.
// So look for a Shdr that has PROGBITS and not SHF_WRITE, which is
// much larger, and use that for the compressibility decision.
if (shdr_xva->sh_size < 0x1000) {
shdr = shdr_xva;
while (SHT_PROGBITS == get_te32(&shdr[-1].sh_type)) --shdr; // backup
for (; SHT_PROGBITS == get_te32(&shdr->sh_type)
&& !(SHF_WRITE & get_te32(&shdr->sh_flags)); ++shdr) {
if (0x4000 <= get_te32(&shdr->sh_size)) {
xct_va = get_te32(&shdr->sh_addr); // hopefully more compressible
break;
}
}
}
return xct_va;
}
tribool PackLinuxElf32::canPack()
{
union {
@ -2889,138 +3047,9 @@ tribool PackLinuxElf32::canPack()
|| Elf32_Ehdr::EM_PPC == get_te16(&ehdr->e_machine)) {
throwCantPack("This test UPX cannot pack .so for MIPS or PowerPC; coming soon.");
}
Elf32_Shdr const *shdr = shdri;
xct_va = ~0u;
xct_va = ~(upx_uint64_t)0;
if (e_shnum) {
for (int j= e_shnum; --j>=0; ++shdr) {
unsigned const sh_type = get_te32(&shdr->sh_type);
if (Elf32_Shdr::SHF_EXECINSTR & get_te32(&shdr->sh_flags)) {
xct_va = umin((unsigned) xct_va, get_te32(&shdr->sh_addr));
}
// Hook the first slot of DT_PREINIT_ARRAY or DT_INIT_ARRAY.
if (!user_init_rp && (
( Elf32_Dyn::DT_PREINIT_ARRAY==upx_dt_init
&& Elf32_Shdr::SHT_PREINIT_ARRAY==sh_type)
|| ( Elf32_Dyn::DT_INIT_ARRAY ==upx_dt_init
&& Elf32_Shdr::SHT_INIT_ARRAY ==sh_type) )) {
unsigned user_init_ava = get_te32(&shdr->sh_addr);
user_init_off = get_te32(&shdr->sh_offset);
if ((u32_t)file_size <= user_init_off) {
char msg[70]; snprintf(msg, sizeof(msg),
"bad Elf32_Shdr[%d].sh_offset %#x",
-1+ e_shnum - j, user_init_off);
throwCantPack(msg);
}
// Check that &file_image[user_init_off] has
// *_RELATIVE or *_ABS* relocation, and fetch user_init_va.
// If Elf32_Rela then the actual value is in Rela.r_addend.
int z_rel = dt_table[Elf32_Dyn::DT_REL];
int z_rsz = dt_table[Elf32_Dyn::DT_RELSZ];
if (z_rel && z_rsz) {
unsigned rel_off = get_te32(&dynseg[-1+ z_rel].d_val);
if ((unsigned)file_size <= rel_off) {
char msg[70]; snprintf(msg, sizeof(msg),
"bad Elf32_Dynamic[DT_REL] %#x\n",
rel_off);
throwCantPack(msg);
}
Elf32_Rel *rp = (Elf32_Rel *)&file_image[rel_off];
unsigned relsz = get_te32(&dynseg[-1+ z_rsz].d_val);
if ((unsigned)file_size <= relsz) {
char msg[70]; snprintf(msg, sizeof(msg),
"bad Elf32_Dynamic[DT_RELSZ] %#x\n",
relsz);
throwCantPack(msg);
}
Elf32_Rel *last = (Elf32_Rel *)(relsz + (char *)rp);
for (; rp < last; ++rp) {
unsigned r_va = get_te32(&rp->r_offset);
if (r_va == user_init_ava) { // found the Elf32_Rel
user_init_rp = rp;
unsigned r_info = get_te32(&rp->r_info);
unsigned r_type = ELF32_R_TYPE(r_info);
set_te32(&dynsym[0].st_name, r_va); // for decompressor
set_te32(&dynsym[0].st_value, r_info);
if (Elf32_Ehdr::EM_ARM == e_machine) {
if (R_ARM_RELATIVE == r_type) {
user_init_va = get_te32(&file_image[user_init_off]);
}
else if (R_ARM_ABS32 == r_type) {
unsigned symj = ELF32_R_SYM(r_info);
user_init_va = get_te32(&dynsym[symj].st_value);
set_te32(&rp->r_info, ELF32_R_INFO(0, R_ARM_RELATIVE));
// pack3() will set &file_image[user_init_off]
}
else {
goto bad;
}
}
else if (Elf32_Ehdr::EM_386 == e_machine) {
if (R_386_RELATIVE == r_type) {
user_init_va = get_te32(&file_image[user_init_off]);
}
else if (R_386_32 == r_type) {
unsigned symj = ELF32_R_SYM(r_info);
user_init_va = get_te32(&dynsym[symj].st_value);
set_te32(&rp->r_info, ELF32_R_INFO(0, R_386_RELATIVE));
// pack3() will set &file_image[user_init_off]
}
else {
goto bad;
}
}
else {
bad:
char msg[50]; snprintf(msg, sizeof(msg),
"bad relocation %#x DT_INIT_ARRAY[0]",
r_info);
throwCantPack(msg);
}
break;
}
}
}
unsigned const p_filesz = get_te32(&pload_x0->p_filesz);
if (!((user_init_va - xct_va) < p_filesz)) {
// Not in executable portion of first executable PT_LOAD.
if (0==user_init_va && opt->o_unix.android_shlib) {
// Android allows (0 ==> skip) ?
upx_dt_init = 0; // force steal of 'extra' DT_NULL
// XXX: FIXME: depends on SHT_DYNAMIC coming later
}
else {
char msg[70]; snprintf(msg, sizeof(msg),
"bad init address %#x in Elf32_Shdr[%d].%#x\n",
(unsigned)user_init_va, -1+ e_shnum - j, user_init_off);
throwCantPack(msg);
}
}
}
// By default /usr/bin/ld leaves 4 extra DT_NULL to support pre-linking.
// Take one as a last resort.
if ((Elf32_Dyn::DT_INIT==upx_dt_init || !upx_dt_init)
&& Elf32_Shdr::SHT_DYNAMIC == sh_type) {
unsigned sh_offset = get_te32(&shdr->sh_offset);
unsigned sh_size = get_te32(&shdr->sh_size);
if ((unsigned)file_size < sh_size
|| (unsigned)file_size < sh_offset
|| ((unsigned)file_size - sh_offset) < sh_size) {
throwCantPack("bad SHT_DYNAMIC");
}
unsigned const n = get_te32(&shdr->sh_size) / sizeof(Elf32_Dyn);
Elf32_Dyn *dynp = (Elf32_Dyn *)&file_image[get_te32(&shdr->sh_offset)];
for (; Elf32_Dyn::DT_NULL != dynp->d_tag; ++dynp) {
if (upx_dt_init == get_te32(&dynp->d_tag)) {
break; // re-found DT_INIT
}
}
if ((1+ dynp) < (n+ dynseg)) { // not the terminator, so take it
user_init_va = get_te32(&dynp->d_val); // 0 if (0==upx_dt_init)
set_te32(&dynp->d_tag, upx_dt_init = Elf32_Dyn::DT_INIT);
user_init_off = (char const *)&dynp->d_val - (char const *)&file_image[0];
}
}
}
xct_va = canPack_Shdr(pload_x0);
}
else { // no Sections; use heuristics
unsigned const strsz = elf_unsigned_dynamic(Elf32_Dyn::DT_STRSZ);
@ -5730,10 +5759,6 @@ void PackLinuxElf32mipsel::defineSymbols(Filter const *ft)
PackLinuxElf32::defineSymbols(ft);
}
#define WANT_SHDR_ENUM
#include "p_elf_enum.h"
#undef WANT_SHDR_ENUM
// ::forward_Shdrs adds info for the benefit of gdb and Android dlopen().
// De-compression (runtime and offline) ignores the added information
// because it uses the de-compressed Ehdr etc.

View File

@ -149,6 +149,7 @@ protected:
virtual void ARM_updateLoader(OutputFile *);
virtual int ARM_is_QNX(void);
virtual upx_uint64_t canPack_Shdr(Elf32_Phdr const *pload_x0);
virtual void pack1(OutputFile *, Filter &) override; // generate executable header
virtual void asl_pack2_Shdrs(OutputFile *, unsigned pre_xct_top); // AndroidSharedLibrary processes Shdrs
virtual void asl_slide_Shdrs(); // by so_slide if above xct_off

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -152,7 +152,7 @@ no_filt:
ldr arg1,[sp,#1*NBPW] // dst
ldr arg2,[arg2] // dstlen
add arg2,arg2,arg1 // &dst[dstlen]
call __clear_cache
//call __clear_cache // subsumed by write()+mmap()
mov r0,#0; str r0,[sp] // success return from f_expand FIXME
ldmia sp!,{r0,r1,r2,r3,r4,r5,r6,r7,pc} // end f_expand

View File

@ -193,7 +193,7 @@ unfold:
mov arg3,sp // &pathname (currently a null string "")
mov arg2,u_len
mov arg1,#0 // kernel chooses addr
call upx_mmap_and_fd // (addr + (1+ fd)) = (ptr, len, pathname, frag_mask)
call upx_mmap_and_fd // (addr + (1+ fd)) = (ptr, len, pathname)
mov r1,r0,lsr #12
mov r1,r1,lsl #12
sub r0,r0,r1
@ -265,7 +265,7 @@ zfind:
ret
f_expand:
#define LINUX_ARM_CACHEFLUSH 1
#undef LINUX_ARM_CACHEFLUSH
#define NO_METHOD_CHECK 1
#include "arch/arm/v4a/nrv2b_d8.S"

View File

@ -33,7 +33,11 @@ NBPW= 4
//#define ARM_OLDABI 1
#define ARMEL_EABI4 1
#include "arch/arm/v5a/macros.S"
#define call bl
#define DEBUG 0
#define bkpt .long 0xe7f001f0 /* reserved instr; Linux GNU eabi breakpoint */
#define bkpt_th .short 0xde01 /* reserved instr; Linux GNU eabi breakpoint */
// As of 2023-02-04, "gcc (Debian 10.2.1-6) 10.2.1 20210110" assembles 0xbe10 for:
// asm("bkpt #0x10");
@ -66,6 +70,8 @@ PAGE_MASK= (~0<<PAGE_SHIFT)
PAGE_SIZE= -PAGE_MASK
__NR_open= 5 + __NR_SYSCALL_BASE
AT_FDCWD= -100
RD_ONLY= 0
__NR_close= 6 + __NR_SYSCALL_BASE
__NR_exit = 1 + __NR_SYSCALL_BASE
__NR_memfd_create= 0x181 + __NR_SYSCALL_BASE // 385
@ -74,6 +80,27 @@ __NR_mprotect =125 + __NR_SYSCALL_BASE
__NR_munmap = 91 + __NR_SYSCALL_BASE
__NR_write = 4 + __NR_SYSCALL_BASE
__NR_SYSCALL_BASE = 0
__NR_close= 6 + __NR_SYSCALL_BASE
__NR_exit= 1 + __NR_SYSCALL_BASE
__NR_fdatasync=148 + __NR_SYSCALL_BASE
__NR_fsync= 118 + __NR_SYSCALL_BASE
__NR_ftruncate=93 + __NR_SYSCALL_BASE
__NR_getpid= 20 + __NR_SYSCALL_BASE
__NR_lseek= 19 + __NR_SYSCALL_BASE
__NR_memfd_create= 385 + __NR_SYSCALL_BASE
__NR_mkdir= 39 + __NR_SYSCALL_BASE
__NR_mmap2= 192 + __NR_SYSCALL_BASE
__NR_mprotect=125 + __NR_SYSCALL_BASE
__NR_open= 5 + __NR_SYSCALL_BASE
__NR_openat= 322 + __NR_SYSCALL_BASE
__NR_read= 3 + __NR_SYSCALL_BASE
__NR_stat= 106 + __NR_SYSCALL_BASE
__NR_uname= 122 + __NR_SYSCALL_BASE
__NR_unlink= 10 + __NR_SYSCALL_BASE
__NR_write= 4 + __NR_SYSCALL_BASE
__ARM_NR_BASE = 0xf0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
@ -145,71 +172,75 @@ _start: .globl _start // in Thumb mode (via PackLinuxElf32::pack3)
// argc,argv,envp, r3 convenience, r4-r7 callee-saved, lr ret_addr
stmfd sp!,{r0,r1,r2, r3, r4,r5,r6,r7, lr} // MATCH_99
sub sp,sp,#2*NBPW // space for ADRU, LENU
sub sp,sp,#3*NBPW // space for ADRU, LENU, PMASK
F_ADRU= 0 * NBPW
F_LENU= 1 * NBPW
F_ARGC= 2 * NBPW
F_PMASK=2 * NBPW
F_ARGC= 3 * NBPW
call4 L70
L70_ret:
foldi .req lr // &fold_info
old_sp .req r5 // busy: lr,r5
mov old_sp,sp
mfd .req r7
rPMASK .req r6 // PAGE_MASK
ldr r0,[foldi,#sz_unc]
str r0,[old_sp,#F_LENU]
sub r0,sp,r0 // alloca
and sp,r0,#-2*NBPW // align stack
str r0,[sp,#F_LENU]
ldr r7,[foldi,#sz_cpr] // srclen
add r4,foldi,#sz_b_info // src
.unreq foldi
add arg4,old_sp,#F_LENU // &dstlen
mov arg3,sp // dst for decompress
ldr arg2,[foldi,#sz_cpr] // srclen
add arg1,foldi,#sz_b_info // src
.unreq foldi // busy: r5
bl f_decompress
mov arg3,#0 // pathname
mov arg2,r0 // sz_unc
mov arg1,#0 // any page address
call upx_mmap_and_fd
add arg4,sp,#F_LENU // &dstlen
and arg3,r0,rPMASK // dst for decompress
str arg3,[sp,#F_ADRU]
mov arg2,r7 // srclen
sub mfd,r0,arg3
sub mfd,mfd,#1 // mfd
mov arg1,r4 // src
call f_decompress
mfd .req r6 // busy: r6,r5
O_RDWR= 2
O_DIRECTORY= 040000
O_TMPFILE= 020000000
bl L110
.word O_RDWR | O_DIRECTORY | O_TMPFILE
.word 0700
.asciz "/dev/shm"; .balign 4
L110:
mov r0,lr
ldmia r0!,{r1,r2}
do_sys7t2 __NR_open; mov mfd,r0
mov arg2,sp
ldr arg3,[old_sp,#F_LENU]
do_sys __NR_write
mov sp,old_sp // de-alloca
.unreq old_sp // busy: r6(mfd)
ldr arg3,[sp,#F_LENU]
ldr arg2,[sp,#F_ADRU]
mov arg1,mfd
str rPMASK,[arg2,#0] // forward the PAGE_MASK
call write
mov arg6,#0 // beginning of file
mov arg5,mfd
mov arg4,#MAP_PRIVATE // modes
mov arg4,#MAP_PRIVATE|MAP_FIXED // modes
mov arg3,#PROT_READ|PROT_EXEC // prot
ldr arg2,[sp,#F_LENU]
mov arg1,#0 // addr (kernel chooses)
do_sys __NR_mmap64; str r0,[sp,#F_ADRU]
ldr arg1,[sp,#F_ADRU] // addr
do_sys __NR_mmap2
mov arg1,mfd
.unreq mfd // busy: empty
do_sys __NR_close
.unreq mfd
call close
adr r0,_start -4 *NBPW // &SO_INFO
add r1,sp,#F_ARGC
ldr pc,[sp, #F_ADRU] // invoke folded code
devshm:
.asciz "/dev/shm"; .balign 4
add arg2,sp,#F_ARGC
adr arg1,_start -4 *NBPW // &SO_INFO
ldr arg3,[sp, #F_ADRU]
add pc,arg3,#3*NBPW // invoke de-compressed code
f_decompress:
#define LINUX_ARM_CACHEFLUSH 1
#undef LINUX_ARM_CACHEFLUSH /* handled by write()+mmap() */
#include "arch/arm/v4a/nrv2b_d8.S"
src .req r0
dst .req r2
tmp .req r3
//eof_n2b: .globl eof_n2b
// end of a compressed extent
POP {tmp} // &input_eof
mov r0,src; SUB2 r0,tmp // src -= eof; // return 0: good; else: bad
POP {tmp} // original dst
POP {r1}; SUB2 dst,tmp // dst -= original dst
POP {tmp}; str dst,[tmp] // actual length used at dst XXX: 4GB
ret
//%esp:
// MATCH_04 ptr unfolded_code
// MATCH_10 len unfolded_code
@ -220,7 +251,108 @@ f_decompress:
// IDENTSTR goes here
section ELFMAINZ
get_upxfn_path: .globl get_upxfn_path // char * (*)(void)
mov r0,#0 // persistence not desired
ret
memcpy: .globl memcpy // void *memcpy(void *dst, void const *src, size_t len)
cmp r2,#0; beq 9f
mov r12,r0 // original dst
0:
ldrb r3,[r1],#1; subs r2,r2,#1
strb r3,[r0],#1; bne 0b
9:
mov r0,r12 // return original dst
ret
memset: .globl memset // (dst, val, n)
cmp r2,#0; beq 9f
mov r12,r0 // original dst
0:
strb r1,[r0],#1
subs r2,r2,#1
bne 0b
9:
mov r0,r12 // return original dst
ret
mempcpy: .globl mempcpy // (dst, src, n)
cmp r2,#0; beq 9f
0:
ldrb r3,[r1],#1; subs r2,r2,#1
strb r3,[r0],#1; bne 0b
9:
ret // updated dst
// These Linux system calls are called from upxfd_android.c
// in order to work around problems with memfd_create and ftruncate on Android.
// Because called from C, then r7 is live; cannot use do_sys7t.
.globl memfd_create; memfd_create: do_sys2 __NR_memfd_create; ret
.globl close; close: do_sys __NR_close; ret
.globl fdatasync; fdatasync: do_sys __NR_fdatasync; ret
.globl fsync; fsync: do_sys __NR_fsync; ret
.globl ftruncate; ftruncate: do_sys __NR_ftruncate; ret
.globl getpid; getpid: do_sys __NR_getpid; ret
.globl lseek; lseek: do_sys __NR_lseek; ret
.globl mkdir; mkdir: do_sys __NR_mkdir; ret
.globl open; open: do_sys __NR_open; ret
.globl openat; openat: do_sys2 __NR_openat; ret
.globl read; read: do_sys __NR_read; ret
.globl stat; stat: do_sys __NR_stat; ret
.globl uname; uname: do_sys __NR_uname; ret
.globl unlink; unlink: do_sys __NR_unlink; ret
.globl write; write: do_sys __NR_write; ret
.globl my_bkpt
my_bkpt:
bkpt // my_bkpt
ret
// __NR_oldmmap gets ENOSYS! Must use __NR_mmap2 with all args in registers
// Called from C (5th and 6th arg on stack), so must preserve r4 and r5
mmap: .globl mmap
stmdb sp!,{r4,r5,lr} // called from C: only 4 args in registers
ldr arg6,[sp,#4*NBPW]
ldr arg5,[sp,#3*NBPW]
mov arg6,arg6,lsr #12 @ FIXME? convert to page offset in file
mmap_do: // sp: saved r4,r5,lr
bic r12,arg1,rPMASK // lo frag
sub arg1,arg1,r12 // page align lo end
add arg2,arg2,r12
do_sys __NR_mmap2
ldmia sp!,{r4,r5,pc}
psa: .asciz "/proc/self/auxv"; .balign 4
L70:
BUFLEN= 512
mfd .req r5
sub sp,sp,#BUFLEN
mov r4,lr
mov rPMASK,#~0; mov rPMASK,rPMASK,lsl #12 // default PAGE_MASK
mov r0,#AT_FDCWD
adr r1,psa
mov r2,#0
call openat; mov mfd,r0; tst r0,r0; bmi no_psa
mov r2,#BUFLEN
mov r1,sp
mov r0,mfd
call read; tst r0,r0; bmi no_psa1
mov r1,sp
0:
ldr r2,[r1],#2*NBPW
AT_PAGESZ= 6
subs r2,r2,#AT_PAGESZ; beq 9f
subs r0,r0,#2*NBPW; beq no_psa1; b 0b
9:
ldr rPMASK,[r1,#-NBPW]
sub rPMASK,r2,rPMASK
no_psa1:
mov r0,mfd; call close
.unreq mfd
no_psa:
add sp,sp,#BUFLEN
str rPMASK,[sp,#F_PMASK]
call4 L70_ret
fold_info:
// b_info (sz_unc, sz_cpr, method) of folded code (C-language, etc.)

View File

@ -75,20 +75,70 @@ mflg_data: .int MAP_PRIVATE|MAP_ANONYMOUS @ overwritten for QNX vs Linux
// %esp:
// MATCH_13 ptr unfolded_code; for escape hatch
// MATCH_12 len unfolded code; for escape hatch
// PAGE_MASK
// MATCH_99 9 saved registers {r0= argc, r1= argv, r2= envp, r3-r7, lr)
F_ADRU= 0 * NBPW
F_LENU= 2 * NBPW
F_LENU= 1 * NBPW
F_PMASK= 2 * NBPW // extra copy?
.globl upx_so_main // in arm.v?a-linux.elf-so_main.c
section SO_HEAD
fold: .globl fold
sub sp,sp,#MAX_ELF_HDR_32; mov r2,sp // &elf_tmp
PAGE_MASK: .word 0xfffff000 // default
qflg_data: .word 0 // QNX vs Linux: MAP_PRIVATE | MAP_ANONYMOUS
upxfn_path:.word 0 // displacement from "zero"
fold_begin: .globl fold
b L05
get_page_mask: .globl get_page_mask
ldr r0,PAGE_MASK
ret
get_upxfn_path: .globl get_upxfn_path // char * (*)(void)
adr r1,fold_begin-3*NBPW // "zero"
ldr r0,[r1,#1*NBPW] // offset(upxfn_path)
cmp r0,#0; beq 1f // nullptr
add r0,r0,r1 // &path
1:
ret
arg6 .req r5
arg5 .req r4
arg4 .req r3
arg3 .req r2
arg2 .req r1
arg1 .req r0
// Sometimes Linux enforces page-aligned address
Pmap: .globl Pmap
ldr r12,PAGE_MASK
bic r12,arg1,r12
sub arg1,arg1,r12
add arg2,arg2,r12
b mmap
Punmap: .globl Punmap
ldr r12,PAGE_MASK
bic r12,arg1,r12
sub arg1,arg1,r12
add arg2,arg2,r12
b munmap
Pprotect: .globl Pprotect
ldr r12,PAGE_MASK
bic r12,arg1,r12
sub arg1,arg1,r12
add arg2,arg2,r12
b mprotect
L05:
sub sp,sp,#MAX_ELF_HDR_32; mov arg3,sp // &elf_tmp
call upx_so_main // (&so_info, &argc); returns &escape_hatch
add sp,sp,#MAX_ELF_HDR_32
mov lr,r0 // save &escape_hatch
ldmia sp!,{r0,r1} // F_ADRU, F_LENU (unfolded region)
ldmia sp!,{r0,r1,r2} // F_ADRU, F_LENU, PMASK (unfolded region)
mov r7,#0xff & __NR_munmap // FIXME depends on HW and ABI of OS
mov pc,lr // goto &escape_hatch
@ -120,76 +170,97 @@ L10:
#endif /*}*/
ldr pc,[r2,#4 -2*4] @ Elf32_auxv_t[AT_NULL@.a_type].a_val
__NR_exit = 1 + __NR_SYSCALL_BASE
__NR_read = 3 + __NR_SYSCALL_BASE
__NR_write = 4 + __NR_SYSCALL_BASE
__NR_open = 5 + __NR_SYSCALL_BASE
__NR_close = 6 + __NR_SYSCALL_BASE
__NR_unlink= 10 + __NR_SYSCALL_BASE
__NR_lseek= 19 + __NR_SYSCALL_BASE
__NR_getpid= 20 + __NR_SYSCALL_BASE
__NR_brk = 45 + __NR_SYSCALL_BASE
__NR_readlink= 85 + __NR_SYSCALL_BASE // 0x55
__NR_ftruncate= 93 + __NR_SYSCALL_BASE // 0x5d
memcpy: .globl memcpy // void *memcpy(void *dst, void const *src, size_t len)
cmp r2,#0; beq 9f
mov r12,r0 // original dst
0:
ldrb r3,[r1],#1; subs r2,r2,#1
strb r3,[r0],#1; bne 0b
9:
mov r0,r12 // return original dst
ret
memset: .globl memset // (dst, val, n)
cmp r2,#0; beq 9f
mov r12,r0 // original dst
0:
strb r1,[r0],#1; subs r2,r2,#1
bne 0b
9:
mov r0,r12 // return original dst
ret
__NR_memfd_create= 0x181 + __NR_SYSCALL_BASE // 385
__NR_mmap2 = 192 + __NR_SYSCALL_BASE // 0xc0
__NR_mprotect = 125 + __NR_SYSCALL_BASE // 0x7d
__NR_munmap = 91 + __NR_SYSCALL_BASE // 0x5b
mempcpy: .globl mempcpy // (dst, src, n)
cmp r2,#0; beq 9f
0:
ldrb r3,[r1],#1; subs r2,r2,#1
strb r3,[r0],#1; bne 0b
9:
ret // updated dst
__ARM_NR_BASE = 0x0f0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
__NR_SYSCALL_BASE = 0
__NR_close= 6 + __NR_SYSCALL_BASE
__NR_exit= 1 + __NR_SYSCALL_BASE
__NR_fdatasync=148 + __NR_SYSCALL_BASE
__NR_fsync= 118 + __NR_SYSCALL_BASE
__NR_ftruncate=93 + __NR_SYSCALL_BASE
__NR_getpid= 20 + __NR_SYSCALL_BASE
__NR_lseek= 19 + __NR_SYSCALL_BASE
__NR_memfd_create= 385 + __NR_SYSCALL_BASE
__NR_mkdir= 39 + __NR_SYSCALL_BASE
__NR_mmap2= 192 + __NR_SYSCALL_BASE
__NR_munmap= 91 + __NR_SYSCALL_BASE // 0x5b
__NR_mprotect=125 + __NR_SYSCALL_BASE
__NR_open= 5 + __NR_SYSCALL_BASE
__NR_read= 3 + __NR_SYSCALL_BASE
__NR_stat= 106 + __NR_SYSCALL_BASE
__NR_uname= 122 + __NR_SYSCALL_BASE
__NR_unlink= 10 + __NR_SYSCALL_BASE
__NR_write= 4 + __NR_SYSCALL_BASE
.globl Pwrite; Pwrite: b write
// These Linux system calls are called from upxfd_android.c
// in order to work around problems with memfd_create and ftruncate on Android.
// Because called from C, then r7 is live; cannot use do_sys7t.
.globl memfd_create; memfd_create: do_sys2 __NR_memfd_create; ret
.globl close; close: do_sys __NR_close; ret
.globl exit; exit: do_sys __NR_exit; ret
.globl fdatasync; fdatasync: do_sys __NR_fdatasync; ret
.globl fsync; fsync: do_sys __NR_fsync; ret
.globl ftruncate; ftruncate: do_sys __NR_ftruncate; ret
.globl getpid; getpid: do_sys __NR_getpid; ret
.globl lseek; lseek: do_sys __NR_lseek; ret
.globl mkdir; mkdir: do_sys __NR_mkdir; ret
.globl mprotect; mprotect: do_sys __NR_mprotect; ret
.globl munmap; munmap: do_sys __NR_munmap; ret
.globl open; open: do_sys __NR_open; ret
.globl read; read: do_sys __NR_read; ret
.globl stat; stat: do_sys __NR_stat; ret
.globl uname; uname: do_sys __NR_uname; ret
.globl unlink; unlink: do_sys __NR_unlink; ret
.globl write; write: do_sys __NR_write; ret
.globl my_bkpt
my_bkpt:
bkpt // my_bkpt
ret
.globl exit
exit:
do_sys __NR_exit
.globl read
read:
do_sys __NR_read; ret
Pwrite: .globl Pwrite
write: .globl write
do_sys __NR_write; ret
lseek: .globl lseek
do_sys __NR_lseek; ret
.globl open
open:
do_sys __NR_open; ret
.globl close
close:
do_sys __NR_close; ret
.globl unlink
unlink:
do_sys __NR_unlink; ret
.globl getpid
getpid:
do_sys __NR_getpid; ret
.globl brk
brk:
do_sys __NR_brk; ret
.globl readlink
readlink:
do_sys __NR_readlink; ret
ftruncate: .globl ftruncate
do_sys __NR_ftruncate; ret
memfd_create: .globl memfd_create
do_sys7t2 __NR_memfd_create; ret
// __NR_oldmmap gets ENOSYS! Must use __NR_mmap2 with all args in registers
// Called from C (5th and 6th arg on stack), so must preserve r4 and r5
mmap: .globl mmap
stmdb sp!,{r4,r5,lr} // called from C: only 4 args in registers
ldr arg6,[sp,#4*NBPW]
ldr arg5,[sp,#3*NBPW]
mov arg6,arg6,lsr #12 @ FIXME? convert to page offset in file
mmap_do: // sp: saved r4,r5,lr
mov r12,#~0; mov r12,r12,lsl #12 // PAGE_MASK
bic r12,arg1,r12 // lo frag
sub arg1,arg1,r12 // page align lo end
add arg2,arg2,r12
do_sys __NR_mmap2
ldmia sp!,{r4,r5,pc}
O_RDWR= 2
O_DIRECTORY= 040000
@ -201,53 +272,15 @@ table3:
.asciz "/dev/shm"; .balign 4
upxfd_create: .globl upxfd_create
bkpt // upxfd_create
adr r0,table3
ldmia r0!,{r1,r2}
do_sys7t2 __NR_open
ret
// Sometimes Linux enforces page-aligned address
Pprotect: .globl Pprotect
ldr r12,m_off4k
and r12,r12,r0
sub r0,r0,r12
add r1,r1,r12
mprotect: .globl mprotect
do_sys __NR_mprotect; ret
Pmap: .globl Pmap
ldr r12,m_off4k
and r12,r12,r0
sub r0,r0,r12
add r1,r1,r12
mmap: .globl mmap
stmdb sp!,{r4,r5,lr}
ldr r5,[sp,#4*4]
ldr r4,[sp,#3*4]
mov r5,r5,lsr #12 @ convert to page number
mmap_do:
ldr r12,m_off4k
and r12,r12,r0 // lo frag
sub r0,r0,r12 // page align lo end
add r1,r1,r12
do_sys __NR_mmap2
ldmia sp!,{r4,r5,pc}
Punmap: .globl Punmap
ldr r12,m_off4k
and r12,r12,r0
sub r0,r0,r12
add r1,r1,r12
munmap: .globl munmap
do_sys __NR_munmap; ret
m_off4k:
.word -1+ (1<<PAGE_SHIFT) // offset mask for 4KiB
.globl __clear_cache
__clear_cache:
mov r2,#0
do_sys2 __ARM_NR_cacheflush; ret
bkpt // clear_cache should not be needed: write() + mmap()
get_sys_munmap: .globl get_sys_munmap // r0= system call instruction
#if defined(ARMEL_DARWIN) /*{*/
@ -269,73 +302,6 @@ mmap_privanon: .globl mmap_privanon
mvn r4,#0 @ fd= -1
b mmap_do
memcpy: .globl memcpy // void *memcpy(void *dst, void const *src, size_t len);
dst .req r0
src .req r1
len .req r2
lim .req r12 // limit value of src for current code loop
tst len,len; moveq pc,lr // 0==len is a no_op
mov lim,len
//b mc_1prep // optimizations not tested!
// Optimize for dst that is 4-aligned,
// such as fetching unaligned struct to local aligned copy.
tst dst,#-1+ NBPW; beq mc_dst4
mc_1prep:
add lim,len,src
mc_1:
ldrb r3,[src],#1; cmp src,lim
strb r3,[dst],#1; bne mc_1
ret
mc_dst4: // dst is 4-aligned. Store words of 4 bytes.
tst src,#-1+ NBPW; beq mc_44prep
mc_d4prep:
bics r3,len,#-1+ NBPW // length of full words
add lim,src,r3
beq mc_1prep // no full words
str len,[sp,#-NBPW]! // save register (mc_s1d4 needs 2 registers)
mc_s1d4: // src is not 4-aligned; dst is 4-aligned
ldrb r2,[src],#1
ldrb r3,[src],#1; orr r2,r2,r3,lsl #1*8
ldrb r3,[src],#1; orr r2,r2,r3,lsl #2*8
ldrb r3,[src],#1; orr r2,r2,r3,lsl #3*8
str r2,[dst],#4
cmp src,lim; bne mc_s1d4
ldr len,[sp],#NBPW // restore register
ands len,len,#-1+ NBPW; bne mc_1prep // 0 < len <= 3
ret
mc_44prep: // both src and dst are 4-aligned. Store blocks of 16 bytes.
bics r3,len,#-1+ 4*NBPW // length of 16-byte blocks
add lim,src,r3
bne mc_s4d4go // 16-byte blocks
mc_s4d1prep:
bics r3,len,#-1+ NBPW // length of full words
add lim,src,r3
beq mc_1prep // no full words
mc_s4d1:
ldr r3,[src],#NBPW
str r3,[dst],#NBPW
cmp src,lim; bne mc_s4d1
ands len,len,#-1+ NBPW; bne mc_1prep // 0 < len <= 3
ret
mc_s4d4go:
stmdb sp!,{r4,r5,r6,r7} // save original contents of working storage
mc_s4d4:
ldmia src!,{r4,r5,r6,r7}
stmia dst!,{r4,r5,r6,r7}
cmp src,lim; bne mc_s4d4
ldmia sp!,{r4,r5,r6,r7} // restore original contents of working storage
ands len,len,#-1+ 4*NBPW; bne mc_s4d1prep // 0 < len <= 15
ret
.unreq dst
.unreq src
.unreq len
.unreq lim
tmp .req r3
size .req r4
@ -379,12 +345,6 @@ underlay: .globl underlay // (unsigned size, char *ptr, unsigned ulen, unsigned
.unreq ulen
.unreq pflg
memset: .globl memset // void *memset(void *s, int c, size_t n);
tst r2,r2; moveq pc,lr
strb r1,[r0],#1; subs r2,r2,#1
bgt memset
ret
my_alloca: .globl my_alloca
sub r0,sp,r0
and r0,r0,#-2*NBPW

View File

@ -30,7 +30,7 @@
*/
#ifndef DEBUG //{
#define DEBUG 0
#define DEBUG 1
#endif //}
#define NO_WANT_MMAP 1
@ -293,7 +293,7 @@ make_hatch_i386(
unsigned code[2] = {
0x586180cd, // int #0x80; popa; pop %eax
0x90e0ff3e, // notrack jmp *%eax; nop
}
};
DPRINTF("make_hatch %%p %%p %%x\\n", phdr, next_unc, frag_mask);
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
next_unc += phdr->p_memsz - phdr->p_filesz; // Skip over local .bss

View File

@ -265,7 +265,13 @@ ERR_LAB
error;
#endif //}
#if defined(__i386__) //
extern unsigned long upx_mmap_and_fd( // x86_64 Android emulator of i386 is not faithful
void *ptr // desired address
, unsigned len // also pre-allocate space in file
, char *pathname // 0 ==> call get_upxfn_path, which stores if 1st time
);
#if defined(__i386__) //{
// Create (or find) an escape hatch to use when munmapping ourselves the stub.
// Called by do_xmap to create it; remembered in AT_NULL.d_val
static char *
@ -318,16 +324,17 @@ make_hatch_arm32(
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
next_unc += phdr->p_memsz - phdr->p_filesz; // Skip over local .bss
frag_mask &= -(long)next_unc; // bytes left on page
if (2*4 <= frag_mask) {
if (sizeof(code) <= frag_mask) {
hatch = (unsigned *)(void *)(~3ul & (long)(3+ next_unc));
hatch[0]= code[0];
hatch[1]= code[1];
__clear_cache(&hatch[0], &hatch[2]);
hatch[0] = code[0];
hatch[1] = code[1];
}
else { // Does not fit at hi end of .text, so must use a new page "permanently"
int mfd = upxfd_create(); // the directory entry
write(mfd, &code, 2*4);
hatch = Pmap(0, 2*4, PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0);
unsigned long fdmap = upx_mmap_and_fd((void *)0, sizeof(code), 0);
unsigned mfd = -1+ (0xfff& fdmap);
write(mfd, &code, sizeof(code));
hatch = mmap((void *)(fdmap & ~0xffful), sizeof(code),
PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0);
close(mfd);
}
}
@ -422,31 +429,7 @@ make_hatch_ppc32(
#define nullptr (void *)0
#if defined(__i386__) //{
unsigned
get_PAGE_MASK(void)
{
return ~0xFFF;
}
#else //}{
unsigned
get_PAGE_MASK(void) // the mask which KEEPS the page address
{
int fd = open(addr_string("/proc/self/auxv"), O_RDONLY, 0);
if (fd >= 0) {
Elf32_auxv_t data[40];
Elf32_auxv_t *end = &data[read(fd, data, sizeof(data)) / sizeof(data[0])];
close(fd);
Elf32_auxv_t *ptr; for (ptr = &data[0]; ptr < end ; ++ptr) {
if (AT_PAGESZ == ptr->a_type) {
return (0u - ptr->a_un.a_val);
}
}
}
return ~0xFFF;
}
#endif //}
extern unsigned get_page_mask(void);
extern void *memcpy(void *dst, void const *src, size_t n);
extern void *memset(void *dst, unsigned val, size_t n);
@ -501,7 +484,7 @@ upx_so_main( // returns &escape_hatch
Elf32_Ehdr *elf_tmp // scratch for Elf32_Ehdr and Elf32_Phdrs
)
{
unsigned long const page_mask = get_PAGE_MASK();
unsigned long const page_mask = get_page_mask();
char *const va_load = (char *)&so_info->off_reloc - so_info->off_reloc;
So_info so_infc; // So_info Copy
memcpy(&so_infc, so_info, sizeof(so_infc)); // before de-compression overwrites
@ -518,7 +501,7 @@ upx_so_main( // returns &escape_hatch
// Copy compressed data before de-compression overwrites it.
char *const sideaddr = mmap(nullptr, cpr_len, PROT_WRITE|PROT_READ,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
DPRINTF("sideaddr=%%p\\n", sideaddr);
DPRINTF("&sideaddr=%%p\\n", &sideaddr);
memcpy(sideaddr, cpr_ptr, cpr_len);
// Transition to copied data
@ -548,37 +531,22 @@ upx_so_main( // returns &escape_hatch
Elf32_Phdr const *phdr = (Elf32_Phdr *)(1+ elf_tmp);
Elf32_Phdr const *const phdrN = &phdr[elf_tmp->e_phnum];
while (phdr->p_type != PT_LOAD) ++phdr; // skip PT_PHDR if any
Elf32_Addr const base = (Elf32_Addr)va_load - phdr->p_vaddr;
DPRINTF("base=%%p\\n", base);
if (phdr->p_flags & PF_X) {
#if defined(__arm__) //{
int mfd = upxfd_create();
#else //}{
int mfd = memfd_create(addr_string("upx"), 0);
#endif //}
unsigned mfd_len = 0ul - page_mask;
Pwrite(mfd, elf_tmp, binfo->sz_unc); // de-compressed Elf_Ehdr and Elf_Phdrs
Pwrite(mfd, binfo->sz_unc + va_load, mfd_len - binfo->sz_unc); // rest of 1st page
Punmap(va_load, mfd_len); // make SELinux forget any previous protection
Elf32_Addr va_mfd = (Elf32_Addr)Pmap(va_load, mfd_len, PF_to_PROT(phdr),
MAP_FIXED|MAP_PRIVATE, mfd, 0); (void)va_mfd;
close(mfd);
}
// Process each read-only PT_LOAD.
// A read+write PT_LOAD might be relocated by rtld before de-compression,
// so it cannot be compressed.
struct b_info al_bi; // for aligned data from binfo
void *hatch = nullptr;
Elf32_Addr base = 0;
for (; phdr < phdrN; ++phdr)
if ( phdr->p_type == PT_LOAD && !(phdr->p_flags & PF_W)) {
DPRINTF("phdr@%%p p_offset=%%p p_vaddr=%%p p_filesz=%%p p_memsz=%%p binfo=%%p\\n",
phdr, phdr->p_offset, phdr->p_vaddr, phdr->p_filesz, phdr->p_memsz, x0.buf);
if (!base) {
base = (Elf32_Addr)va_load - phdr->p_vaddr;
DPRINTF("base=%%p\\n", base);
}
if ((phdr->p_filesz + phdr->p_offset) <= so_infc.off_xct_off) {
continue; // below compressed region
@ -608,23 +576,13 @@ upx_so_main( // returns &escape_hatch
// Cannot set PROT_EXEC except via mmap() into a region (Linux "vma")
// that has never had PROT_WRITE. So use a Linux-only "memory file"
// to hold the contents.
#if defined(__arm__) //{ Emulate: Android "ABI" has inconsistent __NR_ftruncate.
mfd = upxfd_create(); // anonymous file in /dev/shm with 0700 permission
size_t goal = x1.size;
while (0 < goal) { // /dev/shm limits to 8KiB at a time!!
ssize_t len = Pwrite(mfd, x1.buf, goal);
if (len < 0) {
break; // give up: will SIGSEGV or SIGBUS later
}
goal -= len;
}
lseek(mfd, 0, SEEK_SET);
#else //}{
mfd = memfd_create(addr_string("upx"), 0); // the directory entry
ftruncate(mfd, x1.size); // Allocate the pages in the file.
#endif //}
unsigned long val = upx_mmap_and_fd(x1.buf, x1.size, nullptr);
mfd = 0xfff & val;
val -= mfd; if ((char *)val != x1.buf) my_bkpt((void *)0x1241, &x1);
--mfd;
Pwrite(mfd, x1.buf, frag); // Save lo fragment of contents on first page.
Punmap(x1.buf, x1.size);
//Punmap(x1.buf, x1.size);
mfd_addr = Pmap(x1.buf, x1.size, PROT_READ|PROT_WRITE, MAP_FIXED|MAP_SHARED, mfd, 0);
DPRINTF("mfd_addr= %%p\\n", mfd_addr); // Re-use the address space
@ -654,7 +612,7 @@ upx_so_main( // returns &escape_hatch
if (phdr->p_flags & PF_X) { // SELinux
// Map the contents of mfd as per *phdr.
DPRINTF("mfd mmap addr=%%p len=%%p\\n", (phdr->p_vaddr + base + pfx), al_bi.sz_unc);
Punmap(mfd_addr, frag + al_bi.sz_unc); // Discard RW mapping; mfd has the bytes
//Punmap(mfd_addr, frag + al_bi.sz_unc); // Discard RW mapping; mfd has the bytes
Pmap((char *)(phdr->p_vaddr + base + pfx), al_bi.sz_unc, PF_to_PROT(phdr),
MAP_FIXED|MAP_PRIVATE, mfd, 0);
close(mfd);
@ -664,6 +622,7 @@ upx_so_main( // returns &escape_hatch
}
}
DPRINTF("Punmap sideaddr=%%p cpr_len=%%p\\n", sideaddr, cpr_len);
Punmap(sideaddr, cpr_len);
DPRINTF("calling user DT_INIT %%p\\n", dt_init);
dt_init(so_args->argc, so_args->argv, so_args->envp);

View File

@ -247,7 +247,15 @@ static int create_upxfn_path(char *name, char *buf)
// Also 32-bit Android has inconsistent __NR_ftruncate,
// so use direct write()
//
struct utsname;
struct utsname {
char sysname[65];
char nodename[65];
char release[65];
char version[65];
char machine[65];
char domainname[65];
};
extern int uname(struct utsname *);
extern char * get_upxfn_path(void);
@ -310,28 +318,33 @@ unsigned long upx_mmap_and_fd( // returns (mapped_addr | (1+ fd))
#if ANDROID_FRIEND //{
// Varying __NR_ftruncate on Android can hurt even if memfd_create() succeeds.
// On Linux, struct utsname has 6 arrays of size 257; but size can be larger.
#define BUFLEN 4096
void *buf = alloca(BUFLEN); *(int *)buf = 0;
uname((struct utsname *)buf);
// On Linux, struct utsname has 6 arrays of size 65; but size can be larger.
#define BUFLEN PATH_MAX
union {
struct utsname uts;
char buf[BUFLEN];
} u;
uname(&u.uts);
int const not_android = (ANDROID_TEST ? 0
: ( 0 != strncmplc(addr_string("and"),
&((char const *)&buf)[0*65 /*sysname*/], 3) // claims Android
&& 0 == strncmplc(addr_string("Lin"),
&((char const *)&buf)[0*65 /*sysname*/], 3) // claims Linux
&& '4'< ((char const *)&buf)[2*65 /*release*/] ) // young enough
);
: ( 0 != strncmplc(addr_string("and"), &u.uts.sysname[0], 3)
&& 0 == strncmplc(addr_string("Lin"), &u.uts.sysname[0], 3)
&& '4'< u.uts.release[0] ));
// 2024-08-01: TermUX on Android 14 arm64 running 32-bit program:
// claims it is Linux, but kernel is 4.19, and ftruncate() {__NR_ 93)
// claims it is Linux, but kernel is 4.19, and ftruncate() {__NR_ 93}
// gets signal SIGSYS instead of errno ENOSYS; so is not really Linux!
// Work-around for missing memfd_create syscall on early 32-bit Android.
if (!not_android && !pathname) { // must ask
pathname = get_upxfn_path();
if (!pathname) { // persistence not desired, so use this->u.buf;
pathname = &u.buf[0];
pathname[0] = '\0';
}
}
if (!not_android && -ENOSYS == fd && pathname) {
if ('\0' == pathname[0]) { // first time; create the pathname and file
int rv = create_upxfn_path(pathname, buf);
int rv = create_upxfn_path(pathname, u.buf);
if (rv < 0) {
return rv;
}
@ -361,11 +374,11 @@ unsigned long upx_mmap_and_fd( // returns (mapped_addr | (1+ fd))
}
#if ANDROID_FRIEND //{
else { // !not_android: ftruncate has varying system call number on 32-bit
memset(buf, 0, BUFLEN);
memset(u.buf, 0, BUFLEN);
unsigned wlen = datlen;
while (0 < wlen) {
int x = (wlen < BUFLEN) ? wlen : BUFLEN;
if (x != write(fd, buf, x)) {
if (x != write(fd, u.buf, x)) {
return -ENOSPC;
}
wlen -= x;

View File

@ -4,14 +4,14 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS
1 ELFMAINZ 01dc 0 0 034 2**0 CONTENTS
2 ELFMAINX 06e0 0 0 0210 2**2 CONTENTS
2 ELFMAINX 06b0 0 0 0210 2**2 CONTENTS
SYMBOL TABLE:
00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINY 0 ELFMAINY
00000000 *UND* 0 MFLG
000000d8 g ELFMAINZ 0 getpid
00000498 g F ELFMAINX 0248 upx_mmap_and_fd
00000468 g F ELFMAINX 0248 upx_mmap_and_fd
00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO
0000004c g ELFMAINZ 0 mempcpy
@ -28,7 +28,7 @@ SYMBOL TABLE:
00000128 g ELFMAINZ 0 read
00000164 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset
0000016c g F ELFMAINX 0f4 ucl_nrv2b_decompress_8
0000016c g F ELFMAINX 0c4 ucl_nrv2b_decompress_8
0000018c g ELFMAINZ 0 my_bkpt
000000b0 g ELFMAINZ 0 fsync
0000013c g ELFMAINZ 0 stat
@ -61,92 +61,92 @@ OFFSET TYPE VALUE
00000108 R_ARM_PC24 ELFMAINX
00000164 R_ARM_PC24 ELFMAINX
0000017c R_ARM_PC24 ELFMAINX
000001b4 R_ARM_PC24 ELFMAINX
000001bc R_ARM_PC24 ELFMAINX
000001c0 R_ARM_PC24 ELFMAINX
000001d0 R_ARM_PC24 ELFMAINX
000001d4 R_ARM_PC24 ELFMAINX
000001d8 R_ARM_PC24 ELFMAINX
000001e4 R_ARM_PC24 ELFMAINX
000001ec R_ARM_PC24 ELFMAINX
000001f0 R_ARM_PC24 ELFMAINX
000001f4 R_ARM_PC24 ELFMAINX
000001f8 R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX
00000204 R_ARM_PC24 ELFMAINX
00000208 R_ARM_PC24 ELFMAINX
00000214 R_ARM_PC24 ELFMAINX
00000224 R_ARM_PC24 ELFMAINX
0000020c R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX
00000238 R_ARM_PC24 ELFMAINX
0000022c R_ARM_PC24 ELFMAINX
0000023c R_ARM_PC24 ELFMAINX
00000258 R_ARM_PC24 ELFMAINX
0000025c R_ARM_PC24 ELFMAINX
0000026c R_ARM_PC24 ELFMAINX
00000288 R_ARM_PC24 ELFMAINX
000002a0 R_ARM_PC24 ELFMAINX
000002b4 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 memset
000002ec R_ARM_PC24 stat
000002f4 R_ARM_PC24 ELFMAINX
00000308 R_ARM_PC24 ELFMAINX
00000318 R_ARM_PC24 mkdir
00000330 R_ARM_PC24 ELFMAINX
00000348 R_ARM_PC24 mempcpy
00000358 R_ARM_PC24 ELFMAINX
0000035c R_ARM_PC24 ELFMAINX
00000380 R_ARM_PC24 open
00000394 R_ARM_PC24 read
000003a0 R_ARM_PC24 close
000003c4 R_ARM_PC24 ELFMAINX
000003d4 R_ARM_PC24 ELFMAINX
00000270 R_ARM_PC24 ELFMAINX
00000284 R_ARM_PC24 ELFMAINX
000002b0 R_ARM_PC24 memset
000002bc R_ARM_PC24 stat
000002c4 R_ARM_PC24 ELFMAINX
000002d8 R_ARM_PC24 ELFMAINX
000002e8 R_ARM_PC24 mkdir
00000300 R_ARM_PC24 ELFMAINX
00000318 R_ARM_PC24 mempcpy
00000328 R_ARM_PC24 ELFMAINX
0000032c R_ARM_PC24 ELFMAINX
00000350 R_ARM_PC24 open
00000364 R_ARM_PC24 read
00000370 R_ARM_PC24 close
00000394 R_ARM_PC24 ELFMAINX
000003a4 R_ARM_PC24 ELFMAINX
000003ac R_ARM_PC24 ELFMAINX
000003b8 R_ARM_PC24 ELFMAINX
000003c8 R_ARM_PC24 mempcpy
000003dc R_ARM_PC24 ELFMAINX
000003e8 R_ARM_PC24 ELFMAINX
000003e0 R_ARM_PC24 ELFMAINX
000003f8 R_ARM_PC24 mempcpy
00000408 R_ARM_PC24 ELFMAINX
0000040c R_ARM_PC24 ELFMAINX
00000410 R_ARM_PC24 ELFMAINX
00000428 R_ARM_PC24 mempcpy
00000438 R_ARM_PC24 ELFMAINX
0000043c R_ARM_PC24 ELFMAINX
00000454 R_ARM_PC24 mempcpy
0000045c R_ARM_PC24 getpid
00000424 R_ARM_PC24 mempcpy
0000042c R_ARM_PC24 getpid
00000434 R_ARM_PC24 ELFMAINX
00000440 R_ARM_PC24 ELFMAINX
0000044c R_ARM_PC24 ELFMAINX
00000464 R_ARM_PC24 ELFMAINX
00000470 R_ARM_PC24 ELFMAINX
0000047c R_ARM_PC24 ELFMAINX
00000494 R_ARM_PC24 ELFMAINX
000004b4 R_ARM_PC24 ELFMAINX
000004c8 R_ARM_PC24 memfd_create
000004d4 R_ARM_PC24 ELFMAINX
000004e0 R_ARM_PC24 memfd_create
000004ec R_ARM_PC24 ELFMAINX
000004f0 R_ARM_PC24 ELFMAINX
00000510 R_ARM_PC24 open
00000518 R_ARM_PC24 ELFMAINX
0000051c R_ARM_PC24 ELFMAINX
00000534 R_ARM_PC24 my_bkpt
00000554 R_ARM_PC24 uname
00000558 R_ARM_PC24 ELFMAINX
0000056c R_ARM_PC24 ELFMAINX
00000574 R_ARM_PC24 ELFMAINX
00000578 R_ARM_PC24 ELFMAINX
0000058c R_ARM_PC24 ELFMAINX
00000594 R_ARM_PC24 ELFMAINX
000005a4 R_ARM_PC24 ELFMAINX
000005ac R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 get_upxfn_path
000005bc R_ARM_PC24 ELFMAINX
000005c4 R_ARM_PC24 ELFMAINX
000005d0 R_ARM_PC24 ELFMAINX
00000480 R_ARM_PC24 ELFMAINX
00000494 R_ARM_PC24 memfd_create
000004a0 R_ARM_PC24 ELFMAINX
000004ac R_ARM_PC24 memfd_create
000004b8 R_ARM_PC24 ELFMAINX
000004bc R_ARM_PC24 ELFMAINX
000004dc R_ARM_PC24 open
000004e4 R_ARM_PC24 ELFMAINX
000004e8 R_ARM_PC24 ELFMAINX
00000500 R_ARM_PC24 my_bkpt
0000050c R_ARM_PC24 uname
00000510 R_ARM_PC24 ELFMAINX
00000524 R_ARM_PC24 ELFMAINX
0000052c R_ARM_PC24 ELFMAINX
00000530 R_ARM_PC24 ELFMAINX
00000544 R_ARM_PC24 ELFMAINX
0000054c R_ARM_PC24 ELFMAINX
0000055c R_ARM_PC24 ELFMAINX
00000564 R_ARM_PC24 ELFMAINX
00000568 R_ARM_PC24 get_upxfn_path
00000588 R_ARM_PC24 ELFMAINX
00000590 R_ARM_PC24 ELFMAINX
0000059c R_ARM_PC24 ELFMAINX
000005a8 R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 ELFMAINX
000005c0 R_ARM_PC24 open
000005cc R_ARM_PC24 ELFMAINX
000005d4 R_ARM_PC24 unlink
000005dc R_ARM_PC24 ELFMAINX
000005e4 R_ARM_PC24 ELFMAINX
000005f4 R_ARM_PC24 open
00000600 R_ARM_PC24 ELFMAINX
00000608 R_ARM_PC24 unlink
00000610 R_ARM_PC24 ELFMAINX
0000061c R_ARM_PC24 ELFMAINX
00000624 R_ARM_PC24 ELFMAINX
00000630 R_ARM_PC24 ftruncate
00000638 R_ARM_PC24 ELFMAINX
0000063c R_ARM_PC24 ELFMAINX
0000064c R_ARM_PC24 memset
0000066c R_ARM_PC24 write
00000674 R_ARM_PC24 ELFMAINX
0000067c R_ARM_PC24 ELFMAINX
0000068c R_ARM_PC24 lseek
00000698 R_ARM_PC24 ELFMAINX
0000069c R_ARM_PC24 ELFMAINX
000006a4 R_ARM_PC24 ELFMAINX
000006c8 R_ARM_PC24 mmap
000005e8 R_ARM_PC24 ELFMAINX
000005f0 R_ARM_PC24 ELFMAINX
000005fc R_ARM_PC24 ftruncate
00000604 R_ARM_PC24 ELFMAINX
00000608 R_ARM_PC24 ELFMAINX
00000618 R_ARM_PC24 memset
00000638 R_ARM_PC24 write
00000640 R_ARM_PC24 ELFMAINX
00000648 R_ARM_PC24 ELFMAINX
00000658 R_ARM_PC24 lseek
00000664 R_ARM_PC24 ELFMAINX
00000668 R_ARM_PC24 ELFMAINX
00000670 R_ARM_PC24 ELFMAINX
00000694 R_ARM_PC24 mmap

View File

@ -7,7 +7,7 @@ Name Origin Length Attributes
Linker script and memory map
.text 0x0000000000000000 0x1060
.text 0x0000000000000000 0x1b5c
.text 0x0000000000000000 0x344 tmp/arm.v4a-linux.elf-fold.o
0x0000000000000004 get_page_mask
0x00000000000002e4 memcpy
@ -22,9 +22,9 @@ Linker script and memory map
.text 0x0000000000000344 0x480 tmp/arm.v4a-linux.elf-upxfd_android.o
0x000000000000057c upx_mmap_and_fd
.text 0x00000000000007c4 0x0 tmp/arm.v4a-expand.o
.text 0x00000000000007c4 0x89c tmp/arm.v4a-linux.elf-main2.o
0x0000000000000ffc underlay
0x0000000000000ecc upx_main
.text 0x00000000000007c4 0x1398 tmp/arm.v4a-linux.elf-main2.o
0x0000000000001ab4 underlay
0x0000000000001858 upx_main
SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/arm.v4a-linux.elf-fold.o
@ -53,8 +53,8 @@ SYSCALLS 0x0000000000000000 0x214
0x00000000000000d8 mkdir
0x000000000000001c close
EXP_HEAD 0x0000000000000000 0xe0
EXP_HEAD 0x0000000000000000 0xe0 tmp/arm.v4a-expand.o
EXP_HEAD 0x0000000000000000 0xdc
EXP_HEAD 0x0000000000000000 0xdc tmp/arm.v4a-expand.o
0x0000000000000074 f_expand
EXP_TAIL 0x0000000000000000 0x24

View File

@ -4,14 +4,14 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS
1 ELFMAINZ 01dc 0 0 034 2**0 CONTENTS
2 ELFMAINX 06e4 0 0 0210 2**2 CONTENTS
2 ELFMAINX 06b8 0 0 0210 2**2 CONTENTS
SYMBOL TABLE:
00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINY 0 ELFMAINY
00000000 *UND* 0 MFLG
000000d8 g ELFMAINZ 0 getpid
0000049c g F ELFMAINX 0248 upx_mmap_and_fd
0000046c g F ELFMAINX 024c upx_mmap_and_fd
00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO
0000004c g ELFMAINZ 0 mempcpy
@ -28,7 +28,7 @@ SYMBOL TABLE:
00000128 g ELFMAINZ 0 read
00000164 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset
0000016c g F ELFMAINX 0f4 ucl_nrv2b_decompress_8
0000016c g F ELFMAINX 0c4 ucl_nrv2b_decompress_8
0000018c g ELFMAINZ 0 my_bkpt
000000b0 g ELFMAINZ 0 fsync
0000013c g ELFMAINZ 0 stat
@ -61,93 +61,93 @@ OFFSET TYPE VALUE
00000108 R_ARM_PC24 ELFMAINX
00000164 R_ARM_PC24 ELFMAINX
0000017c R_ARM_PC24 ELFMAINX
000001b4 R_ARM_PC24 ELFMAINX
000001bc R_ARM_PC24 ELFMAINX
000001c0 R_ARM_PC24 ELFMAINX
000001d0 R_ARM_PC24 ELFMAINX
000001d4 R_ARM_PC24 ELFMAINX
000001d8 R_ARM_PC24 ELFMAINX
000001e4 R_ARM_PC24 ELFMAINX
000001ec R_ARM_PC24 ELFMAINX
000001f0 R_ARM_PC24 ELFMAINX
000001f4 R_ARM_PC24 ELFMAINX
000001f8 R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX
00000204 R_ARM_PC24 ELFMAINX
00000208 R_ARM_PC24 ELFMAINX
00000214 R_ARM_PC24 ELFMAINX
00000224 R_ARM_PC24 ELFMAINX
0000020c R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX
00000238 R_ARM_PC24 ELFMAINX
0000022c R_ARM_PC24 ELFMAINX
0000023c R_ARM_PC24 ELFMAINX
00000258 R_ARM_PC24 ELFMAINX
0000025c R_ARM_PC24 ELFMAINX
0000026c R_ARM_PC24 ELFMAINX
00000288 R_ARM_PC24 ELFMAINX
000002a0 R_ARM_PC24 ELFMAINX
000002b4 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 memset
000002ec R_ARM_PC24 stat
000002f4 R_ARM_PC24 ELFMAINX
00000308 R_ARM_PC24 ELFMAINX
00000310 R_ARM_PC24 ELFMAINX
0000031c R_ARM_PC24 mkdir
00000334 R_ARM_PC24 ELFMAINX
0000034c R_ARM_PC24 mempcpy
0000035c R_ARM_PC24 ELFMAINX
00000360 R_ARM_PC24 ELFMAINX
00000384 R_ARM_PC24 open
00000394 R_ARM_PC24 read
000003a0 R_ARM_PC24 close
000003c4 R_ARM_PC24 ELFMAINX
000003d4 R_ARM_PC24 ELFMAINX
00000270 R_ARM_PC24 ELFMAINX
00000284 R_ARM_PC24 ELFMAINX
000002b0 R_ARM_PC24 memset
000002bc R_ARM_PC24 stat
000002c4 R_ARM_PC24 ELFMAINX
000002d8 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 ELFMAINX
000002ec R_ARM_PC24 mkdir
00000304 R_ARM_PC24 ELFMAINX
0000031c R_ARM_PC24 mempcpy
0000032c R_ARM_PC24 ELFMAINX
00000330 R_ARM_PC24 ELFMAINX
00000354 R_ARM_PC24 open
00000364 R_ARM_PC24 read
00000370 R_ARM_PC24 close
00000394 R_ARM_PC24 ELFMAINX
000003a4 R_ARM_PC24 ELFMAINX
000003ac R_ARM_PC24 ELFMAINX
000003b8 R_ARM_PC24 ELFMAINX
000003c8 R_ARM_PC24 mempcpy
000003dc R_ARM_PC24 ELFMAINX
000003e8 R_ARM_PC24 ELFMAINX
000003e0 R_ARM_PC24 ELFMAINX
000003f8 R_ARM_PC24 mempcpy
00000408 R_ARM_PC24 ELFMAINX
0000040c R_ARM_PC24 ELFMAINX
00000410 R_ARM_PC24 ELFMAINX
00000428 R_ARM_PC24 mempcpy
00000438 R_ARM_PC24 ELFMAINX
0000043c R_ARM_PC24 ELFMAINX
00000454 R_ARM_PC24 mempcpy
0000045c R_ARM_PC24 getpid
00000424 R_ARM_PC24 mempcpy
0000042c R_ARM_PC24 getpid
00000434 R_ARM_PC24 ELFMAINX
00000440 R_ARM_PC24 ELFMAINX
0000044c R_ARM_PC24 ELFMAINX
00000464 R_ARM_PC24 ELFMAINX
00000470 R_ARM_PC24 ELFMAINX
0000047c R_ARM_PC24 ELFMAINX
00000494 R_ARM_PC24 ELFMAINX
000004b8 R_ARM_PC24 ELFMAINX
000004cc R_ARM_PC24 memfd_create
000004d8 R_ARM_PC24 ELFMAINX
000004e4 R_ARM_PC24 memfd_create
000004f0 R_ARM_PC24 ELFMAINX
000004f4 R_ARM_PC24 ELFMAINX
00000510 R_ARM_PC24 open
00000518 R_ARM_PC24 ELFMAINX
0000051c R_ARM_PC24 ELFMAINX
00000534 R_ARM_PC24 my_bkpt
00000554 R_ARM_PC24 uname
00000558 R_ARM_PC24 ELFMAINX
0000056c R_ARM_PC24 ELFMAINX
00000574 R_ARM_PC24 ELFMAINX
00000578 R_ARM_PC24 ELFMAINX
0000058c R_ARM_PC24 ELFMAINX
00000594 R_ARM_PC24 ELFMAINX
000005a4 R_ARM_PC24 ELFMAINX
000005ac R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 get_upxfn_path
000005bc R_ARM_PC24 ELFMAINX
000005c4 R_ARM_PC24 ELFMAINX
000005d0 R_ARM_PC24 ELFMAINX
00000484 R_ARM_PC24 ELFMAINX
00000498 R_ARM_PC24 memfd_create
000004a4 R_ARM_PC24 ELFMAINX
000004b0 R_ARM_PC24 memfd_create
000004bc R_ARM_PC24 ELFMAINX
000004c0 R_ARM_PC24 ELFMAINX
000004dc R_ARM_PC24 open
000004e4 R_ARM_PC24 ELFMAINX
000004e8 R_ARM_PC24 ELFMAINX
00000500 R_ARM_PC24 my_bkpt
0000050c R_ARM_PC24 uname
00000510 R_ARM_PC24 ELFMAINX
00000524 R_ARM_PC24 ELFMAINX
0000052c R_ARM_PC24 ELFMAINX
00000530 R_ARM_PC24 ELFMAINX
00000544 R_ARM_PC24 ELFMAINX
0000054c R_ARM_PC24 ELFMAINX
0000055c R_ARM_PC24 ELFMAINX
00000564 R_ARM_PC24 ELFMAINX
00000568 R_ARM_PC24 get_upxfn_path
00000588 R_ARM_PC24 ELFMAINX
00000590 R_ARM_PC24 ELFMAINX
0000059c R_ARM_PC24 ELFMAINX
000005a8 R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 ELFMAINX
000005c0 R_ARM_PC24 open
000005cc R_ARM_PC24 ELFMAINX
000005d4 R_ARM_PC24 unlink
000005dc R_ARM_PC24 ELFMAINX
000005e4 R_ARM_PC24 ELFMAINX
000005f4 R_ARM_PC24 open
00000600 R_ARM_PC24 ELFMAINX
00000608 R_ARM_PC24 unlink
00000610 R_ARM_PC24 ELFMAINX
0000061c R_ARM_PC24 ELFMAINX
00000624 R_ARM_PC24 ELFMAINX
00000630 R_ARM_PC24 ftruncate
00000638 R_ARM_PC24 ELFMAINX
0000063c R_ARM_PC24 ELFMAINX
0000064c R_ARM_PC24 memset
0000066c R_ARM_PC24 write
00000674 R_ARM_PC24 ELFMAINX
0000067c R_ARM_PC24 ELFMAINX
0000068c R_ARM_PC24 lseek
00000698 R_ARM_PC24 ELFMAINX
0000069c R_ARM_PC24 ELFMAINX
000006a4 R_ARM_PC24 ELFMAINX
000006c8 R_ARM_PC24 mmap
000005e8 R_ARM_PC24 ELFMAINX
000005f0 R_ARM_PC24 ELFMAINX
000005fc R_ARM_PC24 ftruncate
00000604 R_ARM_PC24 ELFMAINX
00000608 R_ARM_PC24 ELFMAINX
00000618 R_ARM_PC24 memset
00000638 R_ARM_PC24 write
00000640 R_ARM_PC24 ELFMAINX
00000648 R_ARM_PC24 ELFMAINX
00000658 R_ARM_PC24 lseek
00000664 R_ARM_PC24 ELFMAINX
00000668 R_ARM_PC24 ELFMAINX
00000670 R_ARM_PC24 ELFMAINX
00000694 R_ARM_PC24 mmap

View File

@ -8,7 +8,7 @@ Linker script and memory map
TARGET(elf32-littlearm)
.text 0x0000000000000000 0x1060
.text 0x0000000000000000 0x1b7c
*(.text)
.text 0x0000000000000000 0x344 tmp/arm.v5a-linux.elf-fold.o
0x0000000000000004 get_page_mask
@ -21,17 +21,17 @@ TARGET(elf32-littlearm)
0x0000000000000024 Pprotect
0x00000000fffffff4 PAGE_MASK
0x0000000000000024 mprotect
.text 0x0000000000000344 0x484 tmp/arm.v5a-linux.elf-upxfd_android.o
.text 0x0000000000000344 0x488 tmp/arm.v5a-linux.elf-upxfd_android.o
0x0000000000000580 upx_mmap_and_fd
.text 0x00000000000007c8 0x0 tmp/arm.v5a-expand.o
.text 0x00000000000007c8 0x898 tmp/arm.v5a-linux.elf-main2.o
0x0000000000000ffc underlay
0x0000000000000ecc upx_main
.text 0x00000000000007cc 0x0 tmp/arm.v5a-expand.o
.text 0x00000000000007cc 0x13b0 tmp/arm.v5a-linux.elf-main2.o
0x0000000000001ad4 underlay
0x0000000000001874 upx_main
*(.data)
.data 0x0000000000001060 0x0 tmp/arm.v5a-linux.elf-fold.o
.data 0x0000000000001060 0x0 tmp/arm.v5a-linux.elf-upxfd_android.o
.data 0x0000000000001060 0x0 tmp/arm.v5a-expand.o
.data 0x0000000000001060 0x0 tmp/arm.v5a-linux.elf-main2.o
.data 0x0000000000001b7c 0x0 tmp/arm.v5a-linux.elf-fold.o
.data 0x0000000000001b7c 0x0 tmp/arm.v5a-linux.elf-upxfd_android.o
.data 0x0000000000001b7c 0x0 tmp/arm.v5a-expand.o
.data 0x0000000000001b7c 0x0 tmp/arm.v5a-linux.elf-main2.o
SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/arm.v5a-linux.elf-fold.o
@ -60,8 +60,8 @@ SYSCALLS 0x0000000000000000 0x214
0x00000000000000d8 mkdir
0x000000000000001c close
EXP_HEAD 0x0000000000000000 0xe0
EXP_HEAD 0x0000000000000000 0xe0 tmp/arm.v5a-expand.o
EXP_HEAD 0x0000000000000000 0xdc
EXP_HEAD 0x0000000000000000 0xdc tmp/arm.v5a-expand.o
0x0000000000000074 f_expand
EXP_TAIL 0x0000000000000000 0x24

View File

@ -4,14 +4,14 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS
1 ELFMAINZ 01dc 0 0 034 2**0 CONTENTS
2 ELFMAINX 06e0 0 0 0210 2**2 CONTENTS
2 ELFMAINX 06b0 0 0 0210 2**2 CONTENTS
SYMBOL TABLE:
00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINY 0 ELFMAINY
00000000 *UND* 0 MFLG
000000d8 g ELFMAINZ 0 getpid
00000498 g F ELFMAINX 0248 upx_mmap_and_fd
00000468 g F ELFMAINX 0248 upx_mmap_and_fd
00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO
0000004c g ELFMAINZ 0 mempcpy
@ -28,7 +28,7 @@ SYMBOL TABLE:
00000128 g ELFMAINZ 0 read
00000164 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset
0000016c g F ELFMAINX 0f4 ucl_nrv2b_decompress_8
0000016c g F ELFMAINX 0c4 ucl_nrv2b_decompress_8
0000018c g ELFMAINZ 0 my_bkpt
000000b0 g ELFMAINZ 0 fsync
0000013c g ELFMAINZ 0 stat
@ -61,92 +61,92 @@ OFFSET TYPE VALUE
00000108 R_ARM_PC24 ELFMAINX
00000164 R_ARM_PC24 ELFMAINX
0000017c R_ARM_PC24 ELFMAINX
000001b4 R_ARM_PC24 ELFMAINX
000001bc R_ARM_PC24 ELFMAINX
000001c0 R_ARM_PC24 ELFMAINX
000001d0 R_ARM_PC24 ELFMAINX
000001d4 R_ARM_PC24 ELFMAINX
000001d8 R_ARM_PC24 ELFMAINX
000001e4 R_ARM_PC24 ELFMAINX
000001ec R_ARM_PC24 ELFMAINX
000001f0 R_ARM_PC24 ELFMAINX
000001f4 R_ARM_PC24 ELFMAINX
000001f8 R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX
00000204 R_ARM_PC24 ELFMAINX
00000208 R_ARM_PC24 ELFMAINX
00000214 R_ARM_PC24 ELFMAINX
00000224 R_ARM_PC24 ELFMAINX
0000020c R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX
00000238 R_ARM_PC24 ELFMAINX
0000022c R_ARM_PC24 ELFMAINX
0000023c R_ARM_PC24 ELFMAINX
00000258 R_ARM_PC24 ELFMAINX
0000025c R_ARM_PC24 ELFMAINX
0000026c R_ARM_PC24 ELFMAINX
00000288 R_ARM_PC24 ELFMAINX
000002a0 R_ARM_PC24 ELFMAINX
000002b4 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 memset
000002ec R_ARM_PC24 stat
000002f4 R_ARM_PC24 ELFMAINX
00000308 R_ARM_PC24 ELFMAINX
00000318 R_ARM_PC24 mkdir
00000330 R_ARM_PC24 ELFMAINX
00000348 R_ARM_PC24 mempcpy
00000358 R_ARM_PC24 ELFMAINX
0000035c R_ARM_PC24 ELFMAINX
00000380 R_ARM_PC24 open
00000394 R_ARM_PC24 read
000003a0 R_ARM_PC24 close
000003c4 R_ARM_PC24 ELFMAINX
000003d4 R_ARM_PC24 ELFMAINX
00000270 R_ARM_PC24 ELFMAINX
00000284 R_ARM_PC24 ELFMAINX
000002b0 R_ARM_PC24 memset
000002bc R_ARM_PC24 stat
000002c4 R_ARM_PC24 ELFMAINX
000002d8 R_ARM_PC24 ELFMAINX
000002e8 R_ARM_PC24 mkdir
00000300 R_ARM_PC24 ELFMAINX
00000318 R_ARM_PC24 mempcpy
00000328 R_ARM_PC24 ELFMAINX
0000032c R_ARM_PC24 ELFMAINX
00000350 R_ARM_PC24 open
00000364 R_ARM_PC24 read
00000370 R_ARM_PC24 close
00000394 R_ARM_PC24 ELFMAINX
000003a4 R_ARM_PC24 ELFMAINX
000003ac R_ARM_PC24 ELFMAINX
000003b8 R_ARM_PC24 ELFMAINX
000003c8 R_ARM_PC24 mempcpy
000003dc R_ARM_PC24 ELFMAINX
000003e8 R_ARM_PC24 ELFMAINX
000003e0 R_ARM_PC24 ELFMAINX
000003f8 R_ARM_PC24 mempcpy
00000408 R_ARM_PC24 ELFMAINX
0000040c R_ARM_PC24 ELFMAINX
00000410 R_ARM_PC24 ELFMAINX
00000428 R_ARM_PC24 mempcpy
00000438 R_ARM_PC24 ELFMAINX
0000043c R_ARM_PC24 ELFMAINX
00000454 R_ARM_PC24 mempcpy
0000045c R_ARM_PC24 getpid
00000424 R_ARM_PC24 mempcpy
0000042c R_ARM_PC24 getpid
00000434 R_ARM_PC24 ELFMAINX
00000440 R_ARM_PC24 ELFMAINX
0000044c R_ARM_PC24 ELFMAINX
00000464 R_ARM_PC24 ELFMAINX
00000470 R_ARM_PC24 ELFMAINX
0000047c R_ARM_PC24 ELFMAINX
00000494 R_ARM_PC24 ELFMAINX
000004b4 R_ARM_PC24 ELFMAINX
000004c8 R_ARM_PC24 memfd_create
000004d4 R_ARM_PC24 ELFMAINX
000004e0 R_ARM_PC24 memfd_create
000004ec R_ARM_PC24 ELFMAINX
000004f0 R_ARM_PC24 ELFMAINX
00000510 R_ARM_PC24 open
00000518 R_ARM_PC24 ELFMAINX
0000051c R_ARM_PC24 ELFMAINX
00000534 R_ARM_PC24 my_bkpt
00000554 R_ARM_PC24 uname
00000558 R_ARM_PC24 ELFMAINX
0000056c R_ARM_PC24 ELFMAINX
00000574 R_ARM_PC24 ELFMAINX
00000578 R_ARM_PC24 ELFMAINX
0000058c R_ARM_PC24 ELFMAINX
00000594 R_ARM_PC24 ELFMAINX
000005a4 R_ARM_PC24 ELFMAINX
000005ac R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 get_upxfn_path
000005bc R_ARM_PC24 ELFMAINX
000005c4 R_ARM_PC24 ELFMAINX
000005d0 R_ARM_PC24 ELFMAINX
00000480 R_ARM_PC24 ELFMAINX
00000494 R_ARM_PC24 memfd_create
000004a0 R_ARM_PC24 ELFMAINX
000004ac R_ARM_PC24 memfd_create
000004b8 R_ARM_PC24 ELFMAINX
000004bc R_ARM_PC24 ELFMAINX
000004dc R_ARM_PC24 open
000004e4 R_ARM_PC24 ELFMAINX
000004e8 R_ARM_PC24 ELFMAINX
00000500 R_ARM_PC24 my_bkpt
0000050c R_ARM_PC24 uname
00000510 R_ARM_PC24 ELFMAINX
00000524 R_ARM_PC24 ELFMAINX
0000052c R_ARM_PC24 ELFMAINX
00000530 R_ARM_PC24 ELFMAINX
00000544 R_ARM_PC24 ELFMAINX
0000054c R_ARM_PC24 ELFMAINX
0000055c R_ARM_PC24 ELFMAINX
00000564 R_ARM_PC24 ELFMAINX
00000568 R_ARM_PC24 get_upxfn_path
00000588 R_ARM_PC24 ELFMAINX
00000590 R_ARM_PC24 ELFMAINX
0000059c R_ARM_PC24 ELFMAINX
000005a8 R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 ELFMAINX
000005c0 R_ARM_PC24 open
000005cc R_ARM_PC24 ELFMAINX
000005d4 R_ARM_PC24 unlink
000005dc R_ARM_PC24 ELFMAINX
000005e4 R_ARM_PC24 ELFMAINX
000005f4 R_ARM_PC24 open
00000600 R_ARM_PC24 ELFMAINX
00000608 R_ARM_PC24 unlink
00000610 R_ARM_PC24 ELFMAINX
0000061c R_ARM_PC24 ELFMAINX
00000624 R_ARM_PC24 ELFMAINX
00000630 R_ARM_PC24 ftruncate
00000638 R_ARM_PC24 ELFMAINX
0000063c R_ARM_PC24 ELFMAINX
0000064c R_ARM_PC24 memset
0000066c R_ARM_PC24 write
00000674 R_ARM_PC24 ELFMAINX
0000067c R_ARM_PC24 ELFMAINX
0000068c R_ARM_PC24 lseek
00000698 R_ARM_PC24 ELFMAINX
0000069c R_ARM_PC24 ELFMAINX
000006a4 R_ARM_PC24 ELFMAINX
000006c8 R_ARM_PC24 mmap
000005e8 R_ARM_PC24 ELFMAINX
000005f0 R_ARM_PC24 ELFMAINX
000005fc R_ARM_PC24 ftruncate
00000604 R_ARM_PC24 ELFMAINX
00000608 R_ARM_PC24 ELFMAINX
00000618 R_ARM_PC24 memset
00000638 R_ARM_PC24 write
00000640 R_ARM_PC24 ELFMAINX
00000648 R_ARM_PC24 ELFMAINX
00000658 R_ARM_PC24 lseek
00000664 R_ARM_PC24 ELFMAINX
00000668 R_ARM_PC24 ELFMAINX
00000670 R_ARM_PC24 ELFMAINX
00000694 R_ARM_PC24 mmap

View File

@ -7,7 +7,7 @@ Name Origin Length Attributes
Linker script and memory map
.text 0x0000000000000000 0x1074
.text 0x0000000000000000 0x1b70
.text 0x0000000000000000 0x344 tmp/armeb.v4a-linux.elf-fold.o
0x0000000000000004 get_page_mask
0x00000000000002e4 memcpy
@ -22,9 +22,9 @@ Linker script and memory map
.text 0x0000000000000344 0x480 tmp/armeb.v4a-linux.elf-upxfd_android.o
0x000000000000057c upx_mmap_and_fd
.text 0x00000000000007c4 0x0 tmp/armeb.v4a-expand.o
.text 0x00000000000007c4 0x8b0 tmp/armeb.v4a-linux.elf-main2.o
0x0000000000001010 underlay
0x0000000000000edc upx_main
.text 0x00000000000007c4 0x13ac tmp/armeb.v4a-linux.elf-main2.o
0x0000000000001ac8 underlay
0x0000000000001868 upx_main
SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/armeb.v4a-linux.elf-fold.o
@ -53,8 +53,8 @@ SYSCALLS 0x0000000000000000 0x214
0x00000000000000d8 mkdir
0x000000000000001c close
EXP_HEAD 0x0000000000000000 0xe0
EXP_HEAD 0x0000000000000000 0xe0 tmp/armeb.v4a-expand.o
EXP_HEAD 0x0000000000000000 0xdc
EXP_HEAD 0x0000000000000000 0xdc tmp/armeb.v4a-expand.o
0x0000000000000074 f_expand
EXP_TAIL 0x0000000000000000 0x24

View File

@ -2,12 +2,12 @@ file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 060f 0 0 034 2**2 CONTENTS
1 ELFMAINZ 0a 0 0 0643 2**0 CONTENTS
0 ELFMAINX 0635 0 0 034 2**2 CONTENTS
1 ELFMAINZ 0a 0 0 0669 2**0 CONTENTS
SYMBOL TABLE:
00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINZ 0 ELFMAINZ
000003f7 g F ELFMAINX 0218 upx_mmap_and_fd
000003f7 g F ELFMAINX 023e upx_mmap_and_fd
00000000 *UND* 0 O_BINFO
000001cc g ELFMAINX 0 mempcpy
00000172 g ELFMAINX 0 mmap
@ -28,11 +28,11 @@ OFFSET TYPE VALUE
0000020e R_386_PC32 stat
0000023c R_386_PC32 mkdir
0000032b R_386_PC32 mempcpy
00000477 R_386_PC32 my_bkpt
00000498 R_386_PC32 uname
000004f5 R_386_PC32 get_upxfn_path
0000057c R_386_PC32 memset
000005e3 R_386_PC32 mmap
00000475 R_386_PC32 my_bkpt
00000484 R_386_PC32 uname
000004de R_386_PC32 get_upxfn_path
00000585 R_386_PC32 memset
00000609 R_386_PC32 mmap
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE

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

@ -7,18 +7,18 @@ Name Origin Length Attributes
Linker script and memory map
.text 0x0000000000000000 0xd6c
.text 0x0000000000000000 0x176e
.text 0x0000000000000000 0x18b tmp/i386-linux.elf-fold.o
0x000000000000000c get_page_mask
0x0000000000000019 get_upxfn_path
*fill* 0x000000000000018b 0x1 00
.text 0x000000000000018c 0x41f tmp/i386-linux.elf-upxfd_android.o
.text 0x000000000000018c 0x445 tmp/i386-linux.elf-upxfd_android.o
0x0000000000000393 upx_mmap_and_fd
*fill* 0x00000000000005ab 0x1 00
.text 0x00000000000005ac 0x0 tmp/i386-expand.o
.text 0x00000000000005ac 0x7c0 tmp/i386-linux.elf-main2.o
0x0000000000000701 underlay
0x0000000000000c18 upx_main
*fill* 0x00000000000005d1 0x3 00
.text 0x00000000000005d4 0x0 tmp/i386-expand.o
.text 0x00000000000005d4 0x119a tmp/i386-linux.elf-main2.o
0x00000000000016f1 underlay
0x0000000000001475 upx_main
.data 0x0000000000000000 0x0
.data 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o

View File

@ -8,18 +8,18 @@ Linker script and memory map
TARGET(elf32-bigmips)
.text 0x0000000000000000 0xdcc
.text 0x0000000000000000 0x1ba0
*(.text)
.text 0x0000000000000000 0xdcc tmp/mips.r3000-linux.elf-fold.o
.text 0x0000000000000000 0x1ba0 tmp/mips.r3000-linux.elf-fold.o
0x00000000000000d0 get_page_mask
0x0000000000000cac upx_mmap_and_fd
0x0000000000001a80 upx_mmap_and_fd
0x00000000000000f0 get_upxfn_path
0x0000000000000c40 underlay
0x0000000000000aa8 upx_main
0x00000000000019d0 underlay
0x00000000000016f4 upx_main
0x0000000000000010 get4unal
0x0000000000000128 close
*(.data)
.data 0x0000000000000dcc 0x0 tmp/mips.r3000-linux.elf-fold.o
.data 0x0000000000001ba0 0x0 tmp/mips.r3000-linux.elf-fold.o
SYSCALLS 0x0000000000000000 0x178
SYSCALLS 0x0000000000000000 0x178 tmp/mips.r3000-linux.elf-fold.o

View File

@ -8,18 +8,18 @@ Linker script and memory map
TARGET(elf32-littlemips)
.text 0x0000000000000000 0xdbc
.text 0x0000000000000000 0x1b90
*(.text)
.text 0x0000000000000000 0xdbc tmp/mipsel.r3000-linux.elf-fold.o
.text 0x0000000000000000 0x1b90 tmp/mipsel.r3000-linux.elf-fold.o
0x00000000000000d0 get_page_mask
0x0000000000000c9c upx_mmap_and_fd
0x0000000000001a70 upx_mmap_and_fd
0x00000000000000f0 get_upxfn_path
0x0000000000000c30 underlay
0x0000000000000a98 upx_main
0x00000000000019c0 underlay
0x00000000000016e4 upx_main
0x0000000000000010 get4unal
0x0000000000000128 close
*(.data)
.data 0x0000000000000dbc 0x0 tmp/mipsel.r3000-linux.elf-fold.o
.data 0x0000000000001b90 0x0 tmp/mipsel.r3000-linux.elf-fold.o
SYSCALLS 0x0000000000000000 0x178
SYSCALLS 0x0000000000000000 0x178 tmp/mipsel.r3000-linux.elf-fold.o

View File

@ -8,7 +8,7 @@ Linker script and memory map
TARGET(elf32-powerpc)
.text 0x0000000000000000 0x1350
.text 0x0000000000000000 0x2330
*(.text)
.text 0x0000000000000000 0x294 tmp/powerpc-linux.elf-fold.o
0x0000000000000048 Pmap
@ -18,14 +18,14 @@ TARGET(elf32-powerpc)
.text 0x0000000000000294 0x130 tmp/powerpc-linux.elf-upxfd_android.o
0x0000000000000294 upx_mmap_and_fd
.text 0x00000000000003c4 0x0 tmp/powerpc-expand.o
.text 0x00000000000003c4 0xf8c tmp/powerpc-linux.elf-main2.o
0x00000000000008bc underlay
0x000000000000113c upx_main
.text 0x00000000000003c4 0x1f6c tmp/powerpc-linux.elf-main2.o
0x0000000000000bac underlay
0x00000000000018ec upx_main
*(.data)
.data 0x0000000000001350 0x0 tmp/powerpc-linux.elf-fold.o
.data 0x0000000000001350 0x0 tmp/powerpc-linux.elf-upxfd_android.o
.data 0x0000000000001350 0x0 tmp/powerpc-expand.o
.data 0x0000000000001350 0x0 tmp/powerpc-linux.elf-main2.o
.data 0x0000000000002330 0x0 tmp/powerpc-linux.elf-fold.o
.data 0x0000000000002330 0x0 tmp/powerpc-linux.elf-upxfd_android.o
.data 0x0000000000002330 0x0 tmp/powerpc-expand.o
.data 0x0000000000002330 0x0 tmp/powerpc-linux.elf-main2.o
.data