WIP unpacking ELF shared library

modified:   Makefile
	modified:   lzma-sdk
	modified:   p_lx_elf.cpp
	modified:   p_lx_elf.h
	modified:   p_mach.cpp
	modified:   p_unix.cpp
	modified:   p_unix.h
	modified:   packer.cpp
	modified:   packer.h
	modified:   stub/arm64-linux.elf-fold.h
	modified:   stub/src/arm64-linux.elf-fold.S
	modified:   stub/tmp/arm64-linux.elf-fold.map
This commit is contained in:
John Reiser
2021-01-15 14:11:09 -08:00
committed by Markus F.X.J. Oberhumer
parent fd6837b267
commit 23f63e4196
11 changed files with 249 additions and 191 deletions
+43
View File
@@ -1961,6 +1961,17 @@ bool PackLinuxElf32::calls_crt1(Elf32_Rel const *rel, int sz)
#include "p_elf_enum.h" #include "p_elf_enum.h"
#undef WANT_REL_ENUM #undef WANT_REL_ENUM
int PackLinuxElf32::canUnpack()
{
if (super::canUnpack()) {
return true;
}
if (Elf32_Ehdr::ET_DYN==get_te16(&ehdri.e_type)) {
PackLinuxElf32help1(fi);
}
return false;
}
bool PackLinuxElf32::canPack() bool PackLinuxElf32::canPack()
{ {
union { union {
@@ -2373,6 +2384,30 @@ proceed: ;
return true; return true;
} }
int PackLinuxElf64::canUnpack()
{
if (super::canUnpack()) {
return true;
}
if (Elf64_Ehdr::ET_DYN==get_te16(&ehdri.e_type)) {
PackLinuxElf64help1(fi);
Elf64_Phdr const *phdr = phdri, *last_LOAD = nullptr;
for (unsigned j = 0; j < e_phnum; ++phdr, ++j)
if (Elf64_Phdr::PT_LOAD==get_te32(&phdr->p_type)) {
last_LOAD = phdr;
}
if (!last_LOAD)
return false;
off_t offset = get_te64(&last_LOAD->p_offset);
unsigned filesz = get_te64(&last_LOAD->p_filesz);
fi->seek(filesz+offset, SEEK_SET);
MemBuffer buf(32 + sizeof(overlay_offset));
fi->readx(buf, buf.getSize());
return PackUnix::find_overlay_offset(buf);
}
return false;
}
bool bool
PackLinuxElf64::canPack() PackLinuxElf64::canPack()
{ {
@@ -4910,6 +4945,14 @@ PackLinuxElf32x86::~PackLinuxElf32x86()
{ {
} }
int PackLinuxElf32x86::canUnpack()
{
if (super::canUnpack()) {
return true;
}
return false;
}
Linker* PackLinuxElf32x86::newLinker() const Linker* PackLinuxElf32x86::newLinker() const
{ {
return new ElfLinkerX86; return new ElfLinkerX86;
+4
View File
@@ -41,6 +41,7 @@ public:
virtual ~PackLinuxElf(); virtual ~PackLinuxElf();
/*virtual void buildLoader(const Filter *);*/ /*virtual void buildLoader(const Filter *);*/
virtual bool canUnpackVersion(int version) const { return (version >= 11); } virtual bool canUnpackVersion(int version) const { return (version >= 11); }
virtual int canUnpack() { return super::canUnpack(); }
protected: protected:
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
@@ -118,6 +119,7 @@ protected:
virtual void PackLinuxElf32help1(InputFile *f); virtual void PackLinuxElf32help1(InputFile *f);
virtual int checkEhdr(Elf32_Ehdr const *ehdr) const; virtual int checkEhdr(Elf32_Ehdr const *ehdr) const;
virtual bool canPack(); virtual bool canPack();
virtual int canUnpack();
// These ARM routines are essentially common to big/little endian, // These ARM routines are essentially common to big/little endian,
// but the class hierarchy splits after this class. // but the class hierarchy splits after this class.
@@ -259,6 +261,7 @@ protected:
virtual void PackLinuxElf64help1(InputFile *f); virtual void PackLinuxElf64help1(InputFile *f);
virtual int checkEhdr(Elf64_Ehdr const *ehdr) const; virtual int checkEhdr(Elf64_Ehdr const *ehdr) const;
virtual bool canPack(); virtual bool canPack();
virtual int canUnpack();
virtual void pack1(OutputFile *, Filter &); // generate executable header virtual void pack1(OutputFile *, Filter &); // generate executable header
virtual int pack2(OutputFile *, Filter &); // append compressed data virtual int pack2(OutputFile *, Filter &); // append compressed data
@@ -534,6 +537,7 @@ public:
virtual const char *getName() const { return "linux/i386"; } virtual const char *getName() const { return "linux/i386"; }
virtual const char *getFullName(const options_t *) const { return "i386-linux.elf"; } virtual const char *getFullName(const options_t *) const { return "i386-linux.elf"; }
virtual const int *getFilters() const; virtual const int *getFilters() const;
virtual int canUnpack();
protected: protected:
virtual void pack1(OutputFile *, Filter &); // generate executable header virtual void pack1(OutputFile *, Filter &); // generate executable header
+1 -1
View File
@@ -1550,7 +1550,7 @@ int PackMachBase<T>::canUnpack()
} }
sz_mach_headers = headway + sizeof(mhdri); sz_mach_headers = headway + sizeof(mhdri);
if (2048 < headway) { if (2048 < headway) {
infoWarning("Mach_header.sizeofcmds(%d) > 1024", headway); infoWarning("Mach_header.sizeofcmds(%d) > 2048", headway);
} }
rawmseg_buf.alloc(mhdri.sizeofcmds); rawmseg_buf.alloc(mhdri.sizeofcmds);
rawmseg = (Mach_segment_command *)rawmseg_buf.getVoidPtr(); rawmseg = (Mach_segment_command *)rawmseg_buf.getVoidPtr();
+8 -1
View File
@@ -523,6 +523,7 @@ void PackUnix::unpackExtent(unsigned wanted, OutputFile *fo,
// Generic Unix canUnpack(). // Generic Unix canUnpack().
**************************************************************************/ **************************************************************************/
// The prize is the value of overlay_offset: the offset of compressed data
int PackUnix::canUnpack() int PackUnix::canUnpack()
{ {
int const small = 32 + sizeof(overlay_offset); int const small = 32 + sizeof(overlay_offset);
@@ -534,6 +535,13 @@ int PackUnix::canUnpack()
fi->seek(-(off_t)bufsize, SEEK_END); fi->seek(-(off_t)bufsize, SEEK_END);
fi->readx(buf, bufsize); fi->readx(buf, bufsize);
return find_overlay_offset(buf);
}
int PackUnix::find_overlay_offset(MemBuffer const &buf)
{
int const small = 32 + sizeof(overlay_offset);
int const bufsize = buf.getSize();
int i = bufsize; int i = bufsize;
while (i > small && 0 == buf[--i]) { } while (i > small && 0 == buf[--i]) { }
i -= small; i -= small;
@@ -551,7 +559,6 @@ int PackUnix::canUnpack()
return true; return true;
} }
/************************************************************************* /*************************************************************************
// Generic Unix unpack(). // Generic Unix unpack().
// //
+1
View File
@@ -50,6 +50,7 @@ public:
virtual bool canPack(); virtual bool canPack();
virtual int canUnpack(); virtual int canUnpack();
int find_overlay_offset(MemBuffer const &buf);
protected: protected:
// called by the generic pack() // called by the generic pack()
+4 -2
View File
@@ -629,8 +629,10 @@ int Packer::patchPackHeader(void *b, int blen) {
return boff; return boff;
} }
bool Packer::getPackHeader(void *b, int blen, bool allow_incompressible) {
if (!ph.fillPackHeader((unsigned char *) b, blen)) bool Packer::getPackHeader(void const *b, int blen, bool allow_incompressible)
{
if (!ph.fillPackHeader((unsigned char const *)b, blen))
return false; return false;
if (ph.version > getVersion()) if (ph.version > getVersion())
+2 -2
View File
@@ -199,8 +199,8 @@ protected:
// packheader handling // packheader handling
virtual int patchPackHeader(void *b, int blen); virtual int patchPackHeader(void *b, int blen);
virtual bool getPackHeader(void *b, int blen, bool allow_incompressible = false); virtual bool getPackHeader(void const *b, int blen, bool allow_incompressible=false);
virtual bool readPackHeader(int len, bool allow_incompressible = false); virtual bool readPackHeader(int len, bool allow_incompressible=false);
virtual void checkAlreadyPacked(const void *b, int blen); virtual void checkAlreadyPacked(const void *b, int blen);
// loader core // loader core
+154 -154
View File
@@ -1,5 +1,5 @@
/* arm64-linux.elf-fold.h /* arm64-linux.elf-fold.h
created from arm64-linux.elf-fold.bin, 2712 (0xa98) bytes created from arm64-linux.elf-fold.bin, 2716 (0xa9c) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -31,20 +31,20 @@
*/ */
#define STUB_ARM64_LINUX_ELF_FOLD_SIZE 2712 #define STUB_ARM64_LINUX_ELF_FOLD_SIZE 2716
#define STUB_ARM64_LINUX_ELF_FOLD_ADLER32 0xbdeeb25c #define STUB_ARM64_LINUX_ELF_FOLD_ADLER32 0x0598b3a1
#define STUB_ARM64_LINUX_ELF_FOLD_CRC32 0xfce6c531 #define STUB_ARM64_LINUX_ELF_FOLD_CRC32 0x83a80080
unsigned char stub_arm64_linux_elf_fold[2712] = { unsigned char stub_arm64_linux_elf_fold[2716] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 2, 0,183, 0, 1, 0, 0, 0,188, 0, 16, 0, 0, 0, 0, 0, /* 0x0010 */ 2, 0,183, 0, 1, 0, 0, 0,188, 0, 16, 0, 0, 0, 0, 0,
/* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, /* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
/* 0x0060 */ 152, 10, 0, 0, 0, 0, 0, 0,152, 10, 0, 0, 0, 0, 0, 0, /* 0x0060 */ 156, 10, 0, 0, 0, 0, 0, 0,156, 10, 0, 0, 0, 0, 0, 0,
/* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
/* 0x0080 */ 152, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0080 */ 156, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0090 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0090 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x00a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* 0x00a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
/* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,146, /* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,146,
@@ -56,154 +56,154 @@ unsigned char stub_arm64_linux_elf_fold[2712] = {
/* 0x0110 */ 2,132, 0,248,194,255,255,181, 34,132, 64,248, 2,132, 0,248, /* 0x0110 */ 2,132, 0,248,194,255,255,181, 34,132, 64,248, 2,132, 0,248,
/* 0x0120 */ 194,255,255,181, 4, 32, 0,209, 31,132, 0,248,231, 3, 0,170, /* 0x0120 */ 194,255,255,181, 4, 32, 0,209, 31,132, 0,248,231, 3, 0,170,
/* 0x0130 */ 246, 3, 0,170, 34, 12,193,168, 2, 12,129,168,194,255,255,181, /* 0x0130 */ 246, 3, 0,170, 34, 12,193,168, 2, 12,129,168,194,255,255,181,
/* 0x0140 */ 247, 3, 0,170,225, 3, 6,170,129, 0, 0,249, 2, 5, 0, 24, /* 0x0140 */ 247, 3, 0,170,225, 3, 6,170,129, 0, 0,249, 34, 5, 0, 24,
/* 0x0150 */ 34, 68, 0,184,226,255,129, 82,192, 4, 0, 16, 93, 0, 0,148, /* 0x0150 */ 34, 68, 0,184,226,255,129, 82,224, 4, 0, 16, 94, 0, 0,148,
/* 0x0160 */ 31, 4, 64,177, 66, 0, 0, 84, 95,104, 32, 56,231, 3, 20,170, /* 0x0160 */ 31, 4, 64,177, 66, 0, 0, 84, 95,104, 32, 56,231, 3, 20,170,
/* 0x0170 */ 230, 3, 25,170,255, 3, 40,209, 69, 4, 0, 16,228, 3, 24,170, /* 0x0170 */ 230, 3, 25,170,255, 3, 40,209,101, 4, 0, 16,228, 3, 24,170,
/* 0x0180 */ 227, 3, 22,170,226, 3, 0,145,225, 3, 29, 42,224, 3, 28,170, /* 0x0180 */ 227, 3, 22,170,226, 3, 0,145,225, 3, 29, 42,224, 3, 28,170,
/* 0x0190 */ 232, 1, 0,148,255, 3, 40,145,248, 3, 0,170, 33, 71, 64,249, /* 0x0190 */ 233, 1, 0,148,255, 3, 40,145,248, 3, 0,170, 33, 71, 64,249,
/* 0x01a0 */ 34, 43, 64,249,224, 3, 25,170, 33, 0, 2,203, 55, 0, 0,148, /* 0x01a0 */ 34, 43, 64,249,224, 3, 25,170, 33, 0, 2,203, 56, 0, 0,148,
/* 0x01b0 */ 5, 0,128,210,228, 3, 21, 42, 67, 0,128, 82, 34, 0,128, 82, /* 0x01b0 */ 5, 0,128,210,228, 3, 21, 42, 67, 0,128, 82, 34, 0,128, 82,
/* 0x01c0 */ 1, 0,130,210, 0, 0,128,210, 58, 0, 0,148,224, 3, 21, 42, /* 0x01c0 */ 1, 0,130,210, 0, 0,128,210, 59, 0, 0,148,224, 3, 21, 42,
/* 0x01d0 */ 37, 0, 0,148,254, 3, 24,170,224, 3, 26,170,225, 3, 27, 42, /* 0x01d0 */ 38, 0, 0,148,254, 3, 24,170,224, 3, 26,170,225, 3, 27, 42,
/* 0x01e0 */ 226,130, 95,248,232, 26,128, 82, 64, 0, 31,214, 32, 32, 32, 61, /* 0x01e0 */ 226,130, 95,248,232, 26,128, 82, 0, 0, 32,212, 64, 0, 31,214,
/* 0x01f0 */ 47,112,114,111, 99, 47,115,101,108,102, 47,101,120,101, 0, 0, /* 0x01f0 */ 32, 32, 32, 61, 47,112,114,111, 99, 47,115,101,108,102, 47,101,
/* 0x0200 */ 99, 28, 0, 18,127, 72, 1,113,129, 1, 0, 84, 33,252, 66,211, /* 0x0200 */ 120,101, 0, 0, 99, 28, 0, 18,127, 72, 1,113,129, 1, 0, 84,
/* 0x0210 */ 65, 1, 0,180, 33, 4, 0,209, 2,120, 97,184, 67,120, 26, 83, /* 0x0210 */ 33,252, 66,211, 65, 1, 0,180, 33, 4, 0,209, 2,120, 97,184,
/* 0x0220 */ 127, 20, 0,113,129, 0, 0, 84, 67, 0, 1, 75, 98,100, 0, 51, /* 0x0220 */ 67,120, 26, 83,127, 20, 0,113,129, 0, 0, 84, 67, 0, 1, 75,
/* 0x0230 */ 2,120, 33,184, 1,255,255,181,192, 3, 95,214, 0, 0, 32,212, /* 0x0230 */ 98,100, 0, 51, 2,120, 33,184, 1,255,255,181,192, 3, 95,214,
/* 0x0240 */ 192, 3, 95,214,168, 11,128, 82, 1, 0, 0,212,232, 7,128, 82, /* 0x0240 */ 0, 0, 32,212,192, 3, 95,214,168, 11,128, 82, 1, 0, 0,212,
/* 0x0250 */ 1, 0, 0,212,192, 3, 95,214, 8, 8,128, 82, 1, 0, 0,212, /* 0x0250 */ 232, 7,128, 82, 1, 0, 0,212,192, 3, 95,214, 8, 8,128, 82,
/* 0x0260 */ 192, 3, 95,214, 40, 7,128, 82, 1, 0, 0,212,192, 3, 95,214, /* 0x0260 */ 1, 0, 0,212,192, 3, 95,214, 40, 7,128, 82, 1, 0, 0,212,
/* 0x0270 */ 168, 21,128, 82, 1, 0, 0,212,192, 3, 95,214,200, 26,128, 82, /* 0x0270 */ 192, 3, 95,214,168, 21,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0280 */ 1, 0, 0,212,192, 3, 95,214,232, 26,128, 82, 1, 0, 0,212, /* 0x0280 */ 200, 26,128, 82, 1, 0, 0,212,192, 3, 95,214,232, 26,128, 82,
/* 0x0290 */ 192, 3, 95,214, 72, 28,128, 82, 1, 0, 0,212,192, 3, 95,214, /* 0x0290 */ 1, 0, 0,212,192, 3, 95,214, 72, 28,128, 82, 1, 0, 0,212,
/* 0x02a0 */ 70,241,255, 24, 5, 0,128,210, 4, 0,128,146, 99, 0, 6, 42, /* 0x02a0 */ 192, 3, 95,214, 38,241,255, 24, 5, 0,128,210, 4, 0,128,146,
/* 0x02b0 */ 200, 27,128, 82, 1, 0, 0,212,192, 3, 95,214, 2, 0,128,210, /* 0x02b0 */ 99, 0, 6, 42,200, 27,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x02c0 */ 225, 3, 0,170, 96, 12,128, 18,104, 4,128, 82, 4, 0, 0, 20, /* 0x02c0 */ 2, 0,128,210,225, 3, 0,170, 96, 12,128, 18,104, 4,128, 82,
/* 0x02d0 */ 200, 9,128, 82, 2, 0, 0, 20, 8, 7,128, 82,227, 3, 2,170, /* 0x02d0 */ 4, 0, 0, 20,200, 9,128, 82, 2, 0, 0, 20, 8, 7,128, 82,
/* 0x02e0 */ 226, 3, 1,170,225, 3, 0,170, 96, 12,128,146, 1, 0, 0,212, /* 0x02e0 */ 227, 3, 2,170,226, 3, 1,170,225, 3, 0,170, 96, 12,128,146,
/* 0x02f0 */ 192, 3, 95,214, 0, 0, 64,212, 2, 0,128, 82, 8, 0,128, 82, /* 0x02f0 */ 1, 0, 0,212,192, 3, 95,214, 0, 0, 64,212, 2, 0,128, 82,
/* 0x0300 */ 1, 0, 0,212,192, 3, 95,214,253,123,191,169, 3, 0,128,210, /* 0x0300 */ 8, 0,128, 82, 1, 0, 0,212,192, 3, 95,214,253,123,191,169,
/* 0x0310 */ 253, 3, 0,145, 5, 0, 64,249, 4, 4, 64,249,191, 0, 2,235, /* 0x0310 */ 3, 0,128,210,253, 3, 0,145, 5, 0, 64,249, 4, 4, 64,249,
/* 0x0320 */ 98, 0, 0, 84,224, 15,128, 82,199,255,255,151,127, 0, 2,235, /* 0x0320 */ 191, 0, 2,235, 98, 0, 0, 84,224, 15,128, 82,199,255,255,151,
/* 0x0330 */ 160, 0, 0, 84,133,104, 99, 56, 37,104, 35, 56, 99, 4, 0,145, /* 0x0330 */ 127, 0, 2,235,160, 0, 0, 84,133,104, 99, 56, 37,104, 35, 56,
/* 0x0340 */ 251,255,255, 23, 1, 4, 64,249, 33, 0, 3,139, 1, 4, 0,249, /* 0x0340 */ 99, 4, 0,145,251,255,255, 23, 1, 4, 64,249, 33, 0, 3,139,
/* 0x0350 */ 1, 0, 64,249, 35, 0, 3,203, 3, 0, 0,249,253,123,193,168, /* 0x0350 */ 1, 4, 0,249, 1, 0, 64,249, 35, 0, 3,203, 3, 0, 0,249,
/* 0x0360 */ 192, 3, 95,214,253,123,187,169,253, 3, 0,145,243, 83, 1,169, /* 0x0360 */ 253,123,193,168,192, 3, 95,214,253,123,187,169,253, 3, 0,145,
/* 0x0370 */ 245, 91, 2,169,244, 3, 0,170,243, 3, 1,170,246, 3, 2,170, /* 0x0370 */ 243, 83, 1,169,245, 91, 2,169,244, 3, 0,170,243, 3, 1,170,
/* 0x0380 */ 245, 3, 3,170, 96, 2, 64,249,160, 8, 0,180,224, 3, 20,170, /* 0x0380 */ 246, 3, 2,170,245, 3, 3,170, 96, 2, 64,249,160, 8, 0,180,
/* 0x0390 */ 130, 1,128,210,161, 3, 1,145,220,255,255,151,160, 67, 64,185, /* 0x0390 */ 224, 3, 20,170,130, 1,128,210,161, 3, 1,145,220,255,255,151,
/* 0x03a0 */ 162, 71, 64,185, 0, 1, 0, 53,160, 10,138, 82, 0, 43,164,114, /* 0x03a0 */ 160, 67, 64,185,162, 71, 64,185, 0, 1, 0, 53,160, 10,138, 82,
/* 0x03b0 */ 95, 0, 0,107,225, 0, 0, 84,128, 2, 64,249, 0, 7, 0,180, /* 0x03b0 */ 0, 43,164,114, 95, 0, 0,107,225, 0, 0, 84,128, 2, 64,249,
/* 0x03c0 */ 4, 0, 0, 20, 98, 0, 0, 52, 95, 0, 0,107,105, 0, 0, 84, /* 0x03c0 */ 0, 7, 0,180, 4, 0, 0, 20, 98, 0, 0, 52, 95, 0, 0,107,
/* 0x03d0 */ 224, 15,128, 82,156,255,255,151, 99, 2, 64,249,225, 3, 0, 42, /* 0x03d0 */ 105, 0, 0, 84,224, 15,128, 82,156,255,255,151, 99, 2, 64,249,
/* 0x03e0 */ 63, 0, 3,235,104,255,255, 84, 95, 0, 0,107, 2, 4, 0, 84, /* 0x03e0 */ 225, 3, 0, 42, 63, 0, 3,235,104,255,255, 84, 95, 0, 0,107,
/* 0x03f0 */ 161, 31, 0,249,225, 3, 2, 42,128, 6, 64,249,163,227, 0,145, /* 0x03f0 */ 2, 4, 0, 84,161, 31, 0,249,225, 3, 2, 42,128, 6, 64,249,
/* 0x0400 */ 98, 6, 64,249,164, 35, 65, 57,192, 2, 63,214, 32,254,255, 53, /* 0x0400 */ 163,227, 0,145, 98, 6, 64,249,164, 35, 65, 57,192, 2, 63,214,
/* 0x0410 */ 161, 31, 64,249,160, 67, 64,185, 63, 0, 0,235,161,253,255, 84, /* 0x0410 */ 32,254,255, 53,161, 31, 64,249,160, 67, 64,185, 63, 0, 0,235,
/* 0x0420 */ 163, 39, 65, 57, 85, 1, 0,180, 35, 1, 0, 52, 63, 0, 8,241, /* 0x0420 */ 161,253,255, 84,163, 39, 65, 57, 85, 1, 0,180, 35, 1, 0, 52,
/* 0x0430 */ 136, 0, 0, 84, 96, 2, 64,249, 31, 0, 1,235,129, 0, 0, 84, /* 0x0430 */ 63, 0, 8,241,136, 0, 0, 84, 96, 2, 64,249, 31, 0, 1,235,
/* 0x0440 */ 96, 6, 64,249,162, 43, 65, 57,160, 2, 63,214,163, 71, 64,185, /* 0x0440 */ 129, 0, 0, 84, 96, 6, 64,249,162, 43, 65, 57,160, 2, 63,214,
/* 0x0450 */ 129, 6, 64,249,128, 2, 64,249, 33, 0, 3,139,129, 6, 0,249, /* 0x0450 */ 163, 71, 64,185,129, 6, 64,249,128, 2, 64,249, 33, 0, 3,139,
/* 0x0460 */ 0, 0, 3,203,128, 2, 0,249, 5, 0, 0, 20, 97, 6, 64,249, /* 0x0460 */ 129, 6, 0,249, 0, 0, 3,203,128, 2, 0,249, 5, 0, 0, 20,
/* 0x0470 */ 224, 3, 20,170,226, 3, 2, 42,164,255,255,151,163, 67, 64,185, /* 0x0470 */ 97, 6, 64,249,224, 3, 20,170,226, 3, 2, 42,164,255,255,151,
/* 0x0480 */ 97, 6, 64,249, 96, 2, 64,249, 33, 0, 3,139, 97, 6, 0,249, /* 0x0480 */ 163, 67, 64,185, 97, 6, 64,249, 96, 2, 64,249, 33, 0, 3,139,
/* 0x0490 */ 0, 0, 3,203, 96, 2, 0,249,187,255,255, 23,243, 83, 65,169, /* 0x0490 */ 97, 6, 0,249, 0, 0, 3,203, 96, 2, 0,249,187,255,255, 23,
/* 0x04a0 */ 245, 91, 66,169,253,123,197,168,192, 3, 95,214, 0, 2, 0,180, /* 0x04a0 */ 243, 83, 65,169,245, 91, 66,169,253,123,197,168,192, 3, 95,214,
/* 0x04b0 */ 224, 1, 0, 55,228, 3, 1, 42, 3, 0, 64,249,127, 0, 4,235, /* 0x04b0 */ 0, 2, 0,180,224, 1, 0, 55,228, 3, 1, 42, 3, 0, 64,249,
/* 0x04c0 */ 129, 0, 0, 84, 4, 0, 0,249, 2, 4, 0,249, 8, 0, 0, 20, /* 0x04c0 */ 127, 0, 4,235,129, 0, 0, 84, 4, 0, 0,249, 2, 4, 0,249,
/* 0x04d0 */ 127, 4, 0,241, 97, 0, 0, 84, 97, 0, 0, 52,250,255,255, 23, /* 0x04d0 */ 8, 0, 0, 20,127, 4, 0,241, 97, 0, 0, 84, 97, 0, 0, 52,
/* 0x04e0 */ 99, 0, 0,180, 0, 64, 0,145,244,255,255, 23,192, 3, 95,214, /* 0x04e0 */ 250,255,255, 23, 99, 0, 0,180, 0, 64, 0,145,244,255,255, 23,
/* 0x04f0 */ 253,123,181,169,253, 3, 0,145,234, 47, 7,109,202, 0,103,158, /* 0x04f0 */ 192, 3, 95,214,253,123,181,169,253, 3, 0,145,234, 47, 7,109,
/* 0x0500 */ 6, 16, 64,249,238, 63, 9,109,245, 91, 2,169,236, 55, 8,109, /* 0x0500 */ 202, 0,103,158, 6, 16, 64,249,238, 63, 9,109,245, 91, 2,169,
/* 0x0510 */ 246, 3, 0,170,232, 39, 6,109,251,115, 5,169, 28, 0, 6,139, /* 0x0510 */ 236, 55, 8,109,246, 3, 0,170,232, 39, 6,109,251,115, 5,169,
/* 0x0520 */ 64, 1,102,158,247, 99, 3,169,249,107, 4,169,243, 83, 1,169, /* 0x0520 */ 28, 0, 6,139, 64, 1,102,158,247, 99, 3,169,249,107, 4,169,
/* 0x0530 */ 77, 0, 39, 30,248, 3, 3,170,247, 3, 1,170,250, 3, 7,170, /* 0x0530 */ 243, 83, 1,169, 77, 0, 39, 30,248, 3, 3,170,247, 3, 1,170,
/* 0x0540 */ 142, 0,103,158, 2, 0, 64,249,175, 0,103,158,195, 34, 64,121, /* 0x0540 */ 250, 3, 7,170,142, 0,103,158, 2, 0, 64,249,175, 0,103,158,
/* 0x0550 */ 65, 2, 0,180, 65, 16, 64,249,127, 8, 0,113, 65, 0, 1,139, /* 0x0550 */ 195, 34, 64,121, 65, 2, 0,180, 65, 16, 64,249,127, 8, 0,113,
/* 0x0560 */ 32, 36, 64,249, 64, 0, 0,203, 65, 0, 0, 84, 32, 8, 64,249, /* 0x0560 */ 65, 0, 1,139, 32, 36, 64,249, 64, 0, 0,203, 65, 0, 0, 84,
/* 0x0570 */ 33, 20, 64,249, 2, 0,128, 82, 67, 6,128, 82, 4, 0,128, 18, /* 0x0570 */ 32, 8, 64,249, 33, 20, 64,249, 2, 0,128, 82, 67, 6,128, 82,
/* 0x0580 */ 5, 0,128,210, 75,255,255,151,193, 34, 64,121, 63, 8, 0,113, /* 0x0580 */ 4, 0,128, 18, 5, 0,128,210, 75,255,255,151,193, 34, 64,121,
/* 0x0590 */ 19, 16,159,154, 42, 0, 0, 20,127, 12, 0,113, 3, 2,128, 82, /* 0x0590 */ 63, 8, 0,113, 19, 16,159,154, 42, 0, 0, 20,127, 12, 0,113,
/* 0x05a0 */ 99, 16,159, 26,199,114, 64,121,224, 3, 2,170, 99,136, 0, 17, /* 0x05a0 */ 3, 2,128, 82, 99, 16,159, 26,199,114, 64,121,224, 3, 2,170,
/* 0x05b0 */ 228, 3, 28,170, 19, 0,128,146,231, 4, 0, 81,255, 4, 0, 49, /* 0x05b0 */ 99,136, 0, 17,228, 3, 28,170, 19, 0,128,146,231, 4, 0, 81,
/* 0x05c0 */ 160, 1, 0, 84,133, 0, 64,185,191, 4, 0,113, 1, 1, 0, 84, /* 0x05c0 */ 255, 4, 0, 49,160, 1, 0, 84,133, 0, 64,185,191, 4, 0,113,
/* 0x05d0 */ 136, 8, 64,249,133, 20, 64,249,127, 2, 8,235, 5, 1, 5,139, /* 0x05d0 */ 1, 1, 0, 84,136, 8, 64,249,133, 20, 64,249,127, 2, 8,235,
/* 0x05e0 */ 115,146,136,154, 63, 0, 5,235, 33, 32,133,154,132,224, 0,145, /* 0x05e0 */ 5, 1, 5,139,115,146,136,154, 63, 0, 5,235, 33, 32,133,154,
/* 0x05f0 */ 242,255,255, 23,228, 3, 58,170,115, 2, 26,138,129, 0, 1,139, /* 0x05f0 */ 132,224, 0,145,242,255,255, 23,228, 3, 58,170,115, 2, 26,138,
/* 0x0600 */ 33, 0, 19,203, 33, 0, 26,138,163, 0, 32, 55, 83, 0, 0,181, /* 0x0600 */ 129, 0, 1,139, 33, 0, 19,203, 33, 0, 26,138,163, 0, 32, 55,
/* 0x0610 */ 162, 0, 0,181, 0, 0,128,210, 4, 0, 0, 20,224, 3, 19,170, /* 0x0610 */ 83, 0, 0,181,162, 0, 0,181, 0, 0,128,210, 4, 0, 0, 20,
/* 0x0620 */ 2, 0, 0, 20, 67, 6,128, 82, 2, 0,128, 82, 4, 0,128, 18, /* 0x0620 */ 224, 3, 19,170, 2, 0, 0, 20, 67, 6,128, 82, 2, 0,128, 82,
/* 0x0630 */ 5, 0,128,210, 31,255,255,151, 19, 0, 19,203,224, 3, 58,170, /* 0x0630 */ 4, 0,128, 18, 5, 0,128,210, 31,255,255,151, 19, 0, 19,203,
/* 0x0640 */ 232, 3, 39, 30, 12, 0,103,158, 1, 1, 38, 30,192,114, 64,121, /* 0x0640 */ 224, 3, 58,170,232, 3, 39, 30, 12, 0,103,158, 1, 1, 38, 30,
/* 0x0650 */ 63, 0, 0,107,106, 20, 0, 84,128, 3, 64,185, 55, 1, 0,180, /* 0x0650 */ 192,114, 64,121, 63, 0, 0,107,106, 20, 0, 84,128, 3, 64,185,
/* 0x0660 */ 31, 24, 0,113,225, 0, 0, 84,130, 11, 64,249,224, 3, 24,170, /* 0x0660 */ 55, 1, 0,180, 31, 24, 0,113,225, 0, 0, 84,130, 11, 64,249,
/* 0x0670 */ 97, 0,128, 82, 98, 2, 2,139,141,255,255,151,148, 0, 0, 20, /* 0x0670 */ 224, 3, 24,170, 97, 0,128, 82, 98, 2, 2,139,141,255,255,151,
/* 0x0680 */ 31, 4, 0,113, 65, 18, 0, 84, 87, 2, 0,180,128, 7, 64,249, /* 0x0680 */ 148, 0, 0, 20, 31, 4, 0,113, 65, 18, 0, 84, 87, 2, 0,180,
/* 0x0690 */ 0, 2, 0,181,194, 18, 64,249,224, 3, 24,170,131, 11, 64,249, /* 0x0690 */ 128, 7, 64,249, 0, 2, 0,181,194, 18, 64,249,224, 3, 24,170,
/* 0x06a0 */ 97, 0,128, 82, 98, 2, 2,139, 66, 0, 3,139,128,255,255,151, /* 0x06a0 */ 131, 11, 64,249, 97, 0,128, 82, 98, 2, 2,139, 66, 0, 3,139,
/* 0x06b0 */ 194,114, 64,121,224, 3, 24,170,161, 0,128, 82,124,255,255,151, /* 0x06b0 */ 128,255,255,151,194,114, 64,121,224, 3, 24,170,161, 0,128, 82,
/* 0x06c0 */ 194,110, 64,121,224, 3, 24,170,129, 0,128, 82,120,255,255,151, /* 0x06c0 */ 124,255,255,151,194,110, 64,121,224, 3, 24,170,129, 0,128, 82,
/* 0x06d0 */ 155, 7, 64,185, 0, 72,140, 82, 32,106,174,114,149, 11, 64,249, /* 0x06d0 */ 120,255,255,151,155, 7, 64,185, 0, 72,140, 82, 32,106,174,114,
/* 0x06e0 */ 123, 11, 30, 83,255, 2, 31,235, 27, 36,219, 26,117, 2, 21,139, /* 0x06e0 */ 149, 11, 64,249,123, 11, 30, 83,255, 2, 31,235, 27, 36,219, 26,
/* 0x06f0 */ 96, 11, 0, 18,148, 19, 64,249,135, 7, 64,249, 72, 6,128, 82, /* 0x06f0 */ 117, 2, 21,139, 96, 11, 0, 18,148, 19, 64,249,135, 7, 64,249,
/* 0x0700 */ 9, 0, 39, 30,128, 23, 64,249,180, 83, 0,249,160, 2, 0,139, /* 0x0700 */ 72, 6,128, 82, 9, 0, 39, 30,128, 23, 64,249,180, 83, 0,249,
/* 0x0710 */ 181, 87, 0,249, 11, 0,103,158,128, 1,102,158, 35, 1, 38, 30, /* 0x0710 */ 160, 2, 0,139,181, 87, 0,249, 11, 0,103,158,128, 1,102,158,
/* 0x0720 */ 165, 2, 0,138, 64, 0,128, 82, 2, 16,159, 26,255, 2, 31,235, /* 0x0720 */ 35, 1, 38, 30,165, 2, 0,138, 64, 0,128, 82, 2, 16,159, 26,
/* 0x0730 */ 160, 1, 38, 30,181, 2, 5,203,180, 0, 20,139, 66, 0, 3, 42, /* 0x0730 */ 255, 2, 31,235,160, 1, 38, 30,181, 2, 5,203,180, 0, 20,139,
/* 0x0740 */ 67, 2,128, 82,225, 3, 20,170,229, 0, 5,203, 4, 0,159, 90, /* 0x0740 */ 66, 0, 3, 42, 67, 2,128, 82,225, 3, 20,170,229, 0, 5,203,
/* 0x0750 */ 255, 2, 31,235, 3, 17,131, 26,224, 3, 21,170,213,254,255,151, /* 0x0750 */ 4, 0,159, 90,255, 2, 31,235, 3, 17,131, 26,224, 3, 21,170,
/* 0x0760 */ 191, 2, 0,235, 96, 0, 0, 84,224, 15,128, 82,182,254,255,151, /* 0x0760 */ 213,254,255,151,191, 2, 0,235, 96, 0, 0, 84,224, 15,128, 82,
/* 0x0770 */ 215, 0, 0,180,194, 1,102,158,224, 3, 23,170,227, 1,102,158, /* 0x0770 */ 182,254,255,151,215, 0, 0,180,194, 1,102,158,224, 3, 23,170,
/* 0x0780 */ 161,131, 2,145,248,254,255,151,128, 1,102,158,249, 3, 20,203, /* 0x0780 */ 227, 1,102,158,161,131, 2,145,248,254,255,151,128, 1,102,158,
/* 0x0790 */ 57, 3, 0,138,123, 0, 8, 55, 87, 1, 0,181, 61, 0, 0, 20, /* 0x0790 */ 249, 3, 20,203, 57, 3, 0,138,123, 0, 8, 55, 87, 1, 0,181,
/* 0x07a0 */ 217,255,255,180,161, 2, 20,139, 0, 0,128,210, 63,104, 32, 56, /* 0x07a0 */ 61, 0, 0, 20,217,255,255,180,161, 2, 20,139, 0, 0,128,210,
/* 0x07b0 */ 0, 4, 0,145, 31, 0, 25,235,161,255,255, 84,247,255,255, 23, /* 0x07b0 */ 63,104, 32, 56, 0, 4, 0,145, 31, 0, 25,235,161,255,255, 84,
/* 0x07c0 */ 128, 3, 64,249,225, 3, 0,178, 0,128, 64,146, 31, 0, 1,235, /* 0x07c0 */ 247,255,255, 23,128, 3, 64,249,225, 3, 0,178, 0,128, 64,146,
/* 0x07d0 */ 97, 5, 0, 84,128, 23, 64,249,130, 19, 64,249,129, 11, 64,249, /* 0x07d0 */ 31, 0, 1,235, 97, 5, 0, 84,128, 23, 64,249,130, 19, 64,249,
/* 0x07e0 */ 31, 0, 2,235, 97, 1, 0, 84,123, 14, 0,145,123, 3, 0,139, /* 0x07e0 */ 129, 11, 64,249, 31, 0, 2,235, 97, 1, 0, 84,123, 14, 0,145,
/* 0x07f0 */ 123, 3, 1,139,123,247,126,146,224, 3, 27, 75, 0, 0, 58, 10, /* 0x07f0 */ 123, 3, 0,139,123, 3, 1,139,123,247,126,146,224, 3, 27, 75,
/* 0x0800 */ 31, 28, 0,113,105, 0, 0, 84, 0, 0,128, 82, 13, 0, 0, 20, /* 0x0800 */ 0, 0, 58, 10, 31, 28, 0,113,105, 0, 0, 84, 0, 0,128, 82,
/* 0x0810 */ 128, 7, 64,249,224, 6, 0,180, 0, 0,128,210, 1, 0,130,210, /* 0x0810 */ 13, 0, 0, 20,128, 7, 64,249,224, 6, 0,180, 0, 0,128,210,
/* 0x0820 */ 98, 0,128, 82, 67, 4,128, 82, 4, 0,128, 18,229, 3, 0,170, /* 0x0820 */ 1, 0,130,210, 98, 0,128, 82, 67, 4,128, 82, 4, 0,128, 18,
/* 0x0830 */ 160,254,255,151,251, 3, 0,170, 32, 2, 0,180, 32, 0,128, 82, /* 0x0830 */ 229, 3, 0,170,160,254,255,151,251, 3, 0,170, 32, 2, 0,180,
/* 0x0840 */ 33, 0,128, 82, 1,128,186,114, 97, 3, 0,185, 1,120,128, 82, /* 0x0840 */ 32, 0,128, 82, 33, 0,128, 82, 1,128,186,114, 97, 3, 0,185,
/* 0x0850 */ 225,203,186,114, 97, 7, 0,185,160, 0, 0, 52,224, 3, 27,170, /* 0x0850 */ 1,120,128, 82,225,203,186,114, 97, 7, 0,185,160, 0, 0, 52,
/* 0x0860 */ 1, 1,128,210,162, 0,128, 82,139,254,255,151, 0,251,127,146, /* 0x0860 */ 224, 3, 27,170, 1, 1,128,210,162, 0,128, 82,139,254,255,151,
/* 0x0870 */ 1, 0,128, 82,226, 3, 27,170, 13,255,255,151, 34, 1, 38, 30, /* 0x0870 */ 0,251,127,146, 1, 0,128, 82,226, 3, 27,170, 13,255,255,151,
/* 0x0880 */ 224, 3, 21,170,225, 3, 20,170,131,254,255,151,224,246,255, 53, /* 0x0880 */ 34, 1, 38, 30,224, 3, 21,170,225, 3, 20,170,131,254,255,151,
/* 0x0890 */ 96, 1,102,158, 52, 3, 20,139,181, 2, 20,139,191, 2, 0,235, /* 0x0890 */ 224,246,255, 53, 96, 1,102,158, 52, 3, 20,139,181, 2, 20,139,
/* 0x08a0 */ 98, 1, 0, 84, 97, 1,102,158,224, 3, 21,170, 34, 1, 38, 30, /* 0x08a0 */ 191, 2, 0,235, 98, 1, 0, 84, 97, 1,102,158,224, 3, 21,170,
/* 0x08b0 */ 67, 6,128, 82, 4, 0,128, 18, 5, 0,128,210, 33, 0, 21,203, /* 0x08b0 */ 34, 1, 38, 30, 67, 6,128, 82, 4, 0,128, 18, 5, 0,128,210,
/* 0x08c0 */ 124,254,255,151,191, 2, 0,235, 1,245,255, 84, 0, 1, 38, 30, /* 0x08c0 */ 33, 0, 21,203,124,254,255,151,191, 2, 0,235, 1,245,255, 84,
/* 0x08d0 */ 156,227, 0,145, 0, 4, 0, 17, 8, 0, 39, 30, 91,255,255, 23, /* 0x08d0 */ 0, 1, 38, 30,156,227, 0,145, 0, 4, 0, 17, 8, 0, 39, 30,
/* 0x08e0 */ 64, 1,102,158,192, 0, 0,180, 19, 0, 0,249, 4, 0, 0, 20, /* 0x08e0 */ 91,255,255, 23, 64, 1,102,158,192, 0, 0,180, 19, 0, 0,249,
/* 0x08f0 */ 59, 0, 19,139,123, 35, 0,145,210,255,255, 23,192, 14, 64,249, /* 0x08f0 */ 4, 0, 0, 20, 59, 0, 19,139,123, 35, 0,145,210,255,255, 23,
/* 0x0900 */ 232, 39, 70,109,245, 91, 66,169,234, 47, 71,109, 96, 2, 0,139, /* 0x0900 */ 192, 14, 64,249,232, 39, 70,109,245, 91, 66,169,234, 47, 71,109,
/* 0x0910 */ 236, 55, 72,109,243, 83, 65,169,238, 63, 73,109,247, 99, 67,169, /* 0x0910 */ 96, 2, 0,139,236, 55, 72,109,243, 83, 65,169,238, 63, 73,109,
/* 0x0920 */ 249,107, 68,169,251,115, 69,169,253,123,203,168,192, 3, 95,214, /* 0x0920 */ 247, 99, 67,169,249,107, 68,169,251,115, 69,169,253,123,203,168,
/* 0x0930 */ 253,123,182,169,253, 3, 0,145,247, 99, 3,169,247, 3, 3,170, /* 0x0930 */ 192, 3, 95,214,253,123,182,169,253, 3, 0,145,247, 99, 3,169,
/* 0x0940 */ 3, 4, 64,185,243, 83, 1,169,162, 63, 0,249,243, 3, 2,170, /* 0x0940 */ 247, 3, 3,170, 3, 4, 64,185,243, 83, 1,169,162, 63, 0,249,
/* 0x0950 */ 99, 48, 0,145, 2, 0, 64,185,162, 59, 0,249,226, 3, 4,170, /* 0x0950 */ 243, 3, 2,170, 99, 48, 0,145, 2, 0, 64,185,162, 59, 0,249,
/* 0x0960 */ 160, 79, 0,249,116, 2, 1,145,163, 75, 0,249, 3, 0,128,210, /* 0x0960 */ 226, 3, 4,170,160, 79, 0,249,116, 2, 1,145,163, 75, 0,249,
/* 0x0970 */ 160, 71, 0,249,160, 67, 2,145,161, 67, 0,249,161,195, 1,145, /* 0x0970 */ 3, 0,128,210,160, 71, 0,249,160, 67, 2,145,161, 67, 0,249,
/* 0x0980 */ 245, 91, 2,169,249, 35, 0,249,249, 3, 7,170,165, 47, 0,249, /* 0x0980 */ 161,195, 1,145,245, 91, 2,169,249, 35, 0,249,249, 3, 7,170,
/* 0x0990 */ 22, 0,128, 82,166, 55, 0,249,164, 51, 0,249,114,254,255,151, /* 0x0990 */ 165, 47, 0,249, 22, 0,128, 82,166, 55, 0,249,164, 51, 0,249,
/* 0x09a0 */ 164, 51, 64,249,161, 3, 2,145,165, 47, 64,249, 2, 0,128, 82, /* 0x09a0 */ 114,254,255,151,164, 51, 64,249,161, 3, 2,145,165, 47, 64,249,
/* 0x09b0 */ 227, 3, 23,170,166,163, 1,145,231, 3, 25,170,224, 3, 19,170, /* 0x09b0 */ 2, 0,128, 82,227, 3, 23,170,166,163, 1,145,231, 3, 25,170,
/* 0x09c0 */ 204,254,255,151,245, 3, 0,170, 33, 1,128, 82,224, 3, 23,170, /* 0x09c0 */ 224, 3, 19,170,204,254,255,151,245, 3, 0,170, 33, 1,128, 82,
/* 0x09d0 */ 226, 3, 21,170,182,254,255,151, 96,114, 64,121,223, 2, 0,107, /* 0x09d0 */ 224, 3, 23,170,226, 3, 21,170,182,254,255,151, 96,114, 64,121,
/* 0x09e0 */ 226, 4, 0, 84,128, 2, 64,185, 31, 12, 0,113, 33, 4, 0, 84, /* 0x09e0 */ 223, 2, 0,107,226, 4, 0, 84,128, 2, 64,185, 31, 12, 0,113,
/* 0x09f0 */ 129, 10, 64,249,160, 55, 64,249, 32, 0, 0,139, 1, 0,128, 82, /* 0x09f0 */ 33, 4, 0, 84,129, 10, 64,249,160, 55, 64,249, 32, 0, 0,139,
/* 0x0a00 */ 226, 3, 1, 42, 53,254,255,151,248, 3, 0, 42, 96, 0,248, 54, /* 0x0a00 */ 1, 0,128, 82,226, 3, 1, 42, 53,254,255,151,248, 3, 0, 42,
/* 0x0a10 */ 224, 15,128, 82, 12,254,255,151,225, 3, 19,170, 2,128,128,210, /* 0x0a10 */ 96, 0,248, 54,224, 15,128, 82, 12,254,255,151,225, 3, 19,170,
/* 0x0a20 */ 11,254,255,151, 31, 0, 16,241, 65,255,255, 84, 1, 0,128,210, /* 0x0a20 */ 2,128,128,210, 11,254,255,151, 31, 0, 16,241, 65,255,255, 84,
/* 0x0a30 */ 226, 3, 24, 42,227, 3, 1,170,228, 3, 1,170,229, 3, 1,170, /* 0x0a30 */ 1, 0,128,210,226, 3, 24, 42,227, 3, 1,170,228, 3, 1,170,
/* 0x0a40 */ 166,163, 1,145,231, 3, 25,170,224, 3, 19,170,191, 55, 0,249, /* 0x0a40 */ 229, 3, 1,170,166,163, 1,145,231, 3, 25,170,224, 3, 19,170,
/* 0x0a50 */ 168,254,255,151,245, 3, 0,170,162, 55, 64,249,224, 3, 23,170, /* 0x0a50 */ 191, 55, 0,249,168,254,255,151,245, 3, 0,170,162, 55, 64,249,
/* 0x0a60 */ 225, 0,128, 82,146,254,255,151,224, 3, 24, 42,254,253,255,151, /* 0x0a60 */ 224, 3, 23,170,225, 0,128, 82,146,254,255,151,224, 3, 24, 42,
/* 0x0a70 */ 148,226, 0,145,214, 6, 0, 17,216,255,255, 23,224, 3, 21,170, /* 0x0a70 */ 254,253,255,151,148,226, 0,145,214, 6, 0, 17,216,255,255, 23,
/* 0x0a80 */ 249, 35, 64,249,243, 83, 65,169,245, 91, 66,169,247, 99, 67,169, /* 0x0a80 */ 224, 3, 21,170,249, 35, 64,249,243, 83, 65,169,245, 91, 66,169,
/* 0x0a90 */ 253,123,202,168,192, 3, 95,214 /* 0x0a90 */ 247, 99, 67,169,253,123,202,168,192, 3, 95,214
}; };
+1
View File
@@ -199,6 +199,7 @@ xPMASK .req x20
ldr w4,[x2,#4] // 2nd instr ldr w4,[x2,#4] // 2nd instr
TRACE(4) TRACE(4)
#endif //} #endif //}
brk #0
br x2 // goto escape hatch br x2 // goto escape hatch
space3eq: space3eq:
+30 -30
View File
@@ -8,44 +8,44 @@ Linker script and memory map
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc) 0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0x9dc .text 0x00000000001000bc 0x9e0
*(.text) *(.text)
.text 0x00000000001000bc 0x24c tmp/arm64-linux.elf-fold.o .text 0x00000000001000bc 0x250 tmp/arm64-linux.elf-fold.o
0x000000000010023c my_bkpt 0x0000000000100240 my_bkpt
0x0000000000100244 exit 0x0000000000100248 exit
0x000000000010024c read 0x0000000000100250 read
0x0000000000100258 write 0x000000000010025c write
0x0000000000100264 close 0x0000000000100268 close
0x0000000000100270 getpid 0x0000000000100274 getpid
0x000000000010027c brk 0x0000000000100280 brk
0x0000000000100288 munmap 0x000000000010028c munmap
0x0000000000100294 mprotect 0x0000000000100298 mprotect
0x00000000001002a0 mmap_privanon 0x00000000001002a4 mmap_privanon
0x00000000001002b0 mmap 0x00000000001002b4 mmap
0x00000000001002bc unlink 0x00000000001002c0 unlink
0x00000000001002d0 readlink 0x00000000001002d4 readlink
0x00000000001002d8 open 0x00000000001002dc open
0x00000000001002f4 __clear_cache 0x00000000001002f8 __clear_cache
.text 0x0000000000100308 0x790 tmp/arm64-linux.elf-main.o .text 0x000000000010030c 0x790 tmp/arm64-linux.elf-main.o
0x0000000000100930 upx_main 0x0000000000100934 upx_main
*(.data) *(.data)
.data 0x0000000000100a98 0x0 tmp/arm64-linux.elf-fold.o .data 0x0000000000100a9c 0x0 tmp/arm64-linux.elf-fold.o
.data 0x0000000000100a98 0x0 tmp/arm64-linux.elf-main.o .data 0x0000000000100a9c 0x0 tmp/arm64-linux.elf-main.o
.iplt 0x0000000000100a98 0x0 .iplt 0x0000000000100a9c 0x0
.iplt 0x0000000000100a98 0x0 tmp/arm64-linux.elf-fold.o .iplt 0x0000000000100a9c 0x0 tmp/arm64-linux.elf-fold.o
.rela.dyn 0x0000000000100a98 0x0 .rela.dyn 0x0000000000100aa0 0x0
.rela.iplt 0x0000000000100a98 0x0 tmp/arm64-linux.elf-fold.o .rela.iplt 0x0000000000100aa0 0x0 tmp/arm64-linux.elf-fold.o
.data .data
LOAD tmp/arm64-linux.elf-fold.o LOAD tmp/arm64-linux.elf-fold.o
LOAD tmp/arm64-linux.elf-main.o LOAD tmp/arm64-linux.elf-main.o
OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64) OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.igot.plt 0x0000000000100a98 0x0 .igot.plt 0x0000000000100aa0 0x0
.igot.plt 0x0000000000100a98 0x0 tmp/arm64-linux.elf-fold.o .igot.plt 0x0000000000100aa0 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100a98 0x0 .bss 0x0000000000100a9c 0x0
.bss 0x0000000000100a98 0x0 tmp/arm64-linux.elf-fold.o .bss 0x0000000000100a9c 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100a98 0x0 tmp/arm64-linux.elf-main.o .bss 0x0000000000100a9c 0x0 tmp/arm64-linux.elf-main.o