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
+161 -136
View File
@@ -1485,6 +1485,7 @@ PackLinuxElf32::buildLinuxLoader(
} }
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SO_TAIL,SO_MAIN"); 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. (void)len; // Pacify the anal-retentive static analyzer which hates a good idiom.
NO_printf("%s\n", sec);
addLoader(sec, nullptr); addLoader(sec, nullptr);
relocateLoader(); relocateLoader();
{ {
@@ -1521,8 +1522,8 @@ PackLinuxElf32::buildLinuxLoader(
"LZMA_DAISY,LZMA_ELF00,LZMA_DEC20,LZMA_DEC30"); "LZMA_DAISY,LZMA_ELF00,LZMA_DEC20,LZMA_DEC30");
} }
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SYSCALLS"); len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SYSCALLS");
//fprintf(stderr, "%s\n", sec);
(void)len; (void)len;
NO_printf("%s\n", sec);
addLoader(sec, nullptr); addLoader(sec, nullptr);
relocateLoader(); relocateLoader();
{ {
@@ -1645,6 +1646,7 @@ PackLinuxElf64::buildLinuxLoader(
} }
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SO_TAIL,SO_MAIN"); len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SO_TAIL,SO_MAIN");
(void)len; (void)len;
NO_printf("\n%s\n", sec);
addLoader(sec, nullptr); addLoader(sec, nullptr);
relocateLoader(); relocateLoader();
{ {
@@ -1679,6 +1681,7 @@ PackLinuxElf64::buildLinuxLoader(
} }
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SYSCALLS"); len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SYSCALLS");
(void)len; (void)len;
NO_printf("\n%s\n", sec);
addLoader(sec, nullptr); addLoader(sec, nullptr);
relocateLoader(); relocateLoader();
{ {
@@ -2656,6 +2659,161 @@ PackLinuxElf32::canPackOSABI(Elf32_Ehdr const *ehdr)
return true; // good so far 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() tribool PackLinuxElf32::canPack()
{ {
union { union {
@@ -2889,138 +3047,9 @@ tribool PackLinuxElf32::canPack()
|| Elf32_Ehdr::EM_PPC == get_te16(&ehdr->e_machine)) { || Elf32_Ehdr::EM_PPC == get_te16(&ehdr->e_machine)) {
throwCantPack("This test UPX cannot pack .so for MIPS or PowerPC; coming soon."); throwCantPack("This test UPX cannot pack .so for MIPS or PowerPC; coming soon.");
} }
Elf32_Shdr const *shdr = shdri; xct_va = ~(upx_uint64_t)0;
xct_va = ~0u;
if (e_shnum) { if (e_shnum) {
for (int j= e_shnum; --j>=0; ++shdr) { xct_va = canPack_Shdr(pload_x0);
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];
}
}
}
} }
else { // no Sections; use heuristics else { // no Sections; use heuristics
unsigned const strsz = elf_unsigned_dynamic(Elf32_Dyn::DT_STRSZ); unsigned const strsz = elf_unsigned_dynamic(Elf32_Dyn::DT_STRSZ);
@@ -5730,10 +5759,6 @@ void PackLinuxElf32mipsel::defineSymbols(Filter const *ft)
PackLinuxElf32::defineSymbols(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(). // ::forward_Shdrs adds info for the benefit of gdb and Android dlopen().
// De-compression (runtime and offline) ignores the added information // De-compression (runtime and offline) ignores the added information
// because it uses the de-compressed Ehdr etc. // because it uses the de-compressed Ehdr etc.
+1
View File
@@ -149,6 +149,7 @@ protected:
virtual void ARM_updateLoader(OutputFile *); virtual void ARM_updateLoader(OutputFile *);
virtual int ARM_is_QNX(void); 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 pack1(OutputFile *, Filter &) override; // generate executable header
virtual void asl_pack2_Shdrs(OutputFile *, unsigned pre_xct_top); // AndroidSharedLibrary processes Shdrs 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 virtual void asl_slide_Shdrs(); // by so_slide if above xct_off
+550 -553
View File
File diff suppressed because it is too large Load Diff
+2409 -1948
View File
File diff suppressed because it is too large Load Diff
+587 -491
View File
File diff suppressed because it is too large Load Diff
+1875 -1984
View File
File diff suppressed because it is too large Load Diff
+553 -556
View File
File diff suppressed because it is too large Load Diff
+2439 -1956
View File
File diff suppressed because it is too large Load Diff
+590 -494
View File
File diff suppressed because it is too large Load Diff
+1903 -2007
View File
File diff suppressed because it is too large Load Diff
+550 -553
View File
File diff suppressed because it is too large Load Diff
+2411 -1950
View File
File diff suppressed because it is too large Load Diff
+174 -172
View File
@@ -1,5 +1,5 @@
/* i386-linux.elf-entry.h /* 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. This file is part of the UPX executable compressor.
@@ -32,14 +32,14 @@
/* clang-format off */ /* clang-format off */
#define STUB_I386_LINUX_ELF_ENTRY_SIZE 3736 #define STUB_I386_LINUX_ELF_ENTRY_SIZE 3772
#define STUB_I386_LINUX_ELF_ENTRY_ADLER32 0x7469419f #define STUB_I386_LINUX_ELF_ENTRY_ADLER32 0xc89f6db4
#define STUB_I386_LINUX_ELF_ENTRY_CRC32 0x08a4e7ed #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, /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 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, /* 0x0030 */ 8, 0, 5, 0,243, 15, 30,251,232,252,255,255,255, 1,219,116,
/* 0x0040 */ 2,243,195,139, 30,131,238,252, 17,219,195, 94,131,236, 28,141, /* 0x0040 */ 2,243,195,139, 30,131,238,252, 17,219,195, 94,131,236, 28,141,
/* 0x0050 */ 124, 36, 32,232,190, 1, 0, 0,232,185, 1, 0, 0,139, 7,139, /* 0x0050 */ 124, 36, 32,232,190, 1, 0, 0,232,185, 1, 0, 0,139, 7,139,
@@ -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, /* 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, /* 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, /* 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, /* 0x0430 */ 83,129,236, 60, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0,
/* 0x0440 */ 120, 0, 95,184,100, 1, 0, 0,137,251,185, 16, 0, 0, 0,205, /* 0x0440 */ 0,117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,
/* 0x0450 */ 128,137,198,131,248,234,117, 13,184,100, 1, 0, 0,137,251,137, /* 0x0450 */ 137,243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,
/* 0x0460 */ 209,205,128,137,198,133,246,121, 73,232, 9, 0, 0, 0, 47,100, /* 0x0460 */ 137,243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0,
/* 0x0470 */ 101,118, 47,115,104,109, 0, 88,137, 69,160,191, 2, 0, 65, 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,195,137,249,137,242,106, 5, 88,205,128, /* 0x0480 */ 190,192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,
/* 0x0490 */ 137,198,133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, /* 0x0490 */ 133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,
/* 0x04a0 */ 95, 99,114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131, /* 0x04a0 */ 114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,
/* 0x04b0 */ 196, 4,129,236, 16, 16, 0, 0,141, 68, 36, 15,131,224,240,137, /* 0x04b0 */ 141,157,244,239,255,255, 83,232,252,255,255,255,190, 0, 0, 0,
/* 0x04c0 */ 69,240,199, 0, 0, 0, 0, 0,255,117,240,232,252,255,255,255, /* 0x04c0 */ 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,199, 4, 36, 3, 0,
/* 0x04d0 */ 191, 0, 0, 0, 0,232, 4, 0, 0, 0, 97,110,100, 0, 89,199, /* 0x04d0 */ 0, 0, 83, 80,232, 24,255,255,255,131,196, 12,133,192,116, 39,
/* 0x04e0 */ 4, 36, 3, 0, 0, 0,141, 69,240, 80, 81,232, 1,255,255,255, /* 0x04e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 83, 80,232,254,
/* 0x04f0 */ 131,196, 12,133,192,116, 39,232, 4, 0, 0, 0, 76,105,110, 0, /* 0x04f0 */ 254,255,255,131,196, 12,133,192,117, 13,128,189,118,240,255,255,
/* 0x0500 */ 88,106, 3,141, 77,240, 81, 80,232,228,254,255,255,131,196, 12, /* 0x0500 */ 52,126, 4,102,190, 1, 0,133,246,117,123,131,125, 16, 0,117,
/* 0x0510 */ 133,192,117, 10,128,125,114, 52,126, 4,102,191, 1, 0,133,255, /* 0x0510 */ 28,232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,
/* 0x0520 */ 117, 99,131,125, 16, 0,117, 8,232,252,255,255,255,137, 69, 16, /* 0x0520 */ 239,255,255,137, 69, 16,198,133,244,239,255,255, 0,133,246,117,
/* 0x0530 */ 133,255,117, 81,131,254,218,117, 76,131,125, 16, 0,116, 70,139, /* 0x0530 */ 85,131,255,218,117, 80,131,125, 16, 0,116, 74,139, 85, 16,128,
/* 0x0540 */ 69, 16,128, 56, 0,117, 22,255,117,240, 80,232, 85,253,255,255, /* 0x0540 */ 58, 0,117, 26,141,133,244,239,255,255, 80, 82,232, 84,253,255,
/* 0x0550 */ 131,196, 8,137,193,133,192, 15,136,220, 0, 0, 0,190,194, 0, /* 0x0550 */ 255,131,196, 8,137,193,133,192, 15,136, 1, 1, 0, 0,185,194,
/* 0x0560 */ 0, 0,139, 93, 16,137,241,186,192, 1, 0, 0,106, 5, 88,205, /* 0x0560 */ 0, 0, 0,191,192, 1, 0, 0,139, 93, 16,137,250,106, 5, 88,
/* 0x0570 */ 128,137,198,137,193,133,192, 15,136,188, 0, 0, 0,139, 93, 16, /* 0x0570 */ 205,128,137,199,137,193,133,192, 15,136,225, 0, 0, 0,139, 93,
/* 0x0580 */ 106, 10, 88,205,128,131,125, 12, 0,116,115,133,255,116, 22,137, /* 0x0580 */ 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,148, 0, 0, 0,
/* 0x0590 */ 243,139, 77, 12,106, 93, 88,205,128,137,193,133,192, 15,136,150, /* 0x0590 */ 133,246,116, 22,137,251,139, 77, 12,106, 93, 88,205,128,137,193,
/* 0x05a0 */ 0, 0, 0,235, 89,104, 0, 16, 0, 0,106, 0,255,117,240,232, /* 0x05a0 */ 133,192, 15,136,183, 0, 0, 0,235,122,141,133,244,239,255,255,
/* 0x05b0 */ 252,255,255,255,139,125, 12,131,196, 12,133,255,116, 47,139, 69, /* 0x05b0 */ 104, 0, 16, 0, 0,106, 0, 80,232,252,255,255,255,139, 69, 12,
/* 0x05c0 */ 240,137, 69,152,137,125,156,129,255, 0, 16, 0, 0,118, 7,199, /* 0x05c0 */ 137,133,208,239,255,255,131,196, 12,133,192,116, 73,141,181,244,
/* 0x05d0 */ 69,156, 0, 16, 0, 0,137,243,139, 77,152,139, 85,156,106, 4, /* 0x05d0 */ 239,255,255,139,149,208,239,255,255,137,149,184,239,255,255,129,
/* 0x05e0 */ 88,205,128, 59, 69,156,117, 67, 43,125,156,117,215,137,243,185, /* 0x05e0 */ 250, 0, 16, 0, 0,118, 10,199,133,184,239,255,255, 0, 16, 0,
/* 0x05f0 */ 0, 0, 0, 0,186, 0, 0, 0, 0,106, 19, 88,205,128,106, 0, /* 0x05f0 */ 0,137,251,137,241,139,149,184,239,255,255,106, 4, 88,205,128,
/* 0x0600 */ 86,131,125, 8, 1, 25,192,131,224,240,131,192, 17, 80,106, 3, /* 0x0600 */ 59,133,184,239,255,255,117, 73,139,133,184,239,255,255, 41,133,
/* 0x0610 */ 255,117, 12,255,117, 8,232,252,255,255,255,137,194,131,196, 24, /* 0x0610 */ 208,239,255,255,117,189,185, 0, 0, 0, 0,137,251,137,202,106,
/* 0x0620 */ 137,193, 61, 0,240,255,255,119, 16,235, 7,185,228,255,255,255, /* 0x0620 */ 19, 88,205,128,106, 0, 87,131,125, 8, 1, 25,192,131,224,240,
/* 0x0630 */ 235, 7,141, 70, 1,137,193, 9,209,137,200,141,101,244, 91, 94, /* 0x0630 */ 131,192, 17, 80,106, 3,255,117, 12,255,117, 8,232,252,255,255,
/* 0x0640 */ 95,201,195, 90,232, 19, 0, 0, 0, 0, 0, 0, 0, 0, 46,115, /* 0x0640 */ 255,137,194,131,196, 24,137,193, 61, 0,240,255,255,119, 16,235,
/* 0x0650 */ 121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115, /* 0x0650 */ 7,185,228,255,255,255,235, 7,141, 71, 1,137,193, 9,209,137,
/* 0x0660 */ 104,115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76, 70, 77, /* 0x0660 */ 200,141,101,244, 91, 94, 95,201,195, 90,232, 19, 0, 0, 0, 0,
/* 0x0670 */ 65, 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78, /* 0x0670 */ 0, 0, 0, 0, 46,115,121,109,116, 97, 98, 0, 46,115,116,114,
/* 0x0680 */ 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0680 */ 116, 97, 98, 0, 46,115,104,115,116,114,116, 97, 98, 0, 46,114,
/* 0x0690 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0690 */ 101,108, 69, 76, 70, 77, 65, 73, 78, 88, 0, 46,114,101,108, 69,
/* 0x06a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, /* 0x06a0 */ 76, 70, 77, 65, 73, 78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06b0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x06b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06c0 */ 15, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 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, 27, 0, 0, 0, 9, 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 */ 0, 0, 0, 0, 0, 9, 0, 0, 96, 0, 0, 0, 6, 0, 0, 0, /* 0x06e0 */ 52, 0, 0, 0, 53, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06f0 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0, /* 0x06f0 */ 4, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 9, 0, 0, 0,
/* 0x0700 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 6, 0, 0, /* 0x0700 */ 0, 0, 0, 0, 0, 0, 0, 0, 36, 9, 0, 0, 96, 0, 0, 0,
/* 0x0710 */ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x0710 */ 6, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0,
/* 0x0720 */ 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, /* 0x0720 */ 44, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0730 */ 0, 0, 0, 0, 96, 9, 0, 0, 16, 0, 0, 0, 6, 0, 0, 0, /* 0x0730 */ 105, 6, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0740 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0, /* 0x0740 */ 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0,
/* 0x0750 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 6, 0, 0, /* 0x0750 */ 0, 0, 0, 0, 0, 0, 0, 0,132, 9, 0, 0, 16, 0, 0, 0,
/* 0x0760 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x0760 */ 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0,
/* 0x0770 */ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x0770 */ 17, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0780 */ 0, 0, 0, 0,196, 7, 0, 0,224, 0, 0, 0, 7, 0, 0, 0, /* 0x0780 */ 115, 6, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0790 */ 3, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, /* 0x0790 */ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
/* 0x07a0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 8, 0, 0, /* 0x07a0 */ 0, 0, 0, 0, 0, 0, 0, 0,232, 7, 0, 0,224, 0, 0, 0,
/* 0x07b0 */ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x07b0 */ 7, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0,
/* 0x07c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x07c0 */ 9, 0, 0, 0, 3, 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, /* 0x07d0 */ 200, 8, 0, 0, 92, 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, /* 0x07e0 */ 1, 0, 0, 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, /* 0x07f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0800 */ 18, 0, 1, 0, 17, 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 */ 16, 0, 0, 0, 25, 0, 0, 0,204, 1, 0, 0, 0, 0, 0, 0, /* 0x0810 */ 0, 0, 0, 0, 3, 0, 3, 0, 1, 0, 0, 0,247, 3, 0, 0,
/* 0x0820 */ 16, 0, 1, 0, 33, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, /* 0x0820 */ 62, 2, 0, 0, 18, 0, 1, 0, 17, 0, 0, 0, 0, 0, 0, 0,
/* 0x0830 */ 16, 0, 1, 0, 38, 0, 0, 0,149, 1, 0, 0, 0, 0, 0, 0, /* 0x0830 */ 0, 0, 0, 0, 16, 0, 0, 0, 25, 0, 0, 0,204, 1, 0, 0,
/* 0x0840 */ 16, 0, 1, 0, 44, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, /* 0x0840 */ 0, 0, 0, 0, 16, 0, 1, 0, 33, 0, 0, 0,114, 1, 0, 0,
/* 0x0850 */ 16, 0, 1, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0850 */ 0, 0, 0, 0, 16, 0, 1, 0, 38, 0, 0, 0,149, 1, 0, 0,
/* 0x0860 */ 16, 0, 1, 0, 66, 0, 0, 0,186, 1, 0, 0, 0, 0, 0, 0, /* 0x0860 */ 0, 0, 0, 0, 16, 0, 1, 0, 44, 0, 0, 0,128, 1, 0, 0,
/* 0x0870 */ 16, 0, 1, 0, 73, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0, /* 0x0870 */ 0, 0, 0, 0, 16, 0, 1, 0, 59, 0, 0, 0, 0, 0, 0, 0,
/* 0x0880 */ 16, 0, 1, 0, 81, 0, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, /* 0x0880 */ 0, 0, 0, 0, 16, 0, 1, 0, 66, 0, 0, 0,186, 1, 0, 0,
/* 0x0890 */ 16, 0, 1, 0, 86, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0, /* 0x0890 */ 0, 0, 0, 0, 16, 0, 1, 0, 73, 0, 0, 0,236, 1, 0, 0,
/* 0x08a0 */ 16, 0, 1, 0, 0,117,112,120, 95,109,109, 97,112, 95, 97,110, /* 0x08a0 */ 0, 0, 0, 0, 16, 0, 1, 0, 81, 0, 0, 0,131, 1, 0, 0,
/* 0x08b0 */ 100, 95,102,100, 0, 79, 95, 66, 73, 78, 70, 79, 0,109,101,109, /* 0x08b0 */ 0, 0, 0, 0, 16, 0, 1, 0, 86, 0, 0, 0,164, 1, 0, 0,
/* 0x08c0 */ 112, 99,112,121, 0,109,109, 97,112, 0,117,110, 97,109,101, 0, /* 0x08c0 */ 0, 0, 0, 0, 16, 0, 1, 0, 0,117,112,120, 95,109,109, 97,
/* 0x08d0 */ 103,101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 0, 95, /* 0x08d0 */ 112, 95, 97,110,100, 95,102,100, 0, 79, 95, 66, 73, 78, 70, 79,
/* 0x08e0 */ 115,116, 97,114,116, 0,109,101,109,115,101,116, 0,109,121, 95, /* 0x08e0 */ 0,109,101,109,112, 99,112,121, 0,109,109, 97,112, 0,117,110,
/* 0x08f0 */ 98,107,112,116, 0,115,116, 97,116, 0,109,107,100,105,114, 0, /* 0x08f0 */ 97,109,101, 0,103,101,116, 95,117,112,120,102,110, 95,112, 97,
/* 0x0900 */ 5, 0, 0, 0, 2, 2, 0, 0,165, 0, 0, 0, 2, 3, 0, 0, /* 0x0900 */ 116,104, 0, 95,115,116, 97,114,116, 0,109,101,109,115,101,116,
/* 0x0910 */ 74, 1, 0, 0, 2, 6, 0, 0, 7, 2, 0, 0, 2, 10, 0, 0, /* 0x0910 */ 0,109,121, 95, 98,107,112,116, 0,115,116, 97,116, 0,109,107,
/* 0x0920 */ 14, 2, 0, 0, 2, 12, 0, 0, 60, 2, 0, 0, 2, 13, 0, 0, /* 0x0920 */ 100,105,114, 0, 5, 0, 0, 0, 2, 2, 0, 0,165, 0, 0, 0,
/* 0x0930 */ 43, 3, 0, 0, 2, 5, 0, 0,119, 4, 0, 0, 2, 11, 0, 0, /* 0x0930 */ 2, 3, 0, 0, 74, 1, 0, 0, 2, 6, 0, 0, 7, 2, 0, 0,
/* 0x0940 */ 152, 4, 0, 0, 2, 7, 0, 0,245, 4, 0, 0, 2, 8, 0, 0, /* 0x0940 */ 2, 10, 0, 0, 14, 2, 0, 0, 2, 12, 0, 0, 60, 2, 0, 0,
/* 0x0950 */ 124, 5, 0, 0, 2, 10, 0, 0,227, 5, 0, 0, 2, 6, 0, 0, /* 0x0950 */ 2, 13, 0, 0, 43, 3, 0, 0, 2, 5, 0, 0,117, 4, 0, 0,
/* 0x0960 */ 2, 0, 0, 0, 2, 1, 0, 0, 6, 0, 0, 0, 1, 4, 0, 0, /* 0x0960 */ 2, 11, 0, 0,132, 4, 0, 0, 2, 7, 0, 0,222, 4, 0, 0,
/* 0x0970 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51, /* 0x0970 */ 2, 8, 0, 0,133, 5, 0, 0, 2, 10, 0, 0, 9, 6, 0, 0,
/* 0x0980 */ 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,105,111,110,115, /* 0x0980 */ 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0, 6, 0, 0, 0,
/* 0x0990 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, /* 0x0990 */ 1, 4, 0, 0,102,105,108,101, 32,102,111,114,109, 97,116, 32,
/* 0x09a0 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, /* 0x09a0 */ 101,108,102, 51, 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,
/* 0x09b0 */ 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, /* 0x09b0 */ 105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32,
/* 0x09c0 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, /* 0x09c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32,
/* 0x09d0 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, /* 0x09d0 */ 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32,
/* 0x09e0 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 54, 48,102, 32, 32, /* 0x09e0 */ 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32,
/* 0x09f0 */ 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32, /* 0x09f0 */ 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32,
/* 0x0a00 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, /* 0x0a00 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 54,
/* 0x0a10 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 97, 32, 32, /* 0x0a10 */ 51, 53, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50,
/* 0x0a20 */ 48, 32, 32, 48, 32, 32, 48, 54, 52, 51, 32, 32, 50, 42, 42, 48, /* 0x0a20 */ 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32,
/* 0x0a30 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, /* 0x0a30 */ 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32,
/* 0x0a40 */ 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x0a40 */ 48, 97, 32, 32, 48, 32, 32, 48, 32, 32, 48, 54, 54, 57, 32, 32,
/* 0x0a50 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, /* 0x0a50 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83,
/* 0x0a60 */ 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, /* 0x0a60 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48,
/* 0x0a70 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, /* 0x0a70 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76,
/* 0x0a80 */ 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, /* 0x0a80 */ 70, 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0a90 */ 78, 90, 10, 48, 48, 48, 48, 48, 51,102, 55, 32,103, 32, 32, 32, /* 0x0a90 */ 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x0aa0 */ 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 50, 49, /* 0x0aa0 */ 100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76,
/* 0x0ab0 */ 56, 32,117,112,120, 95,109,109, 97,112, 95, 97,110,100, 95,102, /* 0x0ab0 */ 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 51,102, 55, 32,
/* 0x0ac0 */ 100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, /* 0x0ac0 */ 103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0ad0 */ 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, /* 0x0ad0 */ 32, 48, 50, 51,101, 32,117,112,120, 95,109,109, 97,112, 95, 97,
/* 0x0ae0 */ 70, 79, 10, 48, 48, 48, 48, 48, 49, 99, 99, 32,103, 32, 32, 32, /* 0x0ae0 */ 110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x0af0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109, /* 0x0af0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79,
/* 0x0b00 */ 101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 49, 55, 50, 32, /* 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, /* 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, /* 0x0b20 */ 32, 48, 32,109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48,
/* 0x0b30 */ 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x0b30 */ 49, 55, 50, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x0b40 */ 88, 32, 48, 32,117,110, 97,109,101, 10, 48, 48, 48, 48, 48, 49, /* 0x0b40 */ 65, 73, 78, 88, 32, 48, 32,109,109, 97,112, 10, 48, 48, 48, 48,
/* 0x0b50 */ 56, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, /* 0x0b50 */ 48, 49, 57, 53, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0b60 */ 73, 78, 88, 32, 48, 32,103,101,116, 95,117,112,120,102,110, 95, /* 0x0b60 */ 77, 65, 73, 78, 88, 32, 48, 32,117,110, 97,109,101, 10, 48, 48,
/* 0x0b70 */ 112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, /* 0x0b70 */ 48, 48, 48, 49, 56, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69,
/* 0x0b80 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, /* 0x0b80 */ 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,103,101,116, 95,117,112,
/* 0x0b90 */ 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 49, 98, 97, /* 0x0b90 */ 120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ba0 */ 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x0ba0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0bb0 */ 88, 32, 48, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, /* 0x0bb0 */ 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x0bc0 */ 49,101, 99, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x0bc0 */ 48, 49, 98, 97, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0bd0 */ 65, 73, 78, 88, 32, 48, 32,109,121, 95, 98,107,112,116, 10, 48, /* 0x0bd0 */ 77, 65, 73, 78, 88, 32, 48, 32,109,101,109,115,101,116, 10, 48,
/* 0x0be0 */ 48, 48, 48, 48, 49, 56, 51, 32,103, 32, 32, 32, 32, 32, 32, 32, /* 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,115,116, 97,116, 10, /* 0x0bf0 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,121, 95, 98,107,
/* 0x0c00 */ 48, 48, 48, 48, 48, 49, 97, 52, 32,103, 32, 32, 32, 32, 32, 32, /* 0x0c00 */ 112,116, 10, 48, 48, 48, 48, 48, 49, 56, 51, 32,103, 32, 32, 32,
/* 0x0c10 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,109,107,100,105, /* 0x0c10 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,115,
/* 0x0c20 */ 114, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x0c20 */ 116, 97,116, 10, 48, 48, 48, 48, 48, 49, 97, 52, 32,103, 32, 32,
/* 0x0c30 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, /* 0x0c30 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x0c40 */ 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, /* 0x0c40 */ 109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x0c50 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0c50 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x0c60 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 53, 32, /* 0x0c60 */ 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x0c70 */ 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, /* 0x0c70 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0c80 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, /* 0x0c80 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x0c90 */ 48, 97, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, /* 0x0c90 */ 48, 48, 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, /* 0x0ca0 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48,
/* 0x0cb0 */ 110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 49, 52, 97, 32, 82, /* 0x0cb0 */ 48, 48, 48, 48, 48, 97, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67,
/* 0x0cc0 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, /* 0x0cc0 */ 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,112,120, 95,109,109,
/* 0x0cd0 */ 32,109,109, 97,112, 10, 48, 48, 48, 48, 48, 50, 48, 55, 32, 82, /* 0x0cd0 */ 97,112, 95, 97,110,100, 95,102,100, 10, 48, 48, 48, 48, 48, 49,
/* 0x0ce0 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, /* 0x0ce0 */ 52, 97, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0cf0 */ 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 50, 48,101, /* 0x0cf0 */ 32, 32, 32, 32, 32,109,109, 97,112, 10, 48, 48, 48, 48, 48, 50,
/* 0x0d00 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, /* 0x0d00 */ 48, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0d10 */ 32, 32, 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 50, 51, 99, /* 0x0d10 */ 32, 32, 32, 32, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48,
/* 0x0d20 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, /* 0x0d20 */ 48, 50, 48,101, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32,
/* 0x0d30 */ 32, 32, 32,109,107,100,105,114, 10, 48, 48, 48, 48, 48, 51, 50, /* 0x0d30 */ 32, 32, 32, 32, 32, 32, 32,115,116, 97,116, 10, 48, 48, 48, 48,
/* 0x0d40 */ 98, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, /* 0x0d40 */ 48, 50, 51, 99, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32,
/* 0x0d50 */ 32, 32, 32, 32,109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, /* 0x0d50 */ 32, 32, 32, 32, 32, 32, 32,109,107,100,105,114, 10, 48, 48, 48,
/* 0x0d60 */ 48, 52, 55, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, /* 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,109,121, 95, 98,107,112,116, 10, 48, /* 0x0d70 */ 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,112, 99,112,121, 10,
/* 0x0d80 */ 48, 48, 48, 48, 52, 57, 56, 32, 82, 95, 51, 56, 54, 95, 80, 67, /* 0x0d80 */ 48, 48, 48, 48, 48, 52, 55, 53, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0d90 */ 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,110, 97,109,101, 10, /* 0x0d90 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,121, 95, 98,107,
/* 0x0da0 */ 48, 48, 48, 48, 48, 52,102, 53, 32, 82, 95, 51, 56, 54, 95, 80, /* 0x0da0 */ 112,116, 10, 48, 48, 48, 48, 48, 52, 56, 52, 32, 82, 95, 51, 56,
/* 0x0db0 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,103,101,116, 95,117, /* 0x0db0 */ 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,117,110,
/* 0x0dc0 */ 112,120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 53, /* 0x0dc0 */ 97,109,101, 10, 48, 48, 48, 48, 48, 52,100,101, 32, 82, 95, 51,
/* 0x0dd0 */ 55, 99, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, /* 0x0dd0 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,103,
/* 0x0de0 */ 32, 32, 32, 32, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, /* 0x0de0 */ 101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48,
/* 0x0df0 */ 48, 53,101, 51, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, /* 0x0df0 */ 48, 48, 48, 53, 56, 53, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51,
/* 0x0e00 */ 32, 32, 32, 32, 32, 32, 32,109,109, 97,112, 10, 10, 82, 69, 76, /* 0x0e00 */ 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,115,101,116, 10,
/* 0x0e10 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, /* 0x0e10 */ 48, 48, 48, 48, 48, 54, 48, 57, 32, 82, 95, 51, 56, 54, 95, 80,
/* 0x0e20 */ 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, /* 0x0e20 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,109, 97,112, 10,
/* 0x0e30 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x0e30 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x0e40 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x0e40 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78,
/* 0x0e50 */ 10, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95, 51, 56, 54, 95, /* 0x0e50 */ 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80,
/* 0x0e60 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x0e60 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x0e70 */ 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 54, 32, 82, 95, /* 0x0e70 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95,
/* 0x0e80 */ 51, 56, 54, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0e80 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0e90 */ 79, 95, 66, 73, 78, 70, 79, 10 /* 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
}; };
+1130 -969
View File
File diff suppressed because it is too large Load Diff
+162 -159
View File
@@ -1,5 +1,5 @@
/* i386-linux.elf-so_entry.h /* i386-linux.elf-so_entry.h
created from i386-linux.elf-so_entry.bin, 3261 (0xcbd) bytes created from i386-linux.elf-so_entry.bin, 3297 (0xce1) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -32,14 +32,14 @@
/* clang-format off */ /* clang-format off */
#define STUB_I386_LINUX_ELF_SO_ENTRY_SIZE 3261 #define STUB_I386_LINUX_ELF_SO_ENTRY_SIZE 3297
#define STUB_I386_LINUX_ELF_SO_ENTRY_ADLER32 0x214795d6 #define STUB_I386_LINUX_ELF_SO_ENTRY_ADLER32 0xd917c0ec
#define STUB_I386_LINUX_ELF_SO_ENTRY_CRC32 0x855baf9c #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, /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 0x0330 */ 83,129,236, 60, 16, 0, 0,186, 0, 0, 0, 0,232, 4, 0, 0,
/* 0x0340 */ 120, 0, 95,184,100, 1, 0, 0,137,251,185, 16, 0, 0, 0,205, /* 0x0340 */ 0,117,112,120, 0, 94,185, 16, 0, 0, 0,184,100, 1, 0, 0,
/* 0x0350 */ 128,137,198,131,248,234,117, 13,184,100, 1, 0, 0,137,251,137, /* 0x0350 */ 137,243,205,128,137,199,131,248,234,117, 13,184,100, 1, 0, 0,
/* 0x0360 */ 209,205,128,137,198,133,246,121, 73,232, 9, 0, 0, 0, 47,100, /* 0x0360 */ 137,243,137,209,205,128,137,199,133,255,121, 68,232, 9, 0, 0,
/* 0x0370 */ 101,118, 47,115,104,109, 0, 88,137, 69,160,191, 2, 0, 65, 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,195,137,249,137,242,106, 5, 88,205,128, /* 0x0380 */ 190,192, 1, 0, 0,137,251,137,242,106, 5, 88,205,128,137,199,
/* 0x0390 */ 137,198,133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, /* 0x0390 */ 133,192,121, 28,232, 13, 0, 0, 0,109,101,109,102,100, 95, 99,
/* 0x03a0 */ 95, 99,114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131, /* 0x03a0 */ 114,101, 97,116,101, 0, 88, 80,232,252,255,255,255,131,196, 4,
/* 0x03b0 */ 196, 4,129,236, 16, 16, 0, 0,141, 68, 36, 15,131,224,240,137, /* 0x03b0 */ 141,157,244,239,255,255, 83,232,252,255,255,255,190, 0, 0, 0,
/* 0x03c0 */ 69,240,199, 0, 0, 0, 0, 0,255,117,240,232,252,255,255,255, /* 0x03c0 */ 0,232, 4, 0, 0, 0, 97,110,100, 0, 88,199, 4, 36, 3, 0,
/* 0x03d0 */ 191, 0, 0, 0, 0,232, 4, 0, 0, 0, 97,110,100, 0, 89,199, /* 0x03d0 */ 0, 0, 83, 80,232, 24,255,255,255,131,196, 12,133,192,116, 39,
/* 0x03e0 */ 4, 36, 3, 0, 0, 0,141, 69,240, 80, 81,232, 1,255,255,255, /* 0x03e0 */ 232, 4, 0, 0, 0, 76,105,110, 0, 88,106, 3, 83, 80,232,254,
/* 0x03f0 */ 131,196, 12,133,192,116, 39,232, 4, 0, 0, 0, 76,105,110, 0, /* 0x03f0 */ 254,255,255,131,196, 12,133,192,117, 13,128,189,118,240,255,255,
/* 0x0400 */ 88,106, 3,141, 77,240, 81, 80,232,228,254,255,255,131,196, 12, /* 0x0400 */ 52,126, 4,102,190, 1, 0,133,246,117,123,131,125, 16, 0,117,
/* 0x0410 */ 133,192,117, 10,128,125,114, 52,126, 4,102,191, 1, 0,133,255, /* 0x0410 */ 28,232,252,255,255,255,137, 69, 16,133,192,117, 16,141,133,244,
/* 0x0420 */ 117, 99,131,125, 16, 0,117, 8,232,252,255,255,255,137, 69, 16, /* 0x0420 */ 239,255,255,137, 69, 16,198,133,244,239,255,255, 0,133,246,117,
/* 0x0430 */ 133,255,117, 81,131,254,218,117, 76,131,125, 16, 0,116, 70,139, /* 0x0430 */ 85,131,255,218,117, 80,131,125, 16, 0,116, 74,139, 85, 16,128,
/* 0x0440 */ 69, 16,128, 56, 0,117, 22,255,117,240, 80,232, 85,253,255,255, /* 0x0440 */ 58, 0,117, 26,141,133,244,239,255,255, 80, 82,232, 84,253,255,
/* 0x0450 */ 131,196, 8,137,193,133,192, 15,136,220, 0, 0, 0,190,194, 0, /* 0x0450 */ 255,131,196, 8,137,193,133,192, 15,136, 1, 1, 0, 0,185,194,
/* 0x0460 */ 0, 0,139, 93, 16,137,241,186,192, 1, 0, 0,106, 5, 88,205, /* 0x0460 */ 0, 0, 0,191,192, 1, 0, 0,139, 93, 16,137,250,106, 5, 88,
/* 0x0470 */ 128,137,198,137,193,133,192, 15,136,188, 0, 0, 0,139, 93, 16, /* 0x0470 */ 205,128,137,199,137,193,133,192, 15,136,225, 0, 0, 0,139, 93,
/* 0x0480 */ 106, 10, 88,205,128,131,125, 12, 0,116,115,133,255,116, 22,137, /* 0x0480 */ 16,106, 10, 88,205,128,131,125, 12, 0, 15,132,148, 0, 0, 0,
/* 0x0490 */ 243,139, 77, 12,106, 93, 88,205,128,137,193,133,192, 15,136,150, /* 0x0490 */ 133,246,116, 22,137,251,139, 77, 12,106, 93, 88,205,128,137,193,
/* 0x04a0 */ 0, 0, 0,235, 89,104, 0, 16, 0, 0,106, 0,255,117,240,232, /* 0x04a0 */ 133,192, 15,136,183, 0, 0, 0,235,122,141,133,244,239,255,255,
/* 0x04b0 */ 252,255,255,255,139,125, 12,131,196, 12,133,255,116, 47,139, 69, /* 0x04b0 */ 104, 0, 16, 0, 0,106, 0, 80,232,252,255,255,255,139, 69, 12,
/* 0x04c0 */ 240,137, 69,152,137,125,156,129,255, 0, 16, 0, 0,118, 7,199, /* 0x04c0 */ 137,133,208,239,255,255,131,196, 12,133,192,116, 73,141,181,244,
/* 0x04d0 */ 69,156, 0, 16, 0, 0,137,243,139, 77,152,139, 85,156,106, 4, /* 0x04d0 */ 239,255,255,139,149,208,239,255,255,137,149,184,239,255,255,129,
/* 0x04e0 */ 88,205,128, 59, 69,156,117, 67, 43,125,156,117,215,137,243,185, /* 0x04e0 */ 250, 0, 16, 0, 0,118, 10,199,133,184,239,255,255, 0, 16, 0,
/* 0x04f0 */ 0, 0, 0, 0,186, 0, 0, 0, 0,106, 19, 88,205,128,106, 0, /* 0x04f0 */ 0,137,251,137,241,139,149,184,239,255,255,106, 4, 88,205,128,
/* 0x0500 */ 86,131,125, 8, 1, 25,192,131,224,240,131,192, 17, 80,106, 3, /* 0x0500 */ 59,133,184,239,255,255,117, 73,139,133,184,239,255,255, 41,133,
/* 0x0510 */ 255,117, 12,255,117, 8,232,252,255,255,255,137,194,131,196, 24, /* 0x0510 */ 208,239,255,255,117,189,185, 0, 0, 0, 0,137,251,137,202,106,
/* 0x0520 */ 137,193, 61, 0,240,255,255,119, 16,235, 7,185,228,255,255,255, /* 0x0520 */ 19, 88,205,128,106, 0, 87,131,125, 8, 1, 25,192,131,224,240,
/* 0x0530 */ 235, 7,141, 70, 1,137,193, 9,209,137,200,141,101,244, 91, 94, /* 0x0530 */ 131,192, 17, 80,106, 3,255,117, 12,255,117, 8,232,252,255,255,
/* 0x0540 */ 95,201,195, 90,232, 17, 0, 0, 0, 0, 46,115,121,109,116, 97, /* 0x0540 */ 255,137,194,131,196, 24,137,193, 61, 0,240,255,255,119, 16,235,
/* 0x0550 */ 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,104,115,116,114, /* 0x0550 */ 7,185,228,255,255,255,235, 7,141, 71, 1,137,193, 9,209,137,
/* 0x0560 */ 116, 97, 98, 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x0560 */ 200,141,101,244, 91, 94, 95,201,195, 90,232, 17, 0, 0, 0, 0,
/* 0x0570 */ 0, 46,114,101,108, 69, 76, 70, 77, 65, 73, 78, 90, 0, 0, 0, /* 0x0570 */ 46,115,121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0,
/* 0x0580 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0580 */ 46,115,104,115,116,114,116, 97, 98, 0, 46,114,101,108, 69, 76,
/* 0x0590 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0590 */ 70, 77, 65, 73, 78, 88, 0, 46,114,101,108, 69, 76, 70, 77, 65,
/* 0x05a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, /* 0x05a0 */ 73, 78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x05b0 */ 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 15, 5, 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, 4, 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 */ 27, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x05d0 */ 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
/* 0x05e0 */ 228, 7, 0, 0, 80, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, /* 0x05e0 */ 53, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
/* 0x05f0 */ 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 5, 0, 0, 6, 0, 0, 0, /* 0x0600 */ 0, 0, 0, 0, 8, 8, 0, 0, 80, 0, 0, 0, 6, 0, 0, 0,
/* 0x0610 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x0610 */ 1, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 44, 0, 0, 0,
/* 0x0620 */ 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0620 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 5, 0, 0,
/* 0x0630 */ 52, 8, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, /* 0x0630 */ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0640 */ 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0, 3, 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, 0, 0, 0, 0, 73, 5, 0, 0, 53, 0, 0, 0, /* 0x0650 */ 0, 0, 0, 0, 88, 8, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0,
/* 0x0660 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x0660 */ 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 17, 0, 0, 0,
/* 0x0670 */ 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0670 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 5, 0, 0,
/* 0x0680 */ 192, 6, 0, 0,208, 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0, /* 0x0680 */ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0690 */ 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, 3, 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, 0, 0, 0, 0,144, 7, 0, 0, 84, 0, 0, 0, /* 0x06a0 */ 0, 0, 0, 0,228, 6, 0, 0,208, 0, 0, 0, 7, 0, 0, 0,
/* 0x06b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x06b0 */ 4, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
/* 0x06c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x06c0 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 7, 0, 0,
/* 0x06d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 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, 3, 0, 3, 0, /* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06f0 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x06f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0700 */ 8, 0, 0, 0,247, 2, 0, 0, 24, 2, 0, 0, 18, 0, 1, 0, /* 0x0700 */ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0710 */ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0710 */ 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0720 */ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0720 */ 0, 0, 1, 0, 8, 0, 0, 0,247, 2, 0, 0, 62, 2, 0, 0,
/* 0x0730 */ 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0730 */ 18, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0740 */ 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0740 */ 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0750 */ 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0750 */ 16, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0760 */ 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0760 */ 16, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0770 */ 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0770 */ 16, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0780 */ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, /* 0x0780 */ 16, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0790 */ 0, 95,115,116, 97,114,116, 0,117,112,120, 95,109,109, 97,112, /* 0x0790 */ 16, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07a0 */ 95, 97,110,100, 95,102,100, 0,109,101,109,112, 99,112,121, 0, /* 0x07a0 */ 16, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x07b0 */ 109,109, 97,112, 0,117,110, 97,109,101, 0,103,101,116, 95,117, /* 0x07b0 */ 16, 0, 0, 0, 0, 95,115,116, 97,114,116, 0,117,112,120, 95,
/* 0x07c0 */ 112,120,102,110, 95,112, 97,116,104, 0,109,101,109,115,101,116, /* 0x07c0 */ 109,109, 97,112, 95, 97,110,100, 95,102,100, 0,109,101,109,112,
/* 0x07d0 */ 0,109,121, 95, 98,107,112,116, 0,115,116, 97,116, 0,109,107, /* 0x07d0 */ 99,112,121, 0,109,109, 97,112, 0,117,110, 97,109,101, 0,103,
/* 0x07e0 */ 100,105,114, 0, 3, 0, 0, 0, 2, 2, 0, 0, 7, 1, 0, 0, /* 0x07e0 */ 101,116, 95,117,112,120,102,110, 95,112, 97,116,104, 0,109,101,
/* 0x07f0 */ 2, 9, 0, 0, 14, 1, 0, 0, 2, 11, 0, 0, 60, 1, 0, 0, /* 0x07f0 */ 109,115,101,116, 0,109,121, 95, 98,107,112,116, 0,115,116, 97,
/* 0x0800 */ 2, 12, 0, 0, 43, 2, 0, 0, 2, 5, 0, 0,119, 3, 0, 0, /* 0x0800 */ 116, 0,109,107,100,105,114, 0, 3, 0, 0, 0, 2, 2, 0, 0,
/* 0x0810 */ 2, 10, 0, 0,152, 3, 0, 0, 2, 7, 0, 0,245, 3, 0, 0, /* 0x0810 */ 7, 1, 0, 0, 2, 9, 0, 0, 14, 1, 0, 0, 2, 11, 0, 0,
/* 0x0820 */ 2, 8, 0, 0,124, 4, 0, 0, 2, 9, 0, 0,227, 4, 0, 0, /* 0x0820 */ 60, 1, 0, 0, 2, 12, 0, 0, 43, 2, 0, 0, 2, 5, 0, 0,
/* 0x0830 */ 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0,102,105,108,101, /* 0x0830 */ 117, 3, 0, 0, 2, 10, 0, 0,132, 3, 0, 0, 2, 7, 0, 0,
/* 0x0840 */ 32,102,111,114,109, 97,116, 32,101,108,102, 51, 50, 45,105, 51, /* 0x0840 */ 222, 3, 0, 0, 2, 8, 0, 0,133, 4, 0, 0, 2, 9, 0, 0,
/* 0x0850 */ 56, 54, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100, /* 0x0850 */ 9, 5, 0, 0, 2, 6, 0, 0, 2, 0, 0, 0, 2, 1, 0, 0,
/* 0x0860 */ 120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0860 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51,
/* 0x0870 */ 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, /* 0x0870 */ 50, 45,105, 51, 56, 54, 10, 10, 83,101, 99,116,105,111,110,115,
/* 0x0880 */ 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105, /* 0x0880 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32,
/* 0x0890 */ 108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, /* 0x0890 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77,
/* 0x08a0 */ 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x08a0 */ 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32,
/* 0x08b0 */ 32, 32, 32, 32, 32, 32, 48, 53, 48,102, 32, 32, 48, 32, 32, 48, /* 0x08b0 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110,
/* 0x08c0 */ 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, /* 0x08c0 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77,
/* 0x08d0 */ 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, 73, /* 0x08d0 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 53, 51, 53, 32, 32,
/* 0x08e0 */ 78, 90, 32, 32, 32, 32, 32, 32, 48, 54, 32, 32, 48, 32, 32, 48, /* 0x08e0 */ 48, 32, 32, 48, 32, 32, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32,
/* 0x08f0 */ 32, 32, 48, 53, 52, 51, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, /* 0x08f0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76,
/* 0x0900 */ 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, /* 0x0900 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 54, 32, 32,
/* 0x0910 */ 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x0910 */ 48, 32, 32, 48, 32, 32, 48, 53, 54, 57, 32, 32, 50, 42, 42, 48,
/* 0x0920 */ 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, /* 0x0920 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79,
/* 0x0930 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, /* 0x0930 */ 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0940 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, /* 0x0940 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0950 */ 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, /* 0x0950 */ 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48,
/* 0x0960 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, 32, 32, 32, /* 0x0960 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69,
/* 0x0970 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114, /* 0x0970 */ 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x0980 */ 116, 10, 48, 48, 48, 48, 48, 50,102, 55, 32,103, 32, 32, 32, 32, /* 0x0980 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x0990 */ 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 50, 49, 56, /* 0x0990 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,
/* 0x09a0 */ 32,117,112,120, 95,109,109, 97,112, 95, 97,110,100, 95,102,100, /* 0x09a0 */ 115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 50,102, 55, 32,103,
/* 0x09b0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, /* 0x09b0 */ 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32,
/* 0x09c0 */ 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,101,109,112, 99,112, /* 0x09c0 */ 48, 50, 51,101, 32,117,112,120, 95,109,109, 97,112, 95, 97,110,
/* 0x09d0 */ 121, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, /* 0x09d0 */ 100, 95,102,100, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32,
/* 0x09e0 */ 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,109, 97,112, 10, /* 0x09e0 */ 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,101,
/* 0x09f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x09f0 */ 109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x0a00 */ 32, 42, 85, 78, 68, 42, 32, 48, 32,117,110, 97,109,101, 10, 48, /* 0x0a00 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109,
/* 0x0a10 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0a10 */ 109, 97,112, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x0a20 */ 42, 85, 78, 68, 42, 32, 48, 32,103,101,116, 95,117,112,120,102, /* 0x0a20 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,117,110, 97,
/* 0x0a30 */ 110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x0a30 */ 109,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32,
/* 0x0a40 */ 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, /* 0x0a40 */ 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,103,101,116, 95,
/* 0x0a50 */ 109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x0a50 */ 117,112,120,102,110, 95,112, 97,116,104, 10, 48, 48, 48, 48, 48,
/* 0x0a60 */ 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, /* 0x0a60 */ 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68,
/* 0x0a70 */ 109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0a70 */ 42, 32, 48, 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48,
/* 0x0a80 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, /* 0x0a80 */ 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68,
/* 0x0a90 */ 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x0a90 */ 42, 32, 48, 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48,
/* 0x0aa0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,109, /* 0x0aa0 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78,
/* 0x0ab0 */ 107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x0ab0 */ 68, 42, 32, 48, 32,115,116, 97,116, 10, 48, 48, 48, 48, 48, 48,
/* 0x0ac0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, /* 0x0ac0 */ 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42,
/* 0x0ad0 */ 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, /* 0x0ad0 */ 32, 48, 32,109,107,100,105,114, 10, 10, 82, 69, 76, 79, 67, 65,
/* 0x0ae0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0ae0 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82,
/* 0x0af0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, /* 0x0af0 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70,
/* 0x0b00 */ 48, 51, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, /* 0x0b00 */ 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x0b10 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, /* 0x0b10 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x0b20 */ 48, 48, 48, 49, 48, 55, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, /* 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,109,101,109,115,101,116, 10, /* 0x0b30 */ 50, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0b40 */ 48, 48, 48, 48, 48, 49, 48,101, 32, 82, 95, 51, 56, 54, 95, 80, /* 0x0b40 */ 90, 10, 48, 48, 48, 48, 48, 49, 48, 55, 32, 82, 95, 51, 56, 54,
/* 0x0b50 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,115,116, 97,116, 10, /* 0x0b50 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,
/* 0x0b60 */ 48, 48, 48, 48, 48, 49, 51, 99, 32, 82, 95, 51, 56, 54, 95, 80, /* 0x0b60 */ 115,101,116, 10, 48, 48, 48, 48, 48, 49, 48,101, 32, 82, 95, 51,
/* 0x0b70 */ 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,107,100,105,114, /* 0x0b70 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,115,
/* 0x0b80 */ 10, 48, 48, 48, 48, 48, 50, 50, 98, 32, 82, 95, 51, 56, 54, 95, /* 0x0b80 */ 116, 97,116, 10, 48, 48, 48, 48, 48, 49, 51, 99, 32, 82, 95, 51,
/* 0x0b90 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109,112, /* 0x0b90 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,
/* 0x0ba0 */ 99,112,121, 10, 48, 48, 48, 48, 48, 51, 55, 55, 32, 82, 95, 51, /* 0x0ba0 */ 107,100,105,114, 10, 48, 48, 48, 48, 48, 50, 50, 98, 32, 82, 95,
/* 0x0bb0 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109, /* 0x0bb0 */ 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0bc0 */ 121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48, 51, 57, 56, 32, /* 0x0bc0 */ 109,101,109,112, 99,112,121, 10, 48, 48, 48, 48, 48, 51, 55, 53,
/* 0x0bd0 */ 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, /* 0x0bd0 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x0be0 */ 32, 32,117,110, 97,109,101, 10, 48, 48, 48, 48, 48, 51,102, 53, /* 0x0be0 */ 32, 32, 32,109,121, 95, 98,107,112,116, 10, 48, 48, 48, 48, 48,
/* 0x0bf0 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, /* 0x0bf0 */ 51, 56, 52, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32,
/* 0x0c00 */ 32, 32, 32,103,101,116, 95,117,112,120,102,110, 95,112, 97,116, /* 0x0c00 */ 32, 32, 32, 32, 32, 32,117,110, 97,109,101, 10, 48, 48, 48, 48,
/* 0x0c10 */ 104, 10, 48, 48, 48, 48, 48, 52, 55, 99, 32, 82, 95, 51, 56, 54, /* 0x0c10 */ 48, 51,100,101, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32,
/* 0x0c20 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109,101,109, /* 0x0c20 */ 32, 32, 32, 32, 32, 32, 32,103,101,116, 95,117,112,120,102,110,
/* 0x0c30 */ 115,101,116, 10, 48, 48, 48, 48, 48, 52,101, 51, 32, 82, 95, 51, /* 0x0c30 */ 95,112, 97,116,104, 10, 48, 48, 48, 48, 48, 52, 56, 53, 32, 82,
/* 0x0c40 */ 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32, 32,109, /* 0x0c40 */ 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 32, 32,
/* 0x0c50 */ 109, 97,112, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, /* 0x0c50 */ 32,109,101,109,115,101,116, 10, 48, 48, 48, 48, 48, 53, 48, 57,
/* 0x0c60 */ 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, /* 0x0c60 */ 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x0c70 */ 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, /* 0x0c70 */ 32, 32, 32,109,109, 97,112, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x0c80 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0c80 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x0c90 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x0c90 */ 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83,
/* 0x0ca0 */ 50, 32, 82, 95, 51, 56, 54, 95, 80, 67, 51, 50, 32, 32, 32, 32, /* 0x0ca0 */ 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x0cb0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10 /* 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
}; };
+979 -999
View File
File diff suppressed because it is too large Load Diff
+1372 -1141
View File
File diff suppressed because it is too large Load Diff
+1363 -1131
View File
File diff suppressed because it is too large Load Diff
+1339 -1076
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -152,7 +152,7 @@ no_filt:
ldr arg1,[sp,#1*NBPW] // dst ldr arg1,[sp,#1*NBPW] // dst
ldr arg2,[arg2] // dstlen ldr arg2,[arg2] // dstlen
add arg2,arg2,arg1 // &dst[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 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 ldmia sp!,{r0,r1,r2,r3,r4,r5,r6,r7,pc} // end f_expand
+2 -2
View File
@@ -193,7 +193,7 @@ unfold:
mov arg3,sp // &pathname (currently a null string "") mov arg3,sp // &pathname (currently a null string "")
mov arg2,u_len mov arg2,u_len
mov arg1,#0 // kernel chooses addr 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,r0,lsr #12
mov r1,r1,lsl #12 mov r1,r1,lsl #12
sub r0,r0,r1 sub r0,r0,r1
@@ -265,7 +265,7 @@ zfind:
ret ret
f_expand: f_expand:
#define LINUX_ARM_CACHEFLUSH 1 #undef LINUX_ARM_CACHEFLUSH
#define NO_METHOD_CHECK 1 #define NO_METHOD_CHECK 1
#include "arch/arm/v4a/nrv2b_d8.S" #include "arch/arm/v4a/nrv2b_d8.S"
+176 -44
View File
@@ -33,7 +33,11 @@ NBPW= 4
//#define ARM_OLDABI 1 //#define ARM_OLDABI 1
#define ARMEL_EABI4 1 #define ARMEL_EABI4 1
#include "arch/arm/v5a/macros.S" #include "arch/arm/v5a/macros.S"
#define call bl
#define DEBUG 0 #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: // As of 2023-02-04, "gcc (Debian 10.2.1-6) 10.2.1 20210110" assembles 0xbe10 for:
// asm("bkpt #0x10"); // asm("bkpt #0x10");
@@ -66,6 +70,8 @@ PAGE_MASK= (~0<<PAGE_SHIFT)
PAGE_SIZE= -PAGE_MASK PAGE_SIZE= -PAGE_MASK
__NR_open= 5 + __NR_SYSCALL_BASE __NR_open= 5 + __NR_SYSCALL_BASE
AT_FDCWD= -100
RD_ONLY= 0
__NR_close= 6 + __NR_SYSCALL_BASE __NR_close= 6 + __NR_SYSCALL_BASE
__NR_exit = 1 + __NR_SYSCALL_BASE __NR_exit = 1 + __NR_SYSCALL_BASE
__NR_memfd_create= 0x181 + __NR_SYSCALL_BASE // 385 __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_munmap = 91 + __NR_SYSCALL_BASE
__NR_write = 4 + __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_BASE = 0xf0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_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 // argc,argv,envp, r3 convenience, r4-r7 callee-saved, lr ret_addr
stmfd sp!,{r0,r1,r2, r3, r4,r5,r6,r7, lr} // MATCH_99 stmfd sp!,{r0,r1,r2, r3, r4,r5,r6,r7, lr} // MATCH_99
sub sp,sp,#2*NBPW // space for ADRU, LENU sub sp,sp,#3*NBPW // space for ADRU, LENU, PMASK
F_ADRU= 0 * NBPW F_ADRU= 0 * NBPW
F_LENU= 1 * NBPW F_LENU= 1 * NBPW
F_ARGC= 2 * NBPW F_PMASK=2 * NBPW
F_ARGC= 3 * NBPW
call4 L70 call4 L70
L70_ret: L70_ret:
foldi .req lr // &fold_info foldi .req lr // &fold_info
old_sp .req r5 // busy: lr,r5 mfd .req r7
mov old_sp,sp rPMASK .req r6 // PAGE_MASK
ldr r0,[foldi,#sz_unc] ldr r0,[foldi,#sz_unc]
str r0,[old_sp,#F_LENU] str r0,[sp,#F_LENU]
sub r0,sp,r0 // alloca ldr r7,[foldi,#sz_cpr] // srclen
and sp,r0,#-2*NBPW // align stack add r4,foldi,#sz_b_info // src
.unreq foldi
add arg4,old_sp,#F_LENU // &dstlen mov arg3,#0 // pathname
mov arg3,sp // dst for decompress mov arg2,r0 // sz_unc
ldr arg2,[foldi,#sz_cpr] // srclen mov arg1,#0 // any page address
add arg1,foldi,#sz_b_info // src call upx_mmap_and_fd
.unreq foldi // busy: r5 add arg4,sp,#F_LENU // &dstlen
bl f_decompress 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 ldr arg3,[sp,#F_LENU]
O_RDWR= 2 ldr arg2,[sp,#F_ADRU]
O_DIRECTORY= 040000 mov arg1,mfd
O_TMPFILE= 020000000 str rPMASK,[arg2,#0] // forward the PAGE_MASK
call write
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)
mov arg6,#0 // beginning of file mov arg6,#0 // beginning of file
mov arg5,mfd mov arg5,mfd
mov arg4,#MAP_PRIVATE // modes mov arg4,#MAP_PRIVATE|MAP_FIXED // modes
mov arg3,#PROT_READ|PROT_EXEC // prot mov arg3,#PROT_READ|PROT_EXEC // prot
ldr arg2,[sp,#F_LENU] ldr arg2,[sp,#F_LENU]
mov arg1,#0 // addr (kernel chooses) ldr arg1,[sp,#F_ADRU] // addr
do_sys __NR_mmap64; str r0,[sp,#F_ADRU] do_sys __NR_mmap2
mov arg1,mfd mov arg1,mfd
.unreq mfd // busy: empty .unreq mfd
do_sys __NR_close call close
adr r0,_start -4 *NBPW // &SO_INFO add arg2,sp,#F_ARGC
add r1,sp,#F_ARGC adr arg1,_start -4 *NBPW // &SO_INFO
ldr pc,[sp, #F_ADRU] // invoke folded code ldr arg3,[sp, #F_ADRU]
add pc,arg3,#3*NBPW // invoke de-compressed code
devshm:
.asciz "/dev/shm"; .balign 4
f_decompress: f_decompress:
#define LINUX_ARM_CACHEFLUSH 1 #undef LINUX_ARM_CACHEFLUSH /* handled by write()+mmap() */
#include "arch/arm/v4a/nrv2b_d8.S" #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: //%esp:
// MATCH_04 ptr unfolded_code // MATCH_04 ptr unfolded_code
// MATCH_10 len unfolded_code // MATCH_10 len unfolded_code
@@ -220,7 +251,108 @@ f_decompress:
// IDENTSTR goes here // IDENTSTR goes here
section ELFMAINZ 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: 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 call4 L70_ret
fold_info: fold_info:
// b_info (sz_unc, sz_cpr, method) of folded code (C-language, etc.) // b_info (sz_unc, sz_cpr, method) of folded code (C-language, etc.)
+138 -178
View File
@@ -75,20 +75,70 @@ mflg_data: .int MAP_PRIVATE|MAP_ANONYMOUS @ overwritten for QNX vs Linux
// %esp: // %esp:
// MATCH_13 ptr unfolded_code; for escape hatch // MATCH_13 ptr unfolded_code; for escape hatch
// MATCH_12 len 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) // MATCH_99 9 saved registers {r0= argc, r1= argv, r2= envp, r3-r7, lr)
F_ADRU= 0 * NBPW 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 .globl upx_so_main // in arm.v?a-linux.elf-so_main.c
section SO_HEAD section SO_HEAD
fold: .globl fold PAGE_MASK: .word 0xfffff000 // default
sub sp,sp,#MAX_ELF_HDR_32; mov r2,sp // &elf_tmp 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 call upx_so_main // (&so_info, &argc); returns &escape_hatch
add sp,sp,#MAX_ELF_HDR_32 add sp,sp,#MAX_ELF_HDR_32
mov lr,r0 // save &escape_hatch 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 r7,#0xff & __NR_munmap // FIXME depends on HW and ABI of OS
mov pc,lr // goto &escape_hatch mov pc,lr // goto &escape_hatch
@@ -120,76 +170,97 @@ L10:
#endif /*}*/ #endif /*}*/
ldr pc,[r2,#4 -2*4] @ Elf32_auxv_t[AT_NULL@.a_type].a_val ldr pc,[r2,#4 -2*4] @ Elf32_auxv_t[AT_NULL@.a_type].a_val
__NR_exit = 1 + __NR_SYSCALL_BASE memcpy: .globl memcpy // void *memcpy(void *dst, void const *src, size_t len)
__NR_read = 3 + __NR_SYSCALL_BASE cmp r2,#0; beq 9f
__NR_write = 4 + __NR_SYSCALL_BASE mov r12,r0 // original dst
__NR_open = 5 + __NR_SYSCALL_BASE 0:
__NR_close = 6 + __NR_SYSCALL_BASE ldrb r3,[r1],#1; subs r2,r2,#1
__NR_unlink= 10 + __NR_SYSCALL_BASE strb r3,[r0],#1; bne 0b
__NR_lseek= 19 + __NR_SYSCALL_BASE 9:
__NR_getpid= 20 + __NR_SYSCALL_BASE mov r0,r12 // return original dst
__NR_brk = 45 + __NR_SYSCALL_BASE ret
__NR_readlink= 85 + __NR_SYSCALL_BASE // 0x55
__NR_ftruncate= 93 + __NR_SYSCALL_BASE // 0x5d
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 mempcpy: .globl mempcpy // (dst, src, n)
__NR_mmap2 = 192 + __NR_SYSCALL_BASE // 0xc0 cmp r2,#0; beq 9f
__NR_mprotect = 125 + __NR_SYSCALL_BASE // 0x7d 0:
__NR_munmap = 91 + __NR_SYSCALL_BASE // 0x5b 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 __NR_SYSCALL_BASE = 0
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
__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 .globl my_bkpt
my_bkpt: my_bkpt:
bkpt // my_bkpt bkpt // my_bkpt
ret ret
.globl exit // __NR_oldmmap gets ENOSYS! Must use __NR_mmap2 with all args in registers
exit: // Called from C (5th and 6th arg on stack), so must preserve r4 and r5
do_sys __NR_exit mmap: .globl mmap
stmdb sp!,{r4,r5,lr} // called from C: only 4 args in registers
.globl read ldr arg6,[sp,#4*NBPW]
read: ldr arg5,[sp,#3*NBPW]
do_sys __NR_read; ret mov arg6,arg6,lsr #12 @ FIXME? convert to page offset in file
mmap_do: // sp: saved r4,r5,lr
Pwrite: .globl Pwrite mov r12,#~0; mov r12,r12,lsl #12 // PAGE_MASK
write: .globl write bic r12,arg1,r12 // lo frag
do_sys __NR_write; ret sub arg1,arg1,r12 // page align lo end
add arg2,arg2,r12
lseek: .globl lseek do_sys __NR_mmap2
do_sys __NR_lseek; ret ldmia sp!,{r4,r5,pc}
.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
O_RDWR= 2 O_RDWR= 2
O_DIRECTORY= 040000 O_DIRECTORY= 040000
@@ -201,53 +272,15 @@ table3:
.asciz "/dev/shm"; .balign 4 .asciz "/dev/shm"; .balign 4
upxfd_create: .globl upxfd_create upxfd_create: .globl upxfd_create
bkpt // upxfd_create
adr r0,table3 adr r0,table3
ldmia r0!,{r1,r2} ldmia r0!,{r1,r2}
do_sys7t2 __NR_open do_sys7t2 __NR_open
ret 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 .globl __clear_cache
__clear_cache: __clear_cache:
mov r2,#0 bkpt // clear_cache should not be needed: write() + mmap()
do_sys2 __ARM_NR_cacheflush; ret
get_sys_munmap: .globl get_sys_munmap // r0= system call instruction get_sys_munmap: .globl get_sys_munmap // r0= system call instruction
#if defined(ARMEL_DARWIN) /*{*/ #if defined(ARMEL_DARWIN) /*{*/
@@ -269,73 +302,6 @@ mmap_privanon: .globl mmap_privanon
mvn r4,#0 @ fd= -1 mvn r4,#0 @ fd= -1
b mmap_do 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 tmp .req r3
size .req r4 size .req r4
@@ -379,12 +345,6 @@ underlay: .globl underlay // (unsigned size, char *ptr, unsigned ulen, unsigned
.unreq ulen .unreq ulen
.unreq pflg .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 my_alloca: .globl my_alloca
sub r0,sp,r0 sub r0,sp,r0
and r0,r0,#-2*NBPW and r0,r0,#-2*NBPW
+2 -2
View File
@@ -30,7 +30,7 @@
*/ */
#ifndef DEBUG //{ #ifndef DEBUG //{
#define DEBUG 0 #define DEBUG 1
#endif //} #endif //}
#define NO_WANT_MMAP 1 #define NO_WANT_MMAP 1
@@ -293,7 +293,7 @@ make_hatch_i386(
unsigned code[2] = { unsigned code[2] = {
0x586180cd, // int #0x80; popa; pop %eax 0x586180cd, // int #0x80; popa; pop %eax
0x90e0ff3e, // notrack jmp *%eax; nop 0x90e0ff3e, // notrack jmp *%eax; nop
} };
DPRINTF("make_hatch %%p %%p %%x\\n", phdr, next_unc, frag_mask); DPRINTF("make_hatch %%p %%p %%x\\n", phdr, next_unc, frag_mask);
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) { if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
next_unc += phdr->p_memsz - phdr->p_filesz; // Skip over local .bss next_unc += phdr->p_memsz - phdr->p_filesz; // Skip over local .bss
+31 -72
View File
@@ -265,7 +265,13 @@ ERR_LAB
error; error;
#endif //} #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. // 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 // Called by do_xmap to create it; remembered in AT_NULL.d_val
static char * static char *
@@ -318,16 +324,17 @@ make_hatch_arm32(
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) { if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
next_unc += phdr->p_memsz - phdr->p_filesz; // Skip over local .bss next_unc += phdr->p_memsz - phdr->p_filesz; // Skip over local .bss
frag_mask &= -(long)next_unc; // bytes left on page 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 = (unsigned *)(void *)(~3ul & (long)(3+ next_unc));
hatch[0]= code[0]; hatch[0] = code[0];
hatch[1]= code[1]; hatch[1] = code[1];
__clear_cache(&hatch[0], &hatch[2]);
} }
else { // Does not fit at hi end of .text, so must use a new page "permanently" else { // Does not fit at hi end of .text, so must use a new page "permanently"
int mfd = upxfd_create(); // the directory entry unsigned long fdmap = upx_mmap_and_fd((void *)0, sizeof(code), 0);
write(mfd, &code, 2*4); unsigned mfd = -1+ (0xfff& fdmap);
hatch = Pmap(0, 2*4, PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0); write(mfd, &code, sizeof(code));
hatch = mmap((void *)(fdmap & ~0xffful), sizeof(code),
PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0);
close(mfd); close(mfd);
} }
} }
@@ -422,31 +429,7 @@ make_hatch_ppc32(
#define nullptr (void *)0 #define nullptr (void *)0
#if defined(__i386__) //{ extern unsigned get_page_mask(void);
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 void *memcpy(void *dst, void const *src, size_t n); extern void *memcpy(void *dst, void const *src, size_t n);
extern void *memset(void *dst, unsigned val, 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 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; char *const va_load = (char *)&so_info->off_reloc - so_info->off_reloc;
So_info so_infc; // So_info Copy So_info so_infc; // So_info Copy
memcpy(&so_infc, so_info, sizeof(so_infc)); // before de-compression overwrites 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. // Copy compressed data before de-compression overwrites it.
char *const sideaddr = mmap(nullptr, cpr_len, PROT_WRITE|PROT_READ, char *const sideaddr = mmap(nullptr, cpr_len, PROT_WRITE|PROT_READ,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
DPRINTF("sideaddr=%%p\\n", sideaddr); DPRINTF("&sideaddr=%%p\\n", &sideaddr);
memcpy(sideaddr, cpr_ptr, cpr_len); memcpy(sideaddr, cpr_ptr, cpr_len);
// Transition to copied data // 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 *phdr = (Elf32_Phdr *)(1+ elf_tmp);
Elf32_Phdr const *const phdrN = &phdr[elf_tmp->e_phnum]; 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. // Process each read-only PT_LOAD.
// A read+write PT_LOAD might be relocated by rtld before de-compression, // A read+write PT_LOAD might be relocated by rtld before de-compression,
// so it cannot be compressed. // so it cannot be compressed.
struct b_info al_bi; // for aligned data from binfo struct b_info al_bi; // for aligned data from binfo
void *hatch = nullptr; void *hatch = nullptr;
Elf32_Addr base = 0;
for (; phdr < phdrN; ++phdr) for (; phdr < phdrN; ++phdr)
if ( phdr->p_type == PT_LOAD && !(phdr->p_flags & PF_W)) { 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", 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); 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) { if ((phdr->p_filesz + phdr->p_offset) <= so_infc.off_xct_off) {
continue; // below compressed region 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") // 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" // that has never had PROT_WRITE. So use a Linux-only "memory file"
// to hold the contents. // to hold the contents.
#if defined(__arm__) //{ Emulate: Android "ABI" has inconsistent __NR_ftruncate. unsigned long val = upx_mmap_and_fd(x1.buf, x1.size, nullptr);
mfd = upxfd_create(); // anonymous file in /dev/shm with 0700 permission mfd = 0xfff & val;
size_t goal = x1.size; val -= mfd; if ((char *)val != x1.buf) my_bkpt((void *)0x1241, &x1);
while (0 < goal) { // /dev/shm limits to 8KiB at a time!! --mfd;
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 //}
Pwrite(mfd, x1.buf, frag); // Save lo fragment of contents on first page. 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); 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 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 if (phdr->p_flags & PF_X) { // SELinux
// Map the contents of mfd as per *phdr. // 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); 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), Pmap((char *)(phdr->p_vaddr + base + pfx), al_bi.sz_unc, PF_to_PROT(phdr),
MAP_FIXED|MAP_PRIVATE, mfd, 0); MAP_FIXED|MAP_PRIVATE, mfd, 0);
close(mfd); 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); Punmap(sideaddr, cpr_len);
DPRINTF("calling user DT_INIT %%p\\n", dt_init); DPRINTF("calling user DT_INIT %%p\\n", dt_init);
dt_init(so_args->argc, so_args->argv, so_args->envp); dt_init(so_args->argc, so_args->argv, so_args->envp);
+28 -15
View File
@@ -247,7 +247,15 @@ static int create_upxfn_path(char *name, char *buf)
// Also 32-bit Android has inconsistent __NR_ftruncate, // Also 32-bit Android has inconsistent __NR_ftruncate,
// so use direct write() // 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 int uname(struct utsname *);
extern char * get_upxfn_path(void); extern char * get_upxfn_path(void);
@@ -310,28 +318,33 @@ unsigned long upx_mmap_and_fd( // returns (mapped_addr | (1+ fd))
#if ANDROID_FRIEND //{ #if ANDROID_FRIEND //{
// Varying __NR_ftruncate on Android can hurt even if memfd_create() succeeds. // 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. // On Linux, struct utsname has 6 arrays of size 65; but size can be larger.
#define BUFLEN 4096 #define BUFLEN PATH_MAX
void *buf = alloca(BUFLEN); *(int *)buf = 0; union {
uname((struct utsname *)buf); struct utsname uts;
char buf[BUFLEN];
} u;
uname(&u.uts);
int const not_android = (ANDROID_TEST ? 0 int const not_android = (ANDROID_TEST ? 0
: ( 0 != strncmplc(addr_string("and"), : ( 0 != strncmplc(addr_string("and"), &u.uts.sysname[0], 3)
&((char const *)&buf)[0*65 /*sysname*/], 3) // claims Android && 0 == strncmplc(addr_string("Lin"), &u.uts.sysname[0], 3)
&& 0 == strncmplc(addr_string("Lin"), && '4'< u.uts.release[0] ));
&((char const *)&buf)[0*65 /*sysname*/], 3) // claims Linux
&& '4'< ((char const *)&buf)[2*65 /*release*/] ) // young enough
);
// 2024-08-01: TermUX on Android 14 arm64 running 32-bit program: // 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! // gets signal SIGSYS instead of errno ENOSYS; so is not really Linux!
// Work-around for missing memfd_create syscall on early 32-bit Android. // Work-around for missing memfd_create syscall on early 32-bit Android.
if (!not_android && !pathname) { // must ask if (!not_android && !pathname) { // must ask
pathname = get_upxfn_path(); 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 (!not_android && -ENOSYS == fd && pathname) {
if ('\0' == pathname[0]) { // first time; create the pathname and file 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) { if (rv < 0) {
return rv; return rv;
} }
@@ -361,11 +374,11 @@ unsigned long upx_mmap_and_fd( // returns (mapped_addr | (1+ fd))
} }
#if ANDROID_FRIEND //{ #if ANDROID_FRIEND //{
else { // !not_android: ftruncate has varying system call number on 32-bit else { // !not_android: ftruncate has varying system call number on 32-bit
memset(buf, 0, BUFLEN); memset(u.buf, 0, BUFLEN);
unsigned wlen = datlen; unsigned wlen = datlen;
while (0 < wlen) { while (0 < wlen) {
int x = (wlen < BUFLEN) ? wlen : BUFLEN; int x = (wlen < BUFLEN) ? wlen : BUFLEN;
if (x != write(fd, buf, x)) { if (x != write(fd, u.buf, x)) {
return -ENOSPC; return -ENOSPC;
} }
wlen -= x; wlen -= x;
+81 -81
View File
@@ -4,14 +4,14 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS 0 ELFMAINY 0 0 0 034 2**0 CONTENTS
1 ELFMAINZ 01dc 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: SYMBOL TABLE:
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINX 0 ELFMAINX 00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINY 0 ELFMAINY 00000000 l d ELFMAINY 0 ELFMAINY
00000000 *UND* 0 MFLG 00000000 *UND* 0 MFLG
000000d8 g ELFMAINZ 0 getpid 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 00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
0000004c g ELFMAINZ 0 mempcpy 0000004c g ELFMAINZ 0 mempcpy
@@ -28,7 +28,7 @@ SYMBOL TABLE:
00000128 g ELFMAINZ 0 read 00000128 g ELFMAINZ 0 read
00000164 g ELFMAINZ 0 unlink 00000164 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset 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 0000018c g ELFMAINZ 0 my_bkpt
000000b0 g ELFMAINZ 0 fsync 000000b0 g ELFMAINZ 0 fsync
0000013c g ELFMAINZ 0 stat 0000013c g ELFMAINZ 0 stat
@@ -61,92 +61,92 @@ OFFSET TYPE VALUE
00000108 R_ARM_PC24 ELFMAINX 00000108 R_ARM_PC24 ELFMAINX
00000164 R_ARM_PC24 ELFMAINX 00000164 R_ARM_PC24 ELFMAINX
0000017c 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 000001e4 R_ARM_PC24 ELFMAINX
000001ec R_ARM_PC24 ELFMAINX 000001f4 R_ARM_PC24 ELFMAINX
000001f0 R_ARM_PC24 ELFMAINX 000001f8 R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX 00000200 R_ARM_PC24 ELFMAINX
00000204 R_ARM_PC24 ELFMAINX
00000208 R_ARM_PC24 ELFMAINX 00000208 R_ARM_PC24 ELFMAINX
00000214 R_ARM_PC24 ELFMAINX 0000020c R_ARM_PC24 ELFMAINX
00000224 R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX 00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX 0000022c R_ARM_PC24 ELFMAINX
00000238 R_ARM_PC24 ELFMAINX
0000023c R_ARM_PC24 ELFMAINX 0000023c R_ARM_PC24 ELFMAINX
00000258 R_ARM_PC24 ELFMAINX 00000258 R_ARM_PC24 ELFMAINX
0000025c R_ARM_PC24 ELFMAINX 00000270 R_ARM_PC24 ELFMAINX
0000026c R_ARM_PC24 ELFMAINX 00000284 R_ARM_PC24 ELFMAINX
00000288 R_ARM_PC24 ELFMAINX 000002b0 R_ARM_PC24 memset
000002a0 R_ARM_PC24 ELFMAINX 000002bc R_ARM_PC24 stat
000002b4 R_ARM_PC24 ELFMAINX 000002c4 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 memset 000002d8 R_ARM_PC24 ELFMAINX
000002ec R_ARM_PC24 stat 000002e8 R_ARM_PC24 mkdir
000002f4 R_ARM_PC24 ELFMAINX 00000300 R_ARM_PC24 ELFMAINX
00000308 R_ARM_PC24 ELFMAINX 00000318 R_ARM_PC24 mempcpy
00000318 R_ARM_PC24 mkdir 00000328 R_ARM_PC24 ELFMAINX
00000330 R_ARM_PC24 ELFMAINX 0000032c R_ARM_PC24 ELFMAINX
00000348 R_ARM_PC24 mempcpy 00000350 R_ARM_PC24 open
00000358 R_ARM_PC24 ELFMAINX 00000364 R_ARM_PC24 read
0000035c R_ARM_PC24 ELFMAINX 00000370 R_ARM_PC24 close
00000380 R_ARM_PC24 open 00000394 R_ARM_PC24 ELFMAINX
00000394 R_ARM_PC24 read 000003a4 R_ARM_PC24 ELFMAINX
000003a0 R_ARM_PC24 close 000003ac R_ARM_PC24 ELFMAINX
000003c4 R_ARM_PC24 ELFMAINX 000003b8 R_ARM_PC24 ELFMAINX
000003d4 R_ARM_PC24 ELFMAINX 000003c8 R_ARM_PC24 mempcpy
000003dc R_ARM_PC24 ELFMAINX 000003dc R_ARM_PC24 ELFMAINX
000003e8 R_ARM_PC24 ELFMAINX 000003e0 R_ARM_PC24 ELFMAINX
000003f8 R_ARM_PC24 mempcpy 000003f8 R_ARM_PC24 mempcpy
00000408 R_ARM_PC24 ELFMAINX
0000040c R_ARM_PC24 ELFMAINX 0000040c R_ARM_PC24 ELFMAINX
00000410 R_ARM_PC24 ELFMAINX 00000424 R_ARM_PC24 mempcpy
00000428 R_ARM_PC24 mempcpy 0000042c R_ARM_PC24 getpid
00000438 R_ARM_PC24 ELFMAINX 00000434 R_ARM_PC24 ELFMAINX
0000043c R_ARM_PC24 ELFMAINX 00000440 R_ARM_PC24 ELFMAINX
00000454 R_ARM_PC24 mempcpy 0000044c R_ARM_PC24 ELFMAINX
0000045c R_ARM_PC24 getpid
00000464 R_ARM_PC24 ELFMAINX 00000464 R_ARM_PC24 ELFMAINX
00000470 R_ARM_PC24 ELFMAINX 00000480 R_ARM_PC24 ELFMAINX
0000047c R_ARM_PC24 ELFMAINX 00000494 R_ARM_PC24 memfd_create
00000494 R_ARM_PC24 ELFMAINX 000004a0 R_ARM_PC24 ELFMAINX
000004b4 R_ARM_PC24 ELFMAINX 000004ac R_ARM_PC24 memfd_create
000004c8 R_ARM_PC24 memfd_create 000004b8 R_ARM_PC24 ELFMAINX
000004d4 R_ARM_PC24 ELFMAINX 000004bc R_ARM_PC24 ELFMAINX
000004e0 R_ARM_PC24 memfd_create 000004dc R_ARM_PC24 open
000004ec R_ARM_PC24 ELFMAINX 000004e4 R_ARM_PC24 ELFMAINX
000004f0 R_ARM_PC24 ELFMAINX 000004e8 R_ARM_PC24 ELFMAINX
00000510 R_ARM_PC24 open 00000500 R_ARM_PC24 my_bkpt
00000518 R_ARM_PC24 ELFMAINX 0000050c R_ARM_PC24 uname
0000051c R_ARM_PC24 ELFMAINX 00000510 R_ARM_PC24 ELFMAINX
00000534 R_ARM_PC24 my_bkpt 00000524 R_ARM_PC24 ELFMAINX
00000554 R_ARM_PC24 uname 0000052c R_ARM_PC24 ELFMAINX
00000558 R_ARM_PC24 ELFMAINX 00000530 R_ARM_PC24 ELFMAINX
0000056c R_ARM_PC24 ELFMAINX 00000544 R_ARM_PC24 ELFMAINX
00000574 R_ARM_PC24 ELFMAINX 0000054c R_ARM_PC24 ELFMAINX
00000578 R_ARM_PC24 ELFMAINX 0000055c R_ARM_PC24 ELFMAINX
0000058c R_ARM_PC24 ELFMAINX 00000564 R_ARM_PC24 ELFMAINX
00000594 R_ARM_PC24 ELFMAINX 00000568 R_ARM_PC24 get_upxfn_path
000005a4 R_ARM_PC24 ELFMAINX 00000588 R_ARM_PC24 ELFMAINX
000005ac R_ARM_PC24 ELFMAINX 00000590 R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 get_upxfn_path 0000059c R_ARM_PC24 ELFMAINX
000005bc R_ARM_PC24 ELFMAINX 000005a8 R_ARM_PC24 ELFMAINX
000005c4 R_ARM_PC24 ELFMAINX 000005b0 R_ARM_PC24 ELFMAINX
000005d0 R_ARM_PC24 ELFMAINX 000005c0 R_ARM_PC24 open
000005cc R_ARM_PC24 ELFMAINX
000005d4 R_ARM_PC24 unlink
000005dc R_ARM_PC24 ELFMAINX 000005dc R_ARM_PC24 ELFMAINX
000005e4 R_ARM_PC24 ELFMAINX 000005e8 R_ARM_PC24 ELFMAINX
000005f4 R_ARM_PC24 open 000005f0 R_ARM_PC24 ELFMAINX
00000600 R_ARM_PC24 ELFMAINX 000005fc R_ARM_PC24 ftruncate
00000608 R_ARM_PC24 unlink 00000604 R_ARM_PC24 ELFMAINX
00000610 R_ARM_PC24 ELFMAINX 00000608 R_ARM_PC24 ELFMAINX
0000061c R_ARM_PC24 ELFMAINX 00000618 R_ARM_PC24 memset
00000624 R_ARM_PC24 ELFMAINX 00000638 R_ARM_PC24 write
00000630 R_ARM_PC24 ftruncate 00000640 R_ARM_PC24 ELFMAINX
00000638 R_ARM_PC24 ELFMAINX 00000648 R_ARM_PC24 ELFMAINX
0000063c R_ARM_PC24 ELFMAINX 00000658 R_ARM_PC24 lseek
0000064c R_ARM_PC24 memset 00000664 R_ARM_PC24 ELFMAINX
0000066c R_ARM_PC24 write 00000668 R_ARM_PC24 ELFMAINX
00000674 R_ARM_PC24 ELFMAINX 00000670 R_ARM_PC24 ELFMAINX
0000067c R_ARM_PC24 ELFMAINX 00000694 R_ARM_PC24 mmap
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
+6 -6
View File
@@ -7,7 +7,7 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0x1060 .text 0x0000000000000000 0x1b5c
.text 0x0000000000000000 0x344 tmp/arm.v4a-linux.elf-fold.o .text 0x0000000000000000 0x344 tmp/arm.v4a-linux.elf-fold.o
0x0000000000000004 get_page_mask 0x0000000000000004 get_page_mask
0x00000000000002e4 memcpy 0x00000000000002e4 memcpy
@@ -22,9 +22,9 @@ Linker script and memory map
.text 0x0000000000000344 0x480 tmp/arm.v4a-linux.elf-upxfd_android.o .text 0x0000000000000344 0x480 tmp/arm.v4a-linux.elf-upxfd_android.o
0x000000000000057c upx_mmap_and_fd 0x000000000000057c upx_mmap_and_fd
.text 0x00000000000007c4 0x0 tmp/arm.v4a-expand.o .text 0x00000000000007c4 0x0 tmp/arm.v4a-expand.o
.text 0x00000000000007c4 0x89c tmp/arm.v4a-linux.elf-main2.o .text 0x00000000000007c4 0x1398 tmp/arm.v4a-linux.elf-main2.o
0x0000000000000ffc underlay 0x0000000000001ab4 underlay
0x0000000000000ecc upx_main 0x0000000000001858 upx_main
SYSCALLS 0x0000000000000000 0x214 SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/arm.v4a-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x214 tmp/arm.v4a-linux.elf-fold.o
@@ -53,8 +53,8 @@ SYSCALLS 0x0000000000000000 0x214
0x00000000000000d8 mkdir 0x00000000000000d8 mkdir
0x000000000000001c close 0x000000000000001c close
EXP_HEAD 0x0000000000000000 0xe0 EXP_HEAD 0x0000000000000000 0xdc
EXP_HEAD 0x0000000000000000 0xe0 tmp/arm.v4a-expand.o EXP_HEAD 0x0000000000000000 0xdc tmp/arm.v4a-expand.o
0x0000000000000074 f_expand 0x0000000000000074 f_expand
EXP_TAIL 0x0000000000000000 0x24 EXP_TAIL 0x0000000000000000 0x24
+82 -82
View File
@@ -4,14 +4,14 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS 0 ELFMAINY 0 0 0 034 2**0 CONTENTS
1 ELFMAINZ 01dc 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: SYMBOL TABLE:
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINX 0 ELFMAINX 00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINY 0 ELFMAINY 00000000 l d ELFMAINY 0 ELFMAINY
00000000 *UND* 0 MFLG 00000000 *UND* 0 MFLG
000000d8 g ELFMAINZ 0 getpid 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 00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
0000004c g ELFMAINZ 0 mempcpy 0000004c g ELFMAINZ 0 mempcpy
@@ -28,7 +28,7 @@ SYMBOL TABLE:
00000128 g ELFMAINZ 0 read 00000128 g ELFMAINZ 0 read
00000164 g ELFMAINZ 0 unlink 00000164 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset 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 0000018c g ELFMAINZ 0 my_bkpt
000000b0 g ELFMAINZ 0 fsync 000000b0 g ELFMAINZ 0 fsync
0000013c g ELFMAINZ 0 stat 0000013c g ELFMAINZ 0 stat
@@ -61,93 +61,93 @@ OFFSET TYPE VALUE
00000108 R_ARM_PC24 ELFMAINX 00000108 R_ARM_PC24 ELFMAINX
00000164 R_ARM_PC24 ELFMAINX 00000164 R_ARM_PC24 ELFMAINX
0000017c 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 000001e4 R_ARM_PC24 ELFMAINX
000001ec R_ARM_PC24 ELFMAINX 000001f4 R_ARM_PC24 ELFMAINX
000001f0 R_ARM_PC24 ELFMAINX 000001f8 R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX 00000200 R_ARM_PC24 ELFMAINX
00000204 R_ARM_PC24 ELFMAINX
00000208 R_ARM_PC24 ELFMAINX 00000208 R_ARM_PC24 ELFMAINX
00000214 R_ARM_PC24 ELFMAINX 0000020c R_ARM_PC24 ELFMAINX
00000224 R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX 00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX 0000022c R_ARM_PC24 ELFMAINX
00000238 R_ARM_PC24 ELFMAINX
0000023c R_ARM_PC24 ELFMAINX 0000023c R_ARM_PC24 ELFMAINX
00000258 R_ARM_PC24 ELFMAINX 00000258 R_ARM_PC24 ELFMAINX
0000025c R_ARM_PC24 ELFMAINX 00000270 R_ARM_PC24 ELFMAINX
0000026c R_ARM_PC24 ELFMAINX 00000284 R_ARM_PC24 ELFMAINX
00000288 R_ARM_PC24 ELFMAINX 000002b0 R_ARM_PC24 memset
000002a0 R_ARM_PC24 ELFMAINX 000002bc R_ARM_PC24 stat
000002b4 R_ARM_PC24 ELFMAINX 000002c4 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 memset 000002d8 R_ARM_PC24 ELFMAINX
000002ec R_ARM_PC24 stat 000002e0 R_ARM_PC24 ELFMAINX
000002f4 R_ARM_PC24 ELFMAINX 000002ec R_ARM_PC24 mkdir
00000308 R_ARM_PC24 ELFMAINX 00000304 R_ARM_PC24 ELFMAINX
00000310 R_ARM_PC24 ELFMAINX 0000031c R_ARM_PC24 mempcpy
0000031c R_ARM_PC24 mkdir 0000032c R_ARM_PC24 ELFMAINX
00000334 R_ARM_PC24 ELFMAINX 00000330 R_ARM_PC24 ELFMAINX
0000034c R_ARM_PC24 mempcpy 00000354 R_ARM_PC24 open
0000035c R_ARM_PC24 ELFMAINX 00000364 R_ARM_PC24 read
00000360 R_ARM_PC24 ELFMAINX 00000370 R_ARM_PC24 close
00000384 R_ARM_PC24 open 00000394 R_ARM_PC24 ELFMAINX
00000394 R_ARM_PC24 read 000003a4 R_ARM_PC24 ELFMAINX
000003a0 R_ARM_PC24 close 000003ac R_ARM_PC24 ELFMAINX
000003c4 R_ARM_PC24 ELFMAINX 000003b8 R_ARM_PC24 ELFMAINX
000003d4 R_ARM_PC24 ELFMAINX 000003c8 R_ARM_PC24 mempcpy
000003dc R_ARM_PC24 ELFMAINX 000003dc R_ARM_PC24 ELFMAINX
000003e8 R_ARM_PC24 ELFMAINX 000003e0 R_ARM_PC24 ELFMAINX
000003f8 R_ARM_PC24 mempcpy 000003f8 R_ARM_PC24 mempcpy
00000408 R_ARM_PC24 ELFMAINX
0000040c R_ARM_PC24 ELFMAINX 0000040c R_ARM_PC24 ELFMAINX
00000410 R_ARM_PC24 ELFMAINX 00000424 R_ARM_PC24 mempcpy
00000428 R_ARM_PC24 mempcpy 0000042c R_ARM_PC24 getpid
00000438 R_ARM_PC24 ELFMAINX 00000434 R_ARM_PC24 ELFMAINX
0000043c R_ARM_PC24 ELFMAINX 00000440 R_ARM_PC24 ELFMAINX
00000454 R_ARM_PC24 mempcpy 0000044c R_ARM_PC24 ELFMAINX
0000045c R_ARM_PC24 getpid
00000464 R_ARM_PC24 ELFMAINX 00000464 R_ARM_PC24 ELFMAINX
00000470 R_ARM_PC24 ELFMAINX 00000484 R_ARM_PC24 ELFMAINX
0000047c R_ARM_PC24 ELFMAINX 00000498 R_ARM_PC24 memfd_create
00000494 R_ARM_PC24 ELFMAINX 000004a4 R_ARM_PC24 ELFMAINX
000004b8 R_ARM_PC24 ELFMAINX 000004b0 R_ARM_PC24 memfd_create
000004cc R_ARM_PC24 memfd_create 000004bc R_ARM_PC24 ELFMAINX
000004d8 R_ARM_PC24 ELFMAINX 000004c0 R_ARM_PC24 ELFMAINX
000004e4 R_ARM_PC24 memfd_create 000004dc R_ARM_PC24 open
000004f0 R_ARM_PC24 ELFMAINX 000004e4 R_ARM_PC24 ELFMAINX
000004f4 R_ARM_PC24 ELFMAINX 000004e8 R_ARM_PC24 ELFMAINX
00000510 R_ARM_PC24 open 00000500 R_ARM_PC24 my_bkpt
00000518 R_ARM_PC24 ELFMAINX 0000050c R_ARM_PC24 uname
0000051c R_ARM_PC24 ELFMAINX 00000510 R_ARM_PC24 ELFMAINX
00000534 R_ARM_PC24 my_bkpt 00000524 R_ARM_PC24 ELFMAINX
00000554 R_ARM_PC24 uname 0000052c R_ARM_PC24 ELFMAINX
00000558 R_ARM_PC24 ELFMAINX 00000530 R_ARM_PC24 ELFMAINX
0000056c R_ARM_PC24 ELFMAINX 00000544 R_ARM_PC24 ELFMAINX
00000574 R_ARM_PC24 ELFMAINX 0000054c R_ARM_PC24 ELFMAINX
00000578 R_ARM_PC24 ELFMAINX 0000055c R_ARM_PC24 ELFMAINX
0000058c R_ARM_PC24 ELFMAINX 00000564 R_ARM_PC24 ELFMAINX
00000594 R_ARM_PC24 ELFMAINX 00000568 R_ARM_PC24 get_upxfn_path
000005a4 R_ARM_PC24 ELFMAINX 00000588 R_ARM_PC24 ELFMAINX
000005ac R_ARM_PC24 ELFMAINX 00000590 R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 get_upxfn_path 0000059c R_ARM_PC24 ELFMAINX
000005bc R_ARM_PC24 ELFMAINX 000005a8 R_ARM_PC24 ELFMAINX
000005c4 R_ARM_PC24 ELFMAINX 000005b0 R_ARM_PC24 ELFMAINX
000005d0 R_ARM_PC24 ELFMAINX 000005c0 R_ARM_PC24 open
000005cc R_ARM_PC24 ELFMAINX
000005d4 R_ARM_PC24 unlink
000005dc R_ARM_PC24 ELFMAINX 000005dc R_ARM_PC24 ELFMAINX
000005e4 R_ARM_PC24 ELFMAINX 000005e8 R_ARM_PC24 ELFMAINX
000005f4 R_ARM_PC24 open 000005f0 R_ARM_PC24 ELFMAINX
00000600 R_ARM_PC24 ELFMAINX 000005fc R_ARM_PC24 ftruncate
00000608 R_ARM_PC24 unlink 00000604 R_ARM_PC24 ELFMAINX
00000610 R_ARM_PC24 ELFMAINX 00000608 R_ARM_PC24 ELFMAINX
0000061c R_ARM_PC24 ELFMAINX 00000618 R_ARM_PC24 memset
00000624 R_ARM_PC24 ELFMAINX 00000638 R_ARM_PC24 write
00000630 R_ARM_PC24 ftruncate 00000640 R_ARM_PC24 ELFMAINX
00000638 R_ARM_PC24 ELFMAINX 00000648 R_ARM_PC24 ELFMAINX
0000063c R_ARM_PC24 ELFMAINX 00000658 R_ARM_PC24 lseek
0000064c R_ARM_PC24 memset 00000664 R_ARM_PC24 ELFMAINX
0000066c R_ARM_PC24 write 00000668 R_ARM_PC24 ELFMAINX
00000674 R_ARM_PC24 ELFMAINX 00000670 R_ARM_PC24 ELFMAINX
0000067c R_ARM_PC24 ELFMAINX 00000694 R_ARM_PC24 mmap
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
+12 -12
View File
@@ -8,7 +8,7 @@ Linker script and memory map
TARGET(elf32-littlearm) TARGET(elf32-littlearm)
.text 0x0000000000000000 0x1060 .text 0x0000000000000000 0x1b7c
*(.text) *(.text)
.text 0x0000000000000000 0x344 tmp/arm.v5a-linux.elf-fold.o .text 0x0000000000000000 0x344 tmp/arm.v5a-linux.elf-fold.o
0x0000000000000004 get_page_mask 0x0000000000000004 get_page_mask
@@ -21,17 +21,17 @@ TARGET(elf32-littlearm)
0x0000000000000024 Pprotect 0x0000000000000024 Pprotect
0x00000000fffffff4 PAGE_MASK 0x00000000fffffff4 PAGE_MASK
0x0000000000000024 mprotect 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 0x0000000000000580 upx_mmap_and_fd
.text 0x00000000000007c8 0x0 tmp/arm.v5a-expand.o .text 0x00000000000007cc 0x0 tmp/arm.v5a-expand.o
.text 0x00000000000007c8 0x898 tmp/arm.v5a-linux.elf-main2.o .text 0x00000000000007cc 0x13b0 tmp/arm.v5a-linux.elf-main2.o
0x0000000000000ffc underlay 0x0000000000001ad4 underlay
0x0000000000000ecc upx_main 0x0000000000001874 upx_main
*(.data) *(.data)
.data 0x0000000000001060 0x0 tmp/arm.v5a-linux.elf-fold.o .data 0x0000000000001b7c 0x0 tmp/arm.v5a-linux.elf-fold.o
.data 0x0000000000001060 0x0 tmp/arm.v5a-linux.elf-upxfd_android.o .data 0x0000000000001b7c 0x0 tmp/arm.v5a-linux.elf-upxfd_android.o
.data 0x0000000000001060 0x0 tmp/arm.v5a-expand.o .data 0x0000000000001b7c 0x0 tmp/arm.v5a-expand.o
.data 0x0000000000001060 0x0 tmp/arm.v5a-linux.elf-main2.o .data 0x0000000000001b7c 0x0 tmp/arm.v5a-linux.elf-main2.o
SYSCALLS 0x0000000000000000 0x214 SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/arm.v5a-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x214 tmp/arm.v5a-linux.elf-fold.o
@@ -60,8 +60,8 @@ SYSCALLS 0x0000000000000000 0x214
0x00000000000000d8 mkdir 0x00000000000000d8 mkdir
0x000000000000001c close 0x000000000000001c close
EXP_HEAD 0x0000000000000000 0xe0 EXP_HEAD 0x0000000000000000 0xdc
EXP_HEAD 0x0000000000000000 0xe0 tmp/arm.v5a-expand.o EXP_HEAD 0x0000000000000000 0xdc tmp/arm.v5a-expand.o
0x0000000000000074 f_expand 0x0000000000000074 f_expand
EXP_TAIL 0x0000000000000000 0x24 EXP_TAIL 0x0000000000000000 0x24
+81 -81
View File
@@ -4,14 +4,14 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS 0 ELFMAINY 0 0 0 034 2**0 CONTENTS
1 ELFMAINZ 01dc 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: SYMBOL TABLE:
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINX 0 ELFMAINX 00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINY 0 ELFMAINY 00000000 l d ELFMAINY 0 ELFMAINY
00000000 *UND* 0 MFLG 00000000 *UND* 0 MFLG
000000d8 g ELFMAINZ 0 getpid 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 00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
0000004c g ELFMAINZ 0 mempcpy 0000004c g ELFMAINZ 0 mempcpy
@@ -28,7 +28,7 @@ SYMBOL TABLE:
00000128 g ELFMAINZ 0 read 00000128 g ELFMAINZ 0 read
00000164 g ELFMAINZ 0 unlink 00000164 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset 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 0000018c g ELFMAINZ 0 my_bkpt
000000b0 g ELFMAINZ 0 fsync 000000b0 g ELFMAINZ 0 fsync
0000013c g ELFMAINZ 0 stat 0000013c g ELFMAINZ 0 stat
@@ -61,92 +61,92 @@ OFFSET TYPE VALUE
00000108 R_ARM_PC24 ELFMAINX 00000108 R_ARM_PC24 ELFMAINX
00000164 R_ARM_PC24 ELFMAINX 00000164 R_ARM_PC24 ELFMAINX
0000017c 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 000001e4 R_ARM_PC24 ELFMAINX
000001ec R_ARM_PC24 ELFMAINX 000001f4 R_ARM_PC24 ELFMAINX
000001f0 R_ARM_PC24 ELFMAINX 000001f8 R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX 00000200 R_ARM_PC24 ELFMAINX
00000204 R_ARM_PC24 ELFMAINX
00000208 R_ARM_PC24 ELFMAINX 00000208 R_ARM_PC24 ELFMAINX
00000214 R_ARM_PC24 ELFMAINX 0000020c R_ARM_PC24 ELFMAINX
00000224 R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX 00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX 0000022c R_ARM_PC24 ELFMAINX
00000238 R_ARM_PC24 ELFMAINX
0000023c R_ARM_PC24 ELFMAINX 0000023c R_ARM_PC24 ELFMAINX
00000258 R_ARM_PC24 ELFMAINX 00000258 R_ARM_PC24 ELFMAINX
0000025c R_ARM_PC24 ELFMAINX 00000270 R_ARM_PC24 ELFMAINX
0000026c R_ARM_PC24 ELFMAINX 00000284 R_ARM_PC24 ELFMAINX
00000288 R_ARM_PC24 ELFMAINX 000002b0 R_ARM_PC24 memset
000002a0 R_ARM_PC24 ELFMAINX 000002bc R_ARM_PC24 stat
000002b4 R_ARM_PC24 ELFMAINX 000002c4 R_ARM_PC24 ELFMAINX
000002e0 R_ARM_PC24 memset 000002d8 R_ARM_PC24 ELFMAINX
000002ec R_ARM_PC24 stat 000002e8 R_ARM_PC24 mkdir
000002f4 R_ARM_PC24 ELFMAINX 00000300 R_ARM_PC24 ELFMAINX
00000308 R_ARM_PC24 ELFMAINX 00000318 R_ARM_PC24 mempcpy
00000318 R_ARM_PC24 mkdir 00000328 R_ARM_PC24 ELFMAINX
00000330 R_ARM_PC24 ELFMAINX 0000032c R_ARM_PC24 ELFMAINX
00000348 R_ARM_PC24 mempcpy 00000350 R_ARM_PC24 open
00000358 R_ARM_PC24 ELFMAINX 00000364 R_ARM_PC24 read
0000035c R_ARM_PC24 ELFMAINX 00000370 R_ARM_PC24 close
00000380 R_ARM_PC24 open 00000394 R_ARM_PC24 ELFMAINX
00000394 R_ARM_PC24 read 000003a4 R_ARM_PC24 ELFMAINX
000003a0 R_ARM_PC24 close 000003ac R_ARM_PC24 ELFMAINX
000003c4 R_ARM_PC24 ELFMAINX 000003b8 R_ARM_PC24 ELFMAINX
000003d4 R_ARM_PC24 ELFMAINX 000003c8 R_ARM_PC24 mempcpy
000003dc R_ARM_PC24 ELFMAINX 000003dc R_ARM_PC24 ELFMAINX
000003e8 R_ARM_PC24 ELFMAINX 000003e0 R_ARM_PC24 ELFMAINX
000003f8 R_ARM_PC24 mempcpy 000003f8 R_ARM_PC24 mempcpy
00000408 R_ARM_PC24 ELFMAINX
0000040c R_ARM_PC24 ELFMAINX 0000040c R_ARM_PC24 ELFMAINX
00000410 R_ARM_PC24 ELFMAINX 00000424 R_ARM_PC24 mempcpy
00000428 R_ARM_PC24 mempcpy 0000042c R_ARM_PC24 getpid
00000438 R_ARM_PC24 ELFMAINX 00000434 R_ARM_PC24 ELFMAINX
0000043c R_ARM_PC24 ELFMAINX 00000440 R_ARM_PC24 ELFMAINX
00000454 R_ARM_PC24 mempcpy 0000044c R_ARM_PC24 ELFMAINX
0000045c R_ARM_PC24 getpid
00000464 R_ARM_PC24 ELFMAINX 00000464 R_ARM_PC24 ELFMAINX
00000470 R_ARM_PC24 ELFMAINX 00000480 R_ARM_PC24 ELFMAINX
0000047c R_ARM_PC24 ELFMAINX 00000494 R_ARM_PC24 memfd_create
00000494 R_ARM_PC24 ELFMAINX 000004a0 R_ARM_PC24 ELFMAINX
000004b4 R_ARM_PC24 ELFMAINX 000004ac R_ARM_PC24 memfd_create
000004c8 R_ARM_PC24 memfd_create 000004b8 R_ARM_PC24 ELFMAINX
000004d4 R_ARM_PC24 ELFMAINX 000004bc R_ARM_PC24 ELFMAINX
000004e0 R_ARM_PC24 memfd_create 000004dc R_ARM_PC24 open
000004ec R_ARM_PC24 ELFMAINX 000004e4 R_ARM_PC24 ELFMAINX
000004f0 R_ARM_PC24 ELFMAINX 000004e8 R_ARM_PC24 ELFMAINX
00000510 R_ARM_PC24 open 00000500 R_ARM_PC24 my_bkpt
00000518 R_ARM_PC24 ELFMAINX 0000050c R_ARM_PC24 uname
0000051c R_ARM_PC24 ELFMAINX 00000510 R_ARM_PC24 ELFMAINX
00000534 R_ARM_PC24 my_bkpt 00000524 R_ARM_PC24 ELFMAINX
00000554 R_ARM_PC24 uname 0000052c R_ARM_PC24 ELFMAINX
00000558 R_ARM_PC24 ELFMAINX 00000530 R_ARM_PC24 ELFMAINX
0000056c R_ARM_PC24 ELFMAINX 00000544 R_ARM_PC24 ELFMAINX
00000574 R_ARM_PC24 ELFMAINX 0000054c R_ARM_PC24 ELFMAINX
00000578 R_ARM_PC24 ELFMAINX 0000055c R_ARM_PC24 ELFMAINX
0000058c R_ARM_PC24 ELFMAINX 00000564 R_ARM_PC24 ELFMAINX
00000594 R_ARM_PC24 ELFMAINX 00000568 R_ARM_PC24 get_upxfn_path
000005a4 R_ARM_PC24 ELFMAINX 00000588 R_ARM_PC24 ELFMAINX
000005ac R_ARM_PC24 ELFMAINX 00000590 R_ARM_PC24 ELFMAINX
000005b0 R_ARM_PC24 get_upxfn_path 0000059c R_ARM_PC24 ELFMAINX
000005bc R_ARM_PC24 ELFMAINX 000005a8 R_ARM_PC24 ELFMAINX
000005c4 R_ARM_PC24 ELFMAINX 000005b0 R_ARM_PC24 ELFMAINX
000005d0 R_ARM_PC24 ELFMAINX 000005c0 R_ARM_PC24 open
000005cc R_ARM_PC24 ELFMAINX
000005d4 R_ARM_PC24 unlink
000005dc R_ARM_PC24 ELFMAINX 000005dc R_ARM_PC24 ELFMAINX
000005e4 R_ARM_PC24 ELFMAINX 000005e8 R_ARM_PC24 ELFMAINX
000005f4 R_ARM_PC24 open 000005f0 R_ARM_PC24 ELFMAINX
00000600 R_ARM_PC24 ELFMAINX 000005fc R_ARM_PC24 ftruncate
00000608 R_ARM_PC24 unlink 00000604 R_ARM_PC24 ELFMAINX
00000610 R_ARM_PC24 ELFMAINX 00000608 R_ARM_PC24 ELFMAINX
0000061c R_ARM_PC24 ELFMAINX 00000618 R_ARM_PC24 memset
00000624 R_ARM_PC24 ELFMAINX 00000638 R_ARM_PC24 write
00000630 R_ARM_PC24 ftruncate 00000640 R_ARM_PC24 ELFMAINX
00000638 R_ARM_PC24 ELFMAINX 00000648 R_ARM_PC24 ELFMAINX
0000063c R_ARM_PC24 ELFMAINX 00000658 R_ARM_PC24 lseek
0000064c R_ARM_PC24 memset 00000664 R_ARM_PC24 ELFMAINX
0000066c R_ARM_PC24 write 00000668 R_ARM_PC24 ELFMAINX
00000674 R_ARM_PC24 ELFMAINX 00000670 R_ARM_PC24 ELFMAINX
0000067c R_ARM_PC24 ELFMAINX 00000694 R_ARM_PC24 mmap
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
+6 -6
View File
@@ -7,7 +7,7 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0x1074 .text 0x0000000000000000 0x1b70
.text 0x0000000000000000 0x344 tmp/armeb.v4a-linux.elf-fold.o .text 0x0000000000000000 0x344 tmp/armeb.v4a-linux.elf-fold.o
0x0000000000000004 get_page_mask 0x0000000000000004 get_page_mask
0x00000000000002e4 memcpy 0x00000000000002e4 memcpy
@@ -22,9 +22,9 @@ Linker script and memory map
.text 0x0000000000000344 0x480 tmp/armeb.v4a-linux.elf-upxfd_android.o .text 0x0000000000000344 0x480 tmp/armeb.v4a-linux.elf-upxfd_android.o
0x000000000000057c upx_mmap_and_fd 0x000000000000057c upx_mmap_and_fd
.text 0x00000000000007c4 0x0 tmp/armeb.v4a-expand.o .text 0x00000000000007c4 0x0 tmp/armeb.v4a-expand.o
.text 0x00000000000007c4 0x8b0 tmp/armeb.v4a-linux.elf-main2.o .text 0x00000000000007c4 0x13ac tmp/armeb.v4a-linux.elf-main2.o
0x0000000000001010 underlay 0x0000000000001ac8 underlay
0x0000000000000edc upx_main 0x0000000000001868 upx_main
SYSCALLS 0x0000000000000000 0x214 SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/armeb.v4a-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x214 tmp/armeb.v4a-linux.elf-fold.o
@@ -53,8 +53,8 @@ SYSCALLS 0x0000000000000000 0x214
0x00000000000000d8 mkdir 0x00000000000000d8 mkdir
0x000000000000001c close 0x000000000000001c close
EXP_HEAD 0x0000000000000000 0xe0 EXP_HEAD 0x0000000000000000 0xdc
EXP_HEAD 0x0000000000000000 0xe0 tmp/armeb.v4a-expand.o EXP_HEAD 0x0000000000000000 0xdc tmp/armeb.v4a-expand.o
0x0000000000000074 f_expand 0x0000000000000074 f_expand
EXP_TAIL 0x0000000000000000 0x24 EXP_TAIL 0x0000000000000000 0x24
+8 -8
View File
@@ -2,12 +2,12 @@ file format elf32-i386
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 060f 0 0 034 2**2 CONTENTS 0 ELFMAINX 0635 0 0 034 2**2 CONTENTS
1 ELFMAINZ 0a 0 0 0643 2**0 CONTENTS 1 ELFMAINZ 0a 0 0 0669 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d ELFMAINX 0 ELFMAINX 00000000 l d ELFMAINX 0 ELFMAINX
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
000003f7 g F ELFMAINX 0218 upx_mmap_and_fd 000003f7 g F ELFMAINX 023e upx_mmap_and_fd
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
000001cc g ELFMAINX 0 mempcpy 000001cc g ELFMAINX 0 mempcpy
00000172 g ELFMAINX 0 mmap 00000172 g ELFMAINX 0 mmap
@@ -28,11 +28,11 @@ OFFSET TYPE VALUE
0000020e R_386_PC32 stat 0000020e R_386_PC32 stat
0000023c R_386_PC32 mkdir 0000023c R_386_PC32 mkdir
0000032b R_386_PC32 mempcpy 0000032b R_386_PC32 mempcpy
00000477 R_386_PC32 my_bkpt 00000475 R_386_PC32 my_bkpt
00000498 R_386_PC32 uname 00000484 R_386_PC32 uname
000004f5 R_386_PC32 get_upxfn_path 000004de R_386_PC32 get_upxfn_path
0000057c R_386_PC32 memset 00000585 R_386_PC32 memset
000005e3 R_386_PC32 mmap 00000609 R_386_PC32 mmap
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
+7 -7
View File
@@ -7,18 +7,18 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0xd6c .text 0x0000000000000000 0x176e
.text 0x0000000000000000 0x18b tmp/i386-linux.elf-fold.o .text 0x0000000000000000 0x18b tmp/i386-linux.elf-fold.o
0x000000000000000c get_page_mask 0x000000000000000c get_page_mask
0x0000000000000019 get_upxfn_path 0x0000000000000019 get_upxfn_path
*fill* 0x000000000000018b 0x1 00 *fill* 0x000000000000018b 0x1 00
.text 0x000000000000018c 0x41f tmp/i386-linux.elf-upxfd_android.o .text 0x000000000000018c 0x445 tmp/i386-linux.elf-upxfd_android.o
0x0000000000000393 upx_mmap_and_fd 0x0000000000000393 upx_mmap_and_fd
*fill* 0x00000000000005ab 0x1 00 *fill* 0x00000000000005d1 0x3 00
.text 0x00000000000005ac 0x0 tmp/i386-expand.o .text 0x00000000000005d4 0x0 tmp/i386-expand.o
.text 0x00000000000005ac 0x7c0 tmp/i386-linux.elf-main2.o .text 0x00000000000005d4 0x119a tmp/i386-linux.elf-main2.o
0x0000000000000701 underlay 0x00000000000016f1 underlay
0x0000000000000c18 upx_main 0x0000000000001475 upx_main
.data 0x0000000000000000 0x0 .data 0x0000000000000000 0x0
.data 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o .data 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o
+6 -6
View File
@@ -8,18 +8,18 @@ Linker script and memory map
TARGET(elf32-bigmips) TARGET(elf32-bigmips)
.text 0x0000000000000000 0xdcc .text 0x0000000000000000 0x1ba0
*(.text) *(.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 0x00000000000000d0 get_page_mask
0x0000000000000cac upx_mmap_and_fd 0x0000000000001a80 upx_mmap_and_fd
0x00000000000000f0 get_upxfn_path 0x00000000000000f0 get_upxfn_path
0x0000000000000c40 underlay 0x00000000000019d0 underlay
0x0000000000000aa8 upx_main 0x00000000000016f4 upx_main
0x0000000000000010 get4unal 0x0000000000000010 get4unal
0x0000000000000128 close 0x0000000000000128 close
*(.data) *(.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
SYSCALLS 0x0000000000000000 0x178 tmp/mips.r3000-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x178 tmp/mips.r3000-linux.elf-fold.o
+6 -6
View File
@@ -8,18 +8,18 @@ Linker script and memory map
TARGET(elf32-littlemips) TARGET(elf32-littlemips)
.text 0x0000000000000000 0xdbc .text 0x0000000000000000 0x1b90
*(.text) *(.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 0x00000000000000d0 get_page_mask
0x0000000000000c9c upx_mmap_and_fd 0x0000000000001a70 upx_mmap_and_fd
0x00000000000000f0 get_upxfn_path 0x00000000000000f0 get_upxfn_path
0x0000000000000c30 underlay 0x00000000000019c0 underlay
0x0000000000000a98 upx_main 0x00000000000016e4 upx_main
0x0000000000000010 get4unal 0x0000000000000010 get4unal
0x0000000000000128 close 0x0000000000000128 close
*(.data) *(.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
SYSCALLS 0x0000000000000000 0x178 tmp/mipsel.r3000-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x178 tmp/mipsel.r3000-linux.elf-fold.o
+8 -8
View File
@@ -8,7 +8,7 @@ Linker script and memory map
TARGET(elf32-powerpc) TARGET(elf32-powerpc)
.text 0x0000000000000000 0x1350 .text 0x0000000000000000 0x2330
*(.text) *(.text)
.text 0x0000000000000000 0x294 tmp/powerpc-linux.elf-fold.o .text 0x0000000000000000 0x294 tmp/powerpc-linux.elf-fold.o
0x0000000000000048 Pmap 0x0000000000000048 Pmap
@@ -18,14 +18,14 @@ TARGET(elf32-powerpc)
.text 0x0000000000000294 0x130 tmp/powerpc-linux.elf-upxfd_android.o .text 0x0000000000000294 0x130 tmp/powerpc-linux.elf-upxfd_android.o
0x0000000000000294 upx_mmap_and_fd 0x0000000000000294 upx_mmap_and_fd
.text 0x00000000000003c4 0x0 tmp/powerpc-expand.o .text 0x00000000000003c4 0x0 tmp/powerpc-expand.o
.text 0x00000000000003c4 0xf8c tmp/powerpc-linux.elf-main2.o .text 0x00000000000003c4 0x1f6c tmp/powerpc-linux.elf-main2.o
0x00000000000008bc underlay 0x0000000000000bac underlay
0x000000000000113c upx_main 0x00000000000018ec upx_main
*(.data) *(.data)
.data 0x0000000000001350 0x0 tmp/powerpc-linux.elf-fold.o .data 0x0000000000002330 0x0 tmp/powerpc-linux.elf-fold.o
.data 0x0000000000001350 0x0 tmp/powerpc-linux.elf-upxfd_android.o .data 0x0000000000002330 0x0 tmp/powerpc-linux.elf-upxfd_android.o
.data 0x0000000000001350 0x0 tmp/powerpc-expand.o .data 0x0000000000002330 0x0 tmp/powerpc-expand.o
.data 0x0000000000001350 0x0 tmp/powerpc-linux.elf-main2.o .data 0x0000000000002330 0x0 tmp/powerpc-linux.elf-main2.o
.data .data