merge
This commit is contained in:
@@ -9,3 +9,5 @@ b0353253b0b3d062eb5adb50d4b665a96620da45 RELEASE_195
|
|||||||
c2e0cd4d621b047f254f2def42132a03683ff52c RELEASE_192
|
c2e0cd4d621b047f254f2def42132a03683ff52c RELEASE_192
|
||||||
eb1ce56dce7dd1835964362470610925963b9043 RELEASE_110
|
eb1ce56dce7dd1835964362470610925963b9043 RELEASE_110
|
||||||
ed96891ef795bceec6b7ff3ca1ca7764431bfb39 RELEASE_191
|
ed96891ef795bceec6b7ff3ca1ca7764431bfb39 RELEASE_191
|
||||||
|
8afead5e7182950592970330c218913fecfbe390 jfr-2006-07-12
|
||||||
|
72fe9925b247073cd8342d8bff07adc47b72173f main-2006-07-12
|
||||||
|
|||||||
+54
-21
@@ -71,6 +71,7 @@ struct DefaultLinker::Section
|
|||||||
int istart;
|
int istart;
|
||||||
int ostart;
|
int ostart;
|
||||||
int len;
|
int len;
|
||||||
|
unsigned char align;
|
||||||
DefaultLinker::Label name;
|
DefaultLinker::Label name;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -196,13 +197,14 @@ int DefaultLinker::addSection(const char *sname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DefaultLinker::addSection(const char *sname, const void *sdata, int slen)
|
void DefaultLinker::addSection(const char *sname, const void *sdata, int slen, int align)
|
||||||
{
|
{
|
||||||
assert(!frozen);
|
assert(!frozen);
|
||||||
// add a new section - can be used for adding stuff like ident or header
|
// add a new section - can be used for adding stuff like ident or header
|
||||||
sections[nsections].name.set(sname);
|
sections[nsections].name.set(sname);
|
||||||
sections[nsections].istart = ilen;
|
sections[nsections].istart = ilen;
|
||||||
sections[nsections].len = slen;
|
sections[nsections].len = slen;
|
||||||
|
sections[nsections].align = align;
|
||||||
sections[nsections++].ostart = olen;
|
sections[nsections++].ostart = olen;
|
||||||
assert(nsections < NSECTIONS);
|
assert(nsections < NSECTIONS);
|
||||||
memcpy(iloader+ilen, sdata, slen);
|
memcpy(iloader+ilen, sdata, slen);
|
||||||
@@ -314,10 +316,10 @@ int SimpleLinker::addSection(const char *sname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SimpleLinker::addSection(const char *sname, const void *sdata, int slen)
|
void SimpleLinker::addSection(const char *sname, const void *sdata, int slen, int align)
|
||||||
{
|
{
|
||||||
assert(!frozen);
|
assert(!frozen);
|
||||||
UNUSED(sname); UNUSED(sdata); UNUSED(slen);
|
UNUSED(sname); UNUSED(sdata); UNUSED(slen); UNUSED(align);
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,8 +352,8 @@ unsigned char *SimpleLinker::getLoader(int *llen)
|
|||||||
//
|
//
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
ElfLinker::Section::Section(const char *n, const void *i, unsigned s) :
|
ElfLinker::Section::Section(const char *n, const void *i, unsigned s, unsigned a) :
|
||||||
name(strdup(n)), output(NULL), size(s), offset(0), next(NULL)
|
name(strdup(n)), output(NULL), size(s), offset(0), align(a), next(NULL)
|
||||||
{
|
{
|
||||||
assert(name);
|
assert(name);
|
||||||
input = malloc(s + 1);
|
input = malloc(s + 1);
|
||||||
@@ -388,24 +390,24 @@ void ElfLinker::preprocessSections(char *start, const char *end)
|
|||||||
while (start < end)
|
while (start < end)
|
||||||
{
|
{
|
||||||
char name[1024];
|
char name[1024];
|
||||||
unsigned offset, size;
|
unsigned offset, size, align;
|
||||||
|
|
||||||
char *nextl = strchr(start, '\n');
|
char *nextl = strchr(start, '\n');
|
||||||
assert(nextl != NULL);
|
assert(nextl != NULL);
|
||||||
|
|
||||||
if (sscanf(start, "%*d %1023s %x %*d %*d %x",
|
if (sscanf(start, "%*d %1023s %x %*d %*d %x 2**%d",
|
||||||
name, &size, &offset) == 3)
|
name, &size, &offset, &align) == 4)
|
||||||
{
|
{
|
||||||
char *n = strstr(start, name);
|
char *n = strstr(start, name);
|
||||||
n[strlen(name)] = 0;
|
n[strlen(name)] = 0;
|
||||||
addSection(n, input + offset, size);
|
addSection(n, input + offset, size, align);
|
||||||
|
|
||||||
//printf("section %s preprocessed\n", n);
|
//printf("section %s preprocessed\n", n);
|
||||||
}
|
}
|
||||||
start = nextl + 1;
|
start = nextl + 1;
|
||||||
}
|
}
|
||||||
addSection("*ABS*", NULL, 0);
|
addSection("*ABS*", NULL, 0, 0);
|
||||||
addSection("*UND*", NULL, 0);
|
addSection("*UND*", NULL, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ElfLinker::preprocessSymbols(char *start, const char *end)
|
void ElfLinker::preprocessSymbols(char *start, const char *end)
|
||||||
@@ -464,8 +466,17 @@ void ElfLinker::preprocessRelocations(char *start, const char *end)
|
|||||||
unsigned add = 0;
|
unsigned add = 0;
|
||||||
if (char *p = strstr(symbol, "+0x"))
|
if (char *p = strstr(symbol, "+0x"))
|
||||||
{
|
{
|
||||||
*p = 0;
|
// Beware: sscanf("0xfffffffffffffffc", "%x", &add) ==> -1 == add
|
||||||
sscanf(p + 3, "%x", &add);
|
// because conversion stops after 32 bits for a non-long.
|
||||||
|
// Also, glibc-2.3.5 has a bug: even using "%lx" still gives -1 instead of -4.
|
||||||
|
long addend;
|
||||||
|
*p = 0; // terminate the symbol name
|
||||||
|
p+=3;
|
||||||
|
if ('f'==p[0] && 0==strncmp(p, "ffffffff", 8)) {
|
||||||
|
p+=8; // workaround a bug in glibc-2.3.5
|
||||||
|
}
|
||||||
|
sscanf(p, "%lx", &addend);
|
||||||
|
add = (unsigned)addend;
|
||||||
}
|
}
|
||||||
|
|
||||||
addRelocation(section->name, offset, t, symbol, add);
|
addRelocation(section->name, offset, t, symbol, add);
|
||||||
@@ -605,6 +616,15 @@ int ElfLinker::addSection(const char *sname)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Section *section = findSection(sect);
|
Section *section = findSection(sect);
|
||||||
|
if (section->align) {
|
||||||
|
unsigned const v = ~0u << section->align;
|
||||||
|
assert(tail);
|
||||||
|
if (unsigned const l = ~v & -(tail->offset + tail->size)) {
|
||||||
|
align(l);
|
||||||
|
tail->size += l;
|
||||||
|
outputlen += l;
|
||||||
|
}
|
||||||
|
}
|
||||||
memcpy(output + outputlen, section->input, section->size);
|
memcpy(output + outputlen, section->input, section->size);
|
||||||
section->output = output + outputlen;
|
section->output = output + outputlen;
|
||||||
outputlen += section->size;
|
outputlen += section->size;
|
||||||
@@ -625,13 +645,13 @@ int ElfLinker::addSection(const char *sname)
|
|||||||
return outputlen;
|
return outputlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ElfLinker::addSection(const char *sname, const void *sdata, int slen)
|
void ElfLinker::addSection(const char *sname, const void *sdata, int slen, int align)
|
||||||
{
|
{
|
||||||
assert(!frozen);
|
assert(!frozen);
|
||||||
sections = static_cast<Section **>(realloc(sections, (nsections + 1)
|
sections = static_cast<Section **>(realloc(sections, (nsections + 1)
|
||||||
* sizeof(Section *)));
|
* sizeof(Section *)));
|
||||||
assert(sections);
|
assert(sections);
|
||||||
sections[nsections++] = new Section(sname, sdata, slen);
|
sections[nsections++] = new Section(sname, sdata, slen, align);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ElfLinker::freeze()
|
void ElfLinker::freeze()
|
||||||
@@ -814,12 +834,25 @@ void ElfLinkerPpc32::relocate1(Relocation *rel, upx_byte *location,
|
|||||||
|
|
||||||
// FIXME: more relocs
|
// FIXME: more relocs
|
||||||
|
|
||||||
if (strcmp(type, "8") == 0)
|
// Note that original (*location).displ is ignored.
|
||||||
*location += value;
|
if (strcmp(type, "24") == 0) {
|
||||||
else if (strcmp(type, "16") == 0)
|
if (3& value) {
|
||||||
set_le16(location, get_le16(location) + value);
|
printf("unaligned word diplacement");
|
||||||
else if (strcmp(type, "32") == 0)
|
abort();
|
||||||
set_le32(location, get_le32(location) + value);
|
}
|
||||||
|
// FIXME: displacment overflow?
|
||||||
|
set_be32(location, (0xfc000003 & get_be32(location)) +
|
||||||
|
(0x03fffffc & value));
|
||||||
|
}
|
||||||
|
else if (strcmp(type, "14") == 0) {
|
||||||
|
if (3& value) {
|
||||||
|
printf("unaligned word diplacement");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
// FIXME: displacment overflow?
|
||||||
|
set_be32(location, (0xffff0003 & get_be32(location)) +
|
||||||
|
(0x0000fffc & value));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
super::relocate1(rel, location, value, type);
|
super::relocate1(rel, location, value, type);
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-5
@@ -49,7 +49,7 @@ public:
|
|||||||
virtual void init(const void *pdata, int plen, int pinfo) = 0;
|
virtual void init(const void *pdata, int plen, int pinfo) = 0;
|
||||||
virtual void setLoaderAlignOffset(int phase) = 0;
|
virtual void setLoaderAlignOffset(int phase) = 0;
|
||||||
virtual int addSection(const char *sname) = 0;
|
virtual int addSection(const char *sname) = 0;
|
||||||
virtual void addSection(const char *sname, const void *sdata, int slen) = 0;
|
virtual void addSection(const char *sname, const void *sdata, int slen, int align) = 0;
|
||||||
virtual void freeze() = 0;
|
virtual void freeze() = 0;
|
||||||
virtual int getSection(const char *sname, int *slen=NULL) = 0;
|
virtual int getSection(const char *sname, int *slen=NULL) = 0;
|
||||||
virtual unsigned char *getLoader(int *llen=NULL) = 0;
|
virtual unsigned char *getLoader(int *llen=NULL) = 0;
|
||||||
@@ -83,7 +83,7 @@ public:
|
|||||||
virtual void init(const void *pdata, int plen, int pinfo);
|
virtual void init(const void *pdata, int plen, int pinfo);
|
||||||
virtual void setLoaderAlignOffset(int phase);
|
virtual void setLoaderAlignOffset(int phase);
|
||||||
virtual int addSection(const char *sname);
|
virtual int addSection(const char *sname);
|
||||||
virtual void addSection(const char *sname, const void *sdata, int slen);
|
virtual void addSection(const char *sname, const void *sdata, int slen, int align);
|
||||||
virtual void freeze();
|
virtual void freeze();
|
||||||
virtual int getSection(const char *sname, int *slen=NULL);
|
virtual int getSection(const char *sname, int *slen=NULL);
|
||||||
virtual unsigned char *getLoader(int *llen=NULL);
|
virtual unsigned char *getLoader(int *llen=NULL);
|
||||||
@@ -130,7 +130,7 @@ public:
|
|||||||
virtual void init(const void *pdata, int plen, int pinfo);
|
virtual void init(const void *pdata, int plen, int pinfo);
|
||||||
virtual void setLoaderAlignOffset(int phase);
|
virtual void setLoaderAlignOffset(int phase);
|
||||||
virtual int addSection(const char *sname);
|
virtual int addSection(const char *sname);
|
||||||
virtual void addSection(const char *sname, const void *sdata, int slen);
|
virtual void addSection(const char *sname, const void *sdata, int slen, int align);
|
||||||
virtual void freeze();
|
virtual void freeze();
|
||||||
virtual int getSection(const char *sname, int *slen=NULL);
|
virtual int getSection(const char *sname, int *slen=NULL);
|
||||||
virtual unsigned char *getLoader(int *llen=NULL);
|
virtual unsigned char *getLoader(int *llen=NULL);
|
||||||
@@ -199,7 +199,7 @@ protected:
|
|||||||
virtual void init(const void *pdata, int plen, int);
|
virtual void init(const void *pdata, int plen, int);
|
||||||
virtual void setLoaderAlignOffset(int phase);
|
virtual void setLoaderAlignOffset(int phase);
|
||||||
virtual int addSection(const char *sname);
|
virtual int addSection(const char *sname);
|
||||||
virtual void addSection(const char *sname, const void *sdata, int slen);
|
virtual void addSection(const char *sname, const void *sdata, int slen, int align);
|
||||||
virtual void freeze();
|
virtual void freeze();
|
||||||
virtual int getSection(const char *sname, int *slen=NULL);
|
virtual int getSection(const char *sname, int *slen=NULL);
|
||||||
virtual upx_byte *getLoader(int *llen=NULL);
|
virtual upx_byte *getLoader(int *llen=NULL);
|
||||||
@@ -225,9 +225,10 @@ struct ElfLinker::Section : private nocopy
|
|||||||
upx_byte *output;
|
upx_byte *output;
|
||||||
unsigned size;
|
unsigned size;
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
|
unsigned char align; // log2
|
||||||
Section *next;
|
Section *next;
|
||||||
|
|
||||||
Section(const char *n, const void *i, unsigned s);
|
Section(const char *n, const void *i, unsigned s, unsigned a=0);
|
||||||
~Section();
|
~Section();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+168
-191
@@ -160,16 +160,44 @@ Linker *PackLinuxElf::newLinker() const
|
|||||||
return new ElfLinker;
|
return new ElfLinker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PackLinuxElf::pack3(OutputFile *fo, Filter &ft)
|
||||||
|
{
|
||||||
|
unsigned disp;
|
||||||
|
unsigned const zero = 0;
|
||||||
|
unsigned len = fo->getBytesWritten();
|
||||||
|
fo->write(&zero, 3& -len); // ALIGN_UP
|
||||||
|
len += (3& -len);
|
||||||
|
set_native32(&disp, len); // FIXME? -(sz_elf_hdrs+sizeof(l_info)+sizeof(p_info))
|
||||||
|
fo->write(&disp, sizeof(disp));
|
||||||
|
sz_pack2 = 4+ len;
|
||||||
|
|
||||||
|
super::pack3(fo, ft);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PackLinuxElf32::pack3(OutputFile *fo, Filter &ft)
|
||||||
|
{
|
||||||
|
super::pack3(fo, ft);
|
||||||
|
set_native32(&elfout.phdr[0].p_filesz, sz_pack2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PackLinuxElf64::pack3(OutputFile *fo, Filter &ft)
|
||||||
|
{
|
||||||
|
super::pack3(fo, ft);
|
||||||
|
set_native64(&elfout.phdr[0].p_filesz, sz_pack2);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PackLinuxElf::addStubEntrySections(
|
PackLinuxElf::addStubEntrySections(Filter const *)
|
||||||
upx_byte const *const proto,
|
|
||||||
unsigned const szproto
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
linker->addSection("ELFMAINX", proto, szproto);
|
|
||||||
addLoader("ELFMAINX", NULL);
|
addLoader("ELFMAINX", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PackLinuxElf::addLinkerSymbols(Filter const *)
|
||||||
|
{
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
PackLinuxElf32::PackLinuxElf32(InputFile *f)
|
PackLinuxElf32::PackLinuxElf32(InputFile *f)
|
||||||
: super(f), phdri(NULL),
|
: super(f), phdri(NULL),
|
||||||
dynseg(NULL), hashtab(NULL), dynsym(NULL)
|
dynseg(NULL), hashtab(NULL), dynsym(NULL)
|
||||||
@@ -196,6 +224,19 @@ Linker* PackLinuxElf64amd::newLinker() const
|
|||||||
return new ElfLinkerAMD64;
|
return new ElfLinkerAMD64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PackLinuxElf64amd::addStubEntrySections(Filter const *)
|
||||||
|
{
|
||||||
|
addLoader("ELFMAINX", NULL);
|
||||||
|
//addLoader(getDecompressorSections(), NULL);
|
||||||
|
addLoader(
|
||||||
|
( M_IS_NRV2E(ph.method) ? "NRV_COMMON,NRV2E"
|
||||||
|
: M_IS_NRV2D(ph.method) ? "NRV_COMMON,NRV2D"
|
||||||
|
: M_IS_NRV2B(ph.method) ? "NRV_COMMON,NRV2B"
|
||||||
|
: M_IS_LZMA(ph.method) ? "LZMA_ELF00,LZMA_DEC20,LZMA_DEC30"
|
||||||
|
: NULL), NULL);
|
||||||
|
addLoader("ELFMAINY,IDENTSTR,ELFMAINZ,FOLDEXEC", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
int const *
|
int const *
|
||||||
PackLinuxElf::getCompressionMethods(int method, int level) const
|
PackLinuxElf::getCompressionMethods(int method, int level) const
|
||||||
{
|
{
|
||||||
@@ -207,12 +248,18 @@ int const *
|
|||||||
PackLinuxElf32ppc::getCompressionMethods(int method, int level) const
|
PackLinuxElf32ppc::getCompressionMethods(int method, int level) const
|
||||||
{
|
{
|
||||||
// No real dependency on LE32.
|
// No real dependency on LE32.
|
||||||
static const int m_nrv2e[] = { M_NRV2E_LE32, -1 };
|
static const int m_nrv2b[] = { M_NRV2B_LE32, M_NRV2E_LE32, M_LZMA, -1 };
|
||||||
static const int m_nrv2b[] = { M_NRV2B_LE32, -1 };
|
static const int m_nrv2e[] = { M_NRV2E_LE32, M_NRV2B_LE32, M_LZMA, -1 };
|
||||||
|
static const int m_lzma[] = { M_LZMA,-1 };
|
||||||
|
|
||||||
/*return Packer::getDefaultCompressionMethods_le32(method, level);*/
|
if (M_IS_NRV2B(method))
|
||||||
// 2005-04-23 FIXME: stub/l_lx_elfppc32.S hardwires ppc_d_nrv2e.S
|
return m_nrv2b;
|
||||||
UNUSED(method); UNUSED(level); UNUSED(m_nrv2b);
|
if (M_IS_NRV2E(method))
|
||||||
|
return m_nrv2e;
|
||||||
|
if (M_IS_LZMA(method))
|
||||||
|
return m_lzma;
|
||||||
|
if (1==level)
|
||||||
|
return m_nrv2b;
|
||||||
return m_nrv2e;
|
return m_nrv2e;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +342,7 @@ PackLinuxElf32ppc::PackLinuxElf32ppc(InputFile *f)
|
|||||||
e_machine = Elf32_Ehdr::EM_PPC;
|
e_machine = Elf32_Ehdr::EM_PPC;
|
||||||
ei_class = Elf32_Ehdr::ELFCLASS32;
|
ei_class = Elf32_Ehdr::ELFCLASS32;
|
||||||
ei_data = Elf32_Ehdr::ELFDATA2MSB;
|
ei_data = Elf32_Ehdr::ELFDATA2MSB;
|
||||||
ei_osabi = Elf32_Ehdr::ELFOSABI_NONE;
|
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
|
||||||
}
|
}
|
||||||
|
|
||||||
PackLinuxElf32ppc::~PackLinuxElf32ppc()
|
PackLinuxElf32ppc::~PackLinuxElf32ppc()
|
||||||
@@ -313,7 +360,7 @@ PackLinuxElf64amd::PackLinuxElf64amd(InputFile *f)
|
|||||||
e_machine = Elf64_Ehdr::EM_X86_64;
|
e_machine = Elf64_Ehdr::EM_X86_64;
|
||||||
ei_class = Elf64_Ehdr::ELFCLASS64;
|
ei_class = Elf64_Ehdr::ELFCLASS64;
|
||||||
ei_data = Elf64_Ehdr::ELFDATA2LSB;
|
ei_data = Elf64_Ehdr::ELFDATA2LSB;
|
||||||
ei_osabi = Elf32_Ehdr::ELFOSABI_NONE;
|
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
|
||||||
}
|
}
|
||||||
|
|
||||||
PackLinuxElf64amd::~PackLinuxElf64amd()
|
PackLinuxElf64amd::~PackLinuxElf64amd()
|
||||||
@@ -329,65 +376,8 @@ umax(unsigned a, unsigned b)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void PackLinuxElf32x86::addStubEntrySections(Filter const *ft)
|
||||||
PackLinuxElf32x86::buildLinuxLoader(
|
|
||||||
upx_byte const *const proto,
|
|
||||||
unsigned const szproto,
|
|
||||||
upx_byte const *const fold,
|
|
||||||
unsigned const szfold,
|
|
||||||
Filter const *ft
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
initLoader(proto, szproto);
|
|
||||||
|
|
||||||
struct b_info h; memset(&h, 0, sizeof(h));
|
|
||||||
unsigned fold_hdrlen = 0;
|
|
||||||
if (0 < szfold) {
|
|
||||||
cprElfHdr1 const *const hf = (cprElfHdr1 const *)fold;
|
|
||||||
fold_hdrlen = sizeof(hf->ehdr) +
|
|
||||||
get_native16(&hf->ehdr.e_phentsize) * get_native16(&hf->ehdr.e_phnum) +
|
|
||||||
sizeof(l_info);
|
|
||||||
if (0 == get_le32(fold_hdrlen + fold)) {
|
|
||||||
// inconsistent SIZEOF_HEADERS in *.lds (ld, binutils)
|
|
||||||
fold_hdrlen = umax(0x80, fold_hdrlen);
|
|
||||||
}
|
|
||||||
h.sz_unc = (szfold < fold_hdrlen) ? 0 : (szfold - fold_hdrlen);
|
|
||||||
h.b_method = (unsigned char) ph.method; // FIXME: endian trouble
|
|
||||||
h.b_ftid = (unsigned char) ph.filter;
|
|
||||||
h.b_cto8 = (unsigned char) ph.filter_cto;
|
|
||||||
}
|
|
||||||
unsigned char const *const uncLoader = fold_hdrlen + fold;
|
|
||||||
|
|
||||||
h.sz_cpr = MemBuffer::getSizeForCompression(h.sz_unc);
|
|
||||||
unsigned char *const cprLoader = new unsigned char[sizeof(h) + h.sz_cpr];
|
|
||||||
if (0 < szfold) {
|
|
||||||
int r = upx_compress(uncLoader, h.sz_unc, sizeof(h) + cprLoader, &h.sz_cpr,
|
|
||||||
NULL, ph.method, 10, NULL, NULL );
|
|
||||||
if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc)
|
|
||||||
throwInternalError("loader compression failed");
|
|
||||||
#if 0 //{ debugging only
|
|
||||||
if (M_LZMA==ph.method) {
|
|
||||||
ucl_uint tmp_len = h.sz_unc; // LZMA uses this as EOF
|
|
||||||
unsigned char *tmp = new unsigned char[tmp_len];
|
|
||||||
memset(tmp, 0, tmp_len);
|
|
||||||
r = upx_decompress(sizeof(h) + cprLoader, h.sz_cpr, tmp, &tmp_len, h.b_method, NULL);
|
|
||||||
printf("\n%d %d: %d %d %d\n", h.b_method, r, h.sz_cpr, h.sz_unc, tmp_len);
|
|
||||||
for (unsigned j=0; j < h.sz_unc; ++j) if (tmp[j]!=uncLoader[j]) {
|
|
||||||
printf("%d: %x %x\n", j, tmp[j], uncLoader[j]);
|
|
||||||
}
|
|
||||||
delete[] tmp;
|
|
||||||
}
|
|
||||||
#endif //}
|
|
||||||
}
|
|
||||||
unsigned const sz_cpr = h.sz_cpr;
|
|
||||||
set_native32(&h.sz_cpr, h.sz_cpr);
|
|
||||||
set_native32(&h.sz_unc, h.sz_unc);
|
|
||||||
memcpy(cprLoader, &h, sizeof(h));
|
|
||||||
|
|
||||||
// This adds the definition to the "library", to be used later.
|
|
||||||
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + sz_cpr);
|
|
||||||
// FIXME: memory leak delete [] cprLoader;
|
|
||||||
|
|
||||||
int const n_mru = ft->n_mru; // FIXME: belongs to filter? packerf?
|
int const n_mru = ft->n_mru; // FIXME: belongs to filter? packerf?
|
||||||
|
|
||||||
// Here is a quick summary of the format of the output file:
|
// Here is a quick summary of the format of the output file:
|
||||||
@@ -406,6 +396,7 @@ PackLinuxElf32x86::buildLinuxLoader(
|
|||||||
sizeof(p_info) +
|
sizeof(p_info) +
|
||||||
// compressed data
|
// compressed data
|
||||||
b_len + ph.c_len );
|
b_len + ph.c_len );
|
||||||
|
|
||||||
// entry to stub
|
// entry to stub
|
||||||
addLoader("LEXEC000", NULL);
|
addLoader("LEXEC000", NULL);
|
||||||
|
|
||||||
@@ -462,20 +453,16 @@ PackLinuxElf32x86::buildLinuxLoader(
|
|||||||
addLoader("IDENTSTR", NULL);
|
addLoader("IDENTSTR", NULL);
|
||||||
addLoader("LEXEC020", NULL);
|
addLoader("LEXEC020", NULL);
|
||||||
addLoader("FOLDEXEC", NULL);
|
addLoader("FOLDEXEC", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
freezeLoader();
|
void PackLinuxElf32x86::addLinkerSymbols(Filter const *ft)
|
||||||
|
{
|
||||||
upx_byte *ptr_cto = getLoader();
|
upx_byte *ptr_cto = getLoader();
|
||||||
int sz_cto = getLoaderSize();
|
int sz_cto = getLoaderSize();
|
||||||
if (0x20==(ft->id & 0xF0) || 0x30==(ft->id & 0xF0)) { // push byte '?' ; cto8
|
if (0x20==(ft->id & 0xF0) || 0x30==(ft->id & 0xF0)) { // push byte '?' ; cto8
|
||||||
patch_le16(ptr_cto, sz_cto, "\x6a?", 0x6a + (ft->cto << 8));
|
patch_le16(ptr_cto, sz_cto, "\x6a?", 0x6a + (ft->cto << 8));
|
||||||
checkPatch(NULL, 0, 0, 0); // reset
|
checkPatch(NULL, 0, 0, 0); // reset
|
||||||
}
|
}
|
||||||
// PackHeader and overlay_offset at the end of the output file,
|
|
||||||
// after the compressed data.
|
|
||||||
|
|
||||||
unsigned const lsize = getLoaderSize();
|
|
||||||
linker->relocate();
|
|
||||||
return lsize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -484,16 +471,10 @@ PackLinuxElf32::buildLinuxLoader(
|
|||||||
unsigned const szproto,
|
unsigned const szproto,
|
||||||
upx_byte const *const fold,
|
upx_byte const *const fold,
|
||||||
unsigned const szfold,
|
unsigned const szfold,
|
||||||
Filter const */*ft*/
|
Filter const *ft
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
{
|
initLoader(proto, szproto);
|
||||||
int const MAX_LOADER_LEN = 8000;
|
|
||||||
int *const eof_empty = new int[MAX_LOADER_LEN/sizeof(int)];
|
|
||||||
eof_empty[0] = -1;
|
|
||||||
initLoader(eof_empty, MAX_LOADER_LEN, 0, 0);
|
|
||||||
delete[] eof_empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct b_info h; memset(&h, 0, sizeof(h));
|
struct b_info h; memset(&h, 0, sizeof(h));
|
||||||
unsigned fold_hdrlen = 0;
|
unsigned fold_hdrlen = 0;
|
||||||
@@ -516,6 +497,19 @@ PackLinuxElf32::buildLinuxLoader(
|
|||||||
NULL, ph.method, 10, NULL, NULL );
|
NULL, ph.method, 10, NULL, NULL );
|
||||||
if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc)
|
if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc)
|
||||||
throwInternalError("loader compression failed");
|
throwInternalError("loader compression failed");
|
||||||
|
#if 0 //{ debugging only
|
||||||
|
if (M_LZMA==ph.method) {
|
||||||
|
ucl_uint tmp_len = h.sz_unc; // LZMA uses this as EOF
|
||||||
|
unsigned char *tmp = new unsigned char[tmp_len];
|
||||||
|
memset(tmp, 0, tmp_len);
|
||||||
|
r = upx_decompress(sizeof(h) + cprLoader, h.sz_cpr, tmp, &tmp_len, h.b_method, NULL);
|
||||||
|
printf("\n%d %d: %d %d %d\n", h.b_method, r, h.sz_cpr, h.sz_unc, tmp_len);
|
||||||
|
for (unsigned j=0; j < h.sz_unc; ++j) if (tmp[j]!=uncLoader[j]) {
|
||||||
|
printf("%d: %x %x\n", j, tmp[j], uncLoader[j]);
|
||||||
|
}
|
||||||
|
delete[] tmp;
|
||||||
|
}
|
||||||
|
#endif //}
|
||||||
}
|
}
|
||||||
unsigned const sz_cpr = h.sz_cpr;
|
unsigned const sz_cpr = h.sz_cpr;
|
||||||
set_native32(&h.sz_cpr, h.sz_cpr);
|
set_native32(&h.sz_cpr, h.sz_cpr);
|
||||||
@@ -523,16 +517,13 @@ PackLinuxElf32::buildLinuxLoader(
|
|||||||
memcpy(cprLoader, &h, sizeof(h));
|
memcpy(cprLoader, &h, sizeof(h));
|
||||||
|
|
||||||
// This adds the definition to the "library", to be used later.
|
// This adds the definition to the "library", to be used later.
|
||||||
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + sz_cpr);
|
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + sz_cpr, 0);
|
||||||
delete [] cprLoader;
|
delete [] cprLoader;
|
||||||
|
|
||||||
//int const GAP = 128; // must match stub/l_mac_ppc.S
|
addStubEntrySections(ft);
|
||||||
//segcmdo.vmsize += sz_unc - sz_cpr + GAP + 64;
|
|
||||||
|
|
||||||
addStubEntrySections(proto, szproto);
|
|
||||||
|
|
||||||
addLoader("FOLDEXEC", NULL);
|
|
||||||
freezeLoader();
|
freezeLoader();
|
||||||
|
addLinkerSymbols(ft);
|
||||||
linker->relocate();
|
linker->relocate();
|
||||||
return getLoaderSize();
|
return getLoaderSize();
|
||||||
}
|
}
|
||||||
@@ -543,16 +534,10 @@ PackLinuxElf64::buildLinuxLoader(
|
|||||||
unsigned const szproto,
|
unsigned const szproto,
|
||||||
upx_byte const *const fold,
|
upx_byte const *const fold,
|
||||||
unsigned const szfold,
|
unsigned const szfold,
|
||||||
Filter const */*ft*/
|
Filter const *ft
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
{
|
initLoader(proto, szproto);
|
||||||
int const MAX_LOADER_LEN = 8000;
|
|
||||||
int *const eof_empty = new int[MAX_LOADER_LEN/sizeof(int)];
|
|
||||||
eof_empty[0] = -1;
|
|
||||||
initLoader(eof_empty, MAX_LOADER_LEN, 0, 0);
|
|
||||||
delete[] eof_empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct b_info h; memset(&h, 0, sizeof(h));
|
struct b_info h; memset(&h, 0, sizeof(h));
|
||||||
unsigned fold_hdrlen = 0;
|
unsigned fold_hdrlen = 0;
|
||||||
@@ -582,17 +567,78 @@ PackLinuxElf64::buildLinuxLoader(
|
|||||||
memcpy(cprLoader, &h, sizeof(h));
|
memcpy(cprLoader, &h, sizeof(h));
|
||||||
|
|
||||||
// This adds the definition to the "library", to be used later.
|
// This adds the definition to the "library", to be used later.
|
||||||
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + sz_cpr);
|
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + sz_cpr, 0);
|
||||||
delete [] cprLoader;
|
delete [] cprLoader;
|
||||||
|
|
||||||
addStubEntrySections(proto, szproto);
|
addStubEntrySections(ft);
|
||||||
|
|
||||||
addLoader("FOLDEXEC", NULL);
|
|
||||||
freezeLoader();
|
freezeLoader();
|
||||||
|
addLinkerSymbols(ft);
|
||||||
linker->relocate();
|
linker->relocate();
|
||||||
return getLoaderSize();
|
return getLoaderSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PackLinuxElf64amd::addLinkerSymbols(Filter const *)
|
||||||
|
{
|
||||||
|
unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info);
|
||||||
|
unsigned len = sz_pack2;
|
||||||
|
|
||||||
|
#define PAGE_MASK (~0u<<12)
|
||||||
|
#define PAGE_SIZE (-PAGE_MASK)
|
||||||
|
lsize = /*getLoaderSize()*/ 64 * 1024; // upper bound; avoid circularity
|
||||||
|
acc_uint64l_t const lo_va_user = 0x400000; // XXX
|
||||||
|
acc_uint64l_t lo_va_stub = elfout.phdr[0].p_vaddr;
|
||||||
|
acc_uint64l_t adrc;
|
||||||
|
acc_uint64l_t adrm;
|
||||||
|
acc_uint64l_t adru;
|
||||||
|
acc_uint64l_t adrx;
|
||||||
|
unsigned cntc;
|
||||||
|
unsigned lenm;
|
||||||
|
unsigned lenu;
|
||||||
|
len += (7&-lsize) + lsize;
|
||||||
|
bool const is_big = (lo_va_user < (lo_va_stub + len + 2*PAGE_SIZE));
|
||||||
|
if (is_big) {
|
||||||
|
set_native64( &elfout.ehdr.e_entry,
|
||||||
|
get_native64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
|
||||||
|
set_native64(&elfout.phdr[0].p_vaddr, lo_va_user);
|
||||||
|
set_native64(&elfout.phdr[0].p_paddr, lo_va_user);
|
||||||
|
lo_va_stub = lo_va_user;
|
||||||
|
adrc = lo_va_stub;
|
||||||
|
adrm = getbrk(phdri, get_native16(&ehdri.e_phnum));
|
||||||
|
adru = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary
|
||||||
|
adrx = adru + hlen;
|
||||||
|
lenm = PAGE_SIZE + len;
|
||||||
|
lenu = PAGE_SIZE + len;
|
||||||
|
cntc = len >> 3;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
adrm = lo_va_stub + len;
|
||||||
|
adrc = adrm;
|
||||||
|
adru = lo_va_stub;
|
||||||
|
adrx = lo_va_stub + hlen;
|
||||||
|
lenm = PAGE_SIZE;
|
||||||
|
lenu = PAGE_SIZE + len;
|
||||||
|
cntc = 0;
|
||||||
|
}
|
||||||
|
adrm = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary
|
||||||
|
adrc = PAGE_MASK & (~PAGE_MASK + adrc); // round up to page boundary
|
||||||
|
|
||||||
|
//avoid circularity linker->defineSymbol("LENX", sz_pack2 - hlen);
|
||||||
|
linker->defineSymbol("ADRX", adrx); // compressed input for eXpansion
|
||||||
|
|
||||||
|
linker->defineSymbol("CNTC", cntc); // count for copy
|
||||||
|
linker->defineSymbol("LENU", lenu); // len for unmap
|
||||||
|
linker->defineSymbol("ADRC", adrc); // addr for copy
|
||||||
|
linker->defineSymbol("ADRU", adru); // addr for unmap
|
||||||
|
linker->defineSymbol("JMPU", 12 + lo_va_user); // trampoline for unmap
|
||||||
|
linker->defineSymbol("LENM", lenm); // len for map
|
||||||
|
linker->defineSymbol("ADRM", adrm); // addr for map
|
||||||
|
#undef PAGE_SIZE
|
||||||
|
#undef PAGE_MASK
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static const
|
static const
|
||||||
#include "stub/i386-linux.elf-entry.h"
|
#include "stub/i386-linux.elf-entry.h"
|
||||||
static const
|
static const
|
||||||
@@ -771,6 +817,26 @@ PackLinuxElf32ppc::buildLoader(const Filter *ft)
|
|||||||
linux_elfppc32_fold, sizeof(linux_elfppc32_fold), ft );
|
linux_elfppc32_fold, sizeof(linux_elfppc32_fold), ft );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PackLinuxElf32ppc::addStubEntrySections(Filter const *)
|
||||||
|
{
|
||||||
|
addLoader("ELFMAINX", NULL);
|
||||||
|
//addLoader(getDecompressorSections(), NULL);
|
||||||
|
addLoader(
|
||||||
|
( M_IS_NRV2E(ph.method) ? "NRV_COMMON,NRV2E"
|
||||||
|
: M_IS_NRV2D(ph.method) ? "NRV_COMMON,NRV2D"
|
||||||
|
: M_IS_NRV2B(ph.method) ? "NRV_COMMON,NRV2B"
|
||||||
|
: M_IS_LZMA(ph.method) ? "LZMA_ELF00,LZMA_DEC20,LZMA_DEC30"
|
||||||
|
: NULL), NULL);
|
||||||
|
addLoader("ELFMAINY,IDENTSTR,ELFMAINZ,FOLDEXEC", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PackLinuxElf32ppc::addLinkerSymbols(Filter const *)
|
||||||
|
{
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
static const
|
static const
|
||||||
#include "stub/amd64-linux.elf-entry.h"
|
#include "stub/amd64-linux.elf-entry.h"
|
||||||
static const
|
static const
|
||||||
@@ -1344,7 +1410,6 @@ void PackLinuxElf32::pack2(OutputFile *fo, Filter &ft)
|
|||||||
|
|
||||||
if ((off_t)total_in != file_size)
|
if ((off_t)total_in != file_size)
|
||||||
throwEOFException();
|
throwEOFException();
|
||||||
set_native32(&elfout.phdr[0].p_filesz, fo->getBytesWritten());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine length of gap between PT_LOAD phdr[k] and closest PT_LOAD
|
// Determine length of gap between PT_LOAD phdr[k] and closest PT_LOAD
|
||||||
@@ -1446,89 +1511,6 @@ void PackLinuxElf64::pack2(OutputFile *fo, Filter &ft)
|
|||||||
|
|
||||||
if ((off_t)total_in != file_size)
|
if ((off_t)total_in != file_size)
|
||||||
throwEOFException();
|
throwEOFException();
|
||||||
set_native64(&elfout.phdr[0].p_filesz, fo->getBytesWritten());
|
|
||||||
}
|
|
||||||
|
|
||||||
void PackLinuxElf32::pack3(OutputFile *fo, Filter &ft)
|
|
||||||
{
|
|
||||||
unsigned disp;
|
|
||||||
unsigned const zero = 0;
|
|
||||||
unsigned len = fo->getBytesWritten();
|
|
||||||
fo->write(&zero, 3& -len); // align to 0 mod 4
|
|
||||||
len += (3& -len);
|
|
||||||
set_native32(&disp, len); // FIXME? -(sz_elf_hdrs+sizeof(l_info)+sizeof(p_info))
|
|
||||||
fo->write(&disp, sizeof(disp));
|
|
||||||
|
|
||||||
super::pack3(fo, ft);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PackLinuxElf64amd::pack3(OutputFile *fo, Filter &ft)
|
|
||||||
{
|
|
||||||
char zero[8];
|
|
||||||
unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info);
|
|
||||||
unsigned const len0 = fo->getBytesWritten();
|
|
||||||
unsigned len = len0;
|
|
||||||
unsigned const frag = 7 & -len; // align to 0 mod 8
|
|
||||||
memset(zero, 0, sizeof(zero));
|
|
||||||
fo->write(&zero, frag);
|
|
||||||
len += frag;
|
|
||||||
|
|
||||||
#define PAGE_MASK (~0u<<12)
|
|
||||||
#define PAGE_SIZE (-PAGE_MASK)
|
|
||||||
upx_byte *const p = getLoader();
|
|
||||||
lsize = getLoaderSize();
|
|
||||||
acc_uint64l_t const lo_va_user = 0x400000; // XXX
|
|
||||||
acc_uint64l_t lo_va_stub = elfout.phdr[0].p_vaddr;
|
|
||||||
acc_uint64l_t adrc;
|
|
||||||
acc_uint64l_t adrm;
|
|
||||||
acc_uint64l_t adru;
|
|
||||||
acc_uint64l_t adrx;
|
|
||||||
unsigned cntc;
|
|
||||||
unsigned lenm;
|
|
||||||
unsigned lenu;
|
|
||||||
len += (7&-lsize) + lsize;
|
|
||||||
bool const is_big = (lo_va_user < (lo_va_stub + len + 2*PAGE_SIZE));
|
|
||||||
if (is_big) {
|
|
||||||
set_native64( &elfout.ehdr.e_entry,
|
|
||||||
get_native64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
|
|
||||||
set_native64(&elfout.phdr[0].p_vaddr, lo_va_user);
|
|
||||||
set_native64(&elfout.phdr[0].p_paddr, lo_va_user);
|
|
||||||
lo_va_stub = lo_va_user;
|
|
||||||
adrc = lo_va_stub;
|
|
||||||
adrm = getbrk(phdri, get_native16(&ehdri.e_phnum));
|
|
||||||
adru = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary
|
|
||||||
adrx = adru + hlen;
|
|
||||||
lenm = PAGE_SIZE + len;
|
|
||||||
lenu = PAGE_SIZE + len;
|
|
||||||
cntc = len >> 3;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
adrm = lo_va_stub + len;
|
|
||||||
adrc = adrm;
|
|
||||||
adru = lo_va_stub;
|
|
||||||
adrx = lo_va_stub + hlen;
|
|
||||||
lenm = PAGE_SIZE;
|
|
||||||
lenu = PAGE_SIZE + len;
|
|
||||||
cntc = 0;
|
|
||||||
}
|
|
||||||
adrm = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary
|
|
||||||
adrc = PAGE_MASK & (~PAGE_MASK + adrc); // round up to page boundary
|
|
||||||
|
|
||||||
// patch in order of descending address
|
|
||||||
patch_le32(p,lsize,"LENX", len0 - hlen);
|
|
||||||
patch_le32(p,lsize,"ADRX", adrx); // compressed input for eXpansion
|
|
||||||
|
|
||||||
patch_le32(p,lsize,"CNTC", cntc); // count for copy
|
|
||||||
patch_le32(p,lsize,"LENU", lenu); // len for unmap
|
|
||||||
patch_le32(p,lsize,"ADRC", adrc); // addr for copy
|
|
||||||
patch_le32(p,lsize,"ADRU", adru); // addr for unmap
|
|
||||||
patch_le32(p,lsize,"JMPU", 12 + lo_va_user); // trampoline for unmap
|
|
||||||
patch_le32(p,lsize,"LENM", lenm); // len for map
|
|
||||||
patch_le32(p,lsize,"ADRM", adrm); // addr for map
|
|
||||||
#undef PAGE_SIZE
|
|
||||||
#undef PAGE_MASK
|
|
||||||
|
|
||||||
super::pack3(fo, ft);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "bele.h"
|
#include "bele.h"
|
||||||
@@ -1703,11 +1685,6 @@ void PackLinuxElf32armBe::pack3(OutputFile *fo, Filter &ft)
|
|||||||
ARM_pack3(fo, ft, true);
|
ARM_pack3(fo, ft, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PackLinuxElf::pack4(OutputFile *fo, Filter &ft)
|
|
||||||
{
|
|
||||||
super::pack4(fo, ft);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft)
|
void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft)
|
||||||
{
|
{
|
||||||
overlay_offset = sz_elf_hdrs + sizeof(linfo);
|
overlay_offset = sz_elf_hdrs + sizeof(linfo);
|
||||||
|
|||||||
+14
-13
@@ -51,8 +51,8 @@ protected:
|
|||||||
|
|
||||||
virtual void pack1(OutputFile *, Filter &) = 0; // generate executable header
|
virtual void pack1(OutputFile *, Filter &) = 0; // generate executable header
|
||||||
virtual void pack2(OutputFile *, Filter &) = 0; // append compressed data
|
virtual void pack2(OutputFile *, Filter &) = 0; // append compressed data
|
||||||
//virtual void pack3(OutputFile *, Filter &) = 0; // append loader
|
virtual void pack3(OutputFile *, Filter &) = 0; // append loader
|
||||||
virtual void pack4(OutputFile *, Filter &) = 0; // append pack header
|
//virtual void pack4(OutputFile *, Filter &) = 0; // append pack header
|
||||||
|
|
||||||
virtual Linker* newLinker() const;
|
virtual Linker* newLinker() const;
|
||||||
virtual void generateElfHdr(
|
virtual void generateElfHdr(
|
||||||
@@ -60,7 +60,8 @@ protected:
|
|||||||
void const *proto,
|
void const *proto,
|
||||||
unsigned const brka
|
unsigned const brka
|
||||||
) = 0;
|
) = 0;
|
||||||
virtual void addStubEntrySections(upx_byte const *, unsigned);
|
virtual void addLinkerSymbols(Filter const *);
|
||||||
|
virtual void addStubEntrySections(Filter const *);
|
||||||
virtual void unpack(OutputFile *fo) = 0;
|
virtual void unpack(OutputFile *fo) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -69,6 +70,7 @@ protected:
|
|||||||
|
|
||||||
unsigned sz_phdrs; // sizeof Phdr[]
|
unsigned sz_phdrs; // sizeof Phdr[]
|
||||||
unsigned sz_elf_hdrs; // all Elf headers
|
unsigned sz_elf_hdrs; // all Elf headers
|
||||||
|
unsigned sz_pack2; // after pack2(), before loader
|
||||||
|
|
||||||
unsigned short e_machine;
|
unsigned short e_machine;
|
||||||
unsigned char ei_class;
|
unsigned char ei_class;
|
||||||
@@ -176,7 +178,7 @@ protected:
|
|||||||
|
|
||||||
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
||||||
virtual void pack2(OutputFile *, Filter &); // append compressed data
|
virtual void pack2(OutputFile *, Filter &); // append compressed data
|
||||||
//virtual void pack3(OutputFile *, Filter &); // append loader
|
virtual void pack3(OutputFile *, Filter &); // append loader
|
||||||
virtual void pack4(OutputFile *, Filter &); // append pack header
|
virtual void pack4(OutputFile *, Filter &); // append pack header
|
||||||
virtual void unpack(OutputFile *fo);
|
virtual void unpack(OutputFile *fo);
|
||||||
|
|
||||||
@@ -284,10 +286,12 @@ public:
|
|||||||
virtual bool canPack();
|
virtual bool canPack();
|
||||||
protected:
|
protected:
|
||||||
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
||||||
virtual void pack3(OutputFile *, Filter &); // append loader
|
//virtual void pack3(OutputFile *, Filter &); // append loader
|
||||||
virtual const int *getCompressionMethods(int method, int level) const;
|
virtual const int *getCompressionMethods(int method, int level) const;
|
||||||
virtual int buildLoader(const Filter *);
|
virtual int buildLoader(const Filter *);
|
||||||
|
virtual void addStubEntrySections(Filter const *);
|
||||||
virtual Linker* newLinker() const;
|
virtual Linker* newLinker() const;
|
||||||
|
virtual void addLinkerSymbols(Filter const *);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
@@ -307,7 +311,9 @@ protected:
|
|||||||
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
||||||
virtual const int *getCompressionMethods(int method, int level) const;
|
virtual const int *getCompressionMethods(int method, int level) const;
|
||||||
virtual int buildLoader(const Filter *);
|
virtual int buildLoader(const Filter *);
|
||||||
|
virtual void addStubEntrySections(Filter const *);
|
||||||
virtual Linker* newLinker() const;
|
virtual Linker* newLinker() const;
|
||||||
|
virtual void addLinkerSymbols(Filter const *);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
@@ -330,14 +336,9 @@ protected:
|
|||||||
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
||||||
|
|
||||||
virtual int buildLoader(const Filter *);
|
virtual int buildLoader(const Filter *);
|
||||||
|
virtual void addStubEntrySections(Filter const *);
|
||||||
virtual Linker* newLinker() const;
|
virtual Linker* newLinker() const;
|
||||||
virtual int buildLinuxLoader(
|
virtual void addLinkerSymbols(Filter const *);
|
||||||
upx_byte const *const proto, // assembly-only sections
|
|
||||||
unsigned const szproto,
|
|
||||||
upx_byte const *const fold, // linked assembly + C section
|
|
||||||
unsigned const szfold,
|
|
||||||
Filter const *ft
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PackBSDElf32x86 : public PackLinuxElf32x86
|
class PackBSDElf32x86 : public PackLinuxElf32x86
|
||||||
@@ -378,8 +379,8 @@ public:
|
|||||||
PackOpenBSDElf32x86(InputFile *f);
|
PackOpenBSDElf32x86(InputFile *f);
|
||||||
virtual ~PackOpenBSDElf32x86();
|
virtual ~PackOpenBSDElf32x86();
|
||||||
|
|
||||||
virtual int buildLoader(const Filter *ft);
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual int buildLoader(const Filter *ft);
|
||||||
virtual void generateElfHdr(
|
virtual void generateElfHdr(
|
||||||
OutputFile *,
|
OutputFile *,
|
||||||
void const *proto,
|
void const *proto,
|
||||||
|
|||||||
+1
-1
@@ -280,7 +280,7 @@ PackLinuxI386::buildLinuxLoader(
|
|||||||
}
|
}
|
||||||
// This adds the definition to the "library", to be used later.
|
// This adds the definition to the "library", to be used later.
|
||||||
// NOTE: the stub is NOT compressed! The savings is not worth it.
|
// NOTE: the stub is NOT compressed! The savings is not worth it.
|
||||||
linker->addSection("FOLDEXEC", fold + fold_hdrlen, szfold - fold_hdrlen);
|
linker->addSection("FOLDEXEC", fold + fold_hdrlen, szfold - fold_hdrlen, 0);
|
||||||
|
|
||||||
n_mru = ft->n_mru;
|
n_mru = ft->n_mru;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -148,7 +148,7 @@ void PackLinuxElf32x86interp::pack3(OutputFile *fo, Filter &/*ft*/)
|
|||||||
elfout.phdr[0].p_paddr = elfout.phdr[0].p_vaddr = base - sz;
|
elfout.phdr[0].p_paddr = elfout.phdr[0].p_vaddr = base - sz;
|
||||||
if (opt->o_unix.make_ptinterp) {
|
if (opt->o_unix.make_ptinterp) {
|
||||||
initLoader(linux_i386pti_loader, sizeof(linux_i386pti_loader));
|
initLoader(linux_i386pti_loader, sizeof(linux_i386pti_loader));
|
||||||
linker->addSection("FOLDEXEC", linux_i386pti_fold, sizeof(linux_i386pti_fold));
|
linker->addSection("FOLDEXEC", linux_i386pti_fold, sizeof(linux_i386pti_fold), 0);
|
||||||
|
|
||||||
addLoader("LXPTI000", NULL);
|
addLoader("LXPTI000", NULL);
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -98,13 +98,13 @@ PackMachPPC32::buildMachLoader(
|
|||||||
memcpy(cprLoader, &h, sizeof(h));
|
memcpy(cprLoader, &h, sizeof(h));
|
||||||
|
|
||||||
// This adds the definition to the "library", to be used later.
|
// This adds the definition to the "library", to be used later.
|
||||||
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + h.sz_cpr);
|
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + h.sz_cpr, 0);
|
||||||
delete [] cprLoader;
|
delete [] cprLoader;
|
||||||
|
|
||||||
int const GAP = 128; // must match stub/l_mac_ppc.S
|
int const GAP = 128; // must match stub/l_mac_ppc.S
|
||||||
segcmdo.vmsize += h.sz_unc - h.sz_cpr + GAP + 64;
|
segcmdo.vmsize += h.sz_unc - h.sz_cpr + GAP + 64;
|
||||||
|
|
||||||
linker->addSection("MACOS000", proto, szproto);
|
linker->addSection("MACOS000", proto, szproto, 0);
|
||||||
|
|
||||||
addLoader("MACOS000", NULL);
|
addLoader("MACOS000", NULL);
|
||||||
addLoader("FOLDEXEC", NULL);
|
addLoader("FOLDEXEC", NULL);
|
||||||
|
|||||||
+1
-1
@@ -1069,7 +1069,7 @@ void Packer::initLoader(const void *pdata, int plen, int pinfo, int small)
|
|||||||
|
|
||||||
unsigned size;
|
unsigned size;
|
||||||
char const * const ident = getIdentstr(&size, small);
|
char const * const ident = getIdentstr(&size, small);
|
||||||
linker->addSection("IDENTSTR", ident, size);
|
linker->addSection("IDENTSTR", ident, size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+27
-19
@@ -349,10 +349,10 @@ i386-bsd.elf-fold.h : tmp/$$T.o tmp/i386-bsd.elf-main.o $(srcdir)/src/$$T.lds
|
|||||||
$(call tc,bin2h) --ident=bsd_i386elf_fold tmp/$T.bin $@
|
$(call tc,bin2h) --ident=bsd_i386elf_fold tmp/$T.bin $@
|
||||||
|
|
||||||
tmp/i386-bsd.elf-fold.o : $(srcdir)/src/$$T.asm
|
tmp/i386-bsd.elf-fold.o : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
tmp/i386-bsd.elf-main.o : $(srcdir)/src/$$T.c
|
tmp/i386-bsd.elf-main.o : $(srcdir)/src/$$T.c
|
||||||
$(call tc,gcc) -c $< -o $@
|
$(call tc,gcc) -c $< -o $@
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
@@ -384,7 +384,7 @@ i386-openbsd.elf-fold.h : tmp/$$T.o tmp/i386-openbsd.elf-main.o $(srcdir)/src/i3
|
|||||||
$(call tc,bin2h) --ident=openbsd_i386elf_fold tmp/$T.bin $@
|
$(call tc,bin2h) --ident=openbsd_i386elf_fold tmp/$T.bin $@
|
||||||
|
|
||||||
tmp/i386-openbsd.elf-fold.o : $(srcdir)/src/$$T.asm
|
tmp/i386-openbsd.elf-fold.o : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
tmp/i386-openbsd.elf-main.o : $(srcdir)/src/$$T.c
|
tmp/i386-openbsd.elf-main.o : $(srcdir)/src/$$T.c
|
||||||
@@ -478,7 +478,7 @@ i386-linux.elf-fold.h : tmp/$$T.o tmp/i386-linux.elf-main.o $(srcdir)/src/$$T.ld
|
|||||||
$(call tc,bin2h) --ident=linux_i386elf_fold tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386elf_fold tmp/$T.bin $@
|
||||||
|
|
||||||
tmp/i386-linux.elf-fold.o : $(srcdir)/src/$$T.asm
|
tmp/i386-linux.elf-fold.o : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
tmp/i386-linux.elf-main.o : $(srcdir)/src/$$T.c
|
tmp/i386-linux.elf-main.o : $(srcdir)/src/$$T.c
|
||||||
@@ -493,9 +493,11 @@ tmp/i386-linux.elf-main.o : $(srcdir)/src/$$T.c
|
|||||||
# note: tc_list settings are inherited from i386-linux.elf
|
# note: tc_list settings are inherited from i386-linux.elf
|
||||||
|
|
||||||
i386-linux.elf.execve-entry.h : $(srcdir)/src/$$T.asm
|
i386-linux.elf.execve-entry.h : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,pp-nasm) --MMD=$@ $< -o tmp/$T.tmp1
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
|
||||||
$(call tc,app-nasm) tmp/$T.tmp1 tmp/$T.tmp2
|
$(call tc,m-objcopy) --strip-unneeded tmp/$T.bin
|
||||||
$(call tc,nasm) -f bin -l tmp/$T.bin.lst tmp/$T.tmp2 -o tmp/$T.bin
|
$(call tc,m-objcopy) -R .text -R .data -R .bss tmp/$T.bin
|
||||||
|
$(call tc,m-objcopy) -R .note -R .comment tmp/$T.bin
|
||||||
|
$(call tc,m-objdump) -trwh tmp/$T.bin >> tmp/$T.bin
|
||||||
$(call tc,bin2h) --ident=linux_i386exec_loader tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386exec_loader tmp/$T.bin $@
|
||||||
|
|
||||||
i386-linux.elf.execve-fold.h : tmp/$$T.o tmp/i386-linux.elf.execve-main.o tmp/i386-linux.elf.execve-upx_itoa.o $(srcdir)/src/$$T.lds
|
i386-linux.elf.execve-fold.h : tmp/$$T.o tmp/i386-linux.elf.execve-main.o tmp/i386-linux.elf.execve-upx_itoa.o $(srcdir)/src/$$T.lds
|
||||||
@@ -506,7 +508,7 @@ i386-linux.elf.execve-fold.h : tmp/$$T.o tmp/i386-linux.elf.execve-main.o tmp/i3
|
|||||||
$(call tc,bin2h) --ident=linux_i386exec_fold tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386exec_fold tmp/$T.bin $@
|
||||||
|
|
||||||
tmp/i386-linux.elf.execve-fold.o : $(srcdir)/src/$$T.asm
|
tmp/i386-linux.elf.execve-fold.o : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
tmp/i386-linux.elf.execve-main.o : $(srcdir)/src/$$T.c
|
tmp/i386-linux.elf.execve-main.o : $(srcdir)/src/$$T.c
|
||||||
@@ -525,9 +527,11 @@ tmp/i386-linux.elf.execve-upx_itoa.o: $(srcdir)/src/$$T.asm
|
|||||||
# note: tc_list settings are inherited from i386-linux.elf
|
# note: tc_list settings are inherited from i386-linux.elf
|
||||||
|
|
||||||
i386-linux.elf.interp-entry.h : $(srcdir)/src/$$T.asm
|
i386-linux.elf.interp-entry.h : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,pp-nasm) --MMD=$@ $< -o tmp/$T.tmp1
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
|
||||||
$(call tc,app-nasm) tmp/$T.tmp1 tmp/$T.tmp2
|
$(call tc,m-objcopy) --strip-unneeded tmp/$T.bin
|
||||||
$(call tc,nasm) -f bin -l tmp/$T.bin.lst tmp/$T.tmp2 -o tmp/$T.bin
|
$(call tc,m-objcopy) -R .text -R .data -R .bss tmp/$T.bin
|
||||||
|
$(call tc,m-objcopy) -R .note -R .comment tmp/$T.bin
|
||||||
|
$(call tc,m-objdump) -trwh tmp/$T.bin >> tmp/$T.bin
|
||||||
$(call tc,bin2h) --ident=linux_i386pti_loader tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386pti_loader tmp/$T.bin $@
|
||||||
|
|
||||||
i386-linux.elf.interp-fold.h : tmp/$$T.o tmp/i386-linux.elf.interp-main.o $(srcdir)/src/$$T.lds
|
i386-linux.elf.interp-fold.h : tmp/$$T.o tmp/i386-linux.elf.interp-main.o $(srcdir)/src/$$T.lds
|
||||||
@@ -538,7 +542,7 @@ i386-linux.elf.interp-fold.h : tmp/$$T.o tmp/i386-linux.elf.interp-main.o $(srcd
|
|||||||
$(call tc,bin2h) --ident=linux_i386pti_fold tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386pti_fold tmp/$T.bin $@
|
||||||
|
|
||||||
tmp/i386-linux.elf.interp-fold.o : $(srcdir)/src/$$T.asm
|
tmp/i386-linux.elf.interp-fold.o : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
tmp/i386-linux.elf.interp-main.o : $(srcdir)/src/$$T.c
|
tmp/i386-linux.elf.interp-main.o : $(srcdir)/src/$$T.c
|
||||||
@@ -553,9 +557,11 @@ tmp/i386-linux.elf.interp-main.o : $(srcdir)/src/$$T.c
|
|||||||
# note: tc_list settings are inherited from i386-linux.elf
|
# note: tc_list settings are inherited from i386-linux.elf
|
||||||
|
|
||||||
i386-linux.elf.shell-entry.h : $(srcdir)/src/$$T.asm
|
i386-linux.elf.shell-entry.h : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,pp-nasm) --MMD=$@ $< -o tmp/$T.tmp1
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
|
||||||
$(call tc,app-nasm) tmp/$T.tmp1 tmp/$T.tmp2
|
$(call tc,m-objcopy) --strip-unneeded tmp/$T.bin
|
||||||
$(call tc,nasm) -f bin -l tmp/$T.bin.lst tmp/$T.tmp2 -o tmp/$T.bin
|
$(call tc,m-objcopy) -R .text -R .data -R .bss tmp/$T.bin
|
||||||
|
$(call tc,m-objcopy) -R .note -R .comment tmp/$T.bin
|
||||||
|
$(call tc,m-objdump) -trwh tmp/$T.bin >> tmp/$T.bin
|
||||||
$(call tc,bin2h) --ident=linux_i386sh_loader tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386sh_loader tmp/$T.bin $@
|
||||||
|
|
||||||
i386-linux.elf.shell-fold.h : tmp/$$T.o tmp/i386-linux.elf.shell-main.o $(srcdir)/src/$$T.lds
|
i386-linux.elf.shell-fold.h : tmp/$$T.o tmp/i386-linux.elf.shell-main.o $(srcdir)/src/$$T.lds
|
||||||
@@ -566,7 +572,7 @@ i386-linux.elf.shell-fold.h : tmp/$$T.o tmp/i386-linux.elf.shell-main.o $(srcdir
|
|||||||
$(call tc,bin2h) --ident=linux_i386sh_fold tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_i386sh_fold tmp/$T.bin $@
|
||||||
|
|
||||||
tmp/i386-linux.elf.shell-fold.o : $(srcdir)/src/$$T.asm
|
tmp/i386-linux.elf.shell-fold.o : $(srcdir)/src/$$T.asm
|
||||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) $@
|
$(call tc,objstrip) $@
|
||||||
|
|
||||||
tmp/i386-linux.elf.shell-main.o : $(srcdir)/src/$$T.c
|
tmp/i386-linux.elf.shell-main.o : $(srcdir)/src/$$T.c
|
||||||
@@ -680,9 +686,11 @@ tc.powerpc-linux.elf.objdump = $(call tc,m-objdump)
|
|||||||
tc.powerpc-linux.elf.objstrip = $(call tc,objcopy) -R .comment -R .note
|
tc.powerpc-linux.elf.objstrip = $(call tc,objcopy) -R .comment -R .note
|
||||||
|
|
||||||
powerpc-linux.elf-entry.h : $(srcdir)/src/$$T.S
|
powerpc-linux.elf-entry.h : $(srcdir)/src/$$T.S
|
||||||
$(call tc,gcc) -c $< -o tmp/$T.o
|
$(call tc,gcc) -c $< -o tmp/$T.bin
|
||||||
$(call tc,objstrip) tmp/$T.o
|
$(call tc,m-objcopy) --strip-unneeded tmp/$T.bin
|
||||||
$(call tc,ld) --oformat binary tmp/$T.o -o tmp/$T.bin
|
$(call tc,m-objcopy) -R .text -R .data -R .bss tmp/$T.bin
|
||||||
|
$(call tc,m-objcopy) -R .note -R .comment tmp/$T.bin
|
||||||
|
$(call tc,m-objdump) -trwh tmp/$T.bin >> tmp/$T.bin
|
||||||
$(call tc,bin2h) --ident=linux_elfppc32_loader tmp/$T.bin $@
|
$(call tc,bin2h) --ident=linux_elfppc32_loader tmp/$T.bin $@
|
||||||
|
|
||||||
powerpc-linux.elf-fold.h : tmp/$$T.o tmp/powerpc-linux.elf-main.o $(srcdir)/src/$$T.lds
|
powerpc-linux.elf-fold.h : tmp/$$T.o tmp/powerpc-linux.elf-main.o $(srcdir)/src/$$T.lds
|
||||||
|
|||||||
+747
-195
@@ -1,4 +1,4 @@
|
|||||||
/* amd64-linux.elf-entry.h -- created from amd64-linux.elf-entry.bin, 3066 (0xbfa) bytes
|
/* amd64-linux.elf-entry.h -- created from amd64-linux.elf-entry.bin, 11892 (0x2e74) bytes
|
||||||
|
|
||||||
This file is part of the UPX executable compressor.
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
@@ -27,201 +27,753 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LINUX_ELF64AMD_LOADER_SIZE 3066
|
#define LINUX_ELF64AMD_LOADER_SIZE 11892
|
||||||
#define LINUX_ELF64AMD_LOADER_ADLER32 0x7a3e6996
|
#define LINUX_ELF64AMD_LOADER_ADLER32 0x4635c9f5
|
||||||
#define LINUX_ELF64AMD_LOADER_CRC32 0x5bbfae22
|
#define LINUX_ELF64AMD_LOADER_CRC32 0x440aaf64
|
||||||
|
|
||||||
unsigned char linux_elf64amd_loader[3066] = {
|
unsigned char linux_elf64amd_loader[11892] = {
|
||||||
127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
|
127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
|
||||||
1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
|
1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 40, 3, 0, 0, 0, 0, 0, 0, /* 0x 20 */
|
0, 0, 0, 0, 0, 0, 0, 0,216, 23, 0, 0, 0, 0, 0, 0, /* 0x 20 */
|
||||||
0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 6, 0, 3, 0, /* 0x 30 */
|
0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 20, 0, 17, 0, /* 0x 30 */
|
||||||
232,178, 2, 0, 0, 85, 83, 81, 82, 72, 1,254, 86, 72,137,254, /* 0x 40 */
|
232, 0, 0, 0, 0, 85, 83, 81, 82, 72, 1,254, 86, 0, 0, 0, /* 0x 40 */
|
||||||
72,137,215, 49,219, 49,201, 72,131,205,255,232,129, 1, 0, 0, /* 0x 50 */
|
72,137,254, 72,137,215, 49,219, 49,201, 72,131,205,255,232, 85, /* 0x 50 */
|
||||||
1,219,116, 2,243,195,139, 30, 72,131,238,252, 17,219,138, 22, /* 0x 60 */
|
0, 0, 0, 0, 0, 0, 0, 0, 1,219,116, 2,243,195,139, 30, /* 0x 60 */
|
||||||
243,195, 72,141, 4, 47,131,249, 5,138, 16,118, 33, 72,131,253, /* 0x 70 */
|
72,131,238,252, 17,219,138, 22,243,195, 72,141, 4, 47,131,249, /* 0x 70 */
|
||||||
252,119, 27,131,233, 4,139, 16, 72,131,192, 4,131,233, 4,137, /* 0x 80 */
|
5,138, 16,118, 33, 72,131,253,252,119, 27,131,233, 4,139, 16, /* 0x 80 */
|
||||||
23, 72,141,127, 4,115,239,131,193, 4,138, 16,116, 16, 72,255, /* 0x 90 */
|
72,131,192, 4,131,233, 4,137, 23, 72,141,127, 4,115,239,131, /* 0x 90 */
|
||||||
192,136, 23,131,233, 1,138, 16, 72,141,127, 1,117,240,243,195, /* 0x a0 */
|
193, 4,138, 16,116, 16, 72,255,192,136, 23,131,233, 1,138, 16, /* 0x a0 */
|
||||||
72,255,198,136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, /* 0x b0 */
|
72,141,127, 1,117,240,243,195,252, 65, 91, 0, 0, 0, 0, 0, /* 0x b0 */
|
||||||
72,131,238,252, 17,219,138, 22,114,230,141, 65, 1,235, 7,255, /* 0x c0 */
|
65,128,248, 8,116, 18,233,177, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x c0 */
|
||||||
200, 65,255,211, 17,192, 65,255,211, 17,192, 1,219,117, 10,139, /* 0x d0 */
|
72,255,198,136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, /* 0x d0 */
|
||||||
30, 72,131,238,252, 17,219,138, 22,115,228,131,232, 3,114, 29, /* 0x e0 */
|
72,131,238,252, 17,219,138, 22,114,230,141, 65, 1,235, 7,255, /* 0x e0 */
|
||||||
193,224, 8, 15,182,210, 9,208, 72,255,198,131,240,255, 15,132, /* 0x f0 */
|
200, 65,255,211, 17,192, 65,255,211, 17,192, 1,219,117, 10,139, /* 0x f0 */
|
||||||
244, 0, 0, 0,209,248, 72, 99,232,114, 56,235, 14, 1,219,117, /* 0x 100 */
|
30, 72,131,238,252, 17,219,138, 22,115,228,131,232, 3,114, 29, /* 0x 100 */
|
||||||
8,139, 30, 72,131,238,252, 17,219,114, 40,255,193, 1,219,117, /* 0x 110 */
|
193,224, 8, 15,182,210, 9,208, 72,255,198,131,240,255, 15,132, /* 0x 110 */
|
||||||
8,139, 30, 72,131,238,252, 17,219,114, 24, 65,255,211, 17,201, /* 0x 120 */
|
0, 0, 0, 0,209,248, 72, 99,232,114, 56,235, 14, 1,219,117, /* 0x 120 */
|
||||||
1,219,117, 8,139, 30, 72,131,238,252, 17,219,115,237,131,193, /* 0x 130 */
|
8,139, 30, 72,131,238,252, 17,219,114, 40,255,193, 1,219,117, /* 0x 130 */
|
||||||
2,235, 5, 65,255,211, 17,201, 72,129,253, 0,251,255,255,131, /* 0x 140 */
|
8,139, 30, 72,131,238,252, 17,219,114, 24, 65,255,211, 17,201, /* 0x 140 */
|
||||||
209, 2,232, 27,255,255,255,233, 92,255,255,255, 0, 0, 0, 0, /* 0x 150 */
|
1,219,117, 8,139, 30, 72,131,238,252, 17,219,115,237,131,193, /* 0x 150 */
|
||||||
72,255,198,136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, /* 0x 160 */
|
2,235, 5, 65,255,211, 17,201, 72,129,253, 0,251,255,255,131, /* 0x 160 */
|
||||||
72,131,238,252, 17,219,138, 22,114,230,141, 65, 1, 65,255,211, /* 0x 170 */
|
209, 2,232, 0, 0, 0, 0,233, 92,255,255,255, 0, 0, 0, 0, /* 0x 170 */
|
||||||
17,192, 1,219,117, 10,139, 30, 72,131,238,252, 17,219,138, 22, /* 0x 180 */
|
65,128,248, 2,116, 18,233,138, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 180 */
|
||||||
115,235,131,232, 3,114, 19,193,224, 8, 15,182,210, 9,208, 72, /* 0x 190 */
|
72,255,198,136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, /* 0x 190 */
|
||||||
255,198,131,240,255,116, 81, 72, 99,232,141, 65, 1, 65,255,211, /* 0x 1a0 */
|
72,131,238,252, 17,219,138, 22,114,230,141, 65, 1, 65,255,211, /* 0x 1a0 */
|
||||||
17,201, 65,255,211, 17,201,117, 24,137,193,131,192, 2, 65,255, /* 0x 1b0 */
|
17,192, 1,219,117, 10,139, 30, 72,131,238,252, 17,219,138, 22, /* 0x 1b0 */
|
||||||
211, 17,201, 1,219,117, 8,139, 30, 72,131,238,252, 17,219,115, /* 0x 1c0 */
|
115,235,131,232, 3,114, 23,193,224, 8, 15,182,210, 9,208, 72, /* 0x 1c0 */
|
||||||
237, 72,129,253, 0,243,255,255, 17,193,232,147,254,255,255,235, /* 0x 1d0 */
|
255,198,131,240,255, 15,132, 0, 0, 0, 0, 72, 99,232,141, 65, /* 0x 1d0 */
|
||||||
135,252, 65, 91, 65,131,248, 8, 15,132,202,254,255,255, 65,131, /* 0x 1e0 */
|
1, 65,255,211, 17,201, 65,255,211, 17,201,117, 24,137,193,131, /* 0x 1e0 */
|
||||||
248, 2, 15,132,112,255,255,255, 89, 72,137,240, 72, 41,200, 90, /* 0x 1f0 */
|
192, 2, 65,255,211, 17,201, 1,219,117, 8,139, 30, 72,131,238, /* 0x 1f0 */
|
||||||
72, 41,215, 89,137, 57, 91, 93,195, 10, 36, 73,100, 58, 32, 85, /* 0x 200 */
|
252, 17,219,115,237, 72,129,253, 0,243,255,255, 17,193,232, 0, /* 0x 200 */
|
||||||
80, 88, 32, 40, 67, 41, 32, 49, 57, 57, 54, 45, 50, 48, 48, 54, /* 0x 210 */
|
0, 0, 0,235,131, 65,128,248, 14, 15,133, 0, 0, 0, 0, 85, /* 0x 210 */
|
||||||
32,116,104,101, 32, 85, 80, 88, 32, 84,101, 97,109, 46, 32, 65, /* 0x 220 */
|
72,137,229, 68,139, 9, 73,137,208, 72,137,242, 72,141,119, 2, /* 0x 220 */
|
||||||
108,108, 32, 82,105,103,104,116,115, 32, 82,101,115,101,114,118, /* 0x 230 */
|
86,138, 7,255,202,136,193, 36, 7,192,233, 3, 72,199,195, 0, /* 0x 230 */
|
||||||
101,100, 46, 32,104,116,116,112, 58, 47, 47,117,112,120, 46,115, /* 0x 240 */
|
253,255,255, 72,211,227,136,193, 72,141,156, 92,136,241,255,255, /* 0x 240 */
|
||||||
102, 46,110,101,116, 32, 36, 10, 0,104, 30, 0, 0, 0, 90,232, /* 0x 250 */
|
72,131,227,192,106, 0, 72, 57,220,117,249, 83, 72,141,123, 8, /* 0x 250 */
|
||||||
30, 0, 0, 0, 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, /* 0x 260 */
|
138, 78,255,255,202,136, 71, 2,136,200,192,233, 4,136, 79, 1, /* 0x 260 */
|
||||||
79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46, /* 0x 270 */
|
36, 15,136, 7, 72,141, 79,252, 80, 65, 87, 72,141, 71, 4, 69, /* 0x 270 */
|
||||||
10, 0, 94,106, 2, 95,106, 1, 88, 15, 5,106,127, 95,106, 60, /* 0x 280 */
|
49,255, 65, 86, 65,190, 1, 0, 0, 0, 65, 85, 69, 49,237, 65, /* 0x 280 */
|
||||||
88, 15, 5, 91,191, 0, 0, 0, 0,106, 7, 90,190, 0, 0, 0, /* 0x 290 */
|
84, 85, 83, 72,137, 76, 36,240, 72,137, 68, 36,216,184, 1, 0, /* 0x 290 */
|
||||||
0,106, 50, 65, 90, 69, 41,192,106, 9, 88, 15, 5, 57,199,117, /* 0x 2a0 */
|
0, 0, 72,137,116, 36,248, 76,137, 68, 36,232,137,195, 68,137, /* 0x 2a0 */
|
||||||
168,104, 0, 0, 0, 0,104, 0, 0, 0, 0,190, 0, 0, 0, 0, /* 0x 2b0 */
|
76, 36,228, 15,182, 79, 2,211,227,137,217, 72,139, 92, 36, 56, /* 0x 2b0 */
|
||||||
104, 0, 0, 0, 0,185, 0, 0, 0, 0,104, 0, 0, 0, 0,104, /* 0x 2c0 */
|
255,201,137, 76, 36,212, 15,182, 79, 1,211,224, 72,139, 76, 36, /* 0x 2c0 */
|
||||||
0, 0, 0, 0,137,250, 41,242, 1,213, 1,211,252,243, 72,165, /* 0x 2d0 */
|
240,255,200,137, 68, 36,208, 15,182, 7,199, 1, 0, 0, 0, 0, /* 0x 2d0 */
|
||||||
151,137,222, 80,146,173, 80, 72,137,225,173,151,173, 68, 15,182, /* 0x 2e0 */
|
199, 68, 36,200, 0, 0, 0, 0,199, 68, 36,196, 1, 0, 0, 0, /* 0x 2e0 */
|
||||||
192,135,254,255,213, 89,195, 93,232,150,255,255,255, 0, 46,115, /* 0x 2f0 */
|
199, 68, 36,192, 1, 0, 0, 0,199, 68, 36,188, 1, 0, 0, 0, /* 0x 2f0 */
|
||||||
121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115, /* 0x 300 */
|
199, 3, 0, 0, 0, 0,137, 68, 36,204, 15,182, 79, 1, 1,193, /* 0x 300 */
|
||||||
104,115,116,114,116, 97, 98, 0, 46,114,101,108, 97, 76, 69, 88, /* 0x 310 */
|
184, 0, 3, 0, 0,211,224, 49,201,141,184, 54, 7, 0, 0, 65, /* 0x 310 */
|
||||||
69, 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 320 */
|
57,255,115, 19, 72,139, 92, 36,216,137,200,255,193, 57,249,102, /* 0x 320 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 330 */
|
199, 4, 67, 0, 4,235,235, 72,139,124, 36,248,137,208, 69, 49, /* 0x 330 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 340 */
|
210, 65,131,203,255, 49,210, 73,137,252, 73, 1,196, 76, 57,231, /* 0x 340 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 350 */
|
15,132,239, 8, 0, 0, 15,182, 7, 65,193,226, 8,255,194, 72, /* 0x 350 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, /* 0x 360 */
|
255,199, 65, 9,194,131,250, 4,126,227, 68, 59,124, 36,228, 15, /* 0x 360 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 370 */
|
131,218, 8, 0, 0,139, 68, 36,212, 72, 99, 92, 36,200, 72,139, /* 0x 370 */
|
||||||
64, 0, 0, 0, 0, 0, 0, 0,189, 2, 0, 0, 0, 0, 0, 0, /* 0x 380 */
|
84, 36,216, 68, 33,248,137, 68, 36,184, 72, 99,108, 36,184, 72, /* 0x 380 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x 390 */
|
137,216, 72,193,224, 4, 72, 1,232, 65,129,251,255,255,255, 0, /* 0x 390 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 4, 0, 0, 0, /* 0x 3a0 */
|
76,141, 12, 66,119, 26, 76, 57,231, 15,132,150, 8, 0, 0, 15, /* 0x 3a0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 3b0 */
|
182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, /* 0x 3b0 */
|
||||||
0, 6, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, /* 0x 3c0 */
|
65, 15,183, 17, 68,137,216,193,232, 11, 15,183,202, 15,175,193, /* 0x 3c0 */
|
||||||
4, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x 3d0 */
|
65, 57,194, 15,131,197, 1, 0, 0, 65,137,195,184, 0, 8, 0, /* 0x 3d0 */
|
||||||
24, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 3, 0, 0, 0, /* 0x 3e0 */
|
0, 72,139, 92, 36,216, 41,200, 15,182, 76, 36,204,190, 1, 0, /* 0x 3e0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 3f0 */
|
0, 0,193,248, 5,141, 4, 2, 65, 15,182,213,102, 65,137, 1, /* 0x 3f0 */
|
||||||
253, 2, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, /* 0x 400 */
|
139, 68, 36,208, 68, 33,248,211,224,185, 8, 0, 0, 0, 43, 76, /* 0x 400 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x 410 */
|
36,204,211,250, 1,208,105,192, 0, 3, 0, 0,131,124, 36,200, /* 0x 410 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, /* 0x 420 */
|
6,137,192, 76,141,140, 67,108, 14, 0, 0, 15,142,184, 0, 0, /* 0x 420 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 430 */
|
0, 72,139, 84, 36,232, 68,137,248, 68, 41,240, 15,182, 44, 2, /* 0x 430 */
|
||||||
168, 4, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 0, /* 0x 440 */
|
1,237, 72, 99,214,137,235,129,227, 0, 1, 0, 0, 65,129,251, /* 0x 440 */
|
||||||
5, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x 450 */
|
255,255,255, 0, 72, 99,195, 73,141, 4, 65, 76,141, 4, 80,119, /* 0x 450 */
|
||||||
24, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 3, 0, 0, 0, /* 0x 460 */
|
26, 76, 57,231, 15,132,219, 7, 0, 0, 15,182, 7, 65,193,226, /* 0x 460 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 470 */
|
8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183,144, 0, /* 0x 470 */
|
||||||
200, 5, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, /* 0x 480 */
|
2, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, /* 0x 480 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x 490 */
|
57,194,115, 32, 65,137,195,184, 0, 8, 0, 0, 1,246, 41,200, /* 0x 490 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 4a0 */
|
193,248, 5,133,219,141, 4, 2,102, 65,137,128, 0, 2, 0, 0, /* 0x 4a0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 4b0 */
|
116, 33,235, 45, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, /* 0x 4b0 */
|
||||||
0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 4c0 */
|
141,116, 54, 1,102, 41,194,133,219,102, 65,137,144, 0, 2, 0, /* 0x 4c0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0, /* 0x 4d0 */
|
0,116, 14,129,254,255, 0, 0, 0, 15,142, 97,255,255,255,235, /* 0x 4d0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 4e0 */
|
120,129,254,255, 0, 0, 0,127,112, 72, 99,198, 65,129,251,255, /* 0x 4e0 */
|
||||||
8, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 4f0 */
|
255,255, 0, 77,141, 4, 65,119, 26, 76, 57,231, 15,132, 67, 7, /* 0x 4f0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, /* 0x 500 */
|
0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, /* 0x 500 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 510 */
|
65, 9,194, 65, 15,183, 16, 68,137,216,193,232, 11, 15,183,202, /* 0x 510 */
|
||||||
18, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 520 */
|
15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, 0, 0, /* 0x 520 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 16, 0, 0, 0, /* 0x 530 */
|
1,246, 41,200,193,248, 5,141, 4, 2,102, 65,137, 0,235,161, /* 0x 530 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 540 */
|
65, 41,195, 65, 41,194,137,208,102,193,232, 5,141,116, 54, 1, /* 0x 540 */
|
||||||
28, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 550 */
|
102, 41,194,102, 65,137, 16,235,136, 72,139, 76, 36,232, 68,137, /* 0x 550 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 16, 0, 0, 0, /* 0x 560 */
|
248, 65,255,199, 65,137,245, 64,136, 52, 1,131,124, 36,200, 3, /* 0x 560 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 570 */
|
127, 13,199, 68, 36,200, 0, 0, 0, 0,233,166, 6, 0, 0,139, /* 0x 570 */
|
||||||
38, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 580 */
|
84, 36,200,139, 68, 36,200,131,234, 3,131,232, 6,131,124, 36, /* 0x 580 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 16, 0, 0, 0, /* 0x 590 */
|
200, 9, 15, 79,208,137, 84, 36,200,233,135, 6, 0, 0, 65, 41, /* 0x 590 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 5a0 */
|
195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 72,139, 68, /* 0x 5a0 */
|
||||||
48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 5b0 */
|
36,216, 65,129,251,255,255,255, 0,102, 65,137, 17, 72,141, 52, /* 0x 5b0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 95,115,116, 97,114,116, 0, /* 0x 5c0 */
|
88,119, 26, 76, 57,231, 15,132,121, 6, 0, 0, 15,182, 7, 65, /* 0x 5c0 */
|
||||||
65, 68, 82, 77, 0, 76, 69, 78, 77, 0, 74, 77, 80, 85, 0, 65, /* 0x 5d0 */
|
193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150, /* 0x 5d0 */
|
||||||
68, 82, 85, 0, 65, 68, 82, 67, 0, 76, 69, 78, 85, 0, 67, 78, /* 0x 5e0 */
|
128, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, /* 0x 5e0 */
|
||||||
84, 67, 0, 65, 68, 82, 88, 0, 76, 69, 78, 88, 0, 0, 0, 0, /* 0x 5f0 */
|
65, 57,194,115, 78, 65,137,195,184, 0, 8, 0, 0, 76,139, 76, /* 0x 5f0 */
|
||||||
85, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 3, 0, 0, 0, /* 0x 600 */
|
36,216, 41,200,139, 76, 36,196, 68,137,116, 36,196,193,248, 5, /* 0x 600 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 93, 2, 0, 0, 0, 0, 0, 0, /* 0x 610 */
|
141, 4, 2,139, 84, 36,192,137, 76, 36,192,102,137,134,128, 1, /* 0x 610 */
|
||||||
10, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 620 */
|
0, 0, 49,192,131,124, 36,200, 6,137, 84, 36,188, 15,159,192, /* 0x 620 */
|
||||||
114, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 5, 0, 0, 0, /* 0x 630 */
|
73,129,193,100, 6, 0, 0,141, 4, 64,137, 68, 36,200,233, 84, /* 0x 630 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,119, 2, 0, 0, 0, 0, 0, 0, /* 0x 640 */
|
2, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, /* 0x 640 */
|
||||||
10, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 650 */
|
41,194, 65,129,251,255,255,255, 0,102,137,150,128, 1, 0, 0, /* 0x 650 */
|
||||||
124, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 7, 0, 0, 0, /* 0x 660 */
|
119, 26, 76, 57,231, 15,132,218, 5, 0, 0, 15,182, 7, 65,193, /* 0x 660 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,129, 2, 0, 0, 0, 0, 0, 0, /* 0x 670 */
|
226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,152, /* 0x 670 */
|
||||||
10, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 680 */
|
1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, /* 0x 680 */
|
||||||
134, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, /* 0x 690 */
|
57,194, 15,131,208, 0, 0, 0, 65,184, 0, 8, 0, 0, 65,137, /* 0x 690 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,139, 2, 0, 0, 0, 0, 0, 0, /* 0x 6a0 */
|
195, 72,193,227, 5, 68,137,192, 41,200,193,248, 5,141, 4, 2, /* 0x 6a0 */
|
||||||
10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 6b0 */
|
102,137,134,152, 1, 0, 0, 72,139, 68, 36,216, 72, 1,216, 65, /* 0x 6b0 */
|
||||||
144, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, /* 0x 6c0 */
|
129,251,255,255,255, 0, 72,141, 52,104,119, 26, 76, 57,231, 15, /* 0x 6c0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 10,116,109,112, 47, 97,109,100, /* 0x 6d0 */
|
132,112, 5, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, /* 0x 6d0 */
|
||||||
54, 52, 45,108,105,110,117,120, 46,101,108,102, 45,101,110,116, /* 0x 6e0 */
|
72,255,199, 65, 9,194, 15,183,150,224, 1, 0, 0, 68,137,216, /* 0x 6e0 */
|
||||||
114,121, 46, 98,105,110, 58, 32, 32, 32, 32, 32,102,105,108,101, /* 0x 6f0 */
|
193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 79, 65, 41, /* 0x 6f0 */
|
||||||
32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,120, 56, /* 0x 700 */
|
200, 65,137,195, 65,193,248, 5, 69,133,255, 66,141, 4, 2,102, /* 0x 700 */
|
||||||
54, 45, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, /* 0x 710 */
|
137,134,224, 1, 0, 0, 15,132, 41, 5, 0, 0, 49,192,131,124, /* 0x 710 */
|
||||||
73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x 720 */
|
36,200, 6, 72,139, 92, 36,232, 15,159,192,141, 68, 0, 9,137, /* 0x 720 */
|
||||||
32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, /* 0x 730 */
|
68, 36,200, 68,137,248, 68, 41,240, 68, 15,182, 44, 3, 68,137, /* 0x 730 */
|
||||||
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, /* 0x 740 */
|
248, 65,255,199, 68,136, 44, 3,233,216, 4, 0, 0, 65, 41,195, /* 0x 740 */
|
||||||
65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x 750 */
|
65, 41,194,137,208,102,193,232, 5,102, 41,194,102,137,150,224, /* 0x 750 */
|
||||||
70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, /* 0x 760 */
|
1, 0, 0,233, 17, 1, 0, 0, 65, 41,195, 65, 41,194,137,208, /* 0x 760 */
|
||||||
70,108, 97,103,115, 10, 32, 32, 48, 32, 76, 69, 88, 69, 67, 48, /* 0x 770 */
|
102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102,137, /* 0x 770 */
|
||||||
48, 48, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50, 98,100, /* 0x 780 */
|
150,152, 1, 0, 0,119, 26, 76, 57,231, 15,132,181, 4, 0, 0, /* 0x 780 */
|
||||||
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 790 */
|
15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9, /* 0x 790 */
|
||||||
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 7a0 */
|
194, 15,183,150,176, 1, 0, 0, 68,137,216,193,232, 11, 15,183, /* 0x 7a0 */
|
||||||
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, /* 0x 7b0 */
|
202, 15,175,193, 65, 57,194,115, 32, 65,137,195,184, 0, 8, 0, /* 0x 7b0 */
|
||||||
50, 42, 42, 51, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x 7c0 */
|
0, 41,200,193,248, 5,141, 4, 2,102,137,134,176, 1, 0, 0, /* 0x 7c0 */
|
||||||
82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x 7d0 */
|
139, 68, 36,196,233,152, 0, 0, 0, 65, 41,195, 65, 41,194,137, /* 0x 7d0 */
|
||||||
83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, /* 0x 7e0 */
|
208,102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102, /* 0x 7e0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x 7f0 */
|
137,150,176, 1, 0, 0,119, 26, 76, 57,231, 15,132, 68, 4, 0, /* 0x 7f0 */
|
||||||
32, 32, 32, 32,100, 32, 32, 76, 69, 88, 69, 67, 48, 48, 48, 9, /* 0x 800 */
|
0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, /* 0x 800 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 810 */
|
9,194, 15,183,150,200, 1, 0, 0, 68,137,216,193,232, 11, 15, /* 0x 810 */
|
||||||
32, 76, 69, 88, 69, 67, 48, 48, 48, 10, 48, 48, 48, 48, 48, 48, /* 0x 820 */
|
183,202, 15,175,193, 65, 57,194,115, 29, 65,137,195,184, 0, 8, /* 0x 820 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, /* 0x 830 */
|
0, 0, 41,200,193,248, 5,141, 4, 2,102,137,134,200, 1, 0, /* 0x 830 */
|
||||||
32, 32, 32, 76, 69, 88, 69, 67, 48, 48, 48, 9, 48, 48, 48, 48, /* 0x 840 */
|
0,139, 68, 36,192,235, 34, 65, 41,195, 65, 41,194,137,208,102, /* 0x 840 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, /* 0x 850 */
|
193,232, 5,102, 41,194,139, 68, 36,188,102,137,150,200, 1, 0, /* 0x 850 */
|
||||||
97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 860 */
|
0,139, 84, 36,192,137, 84, 36,188,139, 76, 36,196,137, 76, 36, /* 0x 860 */
|
||||||
48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, /* 0x 870 */
|
192, 68,137,116, 36,196, 65,137,198, 49,192,131,124, 36,200, 6, /* 0x 870 */
|
||||||
68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 880 */
|
76,139, 76, 36,216, 15,159,192, 73,129,193,104, 10, 0, 0,141, /* 0x 880 */
|
||||||
48, 48, 48, 32, 65, 68, 82, 77, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x 890 */
|
68, 64, 8,137, 68, 36,200, 65,129,251,255,255,255, 0,119, 26, /* 0x 890 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, /* 0x 8a0 */
|
76, 57,231, 15,132,156, 3, 0, 0, 15,182, 7, 65,193,226, 8, /* 0x 8a0 */
|
||||||
32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 8b0 */
|
65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 17, 68,137, /* 0x 8b0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 69, 78, 77, 10, 48, 48, /* 0x 8c0 */
|
216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 39, 65, /* 0x 8c0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x 8d0 */
|
137,195,184, 0, 8, 0, 0, 69, 49,237, 41,200,193,248, 5,141, /* 0x 8d0 */
|
||||||
32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, /* 0x 8e0 */
|
4, 2,102, 65,137, 1, 72, 99, 68, 36,184, 72,193,224, 4, 77, /* 0x 8e0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 74, 77, /* 0x 8f0 */
|
141, 68, 1, 4,235,120, 65, 41,195, 65, 41,194,137,208,102,193, /* 0x 8f0 */
|
||||||
80, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 900 */
|
232, 5,102, 41,194, 65,129,251,255,255,255, 0,102, 65,137, 17, /* 0x 900 */
|
||||||
48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, /* 0x 910 */
|
119, 26, 76, 57,231, 15,132, 42, 3, 0, 0, 15,182, 7, 65,193, /* 0x 910 */
|
||||||
42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 920 */
|
226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 81, /* 0x 920 */
|
||||||
48, 48, 32, 65, 68, 82, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 930 */
|
2, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, /* 0x 930 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x 940 */
|
115, 52, 65,137,195,184, 0, 8, 0, 0, 65,189, 8, 0, 0, 0, /* 0x 940 */
|
||||||
32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 950 */
|
41,200,193,248, 5,141, 4, 2,102, 65,137, 65, 2, 72, 99, 68, /* 0x 950 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 32, 65, 68, 82, 67, 10, 48, 48, 48, /* 0x 960 */
|
36,184, 72,193,224, 4, 77,141,132, 1, 4, 1, 0, 0, 65,185, /* 0x 960 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, /* 0x 970 */
|
3, 0, 0, 0,235, 39, 65, 41,195, 65, 41,194,137,208,102,193, /* 0x 970 */
|
||||||
32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, /* 0x 980 */
|
232, 5, 77,141,129, 4, 2, 0, 0, 65,189, 16, 0, 0, 0,102, /* 0x 980 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 69, 78, /* 0x 990 */
|
41,194,102, 65,137, 81, 2, 65,185, 8, 0, 0, 0, 68,137,203, /* 0x 990 */
|
||||||
85, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 9a0 */
|
189, 1, 0, 0, 0, 72, 99,197, 65,129,251,255,255,255, 0, 73, /* 0x 9a0 */
|
||||||
48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, /* 0x 9b0 */
|
141, 52, 64,119, 26, 76, 57,231, 15,132,135, 2, 0, 0, 15,182, /* 0x 9b0 */
|
||||||
9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 9c0 */
|
7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15, /* 0x 9c0 */
|
||||||
48, 32, 67, 78, 84, 67, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 9d0 */
|
183, 14, 68,137,216,193,232, 11, 15,183,209, 15,175,194, 65, 57, /* 0x 9d0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x 9e0 */
|
194,115, 23, 65,137,195,184, 0, 8, 0, 0, 1,237, 41,208,193, /* 0x 9e0 */
|
||||||
42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x 9f0 */
|
248, 5,141, 4, 1,102,137, 6,235, 22, 65, 41,195, 65, 41,194, /* 0x 9f0 */
|
||||||
48, 48, 48, 48, 48, 48, 32, 65, 68, 82, 88, 10, 48, 48, 48, 48, /* 0x a00 */
|
137,200,102,193,232, 5,141,108, 45, 1,102, 41,193,102,137, 14, /* 0x a00 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, /* 0x a10 */
|
255,203,117,145,184, 1, 0, 0, 0, 68,137,201,211,224, 41,197, /* 0x a10 */
|
||||||
32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, /* 0x a20 */
|
68, 1,237,131,124, 36,200, 3, 15,143,194, 1, 0, 0,131, 68, /* 0x a20 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 69, 78, 88, /* 0x a30 */
|
36,200, 7,184, 3, 0, 0, 0,131,253, 4, 15, 76,197, 72,139, /* 0x a30 */
|
||||||
10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x a40 */
|
92, 36,216, 65,184, 1, 0, 0, 0, 72,152, 72,193,224, 7, 76, /* 0x a40 */
|
||||||
67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 69, 88, 69, 67, /* 0x a50 */
|
141,140, 3, 96, 3, 0, 0,187, 6, 0, 0, 0, 73, 99,192, 65, /* 0x a50 */
|
||||||
48, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, /* 0x a60 */
|
129,251,255,255,255, 0, 73,141, 52, 65,119, 26, 76, 57,231, 15, /* 0x a60 */
|
||||||
32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, /* 0x a70 */
|
132,208, 1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, /* 0x a70 */
|
||||||
32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 32, 10, /* 0x a80 */
|
72,255,199, 65, 9,194, 15,183, 22, 68,137,216,193,232, 11, 15, /* 0x a80 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 53, 53, /* 0x a90 */
|
183,202, 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, /* 0x a90 */
|
||||||
32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, /* 0x aa0 */
|
0, 0, 69, 1,192, 41,200,193,248, 5,141, 4, 2,102,137, 6, /* 0x aa0 */
|
||||||
32, 32, 32, 65, 68, 82, 77, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x ab0 */
|
235, 23, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, 71,141, /* 0x ab0 */
|
||||||
48, 48, 48, 48, 48, 50, 53,100, 32, 82, 95, 88, 56, 54, 95, 54, /* 0x ac0 */
|
68, 0, 1,102, 41,194,102,137, 22,255,203,117,143, 65,131,232, /* 0x ac0 */
|
||||||
52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 76, 69, 78, 77, 10, /* 0x ad0 */
|
64, 65,131,248, 3, 69,137,198, 15,142, 13, 1, 0, 0, 65,131, /* 0x ad0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 55, 50, /* 0x ae0 */
|
230, 1, 68,137,192,209,248, 65,131,206, 2, 65,131,248, 13,141, /* 0x ae0 */
|
||||||
32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, /* 0x af0 */
|
112,255,127, 35,137,241, 72,139, 92, 36,216, 73, 99,192, 65,211, /* 0x af0 */
|
||||||
32, 32, 32, 74, 77, 80, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x b00 */
|
230, 72, 1,192, 68,137,242, 72,141, 20, 83, 72, 41,194, 76,141, /* 0x b00 */
|
||||||
48, 48, 48, 48, 48, 50, 55, 55, 32, 82, 95, 88, 56, 54, 95, 54, /* 0x b10 */
|
138, 94, 5, 0, 0,235, 81,141,112,251, 65,129,251,255,255,255, /* 0x b10 */
|
||||||
52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 65, 68, 82, 85, 10, /* 0x b20 */
|
0,119, 26, 76, 57,231, 15,132, 25, 1, 0, 0, 15,182, 7, 65, /* 0x b20 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 55, 99, /* 0x b30 */
|
193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65,209,235, /* 0x b30 */
|
||||||
32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, /* 0x b40 */
|
69, 1,246, 69, 57,218,114, 7, 69, 41,218, 65,131,206, 1,255, /* 0x b40 */
|
||||||
32, 32, 32, 65, 68, 82, 67, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x b50 */
|
206,117,199, 76,139, 76, 36,216, 65,193,230, 4,190, 4, 0, 0, /* 0x b50 */
|
||||||
48, 48, 48, 48, 48, 50, 56, 49, 32, 82, 95, 88, 56, 54, 95, 54, /* 0x b60 */
|
0, 73,129,193, 68, 6, 0, 0, 65,189, 1, 0, 0, 0,187, 1, /* 0x b60 */
|
||||||
52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 76, 69, 78, 85, 10, /* 0x b70 */
|
0, 0, 0, 72, 99,195, 65,129,251,255,255,255, 0, 77,141, 4, /* 0x b70 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 56, 54, /* 0x b80 */
|
65,119, 26, 76, 57,231, 15,132,185, 0, 0, 0, 15,182, 7, 65, /* 0x b80 */
|
||||||
32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, /* 0x b90 */
|
193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, /* 0x b90 */
|
||||||
32, 32, 32, 67, 78, 84, 67, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x ba0 */
|
16, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194, /* 0x ba0 */
|
||||||
48, 48, 48, 48, 48, 50, 56, 98, 32, 82, 95, 88, 56, 54, 95, 54, /* 0x bb0 */
|
115, 24, 65,137,195,184, 0, 8, 0, 0, 1,219, 41,200,193,248, /* 0x bb0 */
|
||||||
52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 65, 68, 82, 88, 10, /* 0x bc0 */
|
5,141, 4, 2,102, 65,137, 0,235, 26, 65, 41,195, 65, 41,194, /* 0x bc0 */
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 57, 48, /* 0x bd0 */
|
137,208,102,193,232, 5,141, 92, 27, 1, 69, 9,238,102, 41,194, /* 0x bd0 */
|
||||||
32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, /* 0x be0 */
|
102, 65,137, 16, 69, 1,237,255,206,117,136, 65,255,198,116, 64, /* 0x be0 */
|
||||||
32, 32, 32, 76, 69, 78, 88, 10, 10, 10 /* 0x bf0 */
|
131,197, 2, 69, 57,254,119, 77, 72,139, 84, 36,232, 68,137,248, /* 0x bf0 */
|
||||||
|
68, 41,240, 68, 15,182, 44, 2, 68,137,248, 65,255,199,255,205, /* 0x c00 */
|
||||||
|
68,136, 44, 2, 15,149,194, 49,192, 68, 59,124, 36,228, 15,146, /* 0x c10 */
|
||||||
|
192,133,194,117,211, 68, 59,124, 36,228, 15,130, 69,247,255,255, /* 0x c20 */
|
||||||
|
65,129,251,255,255,255, 0,119, 22, 76, 57,231,184, 1, 0, 0, /* 0x c30 */
|
||||||
|
0,116, 35,235, 7,184, 1, 0, 0, 0,235, 26, 72,255,199,137, /* 0x c40 */
|
||||||
|
248, 43, 68, 36,248, 72,139, 76, 36,240, 72,139, 92, 36, 56,137, /* 0x c50 */
|
||||||
|
1, 68,137, 59, 49,192, 91, 93, 65, 92, 65, 93, 65, 94, 65, 95, /* 0x c60 */
|
||||||
|
65, 87, 72,141, 71, 4, 69, 49,255, 65, 86, 65,190, 1, 0, 0, /* 0x c70 */
|
||||||
|
0, 65, 85, 69, 49,237, 65, 84, 85, 83, 72,137, 76, 36,240, 72, /* 0x c80 */
|
||||||
|
137, 68, 36,216,184, 1, 0, 0, 0, 72,137,116, 36,248, 76,137, /* 0x c90 */
|
||||||
|
68, 36,232,137,195, 68,137, 76, 36,228, 15,182, 79, 2,211,227, /* 0x ca0 */
|
||||||
|
137,217, 72,139, 92, 36, 56,255,201,137, 76, 36,212, 15,182, 79, /* 0x cb0 */
|
||||||
|
1,211,224, 72,139, 76, 36,240,255,200,137, 68, 36,208, 15,182, /* 0x cc0 */
|
||||||
|
7,199, 1, 0, 0, 0, 0,199, 68, 36,200, 0, 0, 0, 0,199, /* 0x cd0 */
|
||||||
|
68, 36,196, 1, 0, 0, 0,199, 68, 36,192, 1, 0, 0, 0,199, /* 0x ce0 */
|
||||||
|
68, 36,188, 1, 0, 0, 0,199, 3, 0, 0, 0, 0,137, 68, 36, /* 0x cf0 */
|
||||||
|
204, 15,182, 79, 1, 1,193,184, 0, 3, 0, 0,211,224, 49,201, /* 0x d00 */
|
||||||
|
141,184, 54, 7, 0, 0, 65, 57,255,115, 19, 72,139, 92, 36,216, /* 0x d10 */
|
||||||
|
137,200,255,193, 57,249,102,199, 4, 67, 0, 4,235,235, 72,139, /* 0x d20 */
|
||||||
|
124, 36,248,137,208, 69, 49,210, 65,131,203,255, 49,210, 73,137, /* 0x d30 */
|
||||||
|
252, 73, 1,196, 76, 57,231, 15,132,239, 8, 0, 0, 15,182, 7, /* 0x d40 */
|
||||||
|
65,193,226, 8,255,194, 72,255,199, 65, 9,194,131,250, 4,126, /* 0x d50 */
|
||||||
|
227, 68, 59,124, 36,228, 15,131,218, 8, 0, 0,139, 68, 36,212, /* 0x d60 */
|
||||||
|
72, 99, 92, 36,200, 72,139, 84, 36,216, 68, 33,248,137, 68, 36, /* 0x d70 */
|
||||||
|
184, 72, 99,108, 36,184, 72,137,216, 72,193,224, 4, 72, 1,232, /* 0x d80 */
|
||||||
|
65,129,251,255,255,255, 0, 76,141, 12, 66,119, 26, 76, 57,231, /* 0x d90 */
|
||||||
|
15,132,150, 8, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, /* 0x da0 */
|
||||||
|
8, 72,255,199, 65, 9,194, 65, 15,183, 17, 68,137,216,193,232, /* 0x db0 */
|
||||||
|
11, 15,183,202, 15,175,193, 65, 57,194, 15,131,197, 1, 0, 0, /* 0x dc0 */
|
||||||
|
65,137,195,184, 0, 8, 0, 0, 72,139, 92, 36,216, 41,200, 15, /* 0x dd0 */
|
||||||
|
182, 76, 36,204,190, 1, 0, 0, 0,193,248, 5,141, 4, 2, 65, /* 0x de0 */
|
||||||
|
15,182,213,102, 65,137, 1,139, 68, 36,208, 68, 33,248,211,224, /* 0x df0 */
|
||||||
|
185, 8, 0, 0, 0, 43, 76, 36,204,211,250, 1,208,105,192, 0, /* 0x e00 */
|
||||||
|
3, 0, 0,131,124, 36,200, 6,137,192, 76,141,140, 67,108, 14, /* 0x e10 */
|
||||||
|
0, 0, 15,142,184, 0, 0, 0, 72,139, 84, 36,232, 68,137,248, /* 0x e20 */
|
||||||
|
68, 41,240, 15,182, 44, 2, 1,237, 72, 99,214,137,235,129,227, /* 0x e30 */
|
||||||
|
0, 1, 0, 0, 65,129,251,255,255,255, 0, 72, 99,195, 73,141, /* 0x e40 */
|
||||||
|
4, 65, 76,141, 4, 80,119, 26, 76, 57,231, 15,132,219, 7, 0, /* 0x e50 */
|
||||||
|
0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, /* 0x e60 */
|
||||||
|
9,194, 65, 15,183,144, 0, 2, 0, 0, 68,137,216,193,232, 11, /* 0x e70 */
|
||||||
|
15,183,202, 15,175,193, 65, 57,194,115, 32, 65,137,195,184, 0, /* 0x e80 */
|
||||||
|
8, 0, 0, 1,246, 41,200,193,248, 5,133,219,141, 4, 2,102, /* 0x e90 */
|
||||||
|
65,137,128, 0, 2, 0, 0,116, 33,235, 45, 65, 41,195, 65, 41, /* 0x ea0 */
|
||||||
|
194,137,208,102,193,232, 5,141,116, 54, 1,102, 41,194,133,219, /* 0x eb0 */
|
||||||
|
102, 65,137,144, 0, 2, 0, 0,116, 14,129,254,255, 0, 0, 0, /* 0x ec0 */
|
||||||
|
15,142, 97,255,255,255,235,120,129,254,255, 0, 0, 0,127,112, /* 0x ed0 */
|
||||||
|
72, 99,198, 65,129,251,255,255,255, 0, 77,141, 4, 65,119, 26, /* 0x ee0 */
|
||||||
|
76, 57,231, 15,132, 67, 7, 0, 0, 15,182, 7, 65,193,226, 8, /* 0x ef0 */
|
||||||
|
65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 16, 68,137, /* 0x f00 */
|
||||||
|
216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 24, 65, /* 0x f10 */
|
||||||
|
137,195,184, 0, 8, 0, 0, 1,246, 41,200,193,248, 5,141, 4, /* 0x f20 */
|
||||||
|
2,102, 65,137, 0,235,161, 65, 41,195, 65, 41,194,137,208,102, /* 0x f30 */
|
||||||
|
193,232, 5,141,116, 54, 1,102, 41,194,102, 65,137, 16,235,136, /* 0x f40 */
|
||||||
|
72,139, 76, 36,232, 68,137,248, 65,255,199, 65,137,245, 64,136, /* 0x f50 */
|
||||||
|
52, 1,131,124, 36,200, 3,127, 13,199, 68, 36,200, 0, 0, 0, /* 0x f60 */
|
||||||
|
0,233,166, 6, 0, 0,139, 84, 36,200,139, 68, 36,200,131,234, /* 0x f70 */
|
||||||
|
3,131,232, 6,131,124, 36,200, 9, 15, 79,208,137, 84, 36,200, /* 0x f80 */
|
||||||
|
233,135, 6, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, /* 0x f90 */
|
||||||
|
5,102, 41,194, 72,139, 68, 36,216, 65,129,251,255,255,255, 0, /* 0x fa0 */
|
||||||
|
102, 65,137, 17, 72,141, 52, 88,119, 26, 76, 57,231, 15,132,121, /* 0x fb0 */
|
||||||
|
6, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255, /* 0x fc0 */
|
||||||
|
199, 65, 9,194, 15,183,150,128, 1, 0, 0, 68,137,216,193,232, /* 0x fd0 */
|
||||||
|
11, 15,183,202, 15,175,193, 65, 57,194,115, 78, 65,137,195,184, /* 0x fe0 */
|
||||||
|
0, 8, 0, 0, 76,139, 76, 36,216, 41,200,139, 76, 36,196, 68, /* 0x ff0 */
|
||||||
|
137,116, 36,196,193,248, 5,141, 4, 2,139, 84, 36,192,137, 76, /* 0x1000 */
|
||||||
|
36,192,102,137,134,128, 1, 0, 0, 49,192,131,124, 36,200, 6, /* 0x1010 */
|
||||||
|
137, 84, 36,188, 15,159,192, 73,129,193,100, 6, 0, 0,141, 4, /* 0x1020 */
|
||||||
|
64,137, 68, 36,200,233, 84, 2, 0, 0, 65, 41,195, 65, 41,194, /* 0x1030 */
|
||||||
|
137,208,102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0, /* 0x1040 */
|
||||||
|
102,137,150,128, 1, 0, 0,119, 26, 76, 57,231, 15,132,218, 5, /* 0x1050 */
|
||||||
|
0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, /* 0x1060 */
|
||||||
|
65, 9,194, 15,183,150,152, 1, 0, 0, 68,137,216,193,232, 11, /* 0x1070 */
|
||||||
|
15,183,202, 15,175,193, 65, 57,194, 15,131,208, 0, 0, 0, 65, /* 0x1080 */
|
||||||
|
184, 0, 8, 0, 0, 65,137,195, 72,193,227, 5, 68,137,192, 41, /* 0x1090 */
|
||||||
|
200,193,248, 5,141, 4, 2,102,137,134,152, 1, 0, 0, 72,139, /* 0x10a0 */
|
||||||
|
68, 36,216, 72, 1,216, 65,129,251,255,255,255, 0, 72,141, 52, /* 0x10b0 */
|
||||||
|
104,119, 26, 76, 57,231, 15,132,112, 5, 0, 0, 15,182, 7, 65, /* 0x10c0 */
|
||||||
|
193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150, /* 0x10d0 */
|
||||||
|
224, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, /* 0x10e0 */
|
||||||
|
65, 57,194,115, 79, 65, 41,200, 65,137,195, 65,193,248, 5, 69, /* 0x10f0 */
|
||||||
|
133,255, 66,141, 4, 2,102,137,134,224, 1, 0, 0, 15,132, 41, /* 0x1100 */
|
||||||
|
5, 0, 0, 49,192,131,124, 36,200, 6, 72,139, 92, 36,232, 15, /* 0x1110 */
|
||||||
|
159,192,141, 68, 0, 9,137, 68, 36,200, 68,137,248, 68, 41,240, /* 0x1120 */
|
||||||
|
68, 15,182, 44, 3, 68,137,248, 65,255,199, 68,136, 44, 3,233, /* 0x1130 */
|
||||||
|
216, 4, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5, /* 0x1140 */
|
||||||
|
102, 41,194,102,137,150,224, 1, 0, 0,233, 17, 1, 0, 0, 65, /* 0x1150 */
|
||||||
|
41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 65,129, /* 0x1160 */
|
||||||
|
251,255,255,255, 0,102,137,150,152, 1, 0, 0,119, 26, 76, 57, /* 0x1170 */
|
||||||
|
231, 15,132,181, 4, 0, 0, 15,182, 7, 65,193,226, 8, 65,193, /* 0x1180 */
|
||||||
|
227, 8, 72,255,199, 65, 9,194, 15,183,150,176, 1, 0, 0, 68, /* 0x1190 */
|
||||||
|
137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 32, /* 0x11a0 */
|
||||||
|
65,137,195,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4, 2, /* 0x11b0 */
|
||||||
|
102,137,134,176, 1, 0, 0,139, 68, 36,196,233,152, 0, 0, 0, /* 0x11c0 */
|
||||||
|
65, 41,195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 65, /* 0x11d0 */
|
||||||
|
129,251,255,255,255, 0,102,137,150,176, 1, 0, 0,119, 26, 76, /* 0x11e0 */
|
||||||
|
57,231, 15,132, 68, 4, 0, 0, 15,182, 7, 65,193,226, 8, 65, /* 0x11f0 */
|
||||||
|
193,227, 8, 72,255,199, 65, 9,194, 15,183,150,200, 1, 0, 0, /* 0x1200 */
|
||||||
|
68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, /* 0x1210 */
|
||||||
|
29, 65,137,195,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4, /* 0x1220 */
|
||||||
|
2,102,137,134,200, 1, 0, 0,139, 68, 36,192,235, 34, 65, 41, /* 0x1230 */
|
||||||
|
195, 65, 41,194,137,208,102,193,232, 5,102, 41,194,139, 68, 36, /* 0x1240 */
|
||||||
|
188,102,137,150,200, 1, 0, 0,139, 84, 36,192,137, 84, 36,188, /* 0x1250 */
|
||||||
|
139, 76, 36,196,137, 76, 36,192, 68,137,116, 36,196, 65,137,198, /* 0x1260 */
|
||||||
|
49,192,131,124, 36,200, 6, 76,139, 76, 36,216, 15,159,192, 73, /* 0x1270 */
|
||||||
|
129,193,104, 10, 0, 0,141, 68, 64, 8,137, 68, 36,200, 65,129, /* 0x1280 */
|
||||||
|
251,255,255,255, 0,119, 26, 76, 57,231, 15,132,156, 3, 0, 0, /* 0x1290 */
|
||||||
|
15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9, /* 0x12a0 */
|
||||||
|
194, 65, 15,183, 17, 68,137,216,193,232, 11, 15,183,202, 15,175, /* 0x12b0 */
|
||||||
|
193, 65, 57,194,115, 39, 65,137,195,184, 0, 8, 0, 0, 69, 49, /* 0x12c0 */
|
||||||
|
237, 41,200,193,248, 5,141, 4, 2,102, 65,137, 1, 72, 99, 68, /* 0x12d0 */
|
||||||
|
36,184, 72,193,224, 4, 77,141, 68, 1, 4,235,120, 65, 41,195, /* 0x12e0 */
|
||||||
|
65, 41,194,137,208,102,193,232, 5,102, 41,194, 65,129,251,255, /* 0x12f0 */
|
||||||
|
255,255, 0,102, 65,137, 17,119, 26, 76, 57,231, 15,132, 42, 3, /* 0x1300 */
|
||||||
|
0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, /* 0x1310 */
|
||||||
|
65, 9,194, 65, 15,183, 81, 2, 68,137,216,193,232, 11, 15,183, /* 0x1320 */
|
||||||
|
202, 15,175,193, 65, 57,194,115, 52, 65,137,195,184, 0, 8, 0, /* 0x1330 */
|
||||||
|
0, 65,189, 8, 0, 0, 0, 41,200,193,248, 5,141, 4, 2,102, /* 0x1340 */
|
||||||
|
65,137, 65, 2, 72, 99, 68, 36,184, 72,193,224, 4, 77,141,132, /* 0x1350 */
|
||||||
|
1, 4, 1, 0, 0, 65,185, 3, 0, 0, 0,235, 39, 65, 41,195, /* 0x1360 */
|
||||||
|
65, 41,194,137,208,102,193,232, 5, 77,141,129, 4, 2, 0, 0, /* 0x1370 */
|
||||||
|
65,189, 16, 0, 0, 0,102, 41,194,102, 65,137, 81, 2, 65,185, /* 0x1380 */
|
||||||
|
8, 0, 0, 0, 68,137,203,189, 1, 0, 0, 0, 72, 99,197, 65, /* 0x1390 */
|
||||||
|
129,251,255,255,255, 0, 73,141, 52, 64,119, 26, 76, 57,231, 15, /* 0x13a0 */
|
||||||
|
132,135, 2, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, /* 0x13b0 */
|
||||||
|
72,255,199, 65, 9,194, 15,183, 14, 68,137,216,193,232, 11, 15, /* 0x13c0 */
|
||||||
|
183,209, 15,175,194, 65, 57,194,115, 23, 65,137,195,184, 0, 8, /* 0x13d0 */
|
||||||
|
0, 0, 1,237, 41,208,193,248, 5,141, 4, 1,102,137, 6,235, /* 0x13e0 */
|
||||||
|
22, 65, 41,195, 65, 41,194,137,200,102,193,232, 5,141,108, 45, /* 0x13f0 */
|
||||||
|
1,102, 41,193,102,137, 14,255,203,117,145,184, 1, 0, 0, 0, /* 0x1400 */
|
||||||
|
68,137,201,211,224, 41,197, 68, 1,237,131,124, 36,200, 3, 15, /* 0x1410 */
|
||||||
|
143,194, 1, 0, 0,131, 68, 36,200, 7,184, 3, 0, 0, 0,131, /* 0x1420 */
|
||||||
|
253, 4, 15, 76,197, 72,139, 92, 36,216, 65,184, 1, 0, 0, 0, /* 0x1430 */
|
||||||
|
72,152, 72,193,224, 7, 76,141,140, 3, 96, 3, 0, 0,187, 6, /* 0x1440 */
|
||||||
|
0, 0, 0, 73, 99,192, 65,129,251,255,255,255, 0, 73,141, 52, /* 0x1450 */
|
||||||
|
65,119, 26, 76, 57,231, 15,132,208, 1, 0, 0, 15,182, 7, 65, /* 0x1460 */
|
||||||
|
193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183, 22, /* 0x1470 */
|
||||||
|
68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, /* 0x1480 */
|
||||||
|
24, 65,137,195,184, 0, 8, 0, 0, 69, 1,192, 41,200,193,248, /* 0x1490 */
|
||||||
|
5,141, 4, 2,102,137, 6,235, 23, 65, 41,195, 65, 41,194,137, /* 0x14a0 */
|
||||||
|
208,102,193,232, 5, 71,141, 68, 0, 1,102, 41,194,102,137, 22, /* 0x14b0 */
|
||||||
|
255,203,117,143, 65,131,232, 64, 65,131,248, 3, 69,137,198, 15, /* 0x14c0 */
|
||||||
|
142, 13, 1, 0, 0, 65,131,230, 1, 68,137,192,209,248, 65,131, /* 0x14d0 */
|
||||||
|
206, 2, 65,131,248, 13,141,112,255,127, 35,137,241, 72,139, 92, /* 0x14e0 */
|
||||||
|
36,216, 73, 99,192, 65,211,230, 72, 1,192, 68,137,242, 72,141, /* 0x14f0 */
|
||||||
|
20, 83, 72, 41,194, 76,141,138, 94, 5, 0, 0,235, 81,141,112, /* 0x1500 */
|
||||||
|
251, 65,129,251,255,255,255, 0,119, 26, 76, 57,231, 15,132, 25, /* 0x1510 */
|
||||||
|
1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255, /* 0x1520 */
|
||||||
|
199, 65, 9,194, 65,209,235, 69, 1,246, 69, 57,218,114, 7, 69, /* 0x1530 */
|
||||||
|
41,218, 65,131,206, 1,255,206,117,199, 76,139, 76, 36,216, 65, /* 0x1540 */
|
||||||
|
193,230, 4,190, 4, 0, 0, 0, 73,129,193, 68, 6, 0, 0, 65, /* 0x1550 */
|
||||||
|
189, 1, 0, 0, 0,187, 1, 0, 0, 0, 72, 99,195, 65,129,251, /* 0x1560 */
|
||||||
|
255,255,255, 0, 77,141, 4, 65,119, 26, 76, 57,231, 15,132,185, /* 0x1570 */
|
||||||
|
0, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255, /* 0x1580 */
|
||||||
|
199, 65, 9,194, 65, 15,183, 16, 68,137,216,193,232, 11, 15,183, /* 0x1590 */
|
||||||
|
202, 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, 0, /* 0x15a0 */
|
||||||
|
0, 1,219, 41,200,193,248, 5,141, 4, 2,102, 65,137, 0,235, /* 0x15b0 */
|
||||||
|
26, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,141, 92, 27, /* 0x15c0 */
|
||||||
|
1, 69, 9,238,102, 41,194,102, 65,137, 16, 69, 1,237,255,206, /* 0x15d0 */
|
||||||
|
117,136, 65,255,198,116, 64,131,197, 2, 69, 57,254,119, 77, 72, /* 0x15e0 */
|
||||||
|
139, 84, 36,232, 68,137,248, 68, 41,240, 68, 15,182, 44, 2, 68, /* 0x15f0 */
|
||||||
|
137,248, 65,255,199,255,205, 68,136, 44, 2, 15,149,194, 49,192, /* 0x1600 */
|
||||||
|
68, 59,124, 36,228, 15,146,192,133,194,117,211, 68, 59,124, 36, /* 0x1610 */
|
||||||
|
228, 15,130, 69,247,255,255, 65,129,251,255,255,255, 0,119, 22, /* 0x1620 */
|
||||||
|
76, 57,231,184, 1, 0, 0, 0,116, 35,235, 7,184, 1, 0, 0, /* 0x1630 */
|
||||||
|
0,235, 26, 72,255,199,137,248, 43, 68, 36,248, 72,139, 76, 36, /* 0x1640 */
|
||||||
|
240, 72,139, 92, 36, 56,137, 1, 68,137, 59, 49,192, 91, 93, 65, /* 0x1650 */
|
||||||
|
92, 65, 93, 65, 94, 65, 95, 72,139,117,248, 72,139,125, 16,139, /* 0x1660 */
|
||||||
|
75, 4, 72, 1,206,139, 19, 72, 1,215,201, 89, 72,137,240, 72, /* 0x1670 */
|
||||||
|
41,200, 90, 72, 41,215, 89,137, 57, 91, 93,195,104, 30, 0, 0, /* 0x1680 */
|
||||||
|
0, 90,232, 0, 0, 0, 0, 80, 82, 79, 84, 95, 69, 88, 69, 67, /* 0x1690 */
|
||||||
|
124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108, /* 0x16a0 */
|
||||||
|
101,100, 46, 10, 0, 94,106, 2, 95,106, 1, 88, 15, 5,106,127, /* 0x16b0 */
|
||||||
|
95,106, 60, 88, 15, 5, 91,191, 0, 0, 0, 0,106, 7, 90,190, /* 0x16c0 */
|
||||||
|
0, 0, 0, 0,106, 50, 65, 90, 69, 41,192,106, 9, 88, 15, 5, /* 0x16d0 */
|
||||||
|
57,199, 15,133, 0, 0, 0, 0,104, 0, 0, 0, 0,104, 0, 0, /* 0x16e0 */
|
||||||
|
0, 0,190, 0, 0, 0, 0,104, 0, 0, 0, 0,185, 0, 0, 0, /* 0x16f0 */
|
||||||
|
0,104, 0, 0, 0, 0, 65, 87,137,250, 41,242, 1,213, 1,211, /* 0x1700 */
|
||||||
|
252,243, 72,165,151,137,222, 80,146,173, 80, 72,137,225,173,151, /* 0x1710 */
|
||||||
|
173, 68, 15,182,192,135,254,255,213, 89,195, 93, 68,139,125,247, /* 0x1720 */
|
||||||
|
65,129,239,200, 0, 0, 0,232,138,255,255,255, 0, 46,115,121, /* 0x1730 */
|
||||||
|
109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,104, /* 0x1740 */
|
||||||
|
115,116,114,116, 97, 98, 0, 46,114,101,108, 97, 69, 76, 70, 77, /* 0x1750 */
|
||||||
|
65, 73, 78, 88, 0, 78, 82, 86, 95, 67, 79, 77, 77, 79, 78, 0, /* 0x1760 */
|
||||||
|
46,114,101,108, 97, 78, 82, 86, 50, 69, 0, 46,114,101,108, 97, /* 0x1770 */
|
||||||
|
78, 82, 86, 50, 66, 0, 46,114,101,108, 97, 76, 90, 77, 65, 95, /* 0x1780 */
|
||||||
|
69, 76, 70, 48, 48, 0, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, /* 0x1790 */
|
||||||
|
0, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 0, 76, 90, 77, 65, /* 0x17a0 */
|
||||||
|
95, 68, 69, 67, 51, 48, 0, 46,114,101,108, 97, 69, 76, 70, 77, /* 0x17b0 */
|
||||||
|
65, 73, 78, 89, 0, 46,114,101,108, 97, 69, 76, 70, 77, 65, 73, /* 0x17c0 */
|
||||||
|
78, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17d0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17e0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17f0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1800 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, /* 0x1810 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1820 */
|
||||||
|
64, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, /* 0x1830 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1840 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 4, 0, 0, 0, /* 0x1850 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1860 */
|
||||||
|
232, 30, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, /* 0x1870 */
|
||||||
|
18, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1880 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, /* 0x1890 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x18a0 */
|
||||||
|
80, 0, 0, 0, 0, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, /* 0x18b0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x18c0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 1, 0, 0, 0, /* 0x18d0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x18e0 */
|
||||||
|
192, 0, 0, 0, 0, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 0, /* 0x18f0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1900 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 4, 0, 0, 0, /* 0x1910 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1920 */
|
||||||
|
0, 31, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x1930 */
|
||||||
|
18, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1940 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 1, 0, 0, 0, /* 0x1950 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1960 */
|
||||||
|
128, 1, 0, 0, 0, 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, /* 0x1970 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1980 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 4, 0, 0, 0, /* 0x1990 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x19a0 */
|
||||||
|
48, 31, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x19b0 */
|
||||||
|
18, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x19c0 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 1, 0, 0, 0, /* 0x19d0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x19e0 */
|
||||||
|
21, 2, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, /* 0x19f0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1a00 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 4, 0, 0, 0, /* 0x1a10 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a20 */
|
||||||
|
96, 31, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, /* 0x1a30 */
|
||||||
|
18, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1a40 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 1, 0, 0, 0, /* 0x1a50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a60 */
|
||||||
|
121, 2, 0, 0, 0, 0, 0, 0,247, 9, 0, 0, 0, 0, 0, 0, /* 0x1a70 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1a80 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,101, 0, 0, 0, 1, 0, 0, 0, /* 0x1a90 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1aa0 */
|
||||||
|
112, 12, 0, 0, 0, 0, 0, 0,247, 9, 0, 0, 0, 0, 0, 0, /* 0x1ab0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1ac0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,112, 0, 0, 0, 1, 0, 0, 0, /* 0x1ad0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ae0 */
|
||||||
|
103, 22, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, /* 0x1af0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1b00 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, /* 0x1b10 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1b20 */
|
||||||
|
123, 22, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, /* 0x1b30 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1b40 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,123, 0, 0, 0, 4, 0, 0, 0, /* 0x1b50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1b60 */
|
||||||
|
120, 31, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, /* 0x1b70 */
|
||||||
|
18, 0, 0, 0, 13, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1b80 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 1, 0, 0, 0, /* 0x1b90 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ba0 */
|
||||||
|
181, 22, 0, 0, 0, 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, /* 0x1bb0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1bc0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,137, 0, 0, 0, 4, 0, 0, 0, /* 0x1bd0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1be0 */
|
||||||
|
144, 31, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, /* 0x1bf0 */
|
||||||
|
18, 0, 0, 0, 15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1c00 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 3, 0, 0, 0, /* 0x1c10 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c20 */
|
||||||
|
60, 23, 0, 0, 0, 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, /* 0x1c30 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1c40 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, /* 0x1c50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c60 */
|
||||||
|
216, 28, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, /* 0x1c70 */
|
||||||
|
19, 0, 0, 0, 11, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* 0x1c80 */
|
||||||
|
24, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 3, 0, 0, 0, /* 0x1c90 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ca0 */
|
||||||
|
184, 30, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x1cb0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1cc0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1cd0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ce0 */
|
||||||
|
0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1cf0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, /* 0x1d00 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1d10 */
|
||||||
|
0, 0, 0, 0, 3, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1d20 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 15, 0, /* 0x1d30 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1d40 */
|
||||||
|
0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1d50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, /* 0x1d60 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1d70 */
|
||||||
|
0, 0, 0, 0, 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1d80 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 8, 0, /* 0x1d90 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1da0 */
|
||||||
|
0, 0, 0, 0, 3, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1db0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 11, 0, /* 0x1dc0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1dd0 */
|
||||||
|
1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1de0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 16, 0, 0, 0, /* 0x1df0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e00 */
|
||||||
|
13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e10 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 16, 0, 0, 0, /* 0x1e20 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e30 */
|
||||||
|
23, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e40 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 16, 0, 0, 0, /* 0x1e50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e60 */
|
||||||
|
33, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e70 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 16, 0, 0, 0, /* 0x1e80 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1e90 */
|
||||||
|
43, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ea0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 95,115,116, 97,114,116, 0, /* 0x1eb0 */
|
||||||
|
65, 68, 82, 77, 0, 76, 69, 78, 77, 0, 74, 77, 80, 85, 0, 65, /* 0x1ec0 */
|
||||||
|
68, 82, 85, 0, 65, 68, 82, 67, 0, 76, 69, 78, 85, 0, 67, 78, /* 0x1ed0 */
|
||||||
|
84, 67, 0, 65, 68, 82, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, /* 0x1ee0 */
|
||||||
|
2, 0, 0, 0, 4, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, /* 0x1ef0 */
|
||||||
|
179, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, /* 0x1f00 */
|
||||||
|
38, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, /* 0x1f10 */
|
||||||
|
2, 0, 0, 0, 3, 0, 0, 0,252,255,255,255,255,255,255,255, /* 0x1f20 */
|
||||||
|
143, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, /* 0x1f30 */
|
||||||
|
38, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, /* 0x1f40 */
|
||||||
|
2, 0, 0, 0, 3, 0, 0, 0,252,255,255,255,255,255,255,255, /* 0x1f50 */
|
||||||
|
6, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, /* 0x1f60 */
|
||||||
|
16, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, /* 0x1f70 */
|
||||||
|
2, 0, 0, 0, 4, 0, 0, 0,252,255,255,255,255,255,255,255, /* 0x1f80 */
|
||||||
|
19, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0, 0, 0, /* 0x1f90 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, /* 0x1fa0 */
|
||||||
|
10, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1fb0 */
|
||||||
|
52, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, /* 0x1fc0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, /* 0x1fd0 */
|
||||||
|
10, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1fe0 */
|
||||||
|
62, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 16, 0, 0, 0, /* 0x1ff0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, /* 0x2000 */
|
||||||
|
10, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x2010 */
|
||||||
|
72, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 18, 0, 0, 0, /* 0x2020 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, /* 0x2030 */
|
||||||
|
10, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x2040 */
|
||||||
|
47, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, /* 0x2050 */
|
||||||
|
13, 0, 0, 0, 0, 0, 0, 0, 10,116,109,112, 47, 97,109,100, /* 0x2060 */
|
||||||
|
54, 52, 45,108,105,110,117,120, 46,101,108,102, 45,101,110,116, /* 0x2070 */
|
||||||
|
114,121, 46, 98,105,110, 58, 32, 32, 32, 32, 32,102,105,108,101, /* 0x2080 */
|
||||||
|
32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,120, 56, /* 0x2090 */
|
||||||
|
54, 45, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, /* 0x20a0 */
|
||||||
|
73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x20b0 */
|
||||||
|
32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, /* 0x20c0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, /* 0x20d0 */
|
||||||
|
65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x20e0 */
|
||||||
|
70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, /* 0x20f0 */
|
||||||
|
70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, /* 0x2100 */
|
||||||
|
78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48,100, /* 0x2110 */
|
||||||
|
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2120 */
|
||||||
|
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2130 */
|
||||||
|
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, /* 0x2140 */
|
||||||
|
50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x2150 */
|
||||||
|
82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x2160 */
|
||||||
|
32, 32, 49, 32, 78, 82, 86, 95, 67, 79, 77, 77, 79, 78, 32, 32, /* 0x2170 */
|
||||||
|
32, 32, 48, 48, 48, 48, 48, 48, 54, 98, 32, 32, 48, 48, 48, 48, /* 0x2180 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x2190 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x21a0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42, 42, 51, 32, 32, /* 0x21b0 */
|
||||||
|
67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, /* 0x21c0 */
|
||||||
|
76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, /* 0x21d0 */
|
||||||
|
32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 98, 99, 32, 32, 48, /* 0x21e0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x21f0 */
|
||||||
|
32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2200 */
|
||||||
|
48, 32, 32, 48, 48, 48, 48, 48, 48, 99, 48, 32, 32, 50, 42, 42, /* 0x2210 */
|
||||||
|
51, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, /* 0x2220 */
|
||||||
|
79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, /* 0x2230 */
|
||||||
|
32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, /* 0x2240 */
|
||||||
|
48, 48, 48, 48, 48, 57, 53, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x2250 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x2260 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x2270 */
|
||||||
|
48, 48, 49, 56, 48, 32, 32, 50, 42, 42, 51, 32, 32, 67, 79, 78, /* 0x2280 */
|
||||||
|
84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, /* 0x2290 */
|
||||||
|
65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 76, 90, 77, 65, 95, /* 0x22a0 */
|
||||||
|
69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 54, /* 0x22b0 */
|
||||||
|
52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x22c0 */
|
||||||
|
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x22d0 */
|
||||||
|
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 49, 53, 32, /* 0x22e0 */
|
||||||
|
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x22f0 */
|
||||||
|
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x2300 */
|
||||||
|
10, 32, 32, 53, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, /* 0x2310 */
|
||||||
|
32, 32, 32, 48, 48, 48, 48, 48, 57,102, 55, 32, 32, 48, 48, 48, /* 0x2320 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x2330 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2340 */
|
||||||
|
32, 48, 48, 48, 48, 48, 50, 55, 57, 32, 32, 50, 42, 42, 48, 32, /* 0x2350 */
|
||||||
|
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, /* 0x2360 */
|
||||||
|
78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2370 */
|
||||||
|
50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57,102, 55, 32, 32, /* 0x2380 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2390 */
|
||||||
|
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x23a0 */
|
||||||
|
48, 48, 32, 32, 48, 48, 48, 48, 48, 99, 55, 48, 32, 32, 50, 42, /* 0x23b0 */
|
||||||
|
42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x23c0 */
|
||||||
|
65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, /* 0x23d0 */
|
||||||
|
68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, /* 0x23e0 */
|
||||||
|
52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x23f0 */
|
||||||
|
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2400 */
|
||||||
|
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 54, 54, 55, 32, /* 0x2410 */
|
||||||
|
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x2420 */
|
||||||
|
32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 69, 76, /* 0x2430 */
|
||||||
|
70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, /* 0x2440 */
|
||||||
|
48, 48, 51, 97, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2450 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2460 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 54, /* 0x2470 */
|
||||||
|
55, 98, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, /* 0x2480 */
|
||||||
|
84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, /* 0x2490 */
|
||||||
|
78, 76, 89, 10, 32, 32, 57, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x24a0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 55, 32, 32, /* 0x24b0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x24c0 */
|
||||||
|
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x24d0 */
|
||||||
|
48, 48, 32, 32, 48, 48, 48, 48, 49, 54, 98, 53, 32, 32, 50, 42, /* 0x24e0 */
|
||||||
|
42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x24f0 */
|
||||||
|
76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, /* 0x2500 */
|
||||||
|
77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, /* 0x2510 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x2520 */
|
||||||
|
32, 32,100, 32, 32, 78, 82, 86, 95, 67, 79, 77, 77, 79, 78, 9, /* 0x2530 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2540 */
|
||||||
|
32, 78, 82, 86, 95, 67, 79, 77, 77, 79, 78, 10, 48, 48, 48, 48, /* 0x2550 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x2560 */
|
||||||
|
32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, /* 0x2570 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2580 */
|
||||||
|
32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, /* 0x2590 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x25a0 */
|
||||||
|
32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, /* 0x25b0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, /* 0x25c0 */
|
||||||
|
76, 70, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x25d0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x25e0 */
|
||||||
|
32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, /* 0x25f0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, /* 0x2600 */
|
||||||
|
73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2610 */
|
||||||
|
48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, /* 0x2620 */
|
||||||
|
77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2630 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, /* 0x2640 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2650 */
|
||||||
|
32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, /* 0x2660 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2670 */
|
||||||
|
78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2680 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, /* 0x2690 */
|
||||||
|
82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x26a0 */
|
||||||
|
48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, /* 0x26b0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x26c0 */
|
||||||
|
32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, /* 0x26d0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x26e0 */
|
||||||
|
32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, /* 0x26f0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x2700 */
|
||||||
|
32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, /* 0x2710 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2720 */
|
||||||
|
32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, /* 0x2730 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x2740 */
|
||||||
|
32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, /* 0x2750 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2760 */
|
||||||
|
32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, /* 0x2770 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, /* 0x2780 */
|
||||||
|
32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, /* 0x2790 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95, /* 0x27a0 */
|
||||||
|
115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x27b0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, /* 0x27c0 */
|
||||||
|
85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x27d0 */
|
||||||
|
48, 48, 48, 48, 48, 32, 65, 68, 82, 77, 10, 48, 48, 48, 48, 48, /* 0x27e0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, /* 0x27f0 */
|
||||||
|
32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, /* 0x2800 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 69, 78, 77, 10, /* 0x2810 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2820 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, /* 0x2830 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2840 */
|
||||||
|
74, 77, 80, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2850 */
|
||||||
|
48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, /* 0x2860 */
|
||||||
|
78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2870 */
|
||||||
|
48, 48, 48, 48, 32, 65, 68, 82, 85, 10, 48, 48, 48, 48, 48, 48, /* 0x2880 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, /* 0x2890 */
|
||||||
|
32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x28a0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 68, 82, 67, 10, 48, /* 0x28b0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x28c0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, /* 0x28d0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, /* 0x28e0 */
|
||||||
|
69, 78, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x28f0 */
|
||||||
|
48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, /* 0x2900 */
|
||||||
|
68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2910 */
|
||||||
|
48, 48, 48, 32, 67, 78, 84, 67, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2920 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, /* 0x2930 */
|
||||||
|
32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2940 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 68, 82, 88, 10, 10, 10, /* 0x2950 */
|
||||||
|
82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, /* 0x2960 */
|
||||||
|
68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x2970 */
|
||||||
|
93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, /* 0x2980 */
|
||||||
|
32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2990 */
|
||||||
|
32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 32, 10, 48, 48, 48, /* 0x29a0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 32, 82, 95, /* 0x29b0 */
|
||||||
|
88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, /* 0x29c0 */
|
||||||
|
69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, 48, /* 0x29d0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 55, 50, 10, 10, 10, 82, 69, /* 0x29e0 */
|
||||||
|
76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, /* 0x29f0 */
|
||||||
|
32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, 79, 70, /* 0x2a00 */
|
||||||
|
70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, /* 0x2a10 */
|
||||||
|
89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2a20 */
|
||||||
|
32, 86, 65, 76, 85, 69, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2a30 */
|
||||||
|
48, 48, 48, 48, 48, 48, 98, 51, 32, 82, 95, 88, 56, 54, 95, 54, /* 0x2a40 */
|
||||||
|
52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 67, /* 0x2a50 */
|
||||||
|
79, 77, 77, 79, 78, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2a60 */
|
||||||
|
48, 48, 48, 48, 48, 48, 50, 54, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2a70 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 54, 48, 32, 82, 95, 88, 56, 54, 95, /* 0x2a80 */
|
||||||
|
54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x2a90 */
|
||||||
|
65, 73, 78, 89, 43, 48,120,102,102,102,102,102,102,102,102,102, /* 0x2aa0 */
|
||||||
|
102,102,102,102,102,102, 99, 10, 10, 10, 82, 69, 76, 79, 67, 65, /* 0x2ab0 */
|
||||||
|
84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, /* 0x2ac0 */
|
||||||
|
32, 91, 78, 82, 86, 50, 66, 93, 58, 10, 79, 70, 70, 83, 69, 84, /* 0x2ad0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, /* 0x2ae0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, /* 0x2af0 */
|
||||||
|
85, 69, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2b00 */
|
||||||
|
48, 48, 56,102, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, /* 0x2b10 */
|
||||||
|
51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 67, 79, 77, 77, 79, /* 0x2b20 */
|
||||||
|
78, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2b30 */
|
||||||
|
48, 48, 50, 54, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2b40 */
|
||||||
|
48, 48, 48, 53, 55, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, /* 0x2b50 */
|
||||||
|
67, 51, 50, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x2b60 */
|
||||||
|
43, 48,120,102,102,102,102,102,102,102,102,102,102,102,102,102, /* 0x2b70 */
|
||||||
|
102,102, 99, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x2b80 */
|
||||||
|
32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, /* 0x2b90 */
|
||||||
|
77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, /* 0x2ba0 */
|
||||||
|
84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, /* 0x2bb0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, /* 0x2bc0 */
|
||||||
|
76, 85, 69, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2bd0 */
|
||||||
|
48, 48, 48, 48, 54, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, /* 0x2be0 */
|
||||||
|
67, 51, 50, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2bf0 */
|
||||||
|
51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2c00 */
|
||||||
|
48, 48, 48, 49, 48, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, /* 0x2c10 */
|
||||||
|
79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, /* 0x2c20 */
|
||||||
|
69, 76, 70, 77, 65, 73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69, /* 0x2c30 */
|
||||||
|
84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, /* 0x2c40 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, /* 0x2c50 */
|
||||||
|
76, 85, 69, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2c60 */
|
||||||
|
48, 48, 48, 49, 56, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, /* 0x2c70 */
|
||||||
|
67, 51, 50, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x2c80 */
|
||||||
|
43, 48,120,102,102,102,102,102,102,102,102,102,102,102,102,102, /* 0x2c90 */
|
||||||
|
102,102, 99, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x2ca0 */
|
||||||
|
32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, /* 0x2cb0 */
|
||||||
|
70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, /* 0x2cc0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x2cd0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x2ce0 */
|
||||||
|
69, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2cf0 */
|
||||||
|
48, 49, 51, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, /* 0x2d00 */
|
||||||
|
32, 32, 32, 32, 32, 32, 65, 68, 82, 77, 10, 48, 48, 48, 48, 48, /* 0x2d10 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 98, 32, 82, 95, 88, 56, /* 0x2d20 */
|
||||||
|
54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 76, 69, /* 0x2d30 */
|
||||||
|
78, 77, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2d40 */
|
||||||
|
48, 51, 52, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, /* 0x2d50 */
|
||||||
|
32, 32, 32, 32, 32, 32, 74, 77, 80, 85, 10, 48, 48, 48, 48, 48, /* 0x2d60 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 57, 32, 82, 95, 88, 56, /* 0x2d70 */
|
||||||
|
54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 65, 68, /* 0x2d80 */
|
||||||
|
82, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2d90 */
|
||||||
|
48, 51,101, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, /* 0x2da0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 65, 68, 82, 67, 10, 48, 48, 48, 48, 48, /* 0x2db0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 51, 32, 82, 95, 88, 56, /* 0x2dc0 */
|
||||||
|
54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 76, 69, /* 0x2dd0 */
|
||||||
|
78, 85, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2de0 */
|
||||||
|
48, 52, 56, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, /* 0x2df0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 67, 78, 84, 67, 10, 48, 48, 48, 48, 48, /* 0x2e00 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 48, 48, 52,100, 32, 82, 95, 88, 56, /* 0x2e10 */
|
||||||
|
54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 65, 68, /* 0x2e20 */
|
||||||
|
82, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2e30 */
|
||||||
|
48, 50,102, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, /* 0x2e40 */
|
||||||
|
50, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 43, 48, /* 0x2e50 */
|
||||||
|
120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2e60 */
|
||||||
|
100, 10, 10, 10 /* 0x2e70 */
|
||||||
};
|
};
|
||||||
|
|||||||
+3303
-2863
File diff suppressed because it is too large
Load Diff
+2154
-898
File diff suppressed because it is too large
Load Diff
+2214
-958
File diff suppressed because it is too large
Load Diff
+2261
-1005
File diff suppressed because it is too large
Load Diff
+3328
-2888
File diff suppressed because it is too large
Load Diff
+3382
-686
File diff suppressed because it is too large
Load Diff
+4068
-765
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
/* i386-linux.elf.interp-fold.h -- created from i386-linux.elf.interp-fold.bin, 1531 (0x5fb) bytes
|
/* i386-linux.elf.interp-fold.h -- created from i386-linux.elf.interp-fold.bin, 1519 (0x5ef) bytes
|
||||||
|
|
||||||
This file is part of the UPX executable compressor.
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
@@ -27,105 +27,104 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LINUX_I386PTI_FOLD_SIZE 1531
|
#define LINUX_I386PTI_FOLD_SIZE 1519
|
||||||
#define LINUX_I386PTI_FOLD_ADLER32 0x54fe990e
|
#define LINUX_I386PTI_FOLD_ADLER32 0xe82498de
|
||||||
#define LINUX_I386PTI_FOLD_CRC32 0xa290f522
|
#define LINUX_I386PTI_FOLD_CRC32 0xd7e223de
|
||||||
|
|
||||||
unsigned char linux_i386pti_fold[1531] = {
|
unsigned char linux_i386pti_fold[1519] = {
|
||||||
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
|
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
|
||||||
2, 0, 3, 0, 1, 0, 0, 0,128, 0, 1, 0, 52, 0, 0, 0, /* 0x 10 */
|
2, 0, 3, 0, 1, 0, 0, 0,116, 0, 1, 0, 52, 0, 0, 0, /* 0x 10 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
|
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
|
||||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x 30 */
|
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x 30 */
|
||||||
0, 0, 1, 0,251, 5, 0, 0,252, 5, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
0, 0, 1, 0,239, 5, 0, 0,240, 5, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
||||||
0, 16, 0, 0, 1, 0, 0, 0,251, 5, 0, 0, 0, 0, 0, 0, /* 0x 50 */
|
0, 16, 0, 0, 1, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, /* 0x 50 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
|
||||||
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
0, 16, 0, 0, 93, 89, 88,141,124,132, 4, 80, 41,192,175,117, /* 0x 70 */
|
||||||
93, 89, 88,141,124,132, 4, 80, 41,192,175,117,253,175,137,254, /* 0x 80 */
|
253,175,137,254,139, 6,131,248, 3,116, 8,131,198, 8,131,248, /* 0x 80 */
|
||||||
139, 6,131,248, 3,116, 8,131,198, 8,131,248, 0,117,241,139, /* 0x 90 */
|
0,117,241,139, 94, 4, 83,129,236, 0, 10, 0, 0,137,226, 81, /* 0x 90 */
|
||||||
94, 4, 83,129,236, 0, 10, 0, 0,137,226, 81,141, 67, 88,139, /* 0x a0 */
|
141, 67, 88,139,115, 24, 41,198,139, 24,139, 72, 4,131,193, 12, /* 0x a0 */
|
||||||
115, 24, 41,198,139, 24,139, 72, 4,131,193, 12, 96,232, 62, 4, /* 0x b0 */
|
96,232, 62, 4, 0, 0,129,196, 36, 10, 0, 0, 91, 80,139, 75, /* 0x b0 */
|
||||||
0, 0,129,196, 36, 10, 0, 0, 91, 80,139, 75, 20,139, 91, 8, /* 0x c0 */
|
20,139, 91, 8,184, 91, 0, 0, 0,205,128, 41,192, 41,201, 41, /* 0x c0 */
|
||||||
184, 91, 0, 0, 0,205,128, 41,192, 41,201, 41,210, 41,219, 41, /* 0x d0 */
|
210, 41,219, 41,237, 41,246, 41,255,195, 83,141, 92, 36, 8,106, /* 0x d0 */
|
||||||
237, 41,246, 41,255,195, 83,141, 92, 36, 8,106, 90, 88,205,128, /* 0x e0 */
|
90, 88,205,128, 91,195, 0, 0, 87, 86,137,206, 83,137,195, 57, /* 0x e0 */
|
||||||
91,195, 0, 0, 87, 86,137,206, 83,137,195, 57, 8,139,120, 4, /* 0x f0 */
|
8,139,120, 4,115, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x f0 */
|
||||||
115, 10,106,127, 91,106, 1, 88,205,128,235,254,133,201,116, 8, /* 0x 100 */
|
133,201,116, 8,138, 7, 71,136, 2, 66,226,248, 1,115, 4, 41, /* 0x 100 */
|
||||||
138, 7, 71,136, 2, 66,226,248, 1,115, 4, 41, 51, 91, 94, 95, /* 0x 110 */
|
51, 91, 94, 95,195, 85,137,229, 87, 86,137,198, 83,137,211,131, /* 0x 110 */
|
||||||
195, 85,137,229, 87, 86,137,198, 83,137,211,131,236, 20,139,125, /* 0x 120 */
|
236, 20,139,125, 12,131, 58, 0, 15,132,185, 0, 0, 0,141, 85, /* 0x 120 */
|
||||||
12,131, 58, 0, 15,132,185, 0, 0, 0,141, 85,228,185, 12, 0, /* 0x 130 */
|
228,185, 12, 0, 0, 0,137,240,232,171,255,255,255,139, 69,228, /* 0x 130 */
|
||||||
0, 0,137,240,232,171,255,255,255,139, 69,228,139, 77,232,133, /* 0x 140 */
|
139, 77,232,133,192,117, 19,129,249, 85, 80, 88, 33,117, 15,131, /* 0x 140 */
|
||||||
192,117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, 15,132, /* 0x 150 */
|
62, 0, 15,132,143, 0, 0, 0,235, 4,133,201,117, 10,106,127, /* 0x 150 */
|
||||||
143, 0, 0, 0,235, 4,133,201,117, 10,106,127, 91,106, 1, 88, /* 0x 160 */
|
91,106, 1, 88,205,128,235,254, 57,193,119,242, 59, 3,119,238, /* 0x 160 */
|
||||||
205,128,235,254, 57,193,119,242, 59, 3,119,238, 57,193,115, 86, /* 0x 170 */
|
57,193,115, 86,137, 69,224, 15,182, 69,236, 80,255, 85, 8, 90, /* 0x 170 */
|
||||||
137, 69,224, 15,182, 69,236, 80,255, 85, 8, 90,141, 85,224,255, /* 0x 180 */
|
141, 85,224,255,117,236, 82,255,115, 4,255,117,232,255,118, 4, /* 0x 180 */
|
||||||
117,236, 82,255,115, 4,255,117,232,255,118, 4,255, 16,131,196, /* 0x 190 */
|
255, 16,131,196, 20,133,192,117,197,139, 69,228, 57, 69,224,117, /* 0x 190 */
|
||||||
20,133,192,117,197,139, 69,228, 57, 69,224,117,189,138, 69,237, /* 0x 1a0 */
|
189,138, 69,237,132,192,116, 24, 15,182,192, 80,255,215, 15,182, /* 0x 1a0 */
|
||||||
132,192,116, 24, 15,182,192, 80,255,215, 15,182, 85,238,137, 20, /* 0x 1b0 */
|
85,238,137, 20, 36,255,117,224,255,115, 4,255, 16,131,196, 12, /* 0x 1b0 */
|
||||||
36,255,117,224,255,115, 4,255, 16,131,196, 12,139, 69,232, 1, /* 0x 1c0 */
|
139, 69,232, 1, 70, 4, 41, 6,235, 10,139, 83, 4,137,240,232, /* 0x 1c0 */
|
||||||
70, 4, 41, 6,235, 10,139, 83, 4,137,240,232, 20,255,255,255, /* 0x 1d0 */
|
20,255,255,255,139, 85,228,139, 3, 1, 83, 4, 41,208,133,192, /* 0x 1d0 */
|
||||||
139, 85,228,139, 3, 1, 83, 4, 41,208,133,192,137, 3,233, 65, /* 0x 1e0 */
|
137, 3,233, 65,255,255,255,141,101,244, 91, 94, 95,201,195,133, /* 0x 1e0 */
|
||||||
255,255,255,141,101,244, 91, 94, 95,201,195,133,210,137,209,116, /* 0x 1f0 */
|
210,137,209,116, 6,198, 0, 0, 64,226,250,195,133,192, 83,137, /* 0x 1f0 */
|
||||||
6,198, 0, 0, 64,226,250,195,133,192, 83,137,211,116, 29,168, /* 0x 200 */
|
211,116, 29,168, 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11, /* 0x 200 */
|
||||||
1,117, 25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7, /* 0x 210 */
|
133,219,116, 7,137, 24,137, 72, 4,235, 5,131,192, 8,235,231, /* 0x 210 */
|
||||||
137, 24,137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137, /* 0x 220 */
|
91,195, 85,137,229, 87, 86, 83,131,236, 84,137, 69,228,139, 69, /* 0x 220 */
|
||||||
229, 87, 86, 83,131,236, 84,137, 69,228,139, 69, 8,137, 85,224, /* 0x 230 */
|
8,137, 85,224,139, 77, 16,137, 69,220, 3, 64, 28,139, 93,220, /* 0x 230 */
|
||||||
139, 77, 16,137, 69,220, 3, 64, 28,139, 93,220,137, 77,212,139, /* 0x 240 */
|
137, 77,212,139, 85, 12,137, 69,208, 49,192,102,131,123, 16, 3, /* 0x 240 */
|
||||||
85, 12,137, 69,208, 49,192,102,131,123, 16, 3,137, 85,216, 15, /* 0x 250 */
|
137, 85,216, 15,183, 75, 44,139, 85,208, 15,149,192,131,206,255, /* 0x 250 */
|
||||||
183, 75, 44,139, 85,208, 15,149,192,131,206,255,193,224, 4,131, /* 0x 260 */
|
193,224, 4,131,192, 34, 49,219,137, 69,184,137,200, 49,255, 72, /* 0x 260 */
|
||||||
192, 34, 49,219,137, 69,184,137,200, 49,255, 72,120, 31,131, 58, /* 0x 270 */
|
120, 31,131, 58, 1,117, 21,139, 66, 8, 57,240,115, 5,137,198, /* 0x 270 */
|
||||||
1,117, 21,139, 66, 8, 57,240,115, 5,137,198,139,122, 16, 3, /* 0x 280 */
|
139,122, 16, 3, 66, 20, 57,195,115, 2,137,195,131,194, 32,226, /* 0x 280 */
|
||||||
66, 20, 57,195,115, 2,137,195,131,194, 32,226,225,137,240,129, /* 0x 290 */
|
225,137,240,129,230, 0,240,255,255,106, 0, 41,243,106, 0, 37, /* 0x 290 */
|
||||||
230, 0,240,255,255,106, 0, 41,243,106, 0, 37,255, 15, 0, 0, /* 0x 2a0 */
|
255, 15, 0, 0,137,117,188,141,179,255, 15, 0, 0,255,117,184, /* 0x 2a0 */
|
||||||
137,117,188,141,179,255, 15, 0, 0,255,117,184,129,230, 0,240, /* 0x 2b0 */
|
129,230, 0,240,255,255,106, 7, 86,255,117,188,141,188, 7,255, /* 0x 2b0 */
|
||||||
255,255,106, 7, 86,255,117,188,141,188, 7,255, 15, 0, 0,232, /* 0x 2c0 */
|
15, 0, 0,232, 18,254,255,255,129,231, 0,240,255,255,137,194, /* 0x 2c0 */
|
||||||
18,254,255,255,129,231, 0,240,255,255,137,194,137,195, 1,242, /* 0x 2d0 */
|
137,195, 1,242, 41,254,131,196, 24,137, 69,172,137, 85,240, 1, /* 0x 2d0 */
|
||||||
41,254,131,196, 24,137, 69,172,137, 85,240, 1,251,137,241,106, /* 0x 2e0 */
|
251,137,241,106, 91, 88,205,128,139, 69,220,199, 69,196, 0, 0, /* 0x 2e0 */
|
||||||
91, 88,205,128,139, 69,220,199, 69,196, 0, 0, 0, 0,139, 93, /* 0x 2f0 */
|
0, 0,139, 93,172, 43, 93,188,102,131,120, 44, 0,137, 93,204, /* 0x 2f0 */
|
||||||
172, 43, 93,188,102,131,120, 44, 0,137, 93,204, 15,132,180, 1, /* 0x 300 */
|
15,132,180, 1, 0, 0,139, 85,208,139, 2,131,248, 6,117, 24, /* 0x 300 */
|
||||||
0, 0,139, 85,208,139, 2,131,248, 6,117, 24,139, 77,204, 3, /* 0x 310 */
|
139, 77,204, 3, 74, 8,186, 3, 0, 0, 0,139, 69,212,232,217, /* 0x 310 */
|
||||||
74, 8,186, 3, 0, 0, 0,139, 69,212,232,217,254,255,255,233, /* 0x 320 */
|
254,255,255,233,123, 1, 0, 0, 72, 15,133,116, 1, 0, 0,139, /* 0x 320 */
|
||||||
123, 1, 0, 0, 72, 15,133,116, 1, 0, 0,139, 93,208,199, 69, /* 0x 330 */
|
93,208,199, 69,192, 64, 98, 81,115,139, 75, 24,139, 67, 8,131, /* 0x 330 */
|
||||||
192, 64, 98, 81,115,139, 75, 24,139, 67, 8,131,225, 7,139, 83, /* 0x 340 */
|
225, 7,139, 83, 16,193,225, 2,137, 69,236,211,109,192,137,193, /* 0x 340 */
|
||||||
16,193,225, 2,137, 69,236,211,109,192,137,193, 3, 75, 20,137, /* 0x 350 */
|
3, 75, 20,137,195,129,227,255, 15, 0, 0,137, 85,232,141, 60, /* 0x 350 */
|
||||||
195,129,227,255, 15, 0, 0,137, 85,232,141, 60, 26,139, 85,204, /* 0x 360 */
|
26,139, 85,204, 41,216,131,101,192, 7, 1,209,141, 52, 16,137, /* 0x 360 */
|
||||||
41,216,131,101,192, 7, 1,209,141, 52, 16,137, 77,176,139, 77, /* 0x 370 */
|
77,176,139, 77,208,139, 65, 4, 41,216,131,125,216, 1, 80,255, /* 0x 370 */
|
||||||
208,139, 65, 4, 41,216,131,125,216, 1, 80,255,117,228, 25,192, /* 0x 380 */
|
117,228, 25,192,131,224,224,131,192, 50,131,125,216, 0, 80,137, /* 0x 380 */
|
||||||
131,224,224,131,192, 50,131,125,216, 0, 80,137,248,106, 3,116, /* 0x 390 */
|
248,106, 3,116, 3,141, 71, 3, 80, 86,232, 59,253,255,255,131, /* 0x 390 */
|
||||||
3,141, 71, 3, 80, 86,232, 59,253,255,255,131,196, 24, 57,198, /* 0x 3a0 */
|
196, 24, 57,198, 15,133,170, 0, 0, 0,131,125,216, 0,116, 19, /* 0x 3a0 */
|
||||||
15,133,170, 0, 0, 0,131,125,216, 0,116, 19,255,117,224,255, /* 0x 3b0 */
|
255,117,224,255,117,228,139, 69,216,141, 85,232,232, 84,253,255, /* 0x 3b0 */
|
||||||
117,228,139, 69,216,141, 85,232,232, 84,253,255,255, 89, 88,137, /* 0x 3c0 */
|
255, 89, 88,137,218,137,251,137,240,247,219,232, 31,254,255,255, /* 0x 3c0 */
|
||||||
218,137,251,137,240,247,219,232, 31,254,255,255,129,227,255, 15, /* 0x 3d0 */
|
129,227,255, 15, 0, 0,141, 4, 62,137,218,137, 93,180,232, 12, /* 0x 3d0 */
|
||||||
0, 0,141, 4, 62,137,218,137, 93,180,232, 12,254,255,255,131, /* 0x 3e0 */
|
254,255,255,131,125,216, 0,116, 91,139, 69,208,131, 56, 1,117, /* 0x 3e0 */
|
||||||
125,216, 0,116, 91,139, 69,208,131, 56, 1,117, 83,246, 64, 24, /* 0x 3f0 */
|
83,246, 64, 24, 1,116, 77,139, 93,208,137,194,139, 64, 20, 59, /* 0x 3f0 */
|
||||||
1,116, 77,139, 93,208,137,194,139, 64, 20, 59, 67, 16,139, 82, /* 0x 400 */
|
67, 16,139, 82, 8,141, 12, 16,117, 14,137,200,247,216, 37,255, /* 0x 400 */
|
||||||
8,141, 12, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131, /* 0x 410 */
|
15, 0, 0,131,248, 3,119, 12,139, 69,208,141, 74, 12,131,120, /* 0x 410 */
|
||||||
248, 3,119, 12,139, 69,208,141, 74, 12,131,120, 4, 0,117, 15, /* 0x 420 */
|
4, 0,117, 15,139, 1, 61,205,128, 97,195,116, 6,199, 1,205, /* 0x 420 */
|
||||||
139, 1, 61,205,128, 97,195,116, 6,199, 1,205,128, 97,195,133, /* 0x 430 */
|
128, 97,195,133,201,116, 13,139, 69,212, 49,210,131,224,254,232, /* 0x 430 */
|
||||||
201,116, 13,139, 69,212, 49,210,131,224,254,232,184,253,255,255, /* 0x 440 */
|
184,253,255,255,137,243,137,249,139, 85,192,106,125, 88,205,128, /* 0x 440 */
|
||||||
137,243,137,249,139, 85,192,106,125, 88,205,128,133,192,116, 10, /* 0x 450 */
|
133,192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, 85, /* 0x 450 */
|
||||||
106,127, 91,106, 1, 88,205,128,235,254,139, 85,180,141, 4, 23, /* 0x 460 */
|
180,141, 4, 23,141, 28, 6, 59, 93,176,115, 30,106, 0,106, 0, /* 0x 460 */
|
||||||
141, 28, 6, 59, 93,176,115, 30,106, 0,106, 0,106, 50,255,117, /* 0x 470 */
|
106, 50,255,117,192, 41, 93,176,255,117,176, 83,232, 89,252,255, /* 0x 470 */
|
||||||
192, 41, 93,176,255,117,176, 83,232, 89,252,255,255,131,196, 24, /* 0x 480 */
|
255,131,196, 24, 57,195,116, 27,235,202,131,125,216, 0,116, 19, /* 0x 480 */
|
||||||
57,195,116, 27,235,202,131,125,216, 0,116, 19,141, 79, 3,129, /* 0x 490 */
|
141, 79, 3,129,225,255, 15, 0, 0,131,249, 3,119, 5,106, 91, /* 0x 490 */
|
||||||
225,255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88,205,128,139, /* 0x 4a0 */
|
88,205,128,139, 77,220,255, 69,196, 15,183, 65, 44,131, 69,208, /* 0x 4a0 */
|
||||||
77,220,255, 69,196, 15,183, 65, 44,131, 69,208, 32, 57, 69,196, /* 0x 4b0 */
|
32, 57, 69,196, 15,140, 76,254,255,255,131,125,216, 0,117, 14, /* 0x 4b0 */
|
||||||
15,140, 76,254,255,255,131,125,216, 0,117, 14,139, 93,228,106, /* 0x 4c0 */
|
139, 93,228,106, 6, 88,205,128,133,192,116, 20,235,134,139, 69, /* 0x 4c0 */
|
||||||
6, 88,205,128,133,192,116, 20,235,134,139, 69,220,102,131,120, /* 0x 4d0 */
|
220,102,131,120, 16, 3,116, 8,139, 93,240,106, 45, 88,205,128, /* 0x 4d0 */
|
||||||
16, 3,116, 8,139, 93,240,106, 45, 88,205,128,139, 85,220,139, /* 0x 4e0 */
|
139, 85,220,139, 82, 24, 1, 85,204,139, 69,204,141,101,244, 91, /* 0x 4e0 */
|
||||||
82, 24, 1, 85,204,139, 69,204,141,101,244, 91, 94, 95,201,195, /* 0x 4f0 */
|
94, 95,201,195, 85,137,229, 87, 86, 83,131,236, 16,141, 85, 24, /* 0x 4f0 */
|
||||||
85,137,229, 87, 86, 83,131,236, 16,141, 85, 24,139,125, 20,255, /* 0x 500 */
|
139,125, 20,255,117, 40,141, 71, 52,139, 93, 8,255,117, 16,137, /* 0x 500 */
|
||||||
117, 40,141, 71, 52,139, 93, 8,255,117, 16,137, 69,240,139,117, /* 0x 510 */
|
69,240,139,117, 32,141, 69, 32,232,248,251,255,255,139, 85,240, /* 0x 510 */
|
||||||
32,141, 69, 32,232,248,251,255,255,139, 85,240,139, 69, 12,139, /* 0x 520 */
|
139, 69, 12,139, 74, 8,186, 3, 0, 0, 0,137, 69, 32,137,216, /* 0x 520 */
|
||||||
74, 8,186, 3, 0, 0, 0,137, 69, 32,137,216,131,193, 52, 41, /* 0x 530 */
|
131,193, 52, 41,117, 36,232,193,252,255,255, 15,183, 79, 42,137, /* 0x 530 */
|
||||||
117, 36,232,193,252,255,255, 15,183, 79, 42,137,216,186, 4, 0, /* 0x 540 */
|
216,186, 4, 0, 0, 0,232,177,252,255,255, 15,183, 79, 44,137, /* 0x 540 */
|
||||||
0, 0,232,177,252,255,255, 15,183, 79, 44,137,216,186, 5, 0, /* 0x 550 */
|
216,186, 5, 0, 0, 0,232,161,252,255,255,139, 79, 24,137,216, /* 0x 550 */
|
||||||
0, 0,232,161,252,255,255,139, 79, 24,137,216,186, 9, 0, 0, /* 0x 560 */
|
186, 9, 0, 0, 0,232,146,252,255,255,141, 69, 32, 83,139, 85, /* 0x 560 */
|
||||||
0,232,146,252,255,255,141, 69, 32, 83,139, 85, 40, 80,139, 69, /* 0x 570 */
|
40, 80,139, 69, 16, 87,232,167,252,255,255,102,139, 79, 44,131, /* 0x 570 */
|
||||||
16, 87,232,167,252,255,255,102,139, 79, 44,131,196, 20, 49,210, /* 0x 580 */
|
196, 20, 49,210,102,133,201,137,195,116, 90,139, 69,240,131, 56, /* 0x 580 */
|
||||||
102,133,201,137,195,116, 90,139, 69,240,131, 56, 3,117, 70, 49, /* 0x 590 */
|
3,117, 70, 49,201,139, 88, 8,137,202,106, 5, 88,205,128,133, /* 0x 590 */
|
||||||
201,139, 88, 8,137,202,106, 5, 88,205,128,133,192,137,198,120, /* 0x 5a0 */
|
192,137,198,120, 21,186, 0, 2, 0, 0,137,195,137,249,106, 3, /* 0x 5a0 */
|
||||||
21,186, 0, 2, 0, 0,137,195,137,249,106, 3, 88,205,128, 61, /* 0x 5b0 */
|
88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, 91,106, 1, 88, /* 0x 5b0 */
|
||||||
0, 2, 0, 0,116, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x 5c0 */
|
205,128,235,254,106, 0, 49,210,106, 0,137,240, 87,232, 80,252, /* 0x 5c0 */
|
||||||
106, 0, 49,210,106, 0,137,240, 87,232, 80,252,255,255,131,196, /* 0x 5d0 */
|
255,255,131,196, 12,137,195,235, 12, 66, 15,183,193,131, 69,240, /* 0x 5d0 */
|
||||||
12,137,195,235, 12, 66, 15,183,193,131, 69,240, 32, 57,194,124, /* 0x 5e0 */
|
32, 57,194,124,166,141,101,244,137,216, 91, 94, 95,201,195 /* 0x 5e0 */
|
||||||
166,141,101,244,137,216, 91, 94, 95,201,195 /* 0x 5f0 */
|
|
||||||
};
|
};
|
||||||
|
|||||||
+2654
-631
File diff suppressed because it is too large
Load Diff
@@ -28,8 +28,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#define LINUX_I386SH_FOLD_SIZE 1194
|
#define LINUX_I386SH_FOLD_SIZE 1194
|
||||||
#define LINUX_I386SH_FOLD_ADLER32 0x63b3f90a
|
#define LINUX_I386SH_FOLD_ADLER32 0xbb9cf7de
|
||||||
#define LINUX_I386SH_FOLD_CRC32 0xe2bc019d
|
#define LINUX_I386SH_FOLD_CRC32 0xd5a101a8
|
||||||
|
|
||||||
unsigned char linux_i386sh_fold[1194] = {
|
unsigned char linux_i386sh_fold[1194] = {
|
||||||
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
|
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
|
||||||
@@ -42,8 +42,8 @@ unsigned char linux_i386sh_fold[1194] = {
|
|||||||
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
||||||
137,230,129,236, 80, 1, 0, 0,137,231,173,171,133,192,117,250, /* 0x 80 */
|
137,230,129,236, 80, 1, 0, 0,137,231,173,171,133,192,117,250, /* 0x 80 */
|
||||||
173,171,133,192,117,250, 87, 64,106, 82, 89,243,171, 72,171,171, /* 0x 90 */
|
173,171,133,192,117,250, 87, 64,106, 82, 89,243,171, 72,171,171, /* 0x 90 */
|
||||||
95,173,133,192,145,173,116, 15,131,249, 42,115,244,137, 76,207, /* 0x a0 */
|
95,173,133,192,145,173,116, 15,131,249, 42,115,244,137, 76, 57, /* 0x a0 */
|
||||||
248,137, 68,207,252,235,234,129,236, 0, 10, 0, 0,147,139, 10, /* 0x b0 */
|
248,137, 68, 57,252,235,234,129,236, 0, 10, 0, 0,147,139, 10, /* 0x b0 */
|
||||||
139, 90, 4,137,198, 96,232,123, 2, 0, 0, 89, 80, 97,129,196, /* 0x c0 */
|
139, 90, 4,137,198, 96,232,123, 2, 0, 0, 89, 80, 97,129,196, /* 0x c0 */
|
||||||
0, 10, 0, 0, 89, 90, 82, 65, 86,131,238, 3,102,199, 6, 45, /* 0x d0 */
|
0, 10, 0, 0, 89, 90, 82, 65, 86,131,238, 3,102,199, 6, 45, /* 0x d0 */
|
||||||
99, 65, 86, 65, 82, 81, 87,141,188, 36, 0,245,255,255, 96,137, /* 0x e0 */
|
99, 65, 86, 65, 82, 81, 87,141,188, 36, 0,245,255,255, 96,137, /* 0x e0 */
|
||||||
|
|||||||
+2213
-957
File diff suppressed because it is too large
Load Diff
+2303
-1047
File diff suppressed because it is too large
Load Diff
+2713
-1457
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
/* powerpc-linux.elf-entry.h -- created from powerpc-linux.elf-entry.bin, 604 (0x25c) bytes
|
/* powerpc-linux.elf-entry.h -- created from powerpc-linux.elf-entry.bin, 9316 (0x2464) bytes
|
||||||
|
|
||||||
This file is part of the UPX executable compressor.
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
@@ -27,47 +27,592 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LINUX_ELFPPC32_LOADER_SIZE 604
|
#define LINUX_ELFPPC32_LOADER_SIZE 9316
|
||||||
#define LINUX_ELFPPC32_LOADER_ADLER32 0x0a8bbdb5
|
#define LINUX_ELFPPC32_LOADER_ADLER32 0xf98c7322
|
||||||
#define LINUX_ELFPPC32_LOADER_CRC32 0xcfe347e7
|
#define LINUX_ELFPPC32_LOADER_CRC32 0xfe9cda55
|
||||||
|
|
||||||
unsigned char linux_elfppc32_loader[604] = {
|
unsigned char linux_elfppc32_loader[9316] = {
|
||||||
72, 0, 2, 77,124, 0, 41,236,144,166, 0, 0,124,132, 26, 20, /* 0x 0 */
|
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
|
||||||
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 10 */
|
0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
|
||||||
57, 64,255,255,125,168, 2,166, 72, 0, 1, 12, 57, 32, 0, 1, /* 0x 20 */
|
0, 0, 23,160, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */
|
||||||
125, 41, 28, 44, 56, 99, 0, 4,124, 9, 0, 64,125, 41, 72, 20, /* 0x 30 */
|
0, 20, 0, 17, 72, 0, 0,125,124, 0, 41,236,125,168, 2,166, /* 0x 30 */
|
||||||
97, 41, 0, 1, 78,128, 0, 32,141, 3, 0, 1,157, 5, 0, 1, /* 0x 40 */
|
40, 7, 0, 8, 64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, /* 0x 40 */
|
||||||
124, 9, 0, 64,125, 41, 74, 20, 65,162,255,213, 65,129,255,236, /* 0x 50 */
|
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 50 */
|
||||||
56,224, 0, 1, 72, 0, 0, 20, 56,231,255,255,125, 41, 72, 21, /* 0x 60 */
|
57, 64,255,255, 72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 60 */
|
||||||
65,162,255,189,124,231, 57, 20,125, 41, 72, 21, 65,162,255,177, /* 0x 70 */
|
56, 99, 0, 4,124, 9, 0, 64,125, 41, 72, 20, 97, 41, 0, 1, /* 0x 70 */
|
||||||
124,231, 57, 20,124, 9, 0, 64,125, 41, 74, 20, 65,162,255,161, /* 0x 80 */
|
78,128, 0, 32,141, 3, 0, 1,157, 5, 0, 1,124, 9, 0, 64, /* 0x 80 */
|
||||||
65,160,255,216, 57, 0, 0, 0, 52,231,255,253, 84,231, 64, 46, /* 0x 90 */
|
125, 41, 74, 20, 65,162,255,213, 65,129,255,236, 56,224, 0, 1, /* 0x 90 */
|
||||||
65,128, 0, 32,140, 67, 0, 1,124,234, 16,249,125, 74, 14,112, /* 0x a0 */
|
72, 0, 0, 20, 56,231,255,255,125, 41, 72, 21, 65,162,255,189, /* 0x a0 */
|
||||||
65,130, 0,148,112, 66, 0, 1, 65,162, 0, 80, 72, 0, 0, 20, /* 0x b0 */
|
124,231, 57, 20,125, 41, 72, 21, 65,162,255,177,124,231, 57, 20, /* 0x b0 */
|
||||||
124, 9, 0, 64,125, 41, 74, 20, 65,162,255,101, 65,161, 0, 60, /* 0x c0 */
|
124, 9, 0, 64,125, 41, 74, 20, 65,162,255,161, 65,160,255,216, /* 0x c0 */
|
||||||
57, 0, 0, 1,124, 9, 0, 64,125, 41, 74, 20, 65,162,255, 81, /* 0x d0 */
|
57, 0, 0, 0, 52,231,255,253, 84,231, 64, 46, 65,128, 0, 32, /* 0x d0 */
|
||||||
65,161, 0, 40,125, 41, 72, 21, 65,162,255, 69,125, 8, 65, 20, /* 0x e0 */
|
140, 67, 0, 1,124,234, 16,249,125, 74, 14,112, 65,130, 0, 0, /* 0x e0 */
|
||||||
124, 9, 0, 64,125, 41, 74, 20, 65,162,255, 53, 65,160,255,232, /* 0x f0 */
|
112, 66, 0, 1, 65,162, 0, 80, 72, 0, 0, 20,124, 9, 0, 64, /* 0x f0 */
|
||||||
57, 8, 0, 2, 72, 0, 0, 16,125, 41, 72, 21, 65,162,255, 33, /* 0x 100 */
|
125, 41, 74, 20, 65,162,255,101, 65,161, 0, 60, 57, 0, 0, 1, /* 0x 100 */
|
||||||
125, 8, 65, 20, 32,234,250,255, 57, 8, 0, 2,125, 8, 1,148, /* 0x 110 */
|
124, 9, 0, 64,125, 41, 74, 20, 65,162,255, 81, 65,161, 0, 40, /* 0x 110 */
|
||||||
124,234, 42, 20,125, 9, 3,166,141, 7, 0, 1,157, 5, 0, 1, /* 0x 120 */
|
125, 41, 72, 21, 65,162,255, 69,125, 8, 65, 20,124, 9, 0, 64, /* 0x 120 */
|
||||||
66, 0,255,248, 56,224, 1, 0,124, 7, 41,236,124, 7, 26, 44, /* 0x 130 */
|
125, 41, 74, 20, 65,162,255, 53, 65,160,255,232, 57, 8, 0, 2, /* 0x 130 */
|
||||||
75,255,255, 16,128, 6, 0, 0,125,168, 3,166, 56,165, 0, 1, /* 0x 140 */
|
72, 0, 0, 16,125, 41, 72, 21, 65,162,255, 33,125, 8, 65, 20, /* 0x 140 */
|
||||||
56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80,144,166, 0, 0, /* 0x 150 */
|
32,234,250,255, 57, 8, 0, 2,125, 8, 1,148,124,234, 42, 20, /* 0x 150 */
|
||||||
78,128, 0, 32, 10, 36, 73,100, 58, 32, 85, 80, 88, 32, 40, 67, /* 0x 160 */
|
125, 9, 3,166,141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, /* 0x 160 */
|
||||||
41, 32, 49, 57, 57, 54, 45, 50, 48, 48, 54, 32,116,104,101, 32, /* 0x 170 */
|
56,224, 1, 0,124, 7, 41,236,124, 7, 26, 44, 75,255,255, 16, /* 0x 170 */
|
||||||
85, 80, 88, 32, 84,101, 97,109, 46, 32, 65,108,108, 32, 82,105, /* 0x 180 */
|
124, 0, 41,236,125,168, 2,166, 40, 7, 0, 2, 64,130, 0,228, /* 0x 180 */
|
||||||
103,104,116,115, 32, 82,101,115,101,114,118,101,100, 46, 32,104, /* 0x 190 */
|
144,166, 0, 0,124,132, 26, 20, 60, 0,128, 0, 61, 32,128, 0, /* 0x 190 */
|
||||||
116,116,112, 58, 47, 47,117,112,120, 46,115,102, 46,110,101,116, /* 0x 1a0 */
|
56, 99,255,255, 56,165,255,255, 57, 64,255,255, 72, 0, 0,180, /* 0x 1a0 */
|
||||||
32, 36, 10, 0, 72, 0, 0, 37, 80, 82, 79, 84, 95, 69, 88, 69, /* 0x 1b0 */
|
124, 9, 0, 64,125, 41, 72, 20, 76,162, 0, 32, 57, 32, 0, 1, /* 0x 1b0 */
|
||||||
67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105, /* 0x 1c0 */
|
125, 41, 28, 44, 56, 99, 0, 4,124, 9, 0, 64,125, 41, 73, 20, /* 0x 1c0 */
|
||||||
108,101,100, 46, 10, 0, 0, 0, 56,160, 0, 32,124,136, 2,166, /* 0x 1d0 */
|
78,128, 0, 32,141, 3, 0, 1,157, 5, 0, 1, 75,255,255,213, /* 0x 1d0 */
|
||||||
56, 96, 0, 2, 56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127, /* 0x 1e0 */
|
65,129,255,244, 56,224, 0, 1, 75,255,255,201,124,231, 57, 21, /* 0x 1e0 */
|
||||||
56, 0, 0, 1, 68, 0, 0, 2,127,200, 2,166, 57, 0, 0, 0, /* 0x 1f0 */
|
75,255,255,193, 65,160,255,244, 52,231,255,253, 57, 0, 0, 0, /* 0x 1f0 */
|
||||||
56,224,255,255,128,126, 0, 4, 56,192, 0, 50, 56,160, 0, 7, /* 0x 200 */
|
65,128, 0, 20,140, 67, 0, 1, 84,231, 64, 46,124,234, 16,249, /* 0x 200 */
|
||||||
56,128, 16, 0,124, 99,242, 20, 56, 0, 0, 90, 56, 99, 16, 11, /* 0x 210 */
|
65,130, 0, 0, 75,255,255,157,125, 8, 65, 21, 75,255,255,149, /* 0x 210 */
|
||||||
84, 99, 0, 38, 68, 0, 0, 2, 65,163,255,140,127,233, 3,166, /* 0x 220 */
|
125, 8, 65, 21, 56,224, 0, 1, 64,130, 0, 28, 56,224, 0, 3, /* 0x 220 */
|
||||||
136,254, 0, 8, 56,193, 0,124,124,101, 27,120,124,104, 3,166, /* 0x 230 */
|
57, 0, 0, 1, 75,255,255,125,125, 8, 65, 21, 75,255,255,117, /* 0x 230 */
|
||||||
128,158, 0, 4, 56,126, 0, 12, 78,128, 4, 32,148, 33,255,128, /* 0x 240 */
|
65,160,255,244, 32, 74,242,255,125, 8, 57, 20,124,234, 42, 20, /* 0x 240 */
|
||||||
188, 65, 0, 4,127,232, 2,166, 75,255,255,161 /* 0x 250 */
|
125, 9, 3,166,141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, /* 0x 250 */
|
||||||
|
56,224, 1, 0,124, 7, 41,236,124, 7, 26, 44, 75,255,255,112, /* 0x 260 */
|
||||||
|
124,128, 0, 8, 40, 7, 0, 14, 64,130, 0, 12,124, 8, 2,166, /* 0x 270 */
|
||||||
|
129, 6, 0, 0,124,167, 43,120, 56,164,255,254, 56,131, 0, 2, /* 0x 280 */
|
||||||
|
144, 1, 0, 4,136, 3, 0, 0, 84, 11,232,254, 84, 2, 7,126, /* 0x 290 */
|
||||||
|
56, 96,250, 0,124, 99, 88, 48, 56, 99,241,128,124, 38, 11,120, /* 0x 2a0 */
|
||||||
|
124, 33, 26, 20, 84, 33, 0, 52,124,195, 51,120, 56, 0, 0, 0, /* 0x 2b0 */
|
||||||
|
148, 3,255,252,124, 1, 24, 64, 65,128,255,248,144,193, 0, 0, /* 0x 2c0 */
|
||||||
|
136, 4,255,255, 57, 33, 0, 8, 56,193, 0, 12, 56, 97, 0, 16, /* 0x 2d0 */
|
||||||
|
84, 11,225, 62, 84, 0, 7, 62,152, 67, 0, 2,153, 99, 0, 1, /* 0x 2e0 */
|
||||||
|
152, 3, 0, 0,124, 8, 2,166,148, 33,255,160,189,193, 0, 24, /* 0x 2f0 */
|
||||||
|
144, 1, 0,100, 59, 32, 0, 0,137, 67, 0, 2,137, 99, 0, 1, /* 0x 300 */
|
||||||
|
138, 67, 0, 0,147, 38, 0, 0,147, 41, 0, 0,136, 3, 0, 1, /* 0x 310 */
|
||||||
|
125, 40, 3,166,124, 18, 2, 20, 57, 32, 3, 0,125, 41, 0, 48, /* 0x 320 */
|
||||||
|
56, 9, 7, 54,127,153, 0, 64, 57, 32, 0, 1,125, 43, 88, 48, /* 0x 330 */
|
||||||
|
125, 41, 80, 48, 57, 41,255,255, 57,107,255,255,145, 33, 0, 8, /* 0x 340 */
|
||||||
|
124,206, 51,120,124,147, 35,120,124,245, 59,120,125, 20, 67,120, /* 0x 350 */
|
||||||
|
145, 97, 0, 12, 59, 3, 0, 4, 59,224, 0, 0, 58,224, 0, 0, /* 0x 360 */
|
||||||
|
59, 64, 0, 1, 58, 32, 0, 1, 58, 0, 0, 1, 57,224, 0, 1, /* 0x 370 */
|
||||||
|
57, 32, 0, 0, 64,156, 0, 28,124, 9, 3,166, 57, 96, 4, 0, /* 0x 380 */
|
||||||
|
85, 32, 8, 60,125,120, 3, 46, 57, 41, 0, 1, 66, 0,255,244, /* 0x 390 */
|
||||||
|
127,179, 42, 20,126,108,155,120, 56,160, 0, 0, 57, 0,255,255, /* 0x 3a0 */
|
||||||
|
57, 96, 0, 0,127,140,232, 0, 57,107, 0, 1, 47, 11, 0, 4, /* 0x 3b0 */
|
||||||
|
84,169, 64, 46, 65,158, 8,156,136, 12, 0, 0, 57,140, 0, 1, /* 0x 3c0 */
|
||||||
|
125, 37, 3,120, 64,153,255,224,127,153,160, 64, 64,156, 8,100, /* 0x 3d0 */
|
||||||
|
62,192, 0,255, 98,214,255,255,128, 1, 0, 8,127,136,176, 64, /* 0x 3e0 */
|
||||||
|
127, 35, 0, 56, 86,224, 32, 54,124, 0, 26, 20, 84, 6, 8, 60, /* 0x 3f0 */
|
||||||
|
65,157, 0, 32,127,140,232, 0, 65,158, 8, 88,137, 44, 0, 0, /* 0x 400 */
|
||||||
|
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x 410 */
|
||||||
|
124,230,194, 46, 85, 0,170,254,125, 64, 57,214,127,133, 80, 64, /* 0x 420 */
|
||||||
|
64,156, 1,172,128, 1, 0, 12, 47,151, 0, 6,127, 41, 0, 56, /* 0x 430 */
|
||||||
|
32, 18, 0, 8,127,224, 6, 48,125, 41,144, 48,125, 41, 2, 20, /* 0x 440 */
|
||||||
|
29, 41, 6, 0, 32, 7, 8, 0,124, 0, 46,112,124, 7, 2, 20, /* 0x 450 */
|
||||||
|
125, 56, 74, 20,124, 6,195, 46,125, 72, 83,120, 56,201, 14,108, /* 0x 460 */
|
||||||
|
56, 96, 0, 1, 64,157, 0,180,124, 26,200, 80, 63, 96, 0,255, /* 0x 470 */
|
||||||
|
127,245, 0,174, 99,123,255,255, 87,255, 8, 60, 87,252, 5,238, /* 0x 480 */
|
||||||
|
127,136,216, 64, 87,128, 8, 60, 84,100, 8, 60,124, 6, 2, 20, /* 0x 490 */
|
||||||
|
127, 12,232, 0, 84,169, 64, 46,124,224, 34, 20, 65,157, 0, 24, /* 0x 4a0 */
|
||||||
|
65,154, 7,176,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x 4b0 */
|
||||||
|
125, 37, 3,120,161,103, 2, 0, 85, 0,170,254,125, 64, 89,214, /* 0x 4c0 */
|
||||||
|
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x 4d0 */
|
||||||
|
124, 11, 2, 20, 47, 28, 0, 0,125,105, 88, 80,124,131, 35,120, /* 0x 4e0 */
|
||||||
|
125, 10, 64, 80, 64,156, 0, 20,176, 7, 2, 0,125, 72, 83,120, /* 0x 4f0 */
|
||||||
|
65,186, 0, 24, 72, 0, 0, 28,177,103, 2, 0,124,170, 40, 80, /* 0x 500 */
|
||||||
|
56,100, 0, 1, 65,154, 0, 12, 47,131, 0,255, 64,157,255,108, /* 0x 510 */
|
||||||
|
47,131, 0,255, 65,157, 0,132, 63,224, 0,255, 99,255,255,255, /* 0x 520 */
|
||||||
|
127,136,248, 64, 84,103, 8, 60,127, 12,232, 0, 84,169, 64, 46, /* 0x 530 */
|
||||||
|
124,227, 59,120, 65,157, 0, 24, 65,154, 7, 24,136, 12, 0, 0, /* 0x 540 */
|
||||||
|
85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120,125,102, 58, 46, /* 0x 550 */
|
||||||
|
85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64, /* 0x 560 */
|
||||||
|
124, 0, 46,112, 85,105,217,126,124, 11, 2, 20,125, 10, 64, 80, /* 0x 570 */
|
||||||
|
125,105, 88, 80, 64,156, 0, 16,125, 72, 83,120,124, 6, 59, 46, /* 0x 580 */
|
||||||
|
72, 0, 0, 16,124,170, 40, 80,125,102, 59, 46, 56,103, 0, 1, /* 0x 590 */
|
||||||
|
47,131, 0,255, 64,157,255,140, 47,151, 0, 3, 84,127, 6, 62, /* 0x 5a0 */
|
||||||
|
127,249,169,174, 59, 57, 0, 1, 65,157, 0, 12, 58,224, 0, 0, /* 0x 5b0 */
|
||||||
|
72, 0, 6,120, 47,151, 0, 9, 65,157, 0, 12, 58,247,255,253, /* 0x 5c0 */
|
||||||
|
72, 0, 6,104, 58,247,255,250, 72, 0, 6, 96,125, 10, 64, 80, /* 0x 5d0 */
|
||||||
|
127,136,176, 64, 84,224,217,126,124, 0, 56, 80, 86,233, 8, 60, /* 0x 5e0 */
|
||||||
|
124, 6,195, 46,124,170, 40, 80,124,248, 74, 20, 65,157, 0, 32, /* 0x 5f0 */
|
||||||
|
127,140,232, 0, 65,158, 6, 92,137, 44, 0, 0, 84,160, 64, 46, /* 0x 600 */
|
||||||
|
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,161,103, 1,128, /* 0x 610 */
|
||||||
|
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 64, /* 0x 620 */
|
||||||
|
32, 11, 8, 0, 47,151, 0, 6,124, 0, 46,112,124, 11, 2, 20, /* 0x 630 */
|
||||||
|
176, 7, 1,128,126, 15,131,120,125, 72, 83,120,126, 48,139,120, /* 0x 640 */
|
||||||
|
56, 0, 0, 0,127, 81,211,120, 64,157, 0, 8, 56, 0, 0, 3, /* 0x 650 */
|
||||||
|
124, 23, 3,120, 56,216, 6,100, 72, 0, 2, 24,125, 10, 64, 80, /* 0x 660 */
|
||||||
|
127,136,176, 64, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x 670 */
|
||||||
|
176, 7, 1,128, 65,157, 0, 32,127,140,232, 0, 65,158, 5,212, /* 0x 680 */
|
||||||
|
137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, /* 0x 690 */
|
||||||
|
57,140, 0, 1,161,103, 1,152, 85, 0,170,254,125, 64, 89,214, /* 0x 6a0 */
|
||||||
|
127,133, 80, 64, 64,156, 0,188, 32, 11, 8, 0,127,138,176, 64, /* 0x 6b0 */
|
||||||
|
124, 0, 46,112, 86,233, 40, 52,124, 11, 2, 20,125, 56, 74, 20, /* 0x 6c0 */
|
||||||
|
84,107, 8, 60,176, 7, 1,152,125, 72, 83,120,124,233, 90, 20, /* 0x 6d0 */
|
||||||
|
65,157, 0, 32,127,140,232, 0, 65,158, 5,120,137, 44, 0, 0, /* 0x 6e0 */
|
||||||
|
84,160, 64, 46,124, 5, 75,120, 85, 72, 64, 46, 57,140, 0, 1, /* 0x 6f0 */
|
||||||
|
161,103, 1,224, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x 700 */
|
||||||
|
64,156, 0, 72, 32, 11, 8, 0, 47,153, 0, 0,124, 0, 46,112, /* 0x 710 */
|
||||||
|
124, 11, 2, 20,176, 7, 1,224,125, 72, 83,120, 65,158, 5, 52, /* 0x 720 */
|
||||||
|
47,151, 0, 6, 57, 32, 0, 9, 64,157, 0, 8, 57, 32, 0, 11, /* 0x 730 */
|
||||||
|
124, 26,200, 80,127,245, 0,174,125, 55, 75,120,127,249,169,174, /* 0x 740 */
|
||||||
|
59, 57, 0, 1, 72, 0, 4,228, 85, 96,217,126,124, 0, 88, 80, /* 0x 750 */
|
||||||
|
124,170, 40, 80,125, 10, 64, 80,176, 7, 1,224, 72, 0, 0,252, /* 0x 760 */
|
||||||
|
125, 10, 64, 80,127,136,176, 64, 85, 96,217,126,124, 0, 88, 80, /* 0x 770 */
|
||||||
|
124,170, 40, 80,176, 7, 1,152, 65,157, 0, 32,127,140,232, 0, /* 0x 780 */
|
||||||
|
65,158, 4,208,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x 790 */
|
||||||
|
85, 8, 64, 46, 57,140, 0, 1,161,103, 1,176, 85, 0,170,254, /* 0x 7a0 */
|
||||||
|
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 32, 32, 11, 8, 0, /* 0x 7b0 */
|
||||||
|
124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120,126, 41,139,120, /* 0x 7c0 */
|
||||||
|
176, 7, 1,176, 72, 0, 0,140,125, 10, 64, 80,127,136,176, 64, /* 0x 7d0 */
|
||||||
|
85, 96,217,126,124, 0, 88, 80,124,170, 40, 80,176, 7, 1,176, /* 0x 7e0 */
|
||||||
|
65,157, 0, 32,127,140,232, 0, 65,158, 4,104,137, 44, 0, 0, /* 0x 7f0 */
|
||||||
|
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x 800 */
|
||||||
|
161,103, 1,200, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x 810 */
|
||||||
|
64,156, 0, 32, 32, 11, 8, 0,124, 0, 46,112,124, 11, 2, 20, /* 0x 820 */
|
||||||
|
125, 72, 83,120,126, 9,131,120,176, 7, 1,200, 72, 0, 0, 32, /* 0x 830 */
|
||||||
|
85, 96,217,126,124, 0, 88, 80,125,233,123,120,176, 7, 1,200, /* 0x 840 */
|
||||||
|
124,170, 40, 80,125, 10, 64, 80,126, 15,131,120,126, 48,139,120, /* 0x 850 */
|
||||||
|
127, 81,211,120,125, 58, 75,120, 47,151, 0, 6, 56, 0, 0, 8, /* 0x 860 */
|
||||||
|
64,157, 0, 8, 56, 0, 0, 11,124, 23, 3,120, 56,216, 10,104, /* 0x 870 */
|
||||||
|
127,136,176, 64, 65,157, 0, 32,127,140,232, 0, 65,158, 3,212, /* 0x 880 */
|
||||||
|
137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, /* 0x 890 */
|
||||||
|
57,140, 0, 1,161,102, 0, 0, 85, 0,170,254,125, 64, 89,214, /* 0x 8a0 */
|
||||||
|
127,133, 80, 64, 64,156, 0, 48, 32, 11, 8, 0, 84,105, 32, 54, /* 0x 8b0 */
|
||||||
|
125, 38, 74, 20,124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120, /* 0x 8c0 */
|
||||||
|
56,137, 0, 4, 59,128, 0, 0, 59, 96, 0, 3,176, 6, 0, 0, /* 0x 8d0 */
|
||||||
|
72, 0, 0,156,125, 10, 64, 80,127,136,176, 64, 85, 96,217,126, /* 0x 8e0 */
|
||||||
|
124, 0, 88, 80,124,170, 40, 80,176, 6, 0, 0, 65,157, 0, 32, /* 0x 8f0 */
|
||||||
|
127,140,232, 0, 65,158, 3, 92,137, 44, 0, 0, 84,160, 64, 46, /* 0x 900 */
|
||||||
|
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,161,102, 0, 2, /* 0x 910 */
|
||||||
|
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 48, /* 0x 920 */
|
||||||
|
32, 11, 8, 0, 84,105, 32, 54,125, 38, 74, 20,124, 0, 46,112, /* 0x 930 */
|
||||||
|
124, 11, 2, 20,125, 72, 83,120, 56,137, 1, 4, 59,128, 0, 8, /* 0x 940 */
|
||||||
|
59, 96, 0, 3,176, 6, 0, 2, 72, 0, 0, 36, 85, 96,217,126, /* 0x 950 */
|
||||||
|
124, 0, 88, 80,124,170, 40, 80,176, 6, 0, 2,125, 10, 64, 80, /* 0x 960 */
|
||||||
|
56,134, 2, 4, 59,128, 0, 16, 59, 96, 0, 8,127,105, 3,166, /* 0x 970 */
|
||||||
|
63,224, 0,255, 99,255,255,255, 56, 96, 0, 1,127,136,248, 64, /* 0x 980 */
|
||||||
|
84,103, 8, 60,127, 12,232, 0, 84,169, 64, 46,124,227, 59,120, /* 0x 990 */
|
||||||
|
65,157, 0, 24, 65,154, 2,188,136, 12, 0, 0, 85, 8, 64, 46, /* 0x 9a0 */
|
||||||
|
57,140, 0, 1,125, 37, 3,120,125,100, 58, 46, 85, 0,170,254, /* 0x 9b0 */
|
||||||
|
125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, /* 0x 9c0 */
|
||||||
|
85,105,217,126,124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, /* 0x 9d0 */
|
||||||
|
64,156, 0, 16,125, 72, 83,120,124, 4, 59, 46, 72, 0, 0, 16, /* 0x 9e0 */
|
||||||
|
124,170, 40, 80, 56,103, 0, 1,125,100, 59, 46, 66, 0,255,144, /* 0x 9f0 */
|
||||||
|
56, 0, 0, 1, 47,151, 0, 3,124, 0,216, 48,124, 96, 24, 80, /* 0x a00 */
|
||||||
|
124, 99,226, 20, 65,157, 1,232, 47,131, 0, 3, 58,247, 0, 7, /* 0x a10 */
|
||||||
|
124,105, 27,120, 64,157, 0, 8, 57, 32, 0, 3, 85, 41, 56, 48, /* 0x a20 */
|
||||||
|
125, 56, 74, 20, 56,201, 3, 96, 57, 32, 0, 6,125, 41, 3,166, /* 0x a30 */
|
||||||
|
63,224, 0,255, 99,255,255,255, 56,128, 0, 1,127,136,248, 64, /* 0x a40 */
|
||||||
|
84,135, 8, 60,127, 12,232, 0, 84,169, 64, 46,124,228, 59,120, /* 0x a50 */
|
||||||
|
65,157, 0, 24, 65,154, 1,252,136, 12, 0, 0, 85, 8, 64, 46, /* 0x a60 */
|
||||||
|
57,140, 0, 1,125, 37, 3,120,125,102, 58, 46, 85, 0,170,254, /* 0x a70 */
|
||||||
|
125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, /* 0x a80 */
|
||||||
|
85,105,217,126,124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, /* 0x a90 */
|
||||||
|
64,156, 0, 16,125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 16, /* 0x aa0 */
|
||||||
|
124,170, 40, 80, 56,135, 0, 1,125,102, 59, 46, 66, 0,255,144, /* 0x ab0 */
|
||||||
|
56,132,255,192, 47,132, 0, 3,124,154, 35,120, 64,157, 1, 40, /* 0x ac0 */
|
||||||
|
47,132, 0, 13,124,137, 14,112, 84,128, 7,254, 57,105,255,255, /* 0x ad0 */
|
||||||
|
96, 26, 0, 2,125,105, 3,166, 65,157, 0, 32,127, 90, 88, 48, /* 0x ae0 */
|
||||||
|
87, 73, 8, 60,125, 56, 74, 20, 84,128, 8, 60,125, 32, 72, 80, /* 0x af0 */
|
||||||
|
56,201, 5, 94, 72, 0, 0,100, 57, 41,255,251,125, 41, 3,166, /* 0x b00 */
|
||||||
|
61, 96, 0,255, 97,107,255,255,127,136, 88, 64,127, 12,232, 0, /* 0x b10 */
|
||||||
|
84,169, 64, 46, 87, 90, 8, 60, 65,157, 0, 24, 65,154, 1, 52, /* 0x b20 */
|
||||||
|
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x b30 */
|
||||||
|
85, 8,248,126,127,133, 64, 64, 65,156, 0, 12,124,168, 40, 80, /* 0x b40 */
|
||||||
|
99, 90, 0, 1, 66, 0,255,196, 56, 0, 0, 4,124, 9, 3,166, /* 0x b50 */
|
||||||
|
87, 90, 32, 54, 56,216, 6, 68, 60,128, 0,255, 96,132,255,255, /* 0x b60 */
|
||||||
|
59,128, 0, 1, 59,224, 0, 1,127,136, 32, 64, 87,231, 8, 60, /* 0x b70 */
|
||||||
|
127, 12,232, 0, 84,169, 64, 46,124,255, 59,120, 65,157, 0, 24, /* 0x b80 */
|
||||||
|
65,154, 0,208,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x b90 */
|
||||||
|
125, 37, 3,120,125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, /* 0x ba0 */
|
||||||
|
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x bb0 */
|
||||||
|
124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16, /* 0x bc0 */
|
||||||
|
125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 20,124,170, 40, 80, /* 0x bd0 */
|
||||||
|
59,231, 0, 1,125,102, 59, 46,127, 90,227,120, 87,156, 8, 60, /* 0x be0 */
|
||||||
|
66, 0,255,136, 55, 90, 0, 1, 65,130, 0, 72,127,154,200, 64, /* 0x bf0 */
|
||||||
|
56, 99, 0, 2, 65,157, 0, 92,124, 26,200, 80,127,245, 0,174, /* 0x c00 */
|
||||||
|
56, 99,255,255,127,249,169,174, 59, 57, 0, 1, 49, 99,255,255, /* 0x c10 */
|
||||||
|
125, 43, 25, 16,124, 20,200, 16,124, 0, 1, 16,124, 0, 0,208, /* 0x c20 */
|
||||||
|
125, 43, 0, 57, 64,130,255,212,127,153,160, 64, 65,156,247,172, /* 0x c30 */
|
||||||
|
60, 0, 0,255, 96, 0,255,255,127,136, 0, 64, 65,157, 0, 32, /* 0x c40 */
|
||||||
|
127,140,232, 0, 56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, /* 0x c50 */
|
||||||
|
56, 96, 0, 1, 72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166, /* 0x c60 */
|
||||||
|
124, 19, 96, 80,144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0, /* 0x c70 */
|
||||||
|
128, 1, 0,100,185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96, /* 0x c80 */
|
||||||
|
124, 8, 2,166,148, 33,255,160,189,193, 0, 24,144, 1, 0,100, /* 0x c90 */
|
||||||
|
59, 32, 0, 0,137, 67, 0, 2,137, 99, 0, 1,138, 67, 0, 0, /* 0x ca0 */
|
||||||
|
147, 38, 0, 0,147, 41, 0, 0,136, 3, 0, 1,125, 40, 3,166, /* 0x cb0 */
|
||||||
|
124, 18, 2, 20, 57, 32, 3, 0,125, 41, 0, 48, 56, 9, 7, 54, /* 0x cc0 */
|
||||||
|
127,153, 0, 64, 57, 32, 0, 1,125, 43, 88, 48,125, 41, 80, 48, /* 0x cd0 */
|
||||||
|
57, 41,255,255, 57,107,255,255,145, 33, 0, 8,124,206, 51,120, /* 0x ce0 */
|
||||||
|
124,147, 35,120,124,245, 59,120,125, 20, 67,120,145, 97, 0, 12, /* 0x cf0 */
|
||||||
|
59, 3, 0, 4, 59,224, 0, 0, 58,224, 0, 0, 59, 64, 0, 1, /* 0x d00 */
|
||||||
|
58, 32, 0, 1, 58, 0, 0, 1, 57,224, 0, 1, 57, 32, 0, 0, /* 0x d10 */
|
||||||
|
64,156, 0, 28,124, 9, 3,166, 57, 96, 4, 0, 85, 32, 8, 60, /* 0x d20 */
|
||||||
|
125,120, 3, 46, 57, 41, 0, 1, 66, 0,255,244,127,179, 42, 20, /* 0x d30 */
|
||||||
|
126,108,155,120, 56,160, 0, 0, 57, 0,255,255, 57, 96, 0, 0, /* 0x d40 */
|
||||||
|
127,140,232, 0, 57,107, 0, 1, 47, 11, 0, 4, 84,169, 64, 46, /* 0x d50 */
|
||||||
|
65,158, 8,156,136, 12, 0, 0, 57,140, 0, 1,125, 37, 3,120, /* 0x d60 */
|
||||||
|
64,153,255,224,127,153,160, 64, 64,156, 8,100, 62,192, 0,255, /* 0x d70 */
|
||||||
|
98,214,255,255,128, 1, 0, 8,127,136,176, 64,127, 35, 0, 56, /* 0x d80 */
|
||||||
|
86,224, 32, 54,124, 0, 26, 20, 84, 6, 8, 60, 65,157, 0, 32, /* 0x d90 */
|
||||||
|
127,140,232, 0, 65,158, 8, 88,137, 44, 0, 0, 84,160, 64, 46, /* 0x da0 */
|
||||||
|
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,124,230,194, 46, /* 0x db0 */
|
||||||
|
85, 0,170,254,125, 64, 57,214,127,133, 80, 64, 64,156, 1,172, /* 0x dc0 */
|
||||||
|
128, 1, 0, 12, 47,151, 0, 6,127, 41, 0, 56, 32, 18, 0, 8, /* 0x dd0 */
|
||||||
|
127,224, 6, 48,125, 41,144, 48,125, 41, 2, 20, 29, 41, 6, 0, /* 0x de0 */
|
||||||
|
32, 7, 8, 0,124, 0, 46,112,124, 7, 2, 20,125, 56, 74, 20, /* 0x df0 */
|
||||||
|
124, 6,195, 46,125, 72, 83,120, 56,201, 14,108, 56, 96, 0, 1, /* 0x e00 */
|
||||||
|
64,157, 0,180,124, 26,200, 80, 63, 96, 0,255,127,245, 0,174, /* 0x e10 */
|
||||||
|
99,123,255,255, 87,255, 8, 60, 87,252, 5,238,127,136,216, 64, /* 0x e20 */
|
||||||
|
87,128, 8, 60, 84,100, 8, 60,124, 6, 2, 20,127, 12,232, 0, /* 0x e30 */
|
||||||
|
84,169, 64, 46,124,224, 34, 20, 65,157, 0, 24, 65,154, 7,176, /* 0x e40 */
|
||||||
|
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x e50 */
|
||||||
|
161,103, 2, 0, 85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0, /* 0x e60 */
|
||||||
|
127,133, 80, 64,124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, /* 0x e70 */
|
||||||
|
47, 28, 0, 0,125,105, 88, 80,124,131, 35,120,125, 10, 64, 80, /* 0x e80 */
|
||||||
|
64,156, 0, 20,176, 7, 2, 0,125, 72, 83,120, 65,186, 0, 24, /* 0x e90 */
|
||||||
|
72, 0, 0, 28,177,103, 2, 0,124,170, 40, 80, 56,100, 0, 1, /* 0x ea0 */
|
||||||
|
65,154, 0, 12, 47,131, 0,255, 64,157,255,108, 47,131, 0,255, /* 0x eb0 */
|
||||||
|
65,157, 0,132, 63,224, 0,255, 99,255,255,255,127,136,248, 64, /* 0x ec0 */
|
||||||
|
84,103, 8, 60,127, 12,232, 0, 84,169, 64, 46,124,227, 59,120, /* 0x ed0 */
|
||||||
|
65,157, 0, 24, 65,154, 7, 24,136, 12, 0, 0, 85, 8, 64, 46, /* 0x ee0 */
|
||||||
|
57,140, 0, 1,125, 37, 3,120,125,102, 58, 46, 85, 0,170,254, /* 0x ef0 */
|
||||||
|
125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, /* 0x f00 */
|
||||||
|
85,105,217,126,124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, /* 0x f10 */
|
||||||
|
64,156, 0, 16,125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 16, /* 0x f20 */
|
||||||
|
124,170, 40, 80,125,102, 59, 46, 56,103, 0, 1, 47,131, 0,255, /* 0x f30 */
|
||||||
|
64,157,255,140, 47,151, 0, 3, 84,127, 6, 62,127,249,169,174, /* 0x f40 */
|
||||||
|
59, 57, 0, 1, 65,157, 0, 12, 58,224, 0, 0, 72, 0, 6,120, /* 0x f50 */
|
||||||
|
47,151, 0, 9, 65,157, 0, 12, 58,247,255,253, 72, 0, 6,104, /* 0x f60 */
|
||||||
|
58,247,255,250, 72, 0, 6, 96,125, 10, 64, 80,127,136,176, 64, /* 0x f70 */
|
||||||
|
84,224,217,126,124, 0, 56, 80, 86,233, 8, 60,124, 6,195, 46, /* 0x f80 */
|
||||||
|
124,170, 40, 80,124,248, 74, 20, 65,157, 0, 32,127,140,232, 0, /* 0x f90 */
|
||||||
|
65,158, 6, 92,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x fa0 */
|
||||||
|
85, 8, 64, 46, 57,140, 0, 1,161,103, 1,128, 85, 0,170,254, /* 0x fb0 */
|
||||||
|
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 64, 32, 11, 8, 0, /* 0x fc0 */
|
||||||
|
47,151, 0, 6,124, 0, 46,112,124, 11, 2, 20,176, 7, 1,128, /* 0x fd0 */
|
||||||
|
126, 15,131,120,125, 72, 83,120,126, 48,139,120, 56, 0, 0, 0, /* 0x fe0 */
|
||||||
|
127, 81,211,120, 64,157, 0, 8, 56, 0, 0, 3,124, 23, 3,120, /* 0x ff0 */
|
||||||
|
56,216, 6,100, 72, 0, 2, 24,125, 10, 64, 80,127,136,176, 64, /* 0x1000 */
|
||||||
|
85, 96,217,126,124, 0, 88, 80,124,170, 40, 80,176, 7, 1,128, /* 0x1010 */
|
||||||
|
65,157, 0, 32,127,140,232, 0, 65,158, 5,212,137, 44, 0, 0, /* 0x1020 */
|
||||||
|
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x1030 */
|
||||||
|
161,103, 1,152, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x1040 */
|
||||||
|
64,156, 0,188, 32, 11, 8, 0,127,138,176, 64,124, 0, 46,112, /* 0x1050 */
|
||||||
|
86,233, 40, 52,124, 11, 2, 20,125, 56, 74, 20, 84,107, 8, 60, /* 0x1060 */
|
||||||
|
176, 7, 1,152,125, 72, 83,120,124,233, 90, 20, 65,157, 0, 32, /* 0x1070 */
|
||||||
|
127,140,232, 0, 65,158, 5,120,137, 44, 0, 0, 84,160, 64, 46, /* 0x1080 */
|
||||||
|
124, 5, 75,120, 85, 72, 64, 46, 57,140, 0, 1,161,103, 1,224, /* 0x1090 */
|
||||||
|
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 72, /* 0x10a0 */
|
||||||
|
32, 11, 8, 0, 47,153, 0, 0,124, 0, 46,112,124, 11, 2, 20, /* 0x10b0 */
|
||||||
|
176, 7, 1,224,125, 72, 83,120, 65,158, 5, 52, 47,151, 0, 6, /* 0x10c0 */
|
||||||
|
57, 32, 0, 9, 64,157, 0, 8, 57, 32, 0, 11,124, 26,200, 80, /* 0x10d0 */
|
||||||
|
127,245, 0,174,125, 55, 75,120,127,249,169,174, 59, 57, 0, 1, /* 0x10e0 */
|
||||||
|
72, 0, 4,228, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x10f0 */
|
||||||
|
125, 10, 64, 80,176, 7, 1,224, 72, 0, 0,252,125, 10, 64, 80, /* 0x1100 */
|
||||||
|
127,136,176, 64, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x1110 */
|
||||||
|
176, 7, 1,152, 65,157, 0, 32,127,140,232, 0, 65,158, 4,208, /* 0x1120 */
|
||||||
|
137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, /* 0x1130 */
|
||||||
|
57,140, 0, 1,161,103, 1,176, 85, 0,170,254,125, 64, 89,214, /* 0x1140 */
|
||||||
|
127,133, 80, 64, 64,156, 0, 32, 32, 11, 8, 0,124, 0, 46,112, /* 0x1150 */
|
||||||
|
124, 11, 2, 20,125, 72, 83,120,126, 41,139,120,176, 7, 1,176, /* 0x1160 */
|
||||||
|
72, 0, 0,140,125, 10, 64, 80,127,136,176, 64, 85, 96,217,126, /* 0x1170 */
|
||||||
|
124, 0, 88, 80,124,170, 40, 80,176, 7, 1,176, 65,157, 0, 32, /* 0x1180 */
|
||||||
|
127,140,232, 0, 65,158, 4,104,137, 44, 0, 0, 84,160, 64, 46, /* 0x1190 */
|
||||||
|
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,161,103, 1,200, /* 0x11a0 */
|
||||||
|
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 32, /* 0x11b0 */
|
||||||
|
32, 11, 8, 0,124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120, /* 0x11c0 */
|
||||||
|
126, 9,131,120,176, 7, 1,200, 72, 0, 0, 32, 85, 96,217,126, /* 0x11d0 */
|
||||||
|
124, 0, 88, 80,125,233,123,120,176, 7, 1,200,124,170, 40, 80, /* 0x11e0 */
|
||||||
|
125, 10, 64, 80,126, 15,131,120,126, 48,139,120,127, 81,211,120, /* 0x11f0 */
|
||||||
|
125, 58, 75,120, 47,151, 0, 6, 56, 0, 0, 8, 64,157, 0, 8, /* 0x1200 */
|
||||||
|
56, 0, 0, 11,124, 23, 3,120, 56,216, 10,104,127,136,176, 64, /* 0x1210 */
|
||||||
|
65,157, 0, 32,127,140,232, 0, 65,158, 3,212,137, 44, 0, 0, /* 0x1220 */
|
||||||
|
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x1230 */
|
||||||
|
161,102, 0, 0, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x1240 */
|
||||||
|
64,156, 0, 48, 32, 11, 8, 0, 84,105, 32, 54,125, 38, 74, 20, /* 0x1250 */
|
||||||
|
124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120, 56,137, 0, 4, /* 0x1260 */
|
||||||
|
59,128, 0, 0, 59, 96, 0, 3,176, 6, 0, 0, 72, 0, 0,156, /* 0x1270 */
|
||||||
|
125, 10, 64, 80,127,136,176, 64, 85, 96,217,126,124, 0, 88, 80, /* 0x1280 */
|
||||||
|
124,170, 40, 80,176, 6, 0, 0, 65,157, 0, 32,127,140,232, 0, /* 0x1290 */
|
||||||
|
65,158, 3, 92,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x12a0 */
|
||||||
|
85, 8, 64, 46, 57,140, 0, 1,161,102, 0, 2, 85, 0,170,254, /* 0x12b0 */
|
||||||
|
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 48, 32, 11, 8, 0, /* 0x12c0 */
|
||||||
|
84,105, 32, 54,125, 38, 74, 20,124, 0, 46,112,124, 11, 2, 20, /* 0x12d0 */
|
||||||
|
125, 72, 83,120, 56,137, 1, 4, 59,128, 0, 8, 59, 96, 0, 3, /* 0x12e0 */
|
||||||
|
176, 6, 0, 2, 72, 0, 0, 36, 85, 96,217,126,124, 0, 88, 80, /* 0x12f0 */
|
||||||
|
124,170, 40, 80,176, 6, 0, 2,125, 10, 64, 80, 56,134, 2, 4, /* 0x1300 */
|
||||||
|
59,128, 0, 16, 59, 96, 0, 8,127,105, 3,166, 63,224, 0,255, /* 0x1310 */
|
||||||
|
99,255,255,255, 56, 96, 0, 1,127,136,248, 64, 84,103, 8, 60, /* 0x1320 */
|
||||||
|
127, 12,232, 0, 84,169, 64, 46,124,227, 59,120, 65,157, 0, 24, /* 0x1330 */
|
||||||
|
65,154, 2,188,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x1340 */
|
||||||
|
125, 37, 3,120,125,100, 58, 46, 85, 0,170,254,125, 64, 89,214, /* 0x1350 */
|
||||||
|
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x1360 */
|
||||||
|
124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16, /* 0x1370 */
|
||||||
|
125, 72, 83,120,124, 4, 59, 46, 72, 0, 0, 16,124,170, 40, 80, /* 0x1380 */
|
||||||
|
56,103, 0, 1,125,100, 59, 46, 66, 0,255,144, 56, 0, 0, 1, /* 0x1390 */
|
||||||
|
47,151, 0, 3,124, 0,216, 48,124, 96, 24, 80,124, 99,226, 20, /* 0x13a0 */
|
||||||
|
65,157, 1,232, 47,131, 0, 3, 58,247, 0, 7,124,105, 27,120, /* 0x13b0 */
|
||||||
|
64,157, 0, 8, 57, 32, 0, 3, 85, 41, 56, 48,125, 56, 74, 20, /* 0x13c0 */
|
||||||
|
56,201, 3, 96, 57, 32, 0, 6,125, 41, 3,166, 63,224, 0,255, /* 0x13d0 */
|
||||||
|
99,255,255,255, 56,128, 0, 1,127,136,248, 64, 84,135, 8, 60, /* 0x13e0 */
|
||||||
|
127, 12,232, 0, 84,169, 64, 46,124,228, 59,120, 65,157, 0, 24, /* 0x13f0 */
|
||||||
|
65,154, 1,252,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x1400 */
|
||||||
|
125, 37, 3,120,125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, /* 0x1410 */
|
||||||
|
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x1420 */
|
||||||
|
124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16, /* 0x1430 */
|
||||||
|
125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 16,124,170, 40, 80, /* 0x1440 */
|
||||||
|
56,135, 0, 1,125,102, 59, 46, 66, 0,255,144, 56,132,255,192, /* 0x1450 */
|
||||||
|
47,132, 0, 3,124,154, 35,120, 64,157, 1, 40, 47,132, 0, 13, /* 0x1460 */
|
||||||
|
124,137, 14,112, 84,128, 7,254, 57,105,255,255, 96, 26, 0, 2, /* 0x1470 */
|
||||||
|
125,105, 3,166, 65,157, 0, 32,127, 90, 88, 48, 87, 73, 8, 60, /* 0x1480 */
|
||||||
|
125, 56, 74, 20, 84,128, 8, 60,125, 32, 72, 80, 56,201, 5, 94, /* 0x1490 */
|
||||||
|
72, 0, 0,100, 57, 41,255,251,125, 41, 3,166, 61, 96, 0,255, /* 0x14a0 */
|
||||||
|
97,107,255,255,127,136, 88, 64,127, 12,232, 0, 84,169, 64, 46, /* 0x14b0 */
|
||||||
|
87, 90, 8, 60, 65,157, 0, 24, 65,154, 1, 52,136, 12, 0, 0, /* 0x14c0 */
|
||||||
|
85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, 85, 8,248,126, /* 0x14d0 */
|
||||||
|
127,133, 64, 64, 65,156, 0, 12,124,168, 40, 80, 99, 90, 0, 1, /* 0x14e0 */
|
||||||
|
66, 0,255,196, 56, 0, 0, 4,124, 9, 3,166, 87, 90, 32, 54, /* 0x14f0 */
|
||||||
|
56,216, 6, 68, 60,128, 0,255, 96,132,255,255, 59,128, 0, 1, /* 0x1500 */
|
||||||
|
59,224, 0, 1,127,136, 32, 64, 87,231, 8, 60,127, 12,232, 0, /* 0x1510 */
|
||||||
|
84,169, 64, 46,124,255, 59,120, 65,157, 0, 24, 65,154, 0,208, /* 0x1520 */
|
||||||
|
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x1530 */
|
||||||
|
125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0, /* 0x1540 */
|
||||||
|
127,133, 80, 64,124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, /* 0x1550 */
|
||||||
|
125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16,125, 72, 83,120, /* 0x1560 */
|
||||||
|
124, 6, 59, 46, 72, 0, 0, 20,124,170, 40, 80, 59,231, 0, 1, /* 0x1570 */
|
||||||
|
125,102, 59, 46,127, 90,227,120, 87,156, 8, 60, 66, 0,255,136, /* 0x1580 */
|
||||||
|
55, 90, 0, 1, 65,130, 0, 72,127,154,200, 64, 56, 99, 0, 2, /* 0x1590 */
|
||||||
|
65,157, 0, 92,124, 26,200, 80,127,245, 0,174, 56, 99,255,255, /* 0x15a0 */
|
||||||
|
127,249,169,174, 59, 57, 0, 1, 49, 99,255,255,125, 43, 25, 16, /* 0x15b0 */
|
||||||
|
124, 20,200, 16,124, 0, 1, 16,124, 0, 0,208,125, 43, 0, 57, /* 0x15c0 */
|
||||||
|
64,130,255,212,127,153,160, 64, 65,156,247,172, 60, 0, 0,255, /* 0x15d0 */
|
||||||
|
96, 0,255,255,127,136, 0, 64, 65,157, 0, 32,127,140,232, 0, /* 0x15e0 */
|
||||||
|
56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, /* 0x15f0 */
|
||||||
|
72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80, /* 0x1600 */
|
||||||
|
144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100, /* 0x1610 */
|
||||||
|
185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96,128, 33, 0, 0, /* 0x1620 */
|
||||||
|
128, 1, 0, 4,124, 8, 3,166,128, 6, 0, 0,125,168, 3,166, /* 0x1630 */
|
||||||
|
56,165, 0, 1, 56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80, /* 0x1640 */
|
||||||
|
144,166, 0, 0, 78,128, 0, 32, 72, 0, 0, 1, 80, 82, 79, 84, /* 0x1650 */
|
||||||
|
95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, /* 0x1660 */
|
||||||
|
32,102, 97,105,108,101,100, 46, 10, 0, 0, 0, 56,160, 0, 30, /* 0x1670 */
|
||||||
|
124,136, 2,166, 56, 96, 0, 2, 56, 0, 0, 4, 68, 0, 0, 2, /* 0x1680 */
|
||||||
|
56, 96, 0,127, 56, 0, 0, 1, 68, 0, 0, 2,127,200, 2,166, /* 0x1690 */
|
||||||
|
57, 0, 0, 0, 56,224,255,255,128,126, 0, 4, 56,192, 0, 50, /* 0x16a0 */
|
||||||
|
56,160, 0, 7, 56,128, 16, 0,124, 99,242, 20, 56, 0, 0, 90, /* 0x16b0 */
|
||||||
|
56, 99, 16, 11, 84, 99, 0, 38, 68, 0, 0, 2, 65,131, 0, 32, /* 0x16c0 */
|
||||||
|
127,233, 3,166,128, 30, 0, 0,136,254, 0, 8, 56,193, 0,124, /* 0x16d0 */
|
||||||
|
144, 1, 0,124,124,101, 27,120,124,104, 3,166,128,158, 0, 4, /* 0x16e0 */
|
||||||
|
56,126, 0, 12, 78,128, 4, 32,148, 33,255,128,188, 65, 0, 4, /* 0x16f0 */
|
||||||
|
127,232, 2,166, 75,255,255,153, 0, 46,115,121,109,116, 97, 98, /* 0x1700 */
|
||||||
|
0, 46,115,116,114,116, 97, 98, 0, 46,115,104,115,116,114,116, /* 0x1710 */
|
||||||
|
97, 98, 0, 46,114,101,108, 97, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x1720 */
|
||||||
|
0, 78, 82, 86, 95, 67, 79, 77, 77, 79, 78, 0, 46,114,101,108, /* 0x1730 */
|
||||||
|
97, 78, 82, 86, 50, 69, 0, 46,114,101,108, 97, 78, 82, 86, 50, /* 0x1740 */
|
||||||
|
66, 0, 46,114,101,108, 97, 76, 90, 77, 65, 95, 69, 76, 70, 48, /* 0x1750 */
|
||||||
|
48, 0, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 0, 76, 90, 77, /* 0x1760 */
|
||||||
|
65, 95, 68, 69, 67, 50, 48, 0, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x1770 */
|
||||||
|
51, 48, 0, 46,114,101,108, 97, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x1780 */
|
||||||
|
0, 46,114,101,108, 97, 69, 76, 70, 77, 65, 73, 78, 90, 0, 0, /* 0x1790 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17a0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17b0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, /* 0x17c0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 4, /* 0x17d0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x17e0 */
|
||||||
|
0, 0, 0, 27, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17f0 */
|
||||||
|
0, 0, 27,136, 0, 0, 0, 12, 0, 0, 0, 18, 0, 0, 0, 1, /* 0x1800 */
|
||||||
|
0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 41, 0, 0, 0, 1, /* 0x1810 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, /* 0x1820 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x1830 */
|
||||||
|
0, 0, 0, 57, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1840 */
|
||||||
|
0, 0, 0, 56, 0, 0, 1, 72, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1850 */
|
||||||
|
0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 4, /* 0x1860 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,148, 0, 0, 0, 12, /* 0x1870 */
|
||||||
|
0, 0, 0, 18, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x1880 */
|
||||||
|
0, 0, 0, 68, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1890 */
|
||||||
|
0, 0, 1,128, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x18a0 */
|
||||||
|
0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 4, /* 0x18b0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,160, 0, 0, 0, 12, /* 0x18c0 */
|
||||||
|
0, 0, 0, 18, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x18d0 */
|
||||||
|
0, 0, 0, 79, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x18e0 */
|
||||||
|
0, 0, 2,112, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x18f0 */
|
||||||
|
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 4, /* 0x1900 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,172, 0, 0, 0, 12, /* 0x1910 */
|
||||||
|
0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x1920 */
|
||||||
|
0, 0, 0, 90, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1930 */
|
||||||
|
0, 0, 2,244, 0, 0, 9,156, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1940 */
|
||||||
|
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,101, 0, 0, 0, 1, /* 0x1950 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,144, 0, 0, 9,156, /* 0x1960 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1970 */
|
||||||
|
0, 0, 0,112, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1980 */
|
||||||
|
0, 0, 22, 44, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1990 */
|
||||||
|
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 1, /* 0x19a0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 56, 0, 0, 0, 68, /* 0x19b0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x19c0 */
|
||||||
|
0, 0, 0,123, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x19d0 */
|
||||||
|
0, 0, 27,184, 0, 0, 0, 12, 0, 0, 0, 18, 0, 0, 0, 13, /* 0x19e0 */
|
||||||
|
0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0,142, 0, 0, 0, 1, /* 0x19f0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,124, 0, 0, 0,140, /* 0x1a00 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x1a10 */
|
||||||
|
0, 0, 0,137, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a20 */
|
||||||
|
0, 0, 27,196, 0, 0, 0, 12, 0, 0, 0, 18, 0, 0, 0, 15, /* 0x1a30 */
|
||||||
|
0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 17, 0, 0, 0, 3, /* 0x1a40 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 8, 0, 0, 0,151, /* 0x1a50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1a60 */
|
||||||
|
0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a70 */
|
||||||
|
0, 0, 26,192, 0, 0, 0,192, 0, 0, 0, 19, 0, 0, 0, 11, /* 0x1a80 */
|
||||||
|
0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, 3, /* 0x1a90 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,128, 0, 0, 0, 8, /* 0x1aa0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1ab0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ac0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, /* 0x1ad0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 13, /* 0x1ae0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 15, /* 0x1af0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, /* 0x1b00 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 3, /* 0x1b10 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, /* 0x1b20 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 6, /* 0x1b30 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 8, /* 0x1b40 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 10, /* 0x1b50 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 11, /* 0x1b60 */
|
||||||
|
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, /* 0x1b70 */
|
||||||
|
0, 95,115,116, 97,114,116, 0, 0, 0, 0, 0, 0, 0, 3, 10, /* 0x1b80 */
|
||||||
|
0, 0, 0,124, 0, 0, 0,180, 0, 0, 2, 11, 0, 0, 0, 0, /* 0x1b90 */
|
||||||
|
0, 0, 0,144, 0, 0, 2, 11, 0, 0, 0, 0, 0, 0, 0, 8, /* 0x1ba0 */
|
||||||
|
0, 0, 1, 11, 0, 0, 0, 12, 0, 0, 0, 32, 0, 0, 3, 10, /* 0x1bb0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 2, 11, 0, 0, 0, 32, /* 0x1bc0 */
|
||||||
|
10,116,109,112, 47,112,111,119,101,114,112, 99, 45,108,105,110, /* 0x1bd0 */
|
||||||
|
117,120, 46,101,108,102, 45,101,110,116,114,121, 46, 98,105,110, /* 0x1be0 */
|
||||||
|
58, 32, 32, 32, 32, 32,102,105,108,101, 32,102,111,114,109, 97, /* 0x1bf0 */
|
||||||
|
116, 32,101,108,102, 51, 50, 45,112,111,119,101,114,112, 99, 10, /* 0x1c00 */
|
||||||
|
10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, /* 0x1c10 */
|
||||||
|
97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122, /* 0x1c20 */
|
||||||
|
101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, /* 0x1c30 */
|
||||||
|
32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32, /* 0x1c40 */
|
||||||
|
111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, /* 0x1c50 */
|
||||||
|
10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, /* 0x1c60 */
|
||||||
|
32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, /* 0x1c70 */
|
||||||
|
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1c80 */
|
||||||
|
32, 48, 48, 48, 48, 48, 48, 51, 52, 32, 32, 50, 42, 42, 50, 32, /* 0x1c90 */
|
||||||
|
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, /* 0x1ca0 */
|
||||||
|
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, /* 0x1cb0 */
|
||||||
|
82, 86, 95, 67, 79, 77, 77, 79, 78, 32, 32, 32, 32, 48, 48, 48, /* 0x1cc0 */
|
||||||
|
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1cd0 */
|
||||||
|
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1ce0 */
|
||||||
|
48, 51, 56, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, /* 0x1cf0 */
|
||||||
|
78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, /* 0x1d00 */
|
||||||
|
50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1d10 */
|
||||||
|
48, 48, 48, 48, 48, 49, 52, 56, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1d20 */
|
||||||
|
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1d30 */
|
||||||
|
48, 48, 48, 48, 51, 56, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, /* 0x1d40 */
|
||||||
|
78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, /* 0x1d50 */
|
||||||
|
69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, /* 0x1d60 */
|
||||||
|
66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1d70 */
|
||||||
|
102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1d80 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, 48, /* 0x1d90 */
|
||||||
|
32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x1da0 */
|
||||||
|
44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1db0 */
|
||||||
|
89, 10, 32, 32, 52, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, /* 0x1dc0 */
|
||||||
|
32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, 32, 48, 48, /* 0x1dd0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1de0 */
|
||||||
|
32, 32, 48, 48, 48, 48, 48, 50, 55, 48, 32, 32, 50, 42, 42, 48, /* 0x1df0 */
|
||||||
|
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, /* 0x1e00 */
|
||||||
|
67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, /* 0x1e10 */
|
||||||
|
76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, /* 0x1e20 */
|
||||||
|
48, 48, 48, 57, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1e30 */
|
||||||
|
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1e40 */
|
||||||
|
48, 50,102, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x1e50 */
|
||||||
|
69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, /* 0x1e60 */
|
||||||
|
32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, /* 0x1e70 */
|
||||||
|
32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, 48, 48, 48, /* 0x1e80 */
|
||||||
|
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1e90 */
|
||||||
|
48, 48, 48, 48, 99, 57, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, /* 0x1ea0 */
|
||||||
|
79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1eb0 */
|
||||||
|
89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, /* 0x1ec0 */
|
||||||
|
32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 99, 32, 32, 48, 48, /* 0x1ed0 */
|
||||||
|
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1ee0 */
|
||||||
|
32, 32, 48, 48, 48, 48, 49, 54, 50, 99, 32, 32, 50, 42, 42, 48, /* 0x1ef0 */
|
||||||
|
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, /* 0x1f00 */
|
||||||
|
79, 78, 76, 89, 10, 32, 32, 56, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x1f10 */
|
||||||
|
89, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 52, 52, 32, /* 0x1f20 */
|
||||||
|
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1f30 */
|
||||||
|
48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 54, 51, 56, 32, 32, 50, /* 0x1f40 */
|
||||||
|
42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1f50 */
|
||||||
|
69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, /* 0x1f60 */
|
||||||
|
32, 57, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, /* 0x1f70 */
|
||||||
|
32, 48, 48, 48, 48, 48, 48, 56, 99, 32, 32, 48, 48, 48, 48, 48, /* 0x1f80 */
|
||||||
|
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1f90 */
|
||||||
|
48, 48, 48, 49, 54, 55, 99, 32, 32, 50, 42, 42, 50, 32, 32, 67, /* 0x1fa0 */
|
||||||
|
79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, /* 0x1fb0 */
|
||||||
|
82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, /* 0x1fc0 */
|
||||||
|
84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1fd0 */
|
||||||
|
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x1fe0 */
|
||||||
|
51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x1ff0 */
|
||||||
|
95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2000 */
|
||||||
|
108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x2010 */
|
||||||
|
9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, /* 0x2020 */
|
||||||
|
78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x2030 */
|
||||||
|
32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, /* 0x2040 */
|
||||||
|
48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, /* 0x2050 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, /* 0x2060 */
|
||||||
|
69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x2070 */
|
||||||
|
48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, /* 0x2080 */
|
||||||
|
48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, /* 0x2090 */
|
||||||
|
67, 79, 77, 77, 79, 78, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x20a0 */
|
||||||
|
78, 82, 86, 95, 67, 79, 77, 77, 79, 78, 10, 48, 48, 48, 48, 48, /* 0x20b0 */
|
||||||
|
48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, /* 0x20c0 */
|
||||||
|
69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, /* 0x20d0 */
|
||||||
|
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x20e0 */
|
||||||
|
32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x20f0 */
|
||||||
|
32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2100 */
|
||||||
|
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, /* 0x2110 */
|
||||||
|
48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x2120 */
|
||||||
|
95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2130 */
|
||||||
|
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2140 */
|
||||||
|
49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x2150 */
|
||||||
|
95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2160 */
|
||||||
|
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2170 */
|
||||||
|
50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x2180 */
|
||||||
|
95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2190 */
|
||||||
|
103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x21a0 */
|
||||||
|
9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, /* 0x21b0 */
|
||||||
|
10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x21c0 */
|
||||||
|
67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, /* 0x21d0 */
|
||||||
|
73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, /* 0x21e0 */
|
||||||
|
89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x21f0 */
|
||||||
|
32, 86, 65, 76, 85, 69, 32, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2200 */
|
||||||
|
32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, /* 0x2210 */
|
||||||
|
32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, /* 0x2220 */
|
||||||
|
48, 48, 48, 48, 55, 99, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x2230 */
|
||||||
|
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x2240 */
|
||||||
|
91, 78, 82, 86, 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, /* 0x2250 */
|
||||||
|
32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2260 */
|
||||||
|
32, 32, 32, 32, 86, 65, 76, 85, 69, 32, 10, 48, 48, 48, 48, 48, /* 0x2270 */
|
||||||
|
48, 98, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, /* 0x2280 */
|
||||||
|
32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 10, /* 0x2290 */
|
||||||
|
10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, /* 0x22a0 */
|
||||||
|
82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, /* 0x22b0 */
|
||||||
|
10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x22c0 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x22d0 */
|
||||||
|
69, 32, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, 95, 80, 80, /* 0x22e0 */
|
||||||
|
67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 69, 76, /* 0x22f0 */
|
||||||
|
70, 77, 65, 73, 78, 89, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x2300 */
|
||||||
|
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x2310 */
|
||||||
|
91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, /* 0x2320 */
|
||||||
|
70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, /* 0x2330 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 32, 10, /* 0x2340 */
|
||||||
|
48, 48, 48, 48, 48, 48, 48, 56, 32, 82, 95, 80, 80, 67, 95, 82, /* 0x2350 */
|
||||||
|
69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, /* 0x2360 */
|
||||||
|
68, 69, 67, 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 99, /* 0x2370 */
|
||||||
|
10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x2380 */
|
||||||
|
67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, /* 0x2390 */
|
||||||
|
73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, /* 0x23a0 */
|
||||||
|
89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x23b0 */
|
||||||
|
32, 86, 65, 76, 85, 69, 32, 10, 48, 48, 48, 48, 48, 48, 50, 48, /* 0x23c0 */
|
||||||
|
32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, /* 0x23d0 */
|
||||||
|
32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10, 10, 82, 69, /* 0x23e0 */
|
||||||
|
76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, /* 0x23f0 */
|
||||||
|
32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, /* 0x2400 */
|
||||||
|
10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x2410 */
|
||||||
|
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x2420 */
|
||||||
|
69, 32, 10, 48, 48, 48, 48, 48, 48, 53, 48, 32, 82, 95, 80, 80, /* 0x2430 */
|
||||||
|
67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 69, 76, /* 0x2440 */
|
||||||
|
70, 77, 65, 73, 78, 89, 43, 48,120, 48, 48, 48, 48, 48, 48, 50, /* 0x2450 */
|
||||||
|
48, 10, 10, 10 /* 0x2460 */
|
||||||
};
|
};
|
||||||
|
|||||||
+112
-111
@@ -1,4 +1,4 @@
|
|||||||
/* powerpc-linux.elf-fold.h -- created from powerpc-linux.elf-fold.bin, 1936 (0x790) bytes
|
/* powerpc-linux.elf-fold.h -- created from powerpc-linux.elf-fold.bin, 1944 (0x798) bytes
|
||||||
|
|
||||||
This file is part of the UPX executable compressor.
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
@@ -27,17 +27,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LINUX_ELFPPC32_FOLD_SIZE 1936
|
#define LINUX_ELFPPC32_FOLD_SIZE 1944
|
||||||
#define LINUX_ELFPPC32_FOLD_ADLER32 0x1a2f7017
|
#define LINUX_ELFPPC32_FOLD_ADLER32 0x727175e2
|
||||||
#define LINUX_ELFPPC32_FOLD_CRC32 0xf69d4404
|
#define LINUX_ELFPPC32_FOLD_CRC32 0xe344893c
|
||||||
|
|
||||||
unsigned char linux_elfppc32_fold[1936] = {
|
unsigned char linux_elfppc32_fold[1944] = {
|
||||||
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
|
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
|
||||||
0, 2, 0, 20, 0, 0, 0, 1, 0, 16, 0,128, 0, 0, 0, 52, /* 0x 10 */
|
0, 2, 0, 20, 0, 0, 0, 1, 0, 16, 0,128, 0, 0, 0, 52, /* 0x 10 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, /* 0x 20 */
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, /* 0x 20 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 16, 0, 0, /* 0x 30 */
|
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 16, 0, 0, /* 0x 30 */
|
||||||
0, 16, 0, 0, 0, 0, 7,144, 0, 0, 7,144, 0, 0, 0, 5, /* 0x 40 */
|
0, 16, 0, 0, 0, 0, 7,152, 0, 0, 7,152, 0, 0, 0, 5, /* 0x 40 */
|
||||||
0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 7,144, 0, 0, 0, 0, /* 0x 50 */
|
0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 7,152, 0, 0, 0, 0, /* 0x 50 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
|
||||||
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
||||||
72, 0, 0,125, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 80 */
|
72, 0, 0,125, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 80 */
|
||||||
@@ -49,108 +49,109 @@ unsigned char linux_elfppc32_fold[1936] = {
|
|||||||
66, 0,255,240, 78,128, 0, 32,128, 73, 0, 0, 57, 41, 0, 4, /* 0x e0 */
|
66, 0,255,240, 78,128, 0, 32,128, 73, 0, 0, 57, 41, 0, 4, /* 0x e0 */
|
||||||
47,130, 0, 0, 64,158,255,244, 78,128, 0, 32,125, 8, 2,166, /* 0x f0 */
|
47,130, 0, 0, 64,158,255,244, 78,128, 0, 32,125, 8, 2,166, /* 0x f0 */
|
||||||
129, 33, 0, 0, 75,255,255,229, 75,255,255,225,128,159,255,248, /* 0x 100 */
|
129, 33, 0, 0, 75,255,255,229, 75,255,255,225,128,159,255,248, /* 0x 100 */
|
||||||
85, 30, 0, 38, 56,161,248, 0,127,231,251,120,124,100,248, 80, /* 0x 110 */
|
85, 30, 0, 38,127,231,251,120,127,164,248, 80, 56,161,248, 0, /* 0x 110 */
|
||||||
56, 33,247,240, 84,125, 0, 38,128,195, 0, 24, 72, 0, 5, 13, /* 0x 120 */
|
59,189,255,248, 56,132,255,140, 56,125, 0,116, 56, 33,247,240, /* 0x 120 */
|
||||||
124,127, 27,120,127,163,235,120,124,157,240, 80, 72, 0, 0, 81, /* 0x 130 */
|
128,195, 0, 24, 72, 0, 5, 13,124,127, 27,120,127,163,235,120, /* 0x 130 */
|
||||||
127,232, 3,166,184, 65, 8, 20,128, 33, 8, 16, 78,128, 0, 32, /* 0x 140 */
|
124,157,240, 80, 72, 0, 0, 81,127,232, 3,166,184, 65, 8, 20, /* 0x 140 */
|
||||||
56, 0, 0, 90, 68, 0, 0, 2, 64,163, 0, 8, 56, 96,255,255, /* 0x 150 */
|
128, 33, 8, 16, 78,128, 0, 32, 56, 0, 0, 90, 68, 0, 0, 2, /* 0x 150 */
|
||||||
78,128, 0, 32, 56, 0, 0, 1, 75,255,255,236, 56, 0, 0, 3, /* 0x 160 */
|
64,163, 0, 8, 56, 96,255,255, 78,128, 0, 32, 56, 0, 0, 1, /* 0x 160 */
|
||||||
75,255,255,228, 56, 0, 0, 5, 75,255,255,220, 56, 0, 0, 6, /* 0x 170 */
|
75,255,255,236, 56, 0, 0, 3, 75,255,255,228, 56, 0, 0, 5, /* 0x 170 */
|
||||||
75,255,255,212, 56, 0, 0,125, 75,255,255,204, 56, 0, 0, 91, /* 0x 180 */
|
75,255,255,220, 56, 0, 0, 6, 75,255,255,212, 56, 0, 0,125, /* 0x 180 */
|
||||||
75,255,255,196, 56, 0, 0, 45, 75,255,255,188,124, 8, 2,166, /* 0x 190 */
|
75,255,255,204, 56, 0, 0, 91, 75,255,255,196, 56, 0, 0, 45, /* 0x 190 */
|
||||||
148, 33,255,240,144, 1, 0, 20,128, 3, 0, 0,129, 35, 0, 4, /* 0x 1a0 */
|
75,255,255,188,124, 8, 2,166,148, 33,255,240,144, 1, 0, 20, /* 0x 1a0 */
|
||||||
127,128, 40, 64, 64,188, 0, 12, 56, 96, 0,127, 75,255,255,169, /* 0x 1b0 */
|
128, 3, 0, 0,129, 35, 0, 4,127,128, 40, 64, 64,188, 0, 12, /* 0x 1b0 */
|
||||||
47,133, 0, 0, 65,158, 0, 28,124,169, 3,166,136, 9, 0, 0, /* 0x 1c0 */
|
56, 96, 0,127, 75,255,255,169, 47,133, 0, 0, 65,158, 0, 28, /* 0x 1c0 */
|
||||||
57, 41, 0, 1,152, 4, 0, 0, 56,132, 0, 1, 66, 0,255,240, /* 0x 1d0 */
|
124,169, 3,166,136, 9, 0, 0, 57, 41, 0, 1,152, 4, 0, 0, /* 0x 1d0 */
|
||||||
128, 3, 0, 0,129, 35, 0, 4,124, 5, 0, 80,144, 3, 0, 0, /* 0x 1e0 */
|
56,132, 0, 1, 66, 0,255,240,128, 3, 0, 0,129, 35, 0, 4, /* 0x 1e0 */
|
||||||
128, 1, 0, 20,125, 41, 42, 20,124, 8, 3,166, 56, 33, 0, 16, /* 0x 1f0 */
|
124, 5, 0, 80,144, 3, 0, 0,128, 1, 0, 20,125, 41, 42, 20, /* 0x 1f0 */
|
||||||
145, 35, 0, 4, 78,128, 0, 32,124, 8, 2,166,148, 33,255,192, /* 0x 200 */
|
124, 8, 3,166, 56, 33, 0, 16,145, 35, 0, 4, 78,128, 0, 32, /* 0x 200 */
|
||||||
144, 1, 0, 68,128, 4, 0, 0,191,129, 0, 48, 47,128, 0, 0, /* 0x 210 */
|
124, 8, 2,166,148, 33,255,192,144, 1, 0, 68,128, 4, 0, 0, /* 0x 210 */
|
||||||
124,159, 35,120,124,126, 27,120,124,188, 43,120,124,221, 51,120, /* 0x 220 */
|
191,129, 0, 48, 47,128, 0, 0,124,159, 35,120,124,126, 27,120, /* 0x 220 */
|
||||||
65,158, 1, 36, 56,160, 0, 12,127,195,243,120, 56,129, 0, 16, /* 0x 230 */
|
124,188, 43,120,124,221, 51,120, 65,158, 1, 36, 56,160, 0, 12, /* 0x 230 */
|
||||||
75,255,255, 93,129, 33, 0, 16,128,161, 0, 20, 47,137, 0, 0, /* 0x 240 */
|
127,195,243,120, 56,129, 0, 16, 75,255,255, 93,129, 33, 0, 16, /* 0x 240 */
|
||||||
64,190, 0, 36, 60, 0, 33, 88, 96, 0, 80, 85,127,133, 0, 0, /* 0x 250 */
|
128,161, 0, 20, 47,137, 0, 0, 64,190, 0, 36, 60, 0, 33, 88, /* 0x 250 */
|
||||||
64,190, 0, 28,128, 30, 0, 0, 47,128, 0, 0, 65,190, 0,232, /* 0x 260 */
|
96, 0, 80, 85,127,133, 0, 0, 64,190, 0, 28,128, 30, 0, 0, /* 0x 260 */
|
||||||
72, 0, 0, 12, 47,133, 0, 0, 64,190, 0, 12, 56, 96, 0,127, /* 0x 270 */
|
47,128, 0, 0, 65,190, 0,232, 72, 0, 0, 12, 47,133, 0, 0, /* 0x 270 */
|
||||||
75,255,254,229,127, 5, 72, 64, 65,185,255,244,128, 31, 0, 0, /* 0x 280 */
|
64,190, 0, 12, 56, 96, 0,127, 75,255,254,229,127, 5, 72, 64, /* 0x 280 */
|
||||||
127,137, 0, 64, 65,189,255,232,128, 31, 0, 4, 64,152, 0,136, /* 0x 290 */
|
65,185,255,244,128, 31, 0, 0,127,137, 0, 64, 65,189,255,232, /* 0x 290 */
|
||||||
124,164, 43,120,128,126, 0, 4,124, 5, 3,120, 56,193, 0, 32, /* 0x 2a0 */
|
128, 31, 0, 4, 64,152, 0,136,124,164, 43,120,128,126, 0, 4, /* 0x 2a0 */
|
||||||
128,225, 0, 24,145, 33, 0, 32,127,136, 3,166, 78,128, 0, 33, /* 0x 2b0 */
|
124, 5, 3,120, 56,193, 0, 32,136,225, 0, 24,145, 33, 0, 32, /* 0x 2b0 */
|
||||||
47,131, 0, 0, 64,190,255,184,128,129, 0, 32,128, 1, 0, 16, /* 0x 2c0 */
|
127,136, 3,166, 78,128, 0, 33, 47,131, 0, 0, 64,190,255,184, /* 0x 2c0 */
|
||||||
127,132, 0, 0, 64,190,255,168,136,193, 0, 25, 49, 61,255,255, /* 0x 2d0 */
|
128,129, 0, 32,128, 1, 0, 16,127,132, 0, 0, 64,190,255,168, /* 0x 2d0 */
|
||||||
124, 9,233, 16,125, 38, 0,208, 85, 41, 15,254,125, 43, 0, 57, /* 0x 2e0 */
|
136,193, 0, 25, 49, 61,255,255,124, 9,233, 16,125, 38, 0,208, /* 0x 2e0 */
|
||||||
65,162, 0, 20,128,127, 0, 4,136,161, 0, 26,127,168, 3,166, /* 0x 2f0 */
|
85, 41, 15,254,125, 43, 0, 57, 65,162, 0, 20,128,127, 0, 4, /* 0x 2f0 */
|
||||||
78,128, 0, 33,128, 30, 0, 4,129, 97, 0, 20,129, 62, 0, 0, /* 0x 300 */
|
136,161, 0, 26,127,168, 3,166, 78,128, 0, 33,128, 30, 0, 4, /* 0x 300 */
|
||||||
124, 0, 90, 20,125, 43, 72, 80,144, 30, 0, 4,145, 62, 0, 0, /* 0x 310 */
|
129, 97, 0, 20,129, 62, 0, 0,124, 0, 90, 20,125, 43, 72, 80, /* 0x 310 */
|
||||||
72, 0, 0, 16,124, 4, 3,120,127,195,243,120, 75,255,254,113, /* 0x 320 */
|
144, 30, 0, 4,145, 62, 0, 0, 72, 0, 0, 16,124, 4, 3,120, /* 0x 320 */
|
||||||
129, 97, 0, 16,129, 63, 0, 0,128, 31, 0, 4,125, 43, 72, 80, /* 0x 330 */
|
127,195,243,120, 75,255,254,113,129, 97, 0, 16,129, 63, 0, 0, /* 0x 330 */
|
||||||
47,137, 0, 0,124, 0, 90, 20,144, 31, 0, 4,145, 63, 0, 0, /* 0x 340 */
|
128, 31, 0, 4,125, 43, 72, 80, 47,137, 0, 0,124, 0, 90, 20, /* 0x 340 */
|
||||||
75,255,254,224,128, 1, 0, 68,187,129, 0, 48,124, 8, 3,166, /* 0x 350 */
|
144, 31, 0, 4,145, 63, 0, 0, 75,255,254,224,128, 1, 0, 68, /* 0x 350 */
|
||||||
56, 33, 0, 64, 78,128, 0, 32, 44, 3, 0, 0, 77,130, 0, 32, /* 0x 360 */
|
187,129, 0, 48,124, 8, 3,166, 56, 33, 0, 64, 78,128, 0, 32, /* 0x 360 */
|
||||||
48, 4,255,255,125, 96, 33, 16,128, 3, 0, 0,127,128, 32, 0, /* 0x 370 */
|
44, 3, 0, 0, 77,130, 0, 32, 48, 4,255,255,125, 96, 33, 16, /* 0x 370 */
|
||||||
104, 9, 0, 1, 33, 73, 0, 0,125, 42, 73, 20,125, 42, 88, 57, /* 0x 380 */
|
128, 3, 0, 0,127,128, 32, 0,104, 9, 0, 1, 33, 73, 0, 0, /* 0x 380 */
|
||||||
65,158, 0, 8, 65,162, 0, 16,144,163, 0, 4,144,131, 0, 0, /* 0x 390 */
|
125, 42, 73, 20,125, 42, 88, 57, 65,158, 0, 8, 65,162, 0, 16, /* 0x 390 */
|
||||||
78,128, 0, 32, 56, 99, 0, 8, 75,255,255,208,124, 8, 2,166, /* 0x 3a0 */
|
144,163, 0, 4,144,131, 0, 0, 78,128, 0, 32, 56, 99, 0, 8, /* 0x 3a0 */
|
||||||
148, 33,255,160,144, 1, 0,100,160, 3, 0, 16,161, 67, 0, 44, /* 0x 3b0 */
|
75,255,255,208,124, 8, 2,166,148, 33,255,160,144, 1, 0,100, /* 0x 3b0 */
|
||||||
125,128, 0, 38,129, 35, 0, 28,104, 0, 0, 3, 53, 74,255,255, /* 0x 3c0 */
|
160, 3, 0, 16,161, 67, 0, 44,125,128, 0, 38,129, 35, 0, 28, /* 0x 3c0 */
|
||||||
124, 0, 0,208,190, 65, 0, 40,127,163, 74, 20,124,121, 27,120, /* 0x 3d0 */
|
104, 0, 0, 3, 53, 74,255,255,124, 0, 0,208,190, 65, 0, 40, /* 0x 3d0 */
|
||||||
84, 3, 46,246,145,129, 0, 36,124,151, 35,120,124,178, 43,120, /* 0x 3e0 */
|
127,163, 74, 20,124,121, 27,120, 84, 3, 46,246,145,129, 0, 36, /* 0x 3e0 */
|
||||||
124,211, 51,120,124,244, 59,120,125, 21, 67,120, 56, 99, 8, 34, /* 0x 3f0 */
|
124,151, 35,120,124,178, 43,120,124,211, 51,120,124,244, 59,120, /* 0x 3f0 */
|
||||||
127,171,235,120, 59,224,255,255, 59,192, 0, 0, 65,128, 0, 68, /* 0x 400 */
|
125, 21, 67,120, 56, 99, 8, 34,127,171,235,120, 59,224,255,255, /* 0x 400 */
|
||||||
57, 74, 0, 1,125, 73, 3,166,128, 11, 0, 0, 47,128, 0, 1, /* 0x 410 */
|
59,192, 0, 0, 65,128, 0, 68, 57, 74, 0, 1,125, 73, 3,166, /* 0x 410 */
|
||||||
64,190, 0, 40,129, 43, 0, 8,127,137,248, 64, 64,156, 0, 8, /* 0x 420 */
|
128, 11, 0, 0, 47,128, 0, 1, 64,190, 0, 40,129, 43, 0, 8, /* 0x 420 */
|
||||||
125, 63, 75,120,128, 11, 0, 20,124, 0, 74, 20,127,158, 0, 64, /* 0x 430 */
|
127,137,248, 64, 64,156, 0, 8,125, 63, 75,120,128, 11, 0, 20, /* 0x 430 */
|
||||||
64,156, 0, 8,124, 30, 3,120, 57,107, 0, 32, 66, 0,255,204, /* 0x 440 */
|
124, 0, 74, 20,127,158, 0, 64, 64,156, 0, 8,124, 30, 3,120, /* 0x 440 */
|
||||||
87,255, 0, 38,125, 63,240, 80, 57, 41, 15,255, 85, 62, 0, 38, /* 0x 450 */
|
57,107, 0, 32, 66, 0,255,204, 87,255, 0, 38,125, 63,240, 80, /* 0x 450 */
|
||||||
124,102, 27,120,127,196,243,120,127,227,251,120, 56,160, 0, 0, /* 0x 460 */
|
57, 41, 15,255, 85, 62, 0, 38,124,102, 27,120,127,196,243,120, /* 0x 460 */
|
||||||
56,224,255,255, 57, 0, 0, 0, 75,255,252,217,160, 25, 0, 44, /* 0x 470 */
|
127,227,251,120, 56,160, 0, 0, 56,224,255,255, 57, 0, 0, 0, /* 0x 470 */
|
||||||
58,192, 0, 0,127,150, 0, 0,124, 3,242, 20,144, 1, 0, 8, /* 0x 480 */
|
75,255,252,217,160, 25, 0, 44, 58,192, 0, 0,127,150, 0, 0, /* 0x 480 */
|
||||||
127, 31, 24, 80, 64,156, 1,128, 46, 23, 0, 0, 65,146, 0, 40, /* 0x 490 */
|
124, 3,242, 20,144, 1, 0, 8,127, 31, 24, 80, 64,156, 1,128, /* 0x 490 */
|
||||||
128, 29, 0, 0, 47,128, 0, 6, 64,190, 0, 28,128,189, 0, 8, /* 0x 4a0 */
|
46, 23, 0, 0, 65,146, 0, 40,128, 29, 0, 0, 47,128, 0, 6, /* 0x 4a0 */
|
||||||
126, 99,155,120,124,165,194, 20, 56,128, 0, 3, 75,255,254,173, /* 0x 4b0 */
|
64,190, 0, 28,128,189, 0, 8,126, 99,155,120,124,165,194, 20, /* 0x 4b0 */
|
||||||
72, 0, 1, 64,128, 29, 0, 0, 47,128, 0, 1, 64,190, 1, 52, /* 0x 4c0 */
|
56,128, 0, 3, 75,255,254,173, 72, 0, 1, 64,128, 29, 0, 0, /* 0x 4c0 */
|
||||||
128, 29, 0, 24,129, 93, 0, 8, 61, 32,115, 81, 84, 0, 22,250, /* 0x 4d0 */
|
47,128, 0, 1, 64,190, 1, 52,128, 29, 0, 24,129, 93, 0, 8, /* 0x 4d0 */
|
||||||
97, 41, 98, 64,129,125, 0, 20,125, 41, 4, 48, 85, 94, 5, 62, /* 0x 4e0 */
|
61, 32,115, 81, 84, 0, 22,250, 97, 41, 98, 64,129,125, 0, 20, /* 0x 4e0 */
|
||||||
48, 23,255,255,124,160,185, 16,128, 29, 0, 16, 85, 58, 7,126, /* 0x 4f0 */
|
125, 41, 4, 48, 85, 94, 5, 62, 48, 23,255,255,124,160,185, 16, /* 0x 4f0 */
|
||||||
127,106, 90, 20, 84,165, 8, 60,127,254, 80, 80,144, 1, 0, 16, /* 0x 500 */
|
128, 29, 0, 16, 85, 58, 7,126,127,106, 90, 20, 84,165, 8, 60, /* 0x 500 */
|
||||||
145, 65, 0, 20,127,128,242, 20,127,255,194, 20,127,123,194, 20, /* 0x 510 */
|
127,254, 80, 80,144, 1, 0, 16,145, 65, 0, 20,127,128,242, 20, /* 0x 510 */
|
||||||
124,165,211,120, 65,146, 0, 12, 56,192, 0, 50, 72, 0, 0, 8, /* 0x 520 */
|
127,255,194, 20,127,123,194, 20,124,165,211,120, 65,146, 0, 12, /* 0x 520 */
|
||||||
56,192, 0, 18, 64,146, 0, 12,126, 71,147,120, 72, 0, 0, 8, /* 0x 530 */
|
56,192, 0, 50, 72, 0, 0, 8, 56,192, 0, 18, 64,146, 0, 12, /* 0x 530 */
|
||||||
56,224,255,255,129, 29, 0, 4,127,227,251,120,125, 30, 64, 80, /* 0x 540 */
|
126, 71,147,120, 72, 0, 0, 8, 56,224,255,255,129, 29, 0, 4, /* 0x 540 */
|
||||||
127,132,227,120, 75,255,251,253,127,159, 24, 0, 64,158, 0,104, /* 0x 550 */
|
127,227,251,120,125, 30, 64, 80,127,132,227,120, 75,255,251,253, /* 0x 550 */
|
||||||
65,178, 0, 24,126,227,187,120, 56,129, 0, 16,126,133,163,120, /* 0x 560 */
|
127,159, 24, 0, 64,158, 0,104, 65,178, 0, 24,126,227,187,120, /* 0x 560 */
|
||||||
126,166,171,120, 75,255,252,149,115, 64, 0, 2,124, 28, 0,208, /* 0x 570 */
|
56,129, 0, 16,126,133,163,120,126,166,171,120, 75,255,252,149, /* 0x 570 */
|
||||||
84, 30, 5, 62, 65,130, 0, 36, 47,158, 0, 0,125, 63,226, 20, /* 0x 580 */
|
115, 64, 0, 2,124, 28, 0,208, 84, 30, 5, 62, 65,130, 0, 36, /* 0x 580 */
|
||||||
65,158, 0, 24,127,201, 3,166, 56, 0, 0, 0,152, 9, 0, 0, /* 0x 590 */
|
47,158, 0, 0,125, 63,226, 20, 65,158, 0, 24,127,201, 3,166, /* 0x 590 */
|
||||||
57, 41, 0, 1, 66, 0,255,248, 65,178, 0, 36,127,227,251,120, /* 0x 5a0 */
|
56, 0, 0, 0,152, 9, 0, 0, 57, 41, 0, 1, 66, 0,255,248, /* 0x 5a0 */
|
||||||
127,132,227,120,127, 69,211,120, 75,255,251,205, 47,131, 0, 0, /* 0x 5b0 */
|
65,178, 0, 36,127,227,251,120,127,132,227,120,127, 69,211,120, /* 0x 5b0 */
|
||||||
65,190, 0, 12, 56, 96, 0,127, 75,255,251,157,124, 28,242, 20, /* 0x 5c0 */
|
75,255,251,205, 47,131, 0, 0, 65,190, 0, 12, 56, 96, 0,127, /* 0x 5c0 */
|
||||||
127,255, 2, 20,127,159,216, 64, 64,188, 0, 40,124,159,216, 80, /* 0x 5d0 */
|
75,255,251,157,124, 28,242, 20,127,255, 2, 20,127,159,216, 64, /* 0x 5d0 */
|
||||||
127, 69,211,120,127,227,251,120, 56,192, 0, 50, 56,224,255,255, /* 0x 5e0 */
|
64,188, 0, 40,124,159,216, 80,127, 69,211,120,127,227,251,120, /* 0x 5e0 */
|
||||||
57, 0, 0, 0, 75,255,251, 93,127,159, 24, 0, 64,190,255,200, /* 0x 5f0 */
|
56,192, 0, 50, 56,224,255,255, 57, 0, 0, 0, 75,255,251, 93, /* 0x 5f0 */
|
||||||
160, 25, 0, 44, 58,214, 0, 1,127,150, 0, 0, 59,189, 0, 32, /* 0x 600 */
|
127,159, 24, 0, 64,190,255,200,160, 25, 0, 44, 58,214, 0, 1, /* 0x 600 */
|
||||||
75,255,254,132,128,121, 0, 24,128, 1, 0,100,129,129, 0, 36, /* 0x 610 */
|
127,150, 0, 0, 59,189, 0, 32, 75,255,254,132,128,121, 0, 24, /* 0x 610 */
|
||||||
124, 99,194, 20,124, 8, 3,166,186, 65, 0, 40,125,128,129, 32, /* 0x 620 */
|
128, 1, 0,100,129,129, 0, 36,124, 99,194, 20,124, 8, 3,166, /* 0x 620 */
|
||||||
56, 33, 0, 96, 78,128, 0, 32,124, 8, 2,166,148, 33,255,192, /* 0x 630 */
|
186, 65, 0, 40,125,128,129, 32, 56, 33, 0, 96, 78,128, 0, 32, /* 0x 630 */
|
||||||
144, 1, 0, 68, 56,132,255,232, 56, 3, 0, 24,144, 1, 0, 12, /* 0x 640 */
|
124, 8, 2,166,148, 33,255,192,144, 1, 0, 68, 56,132,255,232, /* 0x 640 */
|
||||||
144,129, 0, 8,128, 3, 0, 24,191, 97, 0, 44,129, 97, 0, 8, /* 0x 650 */
|
56, 3, 0, 24,144, 1, 0, 12,144,129, 0, 8,128, 3, 0, 24, /* 0x 650 */
|
||||||
124,191, 43,120,129,129, 0, 12,124,229, 59,120, 56,192, 0, 0, /* 0x 660 */
|
191, 97, 0, 44,129, 97, 0, 8,124,191, 43,120,129,129, 0, 12, /* 0x 660 */
|
||||||
56, 97, 0, 8, 56,129, 0, 16, 59,223, 0, 52,125, 61, 75,120, /* 0x 670 */
|
124,229, 59,120, 56,192, 0, 0, 56, 97, 0, 8, 56,129, 0, 16, /* 0x 670 */
|
||||||
124,251, 59,120,144, 1, 0, 16,125, 28, 67,120,145, 97, 0, 24, /* 0x 680 */
|
59,223, 0, 52,125, 61, 75,120,124,251, 59,120,144, 1, 0, 16, /* 0x 680 */
|
||||||
145,129, 0, 28,147,225, 0, 20, 75,255,251,113,128,190, 0, 8, /* 0x 690 */
|
125, 28, 67,120,145, 97, 0, 24,145,129, 0, 28,147,225, 0, 20, /* 0x 690 */
|
||||||
127,163,235,120, 56,165, 0, 52, 56,128, 0, 3, 75,255,252,189, /* 0x 6a0 */
|
75,255,251,113,128,190, 0, 8,127,163,235,120, 56,165, 0, 52, /* 0x 6a0 */
|
||||||
160,191, 0, 44,127,163,235,120, 56,128, 0, 5, 75,255,252,173, /* 0x 6b0 */
|
56,128, 0, 3, 75,255,252,189,160,191, 0, 44,127,163,235,120, /* 0x 6b0 */
|
||||||
128,191, 0, 24,127,163,235,120, 56,128, 0, 9, 75,255,252,157, /* 0x 6c0 */
|
56,128, 0, 5, 75,255,252,173,128,191, 0, 24,127,163,235,120, /* 0x 6c0 */
|
||||||
127,103,219,120,127,136,227,120,127,227,251,120,127,166,235,120, /* 0x 6d0 */
|
56,128, 0, 9, 75,255,252,157,127,103,219,120,127,136,227,120, /* 0x 6d0 */
|
||||||
56,129, 0, 24, 56,160, 0, 0, 75,255,252,197,160, 31, 0, 44, /* 0x 6e0 */
|
127,227,251,120,127,166,235,120, 56,129, 0, 24, 56,160, 0, 0, /* 0x 6e0 */
|
||||||
124,124, 27,120, 59, 96, 0, 0,127,155, 0, 0, 64,156, 0,124, /* 0x 6f0 */
|
75,255,252,197,160, 31, 0, 44,124,124, 27,120, 59, 96, 0, 0, /* 0x 6f0 */
|
||||||
128, 30, 0, 0, 59,123, 0, 1, 47,128, 0, 3, 56,128, 0, 0, /* 0x 700 */
|
127,155, 0, 0, 64,156, 0,124,128, 30, 0, 0, 59,123, 0, 1, /* 0x 700 */
|
||||||
56,160, 0, 0, 64,190, 0, 88,128,126, 0, 8, 75,255,250, 89, /* 0x 710 */
|
47,128, 0, 3, 56,128, 0, 0, 56,160, 0, 0, 64,190, 0, 88, /* 0x 710 */
|
||||||
124,125, 27,121,127,228,251,120, 56,160, 2, 0, 65,128, 0, 40, /* 0x 720 */
|
128,126, 0, 8, 75,255,250, 89,124,125, 27,121,127,228,251,120, /* 0x 720 */
|
||||||
75,255,250, 61, 47,131, 2, 0, 56,128, 0, 0,127,227,251,120, /* 0x 730 */
|
56,160, 2, 0, 65,128, 0, 40, 75,255,250, 61, 47,131, 2, 0, /* 0x 730 */
|
||||||
127,165,235,120, 56,192, 0, 0, 56,224, 0, 0, 57, 0, 0, 0, /* 0x 740 */
|
56,128, 0, 0,127,227,251,120,127,165,235,120, 56,192, 0, 0, /* 0x 740 */
|
||||||
65,190, 0, 12, 56, 96, 0,127, 75,255,250, 13, 75,255,252, 81, /* 0x 750 */
|
56,224, 0, 0, 57, 0, 0, 0, 65,190, 0, 12, 56, 96, 0,127, /* 0x 750 */
|
||||||
124,124, 27,120,127,163,235,120, 75,255,250, 21,160, 31, 0, 44, /* 0x 760 */
|
75,255,250, 13, 75,255,252, 81,124,124, 27,120,127,163,235,120, /* 0x 760 */
|
||||||
59,222, 0, 32, 75,255,255,132,128, 1, 0, 68,127,131,227,120, /* 0x 770 */
|
75,255,250, 21,160, 31, 0, 44, 59,222, 0, 32, 75,255,255,132, /* 0x 770 */
|
||||||
124, 8, 3,166,187, 97, 0, 44, 56, 33, 0, 64, 78,128, 0, 32 /* 0x 780 */
|
128, 1, 0, 68,127,131,227,120,124, 8, 3,166,187, 97, 0, 44, /* 0x 780 */
|
||||||
|
56, 33, 0, 64, 78,128, 0, 32 /* 0x 790 */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,6 +32,10 @@
|
|||||||
//#include "arch/i386/macros2.ash"
|
//#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
#include "arch/amd64/regs.h"
|
#include "arch/amd64/regs.h"
|
||||||
|
#define section .section
|
||||||
|
|
||||||
|
sz_Ehdr= 64
|
||||||
|
sz_Phdr= 56
|
||||||
|
|
||||||
sz_l_info= 12
|
sz_l_info= 12
|
||||||
l_lsize= 8
|
l_lsize= 8
|
||||||
@@ -61,9 +65,10 @@ M_NRV2B_LE32=2 // ../conf.h
|
|||||||
M_NRV2E_LE32=8
|
M_NRV2E_LE32=8
|
||||||
|
|
||||||
|
|
||||||
.section LEXEC000
|
section ELFMAINX
|
||||||
_start: .globl _start
|
_start: .globl _start
|
||||||
call main // push &decompress
|
call main // push &decompress
|
||||||
|
ret_main:
|
||||||
|
|
||||||
/* Returns 0 on success; non-zero on failure. */
|
/* Returns 0 on success; non-zero on failure. */
|
||||||
decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
|
decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
|
||||||
@@ -74,6 +79,14 @@ decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint meth
|
|||||||
#define dst %arg3
|
#define dst %arg3
|
||||||
#define ldst %arg4 /* Out: actually a reference: &len_dst */
|
#define ldst %arg4 /* Out: actually a reference: &len_dst */
|
||||||
#define meth %arg5l
|
#define meth %arg5l
|
||||||
|
#define methb %arg5b
|
||||||
|
|
||||||
|
push %rbp; push %rbx // C callable
|
||||||
|
push ldst
|
||||||
|
push dst
|
||||||
|
addq src,lsrc; push lsrc // &input_eof
|
||||||
|
|
||||||
|
section NRV_COMMON
|
||||||
|
|
||||||
/* Working registers */
|
/* Working registers */
|
||||||
#define off %eax /* XXX: 2GB */
|
#define off %eax /* XXX: 2GB */
|
||||||
@@ -82,11 +95,6 @@ decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint meth
|
|||||||
#define bits %ebx
|
#define bits %ebx
|
||||||
#define disp %rbp
|
#define disp %rbp
|
||||||
|
|
||||||
push %rbp; push %rbx // C callable
|
|
||||||
push ldst
|
|
||||||
push dst
|
|
||||||
addq src,lsrc; push lsrc // &input_eof
|
|
||||||
|
|
||||||
movq src,%rsi // hardware src for movsb, lodsb
|
movq src,%rsi // hardware src for movsb, lodsb
|
||||||
movq dst,%rdi // hardware dst for movsb
|
movq dst,%rdi // hardware dst for movsb
|
||||||
xor bits,bits // empty; force refill
|
xor bits,bits // empty; force refill
|
||||||
@@ -154,14 +162,19 @@ copy1:
|
|||||||
copy0:
|
copy0:
|
||||||
rep; ret
|
rep; ret
|
||||||
|
|
||||||
#include "arch/amd64/nrv2e_d.S"
|
|
||||||
#include "arch/amd64/nrv2b_d.S"
|
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
cld
|
cld
|
||||||
pop %r11 // addq $ getbit - ra_setup,%r11 # &getbit
|
pop %r11 // addq $ getbit - ra_setup,%r11 # &getbit
|
||||||
cmpl $ M_NRV2E_LE32,meth; je top_n2e
|
|
||||||
cmpl $ M_NRV2B_LE32,meth; je top_n2b
|
section NRV2E
|
||||||
|
#include "arch/amd64/nrv2e_d.S"
|
||||||
|
|
||||||
|
section NRV2B
|
||||||
|
#include "arch/amd64/nrv2b_d.S"
|
||||||
|
|
||||||
|
#include "arch/amd64/lzma_d.S"
|
||||||
|
|
||||||
|
section ELFMAINY
|
||||||
eof:
|
eof:
|
||||||
pop %rcx // &input_eof
|
pop %rcx // &input_eof
|
||||||
movq %rsi,%rax; subq %rcx,%rax // src -= eof; // return 0: good; else: bad
|
movq %rsi,%rax; subq %rcx,%rax // src -= eof; // return 0: good; else: bad
|
||||||
@@ -170,20 +183,20 @@ eof:
|
|||||||
pop %rbx; pop %rbp
|
pop %rbx; pop %rbp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
/* Temporary until we get the buildLoader stuff working ... */
|
|
||||||
.ascii "\n$Id: UPX (C) 1996-2006 the UPX Team. "
|
|
||||||
.asciz "All Rights Reserved. http://upx.sf.net $\n"
|
|
||||||
|
|
||||||
/* These from /usr/include/asm-x86_64/unistd.h */
|
/* These from /usr/include/asm-x86_64/unistd.h */
|
||||||
__NR_write = 1
|
__NR_write = 1
|
||||||
__NR_exit = 60
|
__NR_exit = 60
|
||||||
|
|
||||||
msg_SELinux:
|
msg_SELinux:
|
||||||
push $ L71 - L70; pop %arg3 // length
|
push $ L71 - L70; pop %arg3 // length
|
||||||
call L71
|
call L72
|
||||||
L70:
|
L70:
|
||||||
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
|
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
|
||||||
L71:
|
L71:
|
||||||
|
// IDENTSTR goes here
|
||||||
|
|
||||||
|
section ELFMAINZ
|
||||||
|
L72:
|
||||||
pop %arg2 // message text
|
pop %arg2 // message text
|
||||||
push $2; pop %arg1 // fd stderr
|
push $2; pop %arg1 // fd stderr
|
||||||
push $ __NR_write; pop %rax
|
push $ __NR_write; pop %rax
|
||||||
@@ -232,7 +245,7 @@ unfold:
|
|||||||
push $ LENU // for unmap in fold
|
push $ LENU // for unmap in fold
|
||||||
movl $ CNTC,%ecx
|
movl $ CNTC,%ecx
|
||||||
push $ ADRX //# for upx_main
|
push $ ADRX //# for upx_main
|
||||||
push $ LENX // for upx_main
|
push %r15 // LENX for upx_main
|
||||||
|
|
||||||
/* Move and relocate if compressed overlaps uncompressed.
|
/* Move and relocate if compressed overlaps uncompressed.
|
||||||
Move by 0 when total compressed executable is < 3MB.
|
Move by 0 when total compressed executable is < 3MB.
|
||||||
@@ -251,7 +264,7 @@ unfold:
|
|||||||
push %rax // ret_addr after decompression
|
push %rax // ret_addr after decompression
|
||||||
xchgl %eax,%arg3l // %arg3= dst for unfolding XXX: 4GB
|
xchgl %eax,%arg3l // %arg3= dst for unfolding XXX: 4GB
|
||||||
lodsl; push %rax // allocate slot on stack
|
lodsl; push %rax // allocate slot on stack
|
||||||
movq %rsp,%arg4 // &len_dst ==> &do_not_care
|
movq %rsp,%arg4 // &len_dst ==> used by lzma for EOF
|
||||||
lodsl; xchgl %eax,%arg1l // sz_cpr XXX: 4GB
|
lodsl; xchgl %eax,%arg1l // sz_cpr XXX: 4GB
|
||||||
lodsl; movzbl %al,%arg5l // b_method
|
lodsl; movzbl %al,%arg5l // b_method
|
||||||
xchg %arg1l,%arg2l // XXX: 4GB
|
xchg %arg1l,%arg2l // XXX: 4GB
|
||||||
@@ -260,14 +273,16 @@ unfold:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
main:
|
main:
|
||||||
// int3 # uncomment for debugging
|
//// int3 # uncomment for debugging
|
||||||
pop %rbp // &decompress
|
pop %rbp // &decompress
|
||||||
|
movl -4-(ret_main - _start)(%rbp),%r15d // length which precedes stub
|
||||||
|
subl $ sz_Ehdr + 2*sz_Phdr + sz_l_info + sz_p_info,%r15d
|
||||||
call unfold // push &b_info
|
call unfold // push &b_info
|
||||||
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
|
// { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...}
|
||||||
|
|
||||||
/*__XTHEENDX__*/
|
/*__XTHEENDX__*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vi:ts=8:et:nowrap
|
vi:ts=8:et:nowrap
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
; lzma_d.S -- 64-bit assembly
|
||||||
|
;
|
||||||
|
; This file is part of the UPX executable compressor.
|
||||||
|
;
|
||||||
|
; Copyright (C) 2006-2006 Markus Franz Xaver Johannes Oberhumer
|
||||||
|
; All Rights Reserved.
|
||||||
|
;
|
||||||
|
; UPX and the UCL library are free software; you can redistribute them
|
||||||
|
; and/or modify them under the terms of the GNU General Public License as
|
||||||
|
; published by the Free Software Foundation; either version 2 of
|
||||||
|
; the License, or (at your option) any later version.
|
||||||
|
;
|
||||||
|
; This program is distributed in the hope that it will be useful,
|
||||||
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
; GNU General Public License for more details.
|
||||||
|
;
|
||||||
|
; You should have received a copy of the GNU General Public License
|
||||||
|
; along with this program; see the file COPYING.
|
||||||
|
; If not, write to the Free Software Foundation, Inc.,
|
||||||
|
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
;
|
||||||
|
; Markus F.X.J. Oberhumer
|
||||||
|
; <markus@oberhumer.com>
|
||||||
|
; http://www.oberhumer.com/opensource/upx/
|
||||||
|
;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define section .section
|
||||||
|
|
||||||
|
section LZMA_ELF00
|
||||||
|
//decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
|
||||||
|
/* Arguments according to calling convention */
|
||||||
|
#define src %arg1 /* %rdi */
|
||||||
|
#define lsrc %arg2 /* %rsi */
|
||||||
|
#define dst %arg3 /* %rdx */
|
||||||
|
#define ldst %arg4 /* %rcx */ /* Out: actually a reference: &len_dst */
|
||||||
|
#define meth %arg5l /* %r8 */
|
||||||
|
#define methb %arg5b
|
||||||
|
|
||||||
|
// ELFMAINX has already done this for us:
|
||||||
|
// pushq %rbp; push %rbx // C callable
|
||||||
|
// pushq ldst
|
||||||
|
// pushq dst
|
||||||
|
// addq src,lsrc; push lsrc // &input_eof
|
||||||
|
|
||||||
|
#define M_LZMA 14
|
||||||
|
cmpb $ M_LZMA,methb; jne not_lzma
|
||||||
|
|
||||||
|
pushq %rbp; movq %rsp,%rbp // we use alloca
|
||||||
|
|
||||||
|
//LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
|
||||||
|
// %arg1= &CLzmaDecoderState,
|
||||||
|
// %arg2= in, %arg3l= inSize, %arg4= &inSizeProcessed,
|
||||||
|
// %arg5= out, %arg6l= outSize, arg7@ 8+%esp/ &outSizeProcessed
|
||||||
|
//)
|
||||||
|
movl (ldst),%arg6l // &outSize XXX: 4GB
|
||||||
|
movq dst,%arg5 // outp
|
||||||
|
movq lsrc,%arg3 // inSize
|
||||||
|
leaq 2(src),%arg2; pushq %arg2 // in; save @-8(%rbp) for size calc at eof
|
||||||
|
|
||||||
|
movb (src),%al; decl %arg3l // first byte, replaces LzmaDecodeProperties()
|
||||||
|
movb %al,%cl // cl= ((lit_context_bits + lit_pos_bits)<<3) | pos_bits
|
||||||
|
andb $7,%al // al= pos_bits
|
||||||
|
shrb $3,%cl // cl= lit_context_bits + lit_pos_bits
|
||||||
|
|
||||||
|
#define LZMA_BASE_SIZE 1846
|
||||||
|
#define LZMA_LIT_SIZE 768
|
||||||
|
#define szSizeT 4
|
||||||
|
|
||||||
|
movq $-LZMA_LIT_SIZE,%rbx
|
||||||
|
shlq %cl,%rbx; movb %al,%cl // %cl= pos_bits
|
||||||
|
// alloca{inSizeProcessed, outSizeProcessed, *_bits, CLzmaDecoderState}
|
||||||
|
leaq -(2*szSizeT +4) - 2*LZMA_BASE_SIZE(%rsp,%rbx,2), %rbx
|
||||||
|
andq $~0<<6,%rbx // 64-byte align
|
||||||
|
1:
|
||||||
|
pushq $0 // clera CLzmaDecoderState on stack
|
||||||
|
cmpq %rbx,%rsp
|
||||||
|
jne 1b
|
||||||
|
|
||||||
|
|
||||||
|
pushq %rbx // &outSizeProcessed [arg7]
|
||||||
|
leaq 2*szSizeT(%rbx),%arg1 // &CLzmaDecoderState
|
||||||
|
movb -1(%arg2),%cl; decl %arg3l // second byte, replaces LzmaDecodeProperties()
|
||||||
|
movb %al,2(%arg1) // store pos_bits
|
||||||
|
movb %cl,%al // al= (lit_pos_bits<<4) | lit_context_bits
|
||||||
|
shrb $4,%cl; movb %cl,1(%arg1) // store lit_pos_bits
|
||||||
|
andb $0xf,%al; movb %al, (%arg1) // store lit_context_bits
|
||||||
|
leaq -szSizeT(%arg1),%arg4 // &inSizeProcessed
|
||||||
|
|
||||||
|
pushq %rax // return address slot (dummy CALL)
|
||||||
|
|
||||||
|
section LZMA_DEC10
|
||||||
|
#include "lzma_d_cs.S"
|
||||||
|
|
||||||
|
section LZMA_DEC20
|
||||||
|
#include "lzma_d_cf.S"
|
||||||
|
|
||||||
|
section LZMA_DEC30
|
||||||
|
movq -1*8(%rbp),%rsi // src [after header]
|
||||||
|
movq 2*8(%rbp),%rdi // dst
|
||||||
|
movl szSizeT(%rbx),%ecx; addq %rcx,%rsi // inSizeProcessed
|
||||||
|
movl (%rbx),%edx; addq %rdx,%rdi // outSizeProcessed
|
||||||
|
leave // movl %ebp,%rsp; popq %rbp
|
||||||
|
not_lzma:
|
||||||
|
|
||||||
|
// vi:ts=8:et
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
<jreiser@users.sourceforge.net>
|
<jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
cmpb $ M_NRV2B_LE32,methb; je top_n2b; jmp not_n2b
|
||||||
.p2align 3
|
.p2align 3
|
||||||
lit_n2b:
|
lit_n2b:
|
||||||
incq %rsi; movb %dl,(%rdi)
|
incq %rsi; movb %dl,(%rdi)
|
||||||
@@ -62,6 +63,7 @@ gotlen_n2b:
|
|||||||
bot_n2b: # In: 0==len
|
bot_n2b: # In: 0==len
|
||||||
jmp top_n2b
|
jmp top_n2b
|
||||||
|
|
||||||
|
not_n2b:
|
||||||
/*
|
/*
|
||||||
vi:ts=8:et:nowrap
|
vi:ts=8:et:nowrap
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
<jreiser@users.sourceforge.net>
|
<jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
cmpb $ M_NRV2E_LE32,methb; je top_n2e; jmp not_n2e
|
||||||
.p2align 3
|
.p2align 3
|
||||||
lit_n2e:
|
lit_n2e:
|
||||||
incq %rsi; movb %dl,(%rdi)
|
incq %rsi; movb %dl,(%rdi)
|
||||||
@@ -75,6 +76,8 @@ gotlen_n2e:
|
|||||||
bot_n2e: # In: 0==len
|
bot_n2e: # In: 0==len
|
||||||
jmp top_n2e
|
jmp top_n2e
|
||||||
|
|
||||||
|
not_n2e:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vi:ts=8:et:nowrap
|
vi:ts=8:et:nowrap
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -11,5 +11,6 @@
|
|||||||
#define sys4l r10d
|
#define sys4l r10d
|
||||||
#define arg5 r8
|
#define arg5 r8
|
||||||
#define arg5l r8d
|
#define arg5l r8d
|
||||||
|
#define arg5b r8b
|
||||||
#define arg6 r9
|
#define arg6 r9
|
||||||
#define arg6l r9d
|
#define arg6l r9d
|
||||||
|
|||||||
@@ -0,0 +1,158 @@
|
|||||||
|
/*
|
||||||
|
; lzma_d.ash -- 32-bit assembly
|
||||||
|
;
|
||||||
|
; This file is part of the UPX executable compressor.
|
||||||
|
;
|
||||||
|
; Copyright (C) 2006-2006 Markus Franz Xaver Johannes Oberhumer
|
||||||
|
; All Rights Reserved.
|
||||||
|
;
|
||||||
|
; UPX and the UCL library are free software; you can redistribute them
|
||||||
|
; and/or modify them under the terms of the GNU General Public License as
|
||||||
|
; published by the Free Software Foundation; either version 2 of
|
||||||
|
; the License, or (at your option) any later version.
|
||||||
|
;
|
||||||
|
; This program is distributed in the hope that it will be useful,
|
||||||
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
; GNU General Public License for more details.
|
||||||
|
;
|
||||||
|
; You should have received a copy of the GNU General Public License
|
||||||
|
; along with this program; see the file COPYING.
|
||||||
|
; If not, write to the Free Software Foundation, Inc.,
|
||||||
|
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
;
|
||||||
|
; Markus F.X.J. Oberhumer
|
||||||
|
; <markus@oberhumer.com>
|
||||||
|
; http://www.oberhumer.com/opensource/upx/
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
; ------------- DECOMPRESSION -------------
|
||||||
|
|
||||||
|
; Input:
|
||||||
|
; esi - source
|
||||||
|
; edi - dest
|
||||||
|
; cld
|
||||||
|
|
||||||
|
; Output:
|
||||||
|
; eax - 0
|
||||||
|
; ecx - 0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// CPU 386
|
||||||
|
|
||||||
|
//
|
||||||
|
// init
|
||||||
|
section LZMA_DEC00
|
||||||
|
|
||||||
|
// ebx = alloca('UPXa');
|
||||||
|
|
||||||
|
mov ebp, esp // save stack
|
||||||
|
|
||||||
|
lea ebx, [esp + UPXa]
|
||||||
|
xor eax, eax
|
||||||
|
.clearstack1:
|
||||||
|
push eax
|
||||||
|
cmp esp, ebx
|
||||||
|
jnz .clearstack1
|
||||||
|
|
||||||
|
|
||||||
|
inc esi // skip 2 bytes for properties
|
||||||
|
inc esi
|
||||||
|
|
||||||
|
push ebx // &outSizeProcessed
|
||||||
|
push UPXb // outSize
|
||||||
|
push edi // out
|
||||||
|
add ebx, 4
|
||||||
|
push ebx // &inSizeProcessed
|
||||||
|
push UPXc // inSize
|
||||||
|
push esi // in
|
||||||
|
add ebx, 4
|
||||||
|
push ebx // &CLzmaDecoderState
|
||||||
|
push eax // dummy for call
|
||||||
|
|
||||||
|
// hardwired LzmaDecodeProperties()
|
||||||
|
mov dword ptr [ebx], offset UPXd // lc, lp, pb, dummy
|
||||||
|
|
||||||
|
|
||||||
|
section LZMA_ELF00
|
||||||
|
|
||||||
|
#define LZMA_BASE_SIZE 1846
|
||||||
|
#define LZMA_LIT_SIZE 768
|
||||||
|
|
||||||
|
#ifndef O_OUTS // ELF defines them, others do not care
|
||||||
|
#define O_OUTS 0
|
||||||
|
#define O_INS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
mov ebp, esp // save stack
|
||||||
|
mov edx,[O_INS + ebp] // inSize
|
||||||
|
|
||||||
|
lodsb // first byte, replaces LzmaDecodeProperties()
|
||||||
|
dec edx
|
||||||
|
mov cl,al // cl= ((lit_context_bits + lit_pos_bits)<<3) | pos_bits
|
||||||
|
and al,7 // al= pos_bits
|
||||||
|
shr cl,3 // cl= lit_context_bits + lit_pos_bits
|
||||||
|
|
||||||
|
mov ebx, -LZMA_LIT_SIZE
|
||||||
|
shl ebx,cl
|
||||||
|
// inSizeProcessed, outSizeProcessed, *_bits, CLzmaDecoderState
|
||||||
|
lea ebx,[0 -(2*4 +4) - 2*LZMA_BASE_SIZE + 2*ebx + esp]
|
||||||
|
and ebx, (~0<<5) // 32-byte align
|
||||||
|
.elf_clearstack1:
|
||||||
|
push 0
|
||||||
|
cmp esp,ebx
|
||||||
|
jne .elf_clearstack1
|
||||||
|
|
||||||
|
push ebx // &outSizeProcessed
|
||||||
|
add ebx, 4
|
||||||
|
mov ecx,[O_OUTS + ebp] // &outSize
|
||||||
|
push dword [ecx] // outSize
|
||||||
|
push edi // out
|
||||||
|
push ebx // &inSizeProcessed
|
||||||
|
add ebx, 4
|
||||||
|
|
||||||
|
mov [2+ ebx],al // store pos_bits
|
||||||
|
lodsb // second byte, replaces LzmaDecodeProperties()
|
||||||
|
dec edx
|
||||||
|
mov cl,al // cl= (lit_pos_bits<<4) | lit_context_bits
|
||||||
|
and al,0xf
|
||||||
|
mov [ ebx],al // store lit_context_bits
|
||||||
|
shr cl,4
|
||||||
|
mov [1+ ebx],cl // store lit_pos_bits
|
||||||
|
|
||||||
|
push edx // inSize -2
|
||||||
|
push esi // in
|
||||||
|
push ebx // &CLzmaDecoderState
|
||||||
|
push eax // return address slot (dummy CALL)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
section LZMA_DEC10
|
||||||
|
#include "lzma_d_cs_2.ash"
|
||||||
|
|
||||||
|
section LZMA_DEC20
|
||||||
|
#include "lzma_d_cf_2.ash"
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// cleanup
|
||||||
|
section LZMA_DEC30
|
||||||
|
|
||||||
|
add esi, [ebx - 4] // inSizeProcessed
|
||||||
|
add edi, [ebx - 8] // outSizeProcessed
|
||||||
|
xor eax, eax
|
||||||
|
|
||||||
|
lea ecx, [esp - 256]
|
||||||
|
mov esp, ebp // restore stack
|
||||||
|
.clearstack2:
|
||||||
|
push eax
|
||||||
|
cmp esp, ecx
|
||||||
|
jnz .clearstack2
|
||||||
|
|
||||||
|
mov esp, ebp // restore stack
|
||||||
|
xor ecx, ecx
|
||||||
|
|
||||||
|
|
||||||
|
// vi:ts=8:et
|
||||||
|
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
db 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68 // 0x0000
|
||||||
|
db 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0 // 0x0010
|
||||||
|
db 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 // 0x0020
|
||||||
|
db 74, 2,137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74 // 0x0030
|
||||||
|
db 1,211,224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15 // 0x0040
|
||||||
|
db 182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0 // 0x0050
|
||||||
|
db 0,199, 0, 0, 0, 0, 0,184, 0, 3, 0, 0,137,116, 36,100 // 0x0060
|
||||||
|
db 199, 68, 36, 92, 1, 0, 0, 0,199, 68, 36, 88, 1, 0, 0, 0 // 0x0070
|
||||||
|
db 199, 68, 36, 84, 1, 0, 0, 0,199, 68, 36, 80, 1, 0, 0, 0 // 0x0080
|
||||||
|
db 15,182, 74, 1, 1,241,211,224,141,136, 54, 7, 0, 0, 57, 76 // 0x0090
|
||||||
|
db 36,116,115, 14,139, 68, 36,120,102,199, 0, 0, 4,131,192, 2 // 0x00a0
|
||||||
|
db 226,246,139,156, 36,148, 0, 0, 0, 49,255,199, 68, 36, 72,255 // 0x00b0
|
||||||
|
db 255,255,255,137,218, 3,148, 36,152, 0, 0, 0,137, 84, 36, 76 // 0x00c0
|
||||||
|
db 49,210, 59, 92, 36, 76, 15,132,124, 9, 0, 0, 15,182, 3,193 // 0x00d0
|
||||||
|
db 231, 8, 66, 67, 9,199,131,250, 4,126,231,139,140, 36,164, 0 // 0x00e0
|
||||||
|
db 0, 0, 57, 76, 36,116, 15,131,100, 9, 0, 0,139,116, 36,116 // 0x00f0
|
||||||
|
db 35,116, 36,108,139, 68, 36, 96,139, 84, 36,120,193,224, 4,137 // 0x0100
|
||||||
|
db 116, 36, 68, 1,240,129,124, 36, 72,255,255,255, 0,141, 44, 66 // 0x0110
|
||||||
|
db 119, 24, 59, 92, 36, 76, 15,132, 44, 9, 0, 0,193,100, 36, 72 // 0x0120
|
||||||
|
db 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139 // 0x0130
|
||||||
|
db 85, 0,193,232, 11, 15,183,202, 15,175,193, 57,199, 15,131,221 // 0x0140
|
||||||
|
db 1, 0, 0,137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,138, 76 // 0x0150
|
||||||
|
db 36,100,193,248, 5,190, 1, 0, 0, 0,141, 4, 2, 15,182, 84 // 0x0160
|
||||||
|
db 36,115,102,137, 69, 0,139, 68, 36,116, 35, 68, 36,104,139,108 // 0x0170
|
||||||
|
db 36,120,211,224,185, 8, 0, 0, 0, 43, 76, 36,100,211,250, 1 // 0x0180
|
||||||
|
db 208,105,192, 0, 6, 0, 0,131,124, 36, 96, 6,141,132, 5,108 // 0x0190
|
||||||
|
db 14, 0, 0,137, 68, 36, 20, 15,142,202, 0, 0, 0,139, 68, 36 // 0x01a0
|
||||||
|
db 116, 43, 68, 36, 92,139,148, 36,160, 0, 0, 0, 15,182, 4, 2 // 0x01b0
|
||||||
|
db 137, 68, 36, 64,209,100, 36, 64,139, 76, 36, 64,141, 20, 54,139 // 0x01c0
|
||||||
|
db 108, 36, 20,129,225, 0, 1, 0, 0,129,124, 36, 72,255,255,255 // 0x01d0
|
||||||
|
db 0,141, 68, 77, 0,137, 76, 36, 60,141, 44, 16,119, 24, 59, 92 // 0x01e0
|
||||||
|
db 36, 76, 15,132, 96, 8, 0, 0,193,100, 36, 72, 8, 15,182, 3 // 0x01f0
|
||||||
|
db 193,231, 8, 67, 9,199,139, 68, 36, 72,102,139,141, 0, 2, 0 // 0x0200
|
||||||
|
db 0,193,232, 11, 15,183,241, 15,175,198, 57,199,115, 35,137, 68 // 0x0210
|
||||||
|
db 36, 72,184, 0, 8, 0, 0, 41,240,137,214,193,248, 5,131,124 // 0x0220
|
||||||
|
db 36, 60, 0,141, 4, 1,102,137,133, 0, 2, 0, 0,116, 34,235 // 0x0230
|
||||||
|
db 46, 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5 // 0x0240
|
||||||
|
db 102, 41,193,131,124, 36, 60, 0,102,137,141, 0, 2, 0, 0,116 // 0x0250
|
||||||
|
db 14,129,254,255, 0, 0, 0, 15,142, 87,255,255,255,235,121,129 // 0x0260
|
||||||
|
db 254,255, 0, 0, 0,127,113,141, 20, 54,139,108, 36, 20, 1,213 // 0x0270
|
||||||
|
db 129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132 // 0x0280
|
||||||
|
db 196, 7, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67 // 0x0290
|
||||||
|
db 9,199,139, 68, 36, 72,102,139, 77, 0,193,232, 11, 15,183,241 // 0x02a0
|
||||||
|
db 15,175,198, 57,199,115, 25,137, 68, 36, 72,184, 0, 8, 0, 0 // 0x02b0
|
||||||
|
db 41,240,137,214,193,248, 5,141, 4, 1,102,137, 69, 0,235,159 // 0x02c0
|
||||||
|
db 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5,102 // 0x02d0
|
||||||
|
db 41,193,102,137, 77, 0,235,135,139, 84, 36,116,137,240,139,140 // 0x02e0
|
||||||
|
db 36,160, 0, 0, 0,136, 68, 36,115,136, 4, 10, 66,131,124, 36 // 0x02f0
|
||||||
|
db 96, 3,137, 84, 36,116,127, 13,199, 68, 36, 96, 0, 0, 0, 0 // 0x0300
|
||||||
|
db 233, 27, 7, 0, 0,131,124, 36, 96, 9,127, 10,131,108, 36, 96 // 0x0310
|
||||||
|
db 3,233, 10, 7, 0, 0,131,108, 36, 96, 6,233, 0, 7, 0, 0 // 0x0320
|
||||||
|
db 139, 76, 36, 72, 41,199,139,116, 36, 96, 41,193,137,208,102,193 // 0x0330
|
||||||
|
db 232, 5,102, 41,194,129,249,255,255,255, 0,102,137, 85, 0,139 // 0x0340
|
||||||
|
db 108, 36,120,141,116,117, 0,137,116, 36, 56,119, 22, 59, 92, 36 // 0x0350
|
||||||
|
db 76, 15,132,241, 6, 0, 0, 15,182, 3,193,231, 8,193,225, 8 // 0x0360
|
||||||
|
db 67, 9,199,139,108, 36, 56,137,200,193,232, 11,102,139,149,128 // 0x0370
|
||||||
|
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 82,137,198,184 // 0x0380
|
||||||
|
db 0, 8, 0, 0, 41,232,139,108, 36, 88,193,248, 5,139, 76, 36 // 0x0390
|
||||||
|
db 84,141, 4, 2,139, 84, 36, 56,137, 76, 36, 80,139, 76, 36,120 // 0x03a0
|
||||||
|
db 102,137,130,128, 1, 0, 0,139, 68, 36, 92,137,108, 36, 84,137 // 0x03b0
|
||||||
|
db 68, 36, 88, 49,192,131,124, 36, 96, 6, 15,159,192,129,193,100 // 0x03c0
|
||||||
|
db 6, 0, 0,141, 4, 64,137, 68, 36, 96,233,116, 2, 0, 0,137 // 0x03d0
|
||||||
|
db 206, 41,199, 41,198,137,208,102,193,232, 5,139, 76, 36, 56,102 // 0x03e0
|
||||||
|
db 41,194,129,254,255,255,255, 0,102,137,145,128, 1, 0, 0,119 // 0x03f0
|
||||||
|
db 22, 59, 92, 36, 76, 15,132, 77, 6, 0, 0, 15,182, 3,193,231 // 0x0400
|
||||||
|
db 8,193,230, 8, 67, 9,199,139,108, 36, 56,137,242,193,234, 11 // 0x0410
|
||||||
|
db 102,139,141,152, 1, 0, 0, 15,183,193, 15,175,208, 57,215, 15 // 0x0420
|
||||||
|
db 131,227, 0, 0, 0,189, 0, 8, 0, 0,137,214, 41,197,199, 68 // 0x0430
|
||||||
|
db 36, 52, 0, 8, 0, 0,137,232,193,248, 5,141, 4, 1,139, 76 // 0x0440
|
||||||
|
db 36, 56,102,137,129,152, 1, 0, 0,139, 68, 36, 96,139, 76, 36 // 0x0450
|
||||||
|
db 68,193,224, 5, 3, 68, 36,120,129,250,255,255,255, 0,141, 44 // 0x0460
|
||||||
|
db 72,119, 22, 59, 92, 36, 76, 15,132,219, 5, 0, 0, 15,182, 3 // 0x0470
|
||||||
|
db 193,231, 8,193,230, 8, 67, 9,199,102,139,149,224, 1, 0, 0 // 0x0480
|
||||||
|
db 137,240,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 96, 41 // 0x0490
|
||||||
|
db 76, 36, 52,193,124, 36, 52, 5,139,116, 36, 52,137, 68, 36, 72 // 0x04a0
|
||||||
|
db 131,124, 36,116, 0,141, 4, 50,102,137,133,224, 1, 0, 0, 15 // 0x04b0
|
||||||
|
db 132,147, 5, 0, 0, 49,192,131,124, 36, 96, 6,139,172, 36,160 // 0x04c0
|
||||||
|
db 0, 0, 0,139, 84, 36,116, 15,159,192,141, 68, 0, 9,137, 68 // 0x04d0
|
||||||
|
db 36, 96,139, 68, 36,116, 43, 68, 36, 92,138, 68, 5, 0,136, 68 // 0x04e0
|
||||||
|
db 36,115,136, 4, 42, 66,137, 84, 36,116,233, 49, 5, 0, 0, 41 // 0x04f0
|
||||||
|
db 198, 41,199,137,208,102,193,232, 5,102, 41,194,102,137,149,224 // 0x0500
|
||||||
|
db 1, 0, 0,233, 31, 1, 0, 0,137,200, 41,214,102,193,232, 5 // 0x0510
|
||||||
|
db 139,108, 36, 56,102, 41,193, 41,215,129,254,255,255,255, 0,102 // 0x0520
|
||||||
|
db 137,141,152, 1, 0, 0,119, 22, 59, 92, 36, 76, 15,132, 22, 5 // 0x0530
|
||||||
|
db 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,139, 76 // 0x0540
|
||||||
|
db 36, 56,137,240,193,232, 11,102,139,145,176, 1, 0, 0, 15,183 // 0x0550
|
||||||
|
db 202, 15,175,193, 57,199,115, 35,137,198,184, 0, 8, 0, 0, 41 // 0x0560
|
||||||
|
db 200,139,108, 36, 56,193,248, 5,141, 4, 2,102,137,133,176, 1 // 0x0570
|
||||||
|
db 0, 0,139, 68, 36, 88,233,160, 0, 0, 0,137,241, 41,199, 41 // 0x0580
|
||||||
|
db 193,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56,129,249 // 0x0590
|
||||||
|
db 255,255,255, 0,102,137,144,176, 1, 0, 0,119, 22, 59, 92, 36 // 0x05a0
|
||||||
|
db 76, 15,132,161, 4, 0, 0, 15,182, 3,193,231, 8,193,225, 8 // 0x05b0
|
||||||
|
db 67, 9,199,139,116, 36, 56,137,200,193,232, 11,102,139,150,200 // 0x05c0
|
||||||
|
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 32,137,198,184 // 0x05d0
|
||||||
|
db 0, 8, 0, 0, 41,232,139,108, 36, 56,193,248, 5,141, 4, 2 // 0x05e0
|
||||||
|
db 102,137,133,200, 1, 0, 0,139, 68, 36, 84,235, 38,137,206, 41 // 0x05f0
|
||||||
|
db 199, 41,198,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56 // 0x0600
|
||||||
|
db 102,137,144,200, 1, 0, 0,139, 84, 36, 84,139, 68, 36, 80,137 // 0x0610
|
||||||
|
db 84, 36, 80,139, 76, 36, 88,137, 76, 36, 84,139,108, 36, 92,137 // 0x0620
|
||||||
|
db 68, 36, 92,137,108, 36, 88, 49,192,131,124, 36, 96, 6,139, 76 // 0x0630
|
||||||
|
db 36,120, 15,159,192,129,193,104, 10, 0, 0,141, 68, 64, 8,137 // 0x0640
|
||||||
|
db 68, 36, 96,129,254,255,255,255, 0,119, 22, 59, 92, 36, 76, 15 // 0x0650
|
||||||
|
db 132,243, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9 // 0x0660
|
||||||
|
db 199,102,139, 17,137,240,193,232, 11, 15,183,234, 15,175,197, 57 // 0x0670
|
||||||
|
db 199,115, 47,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 // 0x0680
|
||||||
|
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 0, 0, 0, 0,141, 4 // 0x0690
|
||||||
|
db 2,102,137, 1,139, 68, 36, 68,141, 76, 1, 4,137, 76, 36, 16 // 0x06a0
|
||||||
|
db 235,114, 41,198, 41,199,137,208,102,193,232, 5,102, 41,194,129 // 0x06b0
|
||||||
|
db 254,255,255,255, 0,102,137, 17,119, 22, 59, 92, 36, 76, 15,132 // 0x06c0
|
||||||
|
db 132, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199 // 0x06d0
|
||||||
|
db 102,139, 81, 2,137,240,193,232, 11, 15,183,234, 15,175,197, 57 // 0x06e0
|
||||||
|
db 199,115, 59,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 // 0x06f0
|
||||||
|
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 8, 0, 0, 0,141, 4 // 0x0700
|
||||||
|
db 2,139, 84, 36, 68,102,137, 65, 2,141,140, 17, 4, 1, 0, 0 // 0x0710
|
||||||
|
db 137, 76, 36, 16,199, 68, 36, 48, 3, 0, 0, 0,235, 47, 41,198 // 0x0720
|
||||||
|
db 41,199,137,208,137,116, 36, 72,102,193,232, 5,199, 68, 36, 44 // 0x0730
|
||||||
|
db 16, 0, 0, 0,102, 41,194,199, 68, 36, 48, 8, 0, 0, 0,102 // 0x0740
|
||||||
|
db 137, 81, 2,129,193, 4, 2, 0, 0,137, 76, 36, 16,139, 76, 36 // 0x0750
|
||||||
|
db 48,186, 1, 0, 0, 0,137, 76, 36, 40,141, 44, 18,139,116, 36 // 0x0760
|
||||||
|
db 16, 1,238,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36 // 0x0770
|
||||||
|
db 76, 15,132,209, 2, 0, 0,193,100, 36, 72, 8, 15,182, 3,193 // 0x0780
|
||||||
|
db 231, 8, 67, 9,199,139, 68, 36, 72,102,139, 22,193,232, 11, 15 // 0x0790
|
||||||
|
db 183,202, 15,175,193, 57,199,115, 24,137, 68, 36, 72,184, 0, 8 // 0x07a0
|
||||||
|
db 0, 0, 41,200,193,248, 5,141, 4, 2,137,234,102,137, 6,235 // 0x07b0
|
||||||
|
db 21, 41, 68, 36, 72, 41,199,137,208,102,193,232, 5,102, 41,194 // 0x07c0
|
||||||
|
db 102,137, 22,141, 85, 1,139,116, 36, 40, 78,137,116, 36, 40,117 // 0x07d0
|
||||||
|
db 137,138, 76, 36, 48,184, 1, 0, 0, 0,211,224, 41,194, 3, 84 // 0x07e0
|
||||||
|
db 36, 44,131,124, 36, 96, 3,137, 84, 36, 12, 15,143,231, 1, 0 // 0x07f0
|
||||||
|
db 0,131, 68, 36, 96, 7,131,250, 3,137,208,126, 5,184, 3, 0 // 0x0800
|
||||||
|
db 0, 0,139,116, 36,120,193,224, 7,199, 68, 36, 36, 6, 0, 0 // 0x0810
|
||||||
|
db 0,141,132, 6, 96, 3, 0, 0,137, 68, 36, 8,184, 1, 0, 0 // 0x0820
|
||||||
|
db 0,141, 44, 0,139,116, 36, 8, 1,238,129,124, 36, 72,255,255 // 0x0830
|
||||||
|
db 255, 0,119, 24, 59, 92, 36, 76, 15,132, 10, 2, 0, 0,193,100 // 0x0840
|
||||||
|
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 // 0x0850
|
||||||
|
db 102,139, 22,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 24 // 0x0860
|
||||||
|
db 137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4 // 0x0870
|
||||||
|
db 2,102,137, 6,137,232,235, 21, 41, 68, 36, 72, 41,199,137,208 // 0x0880
|
||||||
|
db 102,193,232, 5,102, 41,194,141, 69, 1,102,137, 22,139,108, 36 // 0x0890
|
||||||
|
db 36, 77,137,108, 36, 36,117,137,141, 80,192,131,250, 3,137, 20 // 0x08a0
|
||||||
|
db 36, 15,142, 39, 1, 0, 0,137,208,137,214,209,248,131,230, 1 // 0x08b0
|
||||||
|
db 141, 72,255,131,206, 2,131,250, 13,137, 76, 36, 32,127, 28,139 // 0x08c0
|
||||||
|
db 108, 36,120,211,230, 1,210,137, 52, 36,141, 68,117, 0, 41,208 // 0x08d0
|
||||||
|
db 5, 94, 5, 0, 0,137, 68, 36, 4,235, 86,141, 80,251,129,124 // 0x08e0
|
||||||
|
db 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132, 86, 1 // 0x08f0
|
||||||
|
db 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199 // 0x0900
|
||||||
|
db 209,108, 36, 72, 1,246, 59,124, 36, 72,114, 7, 43,124, 36, 72 // 0x0910
|
||||||
|
db 131,206, 1, 74,117,200,139, 68, 36,120,193,230, 4,137, 52, 36 // 0x0920
|
||||||
|
db 5, 68, 6, 0, 0,199, 68, 36, 32, 4, 0, 0, 0,137, 68, 36 // 0x0930
|
||||||
|
db 4,199, 68, 36, 28, 1, 0, 0, 0,184, 1, 0, 0, 0,139,108 // 0x0940
|
||||||
|
db 36, 4, 1,192,137, 68, 36, 24, 1,197,129,124, 36, 72,255,255 // 0x0950
|
||||||
|
db 255, 0,119, 24, 59, 92, 36, 76, 15,132,234, 0, 0, 0,193,100 // 0x0960
|
||||||
|
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 // 0x0970
|
||||||
|
db 102,139, 85, 0,193,232, 11, 15,183,242, 15,175,198, 57,199,115 // 0x0980
|
||||||
|
db 27,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240,193,248, 5,141 // 0x0990
|
||||||
|
db 4, 2,102,137, 69, 0,139, 68, 36, 24,235, 31, 41, 68, 36, 72 // 0x09a0
|
||||||
|
db 41,199,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 24,102 // 0x09b0
|
||||||
|
db 137, 85, 0,139, 84, 36, 28, 64, 9, 20, 36,139, 76, 36, 32,209 // 0x09c0
|
||||||
|
db 100, 36, 28, 73,137, 76, 36, 32, 15,133,112,255,255,255,139, 52 // 0x09d0
|
||||||
|
db 36, 70,137,116, 36, 92,116, 89,139, 76, 36, 12,139,108, 36,116 // 0x09e0
|
||||||
|
db 131,193, 2, 57,108, 36, 92,119, 95,139,132, 36,160, 0, 0, 0 // 0x09f0
|
||||||
|
db 137,234, 43, 68, 36, 92, 3,148, 36,160, 0, 0, 0,141, 52, 40 // 0x0a00
|
||||||
|
db 138, 6, 70,136, 68, 36,115,136, 2, 66,255, 68, 36,116, 73,116 // 0x0a10
|
||||||
|
db 15,139,172, 36,164, 0, 0, 0, 57,108, 36,116,114,226,235, 17 // 0x0a20
|
||||||
|
db 139,132, 36,164, 0, 0, 0, 57, 68, 36,116, 15,130,187,246,255 // 0x0a30
|
||||||
|
db 255,129,124, 36, 72,255,255,255, 0,119, 21, 59, 92, 36, 76,184 // 0x0a40
|
||||||
|
db 1, 0, 0, 0,116, 41,235, 7,184, 1, 0, 0, 0,235, 32, 67 // 0x0a50
|
||||||
|
db 43,156, 36,148, 0, 0, 0, 49,192,139,148, 36,156, 0, 0, 0 // 0x0a60
|
||||||
|
db 139, 76, 36,116,137, 26,139,156, 36,168, 0, 0, 0,137, 11,131 // 0x0a70
|
||||||
|
db 196,124, 91, 94, 95, 93 // 0x0a80
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
db 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68 // 0x0000
|
||||||
|
db 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0 // 0x0010
|
||||||
|
db 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 // 0x0020
|
||||||
|
db 74, 2,137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74 // 0x0030
|
||||||
|
db 1,211,224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15 // 0x0040
|
||||||
|
db 182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0 // 0x0050
|
||||||
|
db 0,199, 0, 0, 0, 0, 0,184, 0, 3, 0, 0,137,116, 36,100 // 0x0060
|
||||||
|
db 199, 68, 36, 92, 1, 0, 0, 0,199, 68, 36, 88, 1, 0, 0, 0 // 0x0070
|
||||||
|
db 199, 68, 36, 84, 1, 0, 0, 0,199, 68, 36, 80, 1, 0, 0, 0 // 0x0080
|
||||||
|
db 15,182, 74, 1, 1,241,211,224,141,136, 54, 7, 0, 0, 57, 76 // 0x0090
|
||||||
|
db 36,116,115, 14,139, 68, 36,120,102,199, 0, 0, 4,131,192, 2 // 0x00a0
|
||||||
|
db 226,246,139,156, 36,148, 0, 0, 0, 49,255,199, 68, 36, 72,255 // 0x00b0
|
||||||
|
db 255,255,255,137,218, 3,148, 36,152, 0, 0, 0,137, 84, 36, 76 // 0x00c0
|
||||||
|
db 49,210, 59, 92, 36, 76, 15,132,124, 9, 0, 0, 15,182, 3,193 // 0x00d0
|
||||||
|
db 231, 8, 66, 67, 9,199,131,250, 4,126,231,139,140, 36,164, 0 // 0x00e0
|
||||||
|
db 0, 0, 57, 76, 36,116, 15,131,100, 9, 0, 0,139,116, 36,116 // 0x00f0
|
||||||
|
db 35,116, 36,108,139, 68, 36, 96,139, 84, 36,120,193,224, 4,137 // 0x0100
|
||||||
|
db 116, 36, 68, 1,240,129,124, 36, 72,255,255,255, 0,141, 44, 66 // 0x0110
|
||||||
|
db 119, 24, 59, 92, 36, 76, 15,132, 44, 9, 0, 0,193,100, 36, 72 // 0x0120
|
||||||
|
db 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139 // 0x0130
|
||||||
|
db 85, 0,193,232, 11, 15,183,202, 15,175,193, 57,199, 15,131,221 // 0x0140
|
||||||
|
db 1, 0, 0,137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,138, 76 // 0x0150
|
||||||
|
db 36,100,193,248, 5,190, 1, 0, 0, 0,141, 4, 2, 15,182, 84 // 0x0160
|
||||||
|
db 36,115,102,137, 69, 0,139, 68, 36,116, 35, 68, 36,104,139,108 // 0x0170
|
||||||
|
db 36,120,211,224,185, 8, 0, 0, 0, 43, 76, 36,100,211,250, 1 // 0x0180
|
||||||
|
db 208,105,192, 0, 6, 0, 0,131,124, 36, 96, 6,141,132, 5,108 // 0x0190
|
||||||
|
db 14, 0, 0,137, 68, 36, 20, 15,142,202, 0, 0, 0,139, 68, 36 // 0x01a0
|
||||||
|
db 116, 43, 68, 36, 92,139,148, 36,160, 0, 0, 0, 15,182, 4, 2 // 0x01b0
|
||||||
|
db 137, 68, 36, 64,209,100, 36, 64,139, 76, 36, 64,141, 20, 54,139 // 0x01c0
|
||||||
|
db 108, 36, 20,129,225, 0, 1, 0, 0,129,124, 36, 72,255,255,255 // 0x01d0
|
||||||
|
db 0,141, 68, 77, 0,137, 76, 36, 60,141, 44, 16,119, 24, 59, 92 // 0x01e0
|
||||||
|
db 36, 76, 15,132, 96, 8, 0, 0,193,100, 36, 72, 8, 15,182, 3 // 0x01f0
|
||||||
|
db 193,231, 8, 67, 9,199,139, 68, 36, 72,102,139,141, 0, 2, 0 // 0x0200
|
||||||
|
db 0,193,232, 11, 15,183,241, 15,175,198, 57,199,115, 35,137, 68 // 0x0210
|
||||||
|
db 36, 72,184, 0, 8, 0, 0, 41,240,137,214,193,248, 5,131,124 // 0x0220
|
||||||
|
db 36, 60, 0,141, 4, 1,102,137,133, 0, 2, 0, 0,116, 34,235 // 0x0230
|
||||||
|
db 46, 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5 // 0x0240
|
||||||
|
db 102, 41,193,131,124, 36, 60, 0,102,137,141, 0, 2, 0, 0,116 // 0x0250
|
||||||
|
db 14,129,254,255, 0, 0, 0, 15,142, 87,255,255,255,235,121,129 // 0x0260
|
||||||
|
db 254,255, 0, 0, 0,127,113,141, 20, 54,139,108, 36, 20, 1,213 // 0x0270
|
||||||
|
db 129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132 // 0x0280
|
||||||
|
db 196, 7, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67 // 0x0290
|
||||||
|
db 9,199,139, 68, 36, 72,102,139, 77, 0,193,232, 11, 15,183,241 // 0x02a0
|
||||||
|
db 15,175,198, 57,199,115, 25,137, 68, 36, 72,184, 0, 8, 0, 0 // 0x02b0
|
||||||
|
db 41,240,137,214,193,248, 5,141, 4, 1,102,137, 69, 0,235,159 // 0x02c0
|
||||||
|
db 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5,102 // 0x02d0
|
||||||
|
db 41,193,102,137, 77, 0,235,135,139, 84, 36,116,137,240,139,140 // 0x02e0
|
||||||
|
db 36,160, 0, 0, 0,136, 68, 36,115,136, 4, 10, 66,131,124, 36 // 0x02f0
|
||||||
|
db 96, 3,137, 84, 36,116,127, 13,199, 68, 36, 96, 0, 0, 0, 0 // 0x0300
|
||||||
|
db 233, 27, 7, 0, 0,131,124, 36, 96, 9,127, 10,131,108, 36, 96 // 0x0310
|
||||||
|
db 3,233, 10, 7, 0, 0,131,108, 36, 96, 6,233, 0, 7, 0, 0 // 0x0320
|
||||||
|
db 139, 76, 36, 72, 41,199,139,116, 36, 96, 41,193,137,208,102,193 // 0x0330
|
||||||
|
db 232, 5,102, 41,194,129,249,255,255,255, 0,102,137, 85, 0,139 // 0x0340
|
||||||
|
db 108, 36,120,141,116,117, 0,137,116, 36, 56,119, 22, 59, 92, 36 // 0x0350
|
||||||
|
db 76, 15,132,241, 6, 0, 0, 15,182, 3,193,231, 8,193,225, 8 // 0x0360
|
||||||
|
db 67, 9,199,139,108, 36, 56,137,200,193,232, 11,102,139,149,128 // 0x0370
|
||||||
|
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 82,137,198,184 // 0x0380
|
||||||
|
db 0, 8, 0, 0, 41,232,139,108, 36, 88,193,248, 5,139, 76, 36 // 0x0390
|
||||||
|
db 84,141, 4, 2,139, 84, 36, 56,137, 76, 36, 80,139, 76, 36,120 // 0x03a0
|
||||||
|
db 102,137,130,128, 1, 0, 0,139, 68, 36, 92,137,108, 36, 84,137 // 0x03b0
|
||||||
|
db 68, 36, 88, 49,192,131,124, 36, 96, 6, 15,159,192,129,193,100 // 0x03c0
|
||||||
|
db 6, 0, 0,141, 4, 64,137, 68, 36, 96,233,116, 2, 0, 0,137 // 0x03d0
|
||||||
|
db 206, 41,199, 41,198,137,208,102,193,232, 5,139, 76, 36, 56,102 // 0x03e0
|
||||||
|
db 41,194,129,254,255,255,255, 0,102,137,145,128, 1, 0, 0,119 // 0x03f0
|
||||||
|
db 22, 59, 92, 36, 76, 15,132, 77, 6, 0, 0, 15,182, 3,193,231 // 0x0400
|
||||||
|
db 8,193,230, 8, 67, 9,199,139,108, 36, 56,137,242,193,234, 11 // 0x0410
|
||||||
|
db 102,139,141,152, 1, 0, 0, 15,183,193, 15,175,208, 57,215, 15 // 0x0420
|
||||||
|
db 131,227, 0, 0, 0,189, 0, 8, 0, 0,137,214, 41,197,199, 68 // 0x0430
|
||||||
|
db 36, 52, 0, 8, 0, 0,137,232,193,248, 5,141, 4, 1,139, 76 // 0x0440
|
||||||
|
db 36, 56,102,137,129,152, 1, 0, 0,139, 68, 36, 96,139, 76, 36 // 0x0450
|
||||||
|
db 68,193,224, 5, 3, 68, 36,120,129,250,255,255,255, 0,141, 44 // 0x0460
|
||||||
|
db 72,119, 22, 59, 92, 36, 76, 15,132,219, 5, 0, 0, 15,182, 3 // 0x0470
|
||||||
|
db 193,231, 8,193,230, 8, 67, 9,199,102,139,149,224, 1, 0, 0 // 0x0480
|
||||||
|
db 137,240,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 96, 41 // 0x0490
|
||||||
|
db 76, 36, 52,193,124, 36, 52, 5,139,116, 36, 52,137, 68, 36, 72 // 0x04a0
|
||||||
|
db 131,124, 36,116, 0,141, 4, 50,102,137,133,224, 1, 0, 0, 15 // 0x04b0
|
||||||
|
db 132,147, 5, 0, 0, 49,192,131,124, 36, 96, 6,139,172, 36,160 // 0x04c0
|
||||||
|
db 0, 0, 0,139, 84, 36,116, 15,159,192,141, 68, 0, 9,137, 68 // 0x04d0
|
||||||
|
db 36, 96,139, 68, 36,116, 43, 68, 36, 92,138, 68, 5, 0,136, 68 // 0x04e0
|
||||||
|
db 36,115,136, 4, 42, 66,137, 84, 36,116,233, 49, 5, 0, 0, 41 // 0x04f0
|
||||||
|
db 198, 41,199,137,208,102,193,232, 5,102, 41,194,102,137,149,224 // 0x0500
|
||||||
|
db 1, 0, 0,233, 31, 1, 0, 0,137,200, 41,214,102,193,232, 5 // 0x0510
|
||||||
|
db 139,108, 36, 56,102, 41,193, 41,215,129,254,255,255,255, 0,102 // 0x0520
|
||||||
|
db 137,141,152, 1, 0, 0,119, 22, 59, 92, 36, 76, 15,132, 22, 5 // 0x0530
|
||||||
|
db 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,139, 76 // 0x0540
|
||||||
|
db 36, 56,137,240,193,232, 11,102,139,145,176, 1, 0, 0, 15,183 // 0x0550
|
||||||
|
db 202, 15,175,193, 57,199,115, 35,137,198,184, 0, 8, 0, 0, 41 // 0x0560
|
||||||
|
db 200,139,108, 36, 56,193,248, 5,141, 4, 2,102,137,133,176, 1 // 0x0570
|
||||||
|
db 0, 0,139, 68, 36, 88,233,160, 0, 0, 0,137,241, 41,199, 41 // 0x0580
|
||||||
|
db 193,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56,129,249 // 0x0590
|
||||||
|
db 255,255,255, 0,102,137,144,176, 1, 0, 0,119, 22, 59, 92, 36 // 0x05a0
|
||||||
|
db 76, 15,132,161, 4, 0, 0, 15,182, 3,193,231, 8,193,225, 8 // 0x05b0
|
||||||
|
db 67, 9,199,139,116, 36, 56,137,200,193,232, 11,102,139,150,200 // 0x05c0
|
||||||
|
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 32,137,198,184 // 0x05d0
|
||||||
|
db 0, 8, 0, 0, 41,232,139,108, 36, 56,193,248, 5,141, 4, 2 // 0x05e0
|
||||||
|
db 102,137,133,200, 1, 0, 0,139, 68, 36, 84,235, 38,137,206, 41 // 0x05f0
|
||||||
|
db 199, 41,198,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56 // 0x0600
|
||||||
|
db 102,137,144,200, 1, 0, 0,139, 84, 36, 84,139, 68, 36, 80,137 // 0x0610
|
||||||
|
db 84, 36, 80,139, 76, 36, 88,137, 76, 36, 84,139,108, 36, 92,137 // 0x0620
|
||||||
|
db 68, 36, 92,137,108, 36, 88, 49,192,131,124, 36, 96, 6,139, 76 // 0x0630
|
||||||
|
db 36,120, 15,159,192,129,193,104, 10, 0, 0,141, 68, 64, 8,137 // 0x0640
|
||||||
|
db 68, 36, 96,129,254,255,255,255, 0,119, 22, 59, 92, 36, 76, 15 // 0x0650
|
||||||
|
db 132,243, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9 // 0x0660
|
||||||
|
db 199,102,139, 17,137,240,193,232, 11, 15,183,234, 15,175,197, 57 // 0x0670
|
||||||
|
db 199,115, 47,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 // 0x0680
|
||||||
|
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 0, 0, 0, 0,141, 4 // 0x0690
|
||||||
|
db 2,102,137, 1,139, 68, 36, 68,141, 76, 1, 4,137, 76, 36, 16 // 0x06a0
|
||||||
|
db 235,114, 41,198, 41,199,137,208,102,193,232, 5,102, 41,194,129 // 0x06b0
|
||||||
|
db 254,255,255,255, 0,102,137, 17,119, 22, 59, 92, 36, 76, 15,132 // 0x06c0
|
||||||
|
db 132, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199 // 0x06d0
|
||||||
|
db 102,139, 81, 2,137,240,193,232, 11, 15,183,234, 15,175,197, 57 // 0x06e0
|
||||||
|
db 199,115, 59,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 // 0x06f0
|
||||||
|
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 8, 0, 0, 0,141, 4 // 0x0700
|
||||||
|
db 2,139, 84, 36, 68,102,137, 65, 2,141,140, 17, 4, 1, 0, 0 // 0x0710
|
||||||
|
db 137, 76, 36, 16,199, 68, 36, 48, 3, 0, 0, 0,235, 47, 41,198 // 0x0720
|
||||||
|
db 41,199,137,208,137,116, 36, 72,102,193,232, 5,199, 68, 36, 44 // 0x0730
|
||||||
|
db 16, 0, 0, 0,102, 41,194,199, 68, 36, 48, 8, 0, 0, 0,102 // 0x0740
|
||||||
|
db 137, 81, 2,129,193, 4, 2, 0, 0,137, 76, 36, 16,139, 76, 36 // 0x0750
|
||||||
|
db 48,186, 1, 0, 0, 0,137, 76, 36, 40,141, 44, 18,139,116, 36 // 0x0760
|
||||||
|
db 16, 1,238,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36 // 0x0770
|
||||||
|
db 76, 15,132,209, 2, 0, 0,193,100, 36, 72, 8, 15,182, 3,193 // 0x0780
|
||||||
|
db 231, 8, 67, 9,199,139, 68, 36, 72,102,139, 22,193,232, 11, 15 // 0x0790
|
||||||
|
db 183,202, 15,175,193, 57,199,115, 24,137, 68, 36, 72,184, 0, 8 // 0x07a0
|
||||||
|
db 0, 0, 41,200,193,248, 5,141, 4, 2,137,234,102,137, 6,235 // 0x07b0
|
||||||
|
db 21, 41, 68, 36, 72, 41,199,137,208,102,193,232, 5,102, 41,194 // 0x07c0
|
||||||
|
db 102,137, 22,141, 85, 1,139,116, 36, 40, 78,137,116, 36, 40,117 // 0x07d0
|
||||||
|
db 137,138, 76, 36, 48,184, 1, 0, 0, 0,211,224, 41,194, 3, 84 // 0x07e0
|
||||||
|
db 36, 44,131,124, 36, 96, 3,137, 84, 36, 12, 15,143,231, 1, 0 // 0x07f0
|
||||||
|
db 0,131, 68, 36, 96, 7,131,250, 3,137,208,126, 5,184, 3, 0 // 0x0800
|
||||||
|
db 0, 0,139,116, 36,120,193,224, 7,199, 68, 36, 36, 6, 0, 0 // 0x0810
|
||||||
|
db 0,141,132, 6, 96, 3, 0, 0,137, 68, 36, 8,184, 1, 0, 0 // 0x0820
|
||||||
|
db 0,141, 44, 0,139,116, 36, 8, 1,238,129,124, 36, 72,255,255 // 0x0830
|
||||||
|
db 255, 0,119, 24, 59, 92, 36, 76, 15,132, 10, 2, 0, 0,193,100 // 0x0840
|
||||||
|
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 // 0x0850
|
||||||
|
db 102,139, 22,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 24 // 0x0860
|
||||||
|
db 137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4 // 0x0870
|
||||||
|
db 2,102,137, 6,137,232,235, 21, 41, 68, 36, 72, 41,199,137,208 // 0x0880
|
||||||
|
db 102,193,232, 5,102, 41,194,141, 69, 1,102,137, 22,139,108, 36 // 0x0890
|
||||||
|
db 36, 77,137,108, 36, 36,117,137,141, 80,192,131,250, 3,137, 20 // 0x08a0
|
||||||
|
db 36, 15,142, 39, 1, 0, 0,137,208,137,214,209,248,131,230, 1 // 0x08b0
|
||||||
|
db 141, 72,255,131,206, 2,131,250, 13,137, 76, 36, 32,127, 28,139 // 0x08c0
|
||||||
|
db 108, 36,120,211,230, 1,210,137, 52, 36,141, 68,117, 0, 41,208 // 0x08d0
|
||||||
|
db 5, 94, 5, 0, 0,137, 68, 36, 4,235, 86,141, 80,251,129,124 // 0x08e0
|
||||||
|
db 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132, 86, 1 // 0x08f0
|
||||||
|
db 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199 // 0x0900
|
||||||
|
db 209,108, 36, 72, 1,246, 59,124, 36, 72,114, 7, 43,124, 36, 72 // 0x0910
|
||||||
|
db 131,206, 1, 74,117,200,139, 68, 36,120,193,230, 4,137, 52, 36 // 0x0920
|
||||||
|
db 5, 68, 6, 0, 0,199, 68, 36, 32, 4, 0, 0, 0,137, 68, 36 // 0x0930
|
||||||
|
db 4,199, 68, 36, 28, 1, 0, 0, 0,184, 1, 0, 0, 0,139,108 // 0x0940
|
||||||
|
db 36, 4, 1,192,137, 68, 36, 24, 1,197,129,124, 36, 72,255,255 // 0x0950
|
||||||
|
db 255, 0,119, 24, 59, 92, 36, 76, 15,132,234, 0, 0, 0,193,100 // 0x0960
|
||||||
|
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 // 0x0970
|
||||||
|
db 102,139, 85, 0,193,232, 11, 15,183,242, 15,175,198, 57,199,115 // 0x0980
|
||||||
|
db 27,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240,193,248, 5,141 // 0x0990
|
||||||
|
db 4, 2,102,137, 69, 0,139, 68, 36, 24,235, 31, 41, 68, 36, 72 // 0x09a0
|
||||||
|
db 41,199,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 24,102 // 0x09b0
|
||||||
|
db 137, 85, 0,139, 84, 36, 28, 64, 9, 20, 36,139, 76, 36, 32,209 // 0x09c0
|
||||||
|
db 100, 36, 28, 73,137, 76, 36, 32, 15,133,112,255,255,255,139, 52 // 0x09d0
|
||||||
|
db 36, 70,137,116, 36, 92,116, 89,139, 76, 36, 12,139,108, 36,116 // 0x09e0
|
||||||
|
db 131,193, 2, 57,108, 36, 92,119, 95,139,132, 36,160, 0, 0, 0 // 0x09f0
|
||||||
|
db 137,234, 43, 68, 36, 92, 3,148, 36,160, 0, 0, 0,141, 52, 40 // 0x0a00
|
||||||
|
db 138, 6, 70,136, 68, 36,115,136, 2, 66,255, 68, 36,116, 73,116 // 0x0a10
|
||||||
|
db 15,139,172, 36,164, 0, 0, 0, 57,108, 36,116,114,226,235, 17 // 0x0a20
|
||||||
|
db 139,132, 36,164, 0, 0, 0, 57, 68, 36,116, 15,130,187,246,255 // 0x0a30
|
||||||
|
db 255,129,124, 36, 72,255,255,255, 0,119, 21, 59, 92, 36, 76,184 // 0x0a40
|
||||||
|
db 1, 0, 0, 0,116, 41,235, 7,184, 1, 0, 0, 0,235, 32, 67 // 0x0a50
|
||||||
|
db 43,156, 36,148, 0, 0, 0, 49,192,139,148, 36,156, 0, 0, 0 // 0x0a60
|
||||||
|
db 139, 76, 36,116,137, 26,139,156, 36,168, 0, 0, 0,137, 11,131 // 0x0a70
|
||||||
|
db 196,124, 91, 94, 95, 93 // 0x0a80
|
||||||
@@ -40,22 +40,21 @@
|
|||||||
; ecx - 0
|
; ecx - 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// CPU 386
|
// CPU 386
|
||||||
|
|
||||||
|
|
||||||
.macro getbit_n2b one
|
.macro getbit_n2b one
|
||||||
.ifc \one, 1
|
.ifc \one, 1
|
||||||
add ebx, ebx
|
add ebx, ebx
|
||||||
jnz 1f
|
jnz 1f
|
||||||
.endif
|
.endif
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
sub esi, -4
|
sub esi, byte -4
|
||||||
adc ebx, ebx
|
adc ebx, ebx
|
||||||
1:
|
1:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#undef getbit
|
#undef getbit
|
||||||
#define getbit getbit_n2b
|
#define getbit getbit_n2b
|
||||||
|
|
||||||
|
|
||||||
section N2BSMA10
|
section N2BSMA10
|
||||||
@@ -64,7 +63,7 @@ decompr_literals_n2b:
|
|||||||
movsb
|
movsb
|
||||||
section N2BFAS10
|
section N2BFAS10
|
||||||
jmps dcl1_n2b
|
jmps dcl1_n2b
|
||||||
.balign 8
|
.balign 8
|
||||||
section N2BFAS11
|
section N2BFAS11
|
||||||
decompr_literalb_n2b:
|
decompr_literalb_n2b:
|
||||||
mov al, [esi]
|
mov al, [esi]
|
||||||
@@ -81,14 +80,14 @@ dcl1_n2b:
|
|||||||
getbit 32
|
getbit 32
|
||||||
dcl2_n2b:
|
dcl2_n2b:
|
||||||
section N2BSMA20
|
section N2BSMA20
|
||||||
jcs decompr_literals_n2b
|
jc decompr_literals_n2b
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
section N2BFAS20
|
section N2BFAS20
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
|
mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
|
||||||
#endif
|
#endif
|
||||||
jcs decompr_literalb_n2b
|
jc decompr_literalb_n2b
|
||||||
mov eax, 1
|
mov eax, 1
|
||||||
section N2BDEC20
|
section N2BDEC20
|
||||||
loop1_n2b:
|
loop1_n2b:
|
||||||
@@ -96,23 +95,23 @@ loop1_n2b:
|
|||||||
adc eax, eax
|
adc eax, eax
|
||||||
section N2BSMA30
|
section N2BSMA30
|
||||||
getbit 1
|
getbit 1
|
||||||
jncs loop1_n2b
|
jnc loop1_n2b
|
||||||
section N2BFAS30
|
section N2BFAS30
|
||||||
add ebx, ebx
|
add ebx, ebx
|
||||||
jncs loop1_n2b
|
jnc loop1_n2b
|
||||||
jnzs loopend1_n2b
|
jnz loopend1_n2b
|
||||||
getbit 32
|
getbit 32
|
||||||
jncs loop1_n2b
|
jnc loop1_n2b
|
||||||
loopend1_n2b:
|
loopend1_n2b:
|
||||||
section N2BDEC30
|
section N2BDEC30
|
||||||
xor ecx, ecx
|
xor ecx, ecx
|
||||||
sub eax, 3
|
sub eax, 3
|
||||||
jcs decompr_ebpeax_n2b
|
jb decompr_ebpeax_n2b
|
||||||
shl eax, 8
|
shl eax, 8
|
||||||
mov al, [esi]
|
mov al, [esi]
|
||||||
inc esi
|
inc esi
|
||||||
xor eax, -1
|
xor eax, -1
|
||||||
jzs decompr_end_n2b
|
jz decompr_end_n2b
|
||||||
mov ebp, eax
|
mov ebp, eax
|
||||||
decompr_ebpeax_n2b:
|
decompr_ebpeax_n2b:
|
||||||
getbit 1
|
getbit 1
|
||||||
@@ -126,13 +125,13 @@ loop2_n2b:
|
|||||||
adc ecx, ecx
|
adc ecx, ecx
|
||||||
section N2BSMA40
|
section N2BSMA40
|
||||||
getbit 1
|
getbit 1
|
||||||
jncs loop2_n2b
|
jnc loop2_n2b
|
||||||
section N2BFAS40
|
section N2BFAS40
|
||||||
add ebx, ebx
|
add ebx, ebx
|
||||||
jnc loop2_n2b
|
jnc loop2_n2b
|
||||||
jnz loopend2_n2b
|
jnz loopend2_n2b
|
||||||
getbit 32
|
getbit 32
|
||||||
jncs loop2_n2b
|
jnc loop2_n2b
|
||||||
loopend2_n2b:
|
loopend2_n2b:
|
||||||
section N2BDUMM1
|
section N2BDUMM1
|
||||||
section N2BSMA50
|
section N2BSMA50
|
||||||
@@ -145,44 +144,44 @@ decompr_got_mlen_n2b:
|
|||||||
cmp ebp, -0xd00
|
cmp ebp, -0xd00
|
||||||
adc ecx, 1
|
adc ecx, 1
|
||||||
section N2BSMA60
|
section N2BSMA60
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
push esi
|
push esi
|
||||||
#else
|
#else
|
||||||
mov edx, esi
|
mov edx, esi
|
||||||
#endif
|
#endif
|
||||||
lea esi, [edi+ebp]
|
lea esi, [edi+ebp]
|
||||||
rep
|
rep
|
||||||
movsb
|
movsb
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
pop esi
|
pop esi
|
||||||
#else
|
#else
|
||||||
mov esi, edx
|
mov esi, edx
|
||||||
#endif
|
#endif
|
||||||
jmp decompr_loop_n2b
|
jmp decompr_loop_n2b
|
||||||
section N2BFAS60
|
section N2BFAS60
|
||||||
lea edx, [edi+ebp]
|
lea edx, [edi+ebp]
|
||||||
cmp ebp, -4
|
cmp ebp, -4
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
|
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
|
||||||
#endif
|
#endif
|
||||||
jbes decompr_copy4_n2b
|
jbe decompr_copy4_n2b
|
||||||
loop3_n2b:
|
loop3_n2b:
|
||||||
mov al, [edx]
|
mov al, [edx]
|
||||||
inc edx
|
inc edx
|
||||||
mov [edi], al
|
mov [edi], al
|
||||||
inc edi
|
inc edi
|
||||||
dec ecx
|
dec ecx
|
||||||
jnzs loop3_n2b
|
jnz loop3_n2b
|
||||||
jmp decompr_loop_n2b
|
jmp decompr_loop_n2b
|
||||||
section N2BFAS61
|
section N2BFAS61
|
||||||
.balign 4
|
.balign 4
|
||||||
decompr_copy4_n2b:
|
decompr_copy4_n2b:
|
||||||
mov eax, [edx]
|
mov eax, [edx]
|
||||||
add edx, 4
|
add edx, 4
|
||||||
mov [edi], eax
|
mov [edi], eax
|
||||||
add edi, 4
|
add edi, 4
|
||||||
sub ecx, 4
|
sub ecx, 4
|
||||||
jas decompr_copy4_n2b
|
ja decompr_copy4_n2b
|
||||||
add edi, ecx
|
add edi, ecx
|
||||||
jmp decompr_loop_n2b
|
jmp decompr_loop_n2b
|
||||||
section N2BDEC60
|
section N2BDEC60
|
||||||
|
|||||||
@@ -40,12 +40,11 @@
|
|||||||
; ecx - 0
|
; ecx - 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// CPU 386
|
// CPU 386
|
||||||
|
|
||||||
|
|
||||||
.macro getbit_n2d one
|
.macro getbit_n2d one
|
||||||
.ifc \one, 1
|
.ifc \one, 1
|
||||||
add ebx, ebx
|
add ebx, ebx
|
||||||
jnz 1f
|
jnz 1f
|
||||||
.endif
|
.endif
|
||||||
@@ -54,6 +53,7 @@
|
|||||||
adc ebx, ebx
|
adc ebx, ebx
|
||||||
1:
|
1:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#undef getbit
|
#undef getbit
|
||||||
#define getbit getbit_n2d
|
#define getbit getbit_n2d
|
||||||
|
|
||||||
@@ -85,9 +85,9 @@ section N2DSMA20
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
section N2DFAS20
|
section N2DFAS20
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
|
mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
|
||||||
#endif
|
#endif
|
||||||
jc decompr_literalb_n2d
|
jc decompr_literalb_n2d
|
||||||
mov eax, 1
|
mov eax, 1
|
||||||
section N2DDEC20
|
section N2DDEC20
|
||||||
@@ -118,7 +118,7 @@ loopend1_n2d:
|
|||||||
inc esi
|
inc esi
|
||||||
xor eax, -1
|
xor eax, -1
|
||||||
jz decompr_end_n2d
|
jz decompr_end_n2d
|
||||||
sar eax, 1 // shift low-bit into carry
|
sar eax, 1 // shift low-bit into carry
|
||||||
mov ebp, eax
|
mov ebp, eax
|
||||||
jmps decompr_ebpeax_n2d
|
jmps decompr_ebpeax_n2d
|
||||||
decompr_prev_dist_n2d:
|
decompr_prev_dist_n2d:
|
||||||
@@ -153,26 +153,26 @@ decompr_got_mlen_n2d:
|
|||||||
cmp ebp, -0x500
|
cmp ebp, -0x500
|
||||||
adc ecx, 1
|
adc ecx, 1
|
||||||
section N2DSMA60
|
section N2DSMA60
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
push esi
|
push esi
|
||||||
#else
|
#else
|
||||||
mov edx, esi
|
mov edx, esi
|
||||||
#endif
|
#endif
|
||||||
lea esi, [edi+ebp]
|
lea esi, [edi+ebp]
|
||||||
rep
|
rep
|
||||||
movsb
|
movsb
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
pop esi
|
pop esi
|
||||||
#else
|
#else
|
||||||
mov esi, edx
|
mov esi, edx
|
||||||
#endif
|
#endif
|
||||||
jmp decompr_loop_n2d
|
jmp decompr_loop_n2d
|
||||||
section N2DFAS60
|
section N2DFAS60
|
||||||
lea edx, [edi+ebp]
|
lea edx, [edi+ebp]
|
||||||
cmp ebp, -4
|
cmp ebp, -4
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
|
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
|
||||||
#endif
|
#endif
|
||||||
jbe decompr_copy4_n2d
|
jbe decompr_copy4_n2d
|
||||||
loop3_n2d:
|
loop3_n2d:
|
||||||
mov al, [edx]
|
mov al, [edx]
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ lzma_d_c%.S : lzma_d_c.c
|
|||||||
$(call tc,gcc) $(PP_FLAGS) -c $< -o tmp/$T.o
|
$(call tc,gcc) $(PP_FLAGS) -c $< -o tmp/$T.o
|
||||||
$(call tc,objstrip) tmp/$T.o
|
$(call tc,objstrip) tmp/$T.o
|
||||||
$(call tc,objcopy) -O binary --only-section .text.LzmaDecode tmp/$T.o tmp/$T.bin
|
$(call tc,objcopy) -O binary --only-section .text.LzmaDecode tmp/$T.o tmp/$T.bin
|
||||||
head -c-0 tmp/$T.bin > tmp/$T.out
|
head -c-4 tmp/$T.bin > tmp/$T.out
|
||||||
$(call tc,objdump) -b binary -m powerpc -D tmp/$T.out > tmp/$T.out.lst
|
$(call tc,objdump) -b binary -m powerpc -D tmp/$T.out > tmp/$T.out.lst
|
||||||
$(call tc,bin2h) --mode=gas tmp/$T.out $@
|
$(call tc,bin2h) --mode=gas tmp/$T.out $@
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<jreiser@users.sourceforge.net>
|
<jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "regs.h"
|
#include "ppc_regs.h"
|
||||||
|
|
||||||
ppcbxx: # (*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
|
ppcbxx: # (*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
|
||||||
#define W_CTO 4 /* must match filteri/ppcbxx.h */
|
#define W_CTO 4 /* must match filteri/ppcbxx.h */
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
; lzma_d.S -- 64-bit PowerPC assembly
|
||||||
|
;
|
||||||
|
; This file is part of the UPX executable compressor.
|
||||||
|
;
|
||||||
|
; Copyright (C) 2006-2006 Markus Franz Xaver Johannes Oberhumer
|
||||||
|
; All Rights Reserved.
|
||||||
|
;
|
||||||
|
; UPX and the UCL library are free software; you can redistribute them
|
||||||
|
; and/or modify them under the terms of the GNU General Public License as
|
||||||
|
; published by the Free Software Foundation; either version 2 of
|
||||||
|
; the License, or (at your option) any later version.
|
||||||
|
;
|
||||||
|
; This program is distributed in the hope that it will be useful,
|
||||||
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
; GNU General Public License for more details.
|
||||||
|
;
|
||||||
|
; You should have received a copy of the GNU General Public License
|
||||||
|
; along with this program; see the file COPYING.
|
||||||
|
; If not, write to the Free Software Foundation, Inc.,
|
||||||
|
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
;
|
||||||
|
; Markus F.X.J. Oberhumer
|
||||||
|
; <markus@oberhumer.com>
|
||||||
|
; http://www.oberhumer.com/opensource/upx/
|
||||||
|
;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ppc_regs.h"
|
||||||
|
|
||||||
|
#define section .section
|
||||||
|
|
||||||
|
section LZMA_ELF00
|
||||||
|
//decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
|
||||||
|
/* Arguments according to calling convention */
|
||||||
|
#define src a0
|
||||||
|
#define lsrc a1
|
||||||
|
#define dst a2
|
||||||
|
#define ldst a3 /* Out: actually a reference: &len_dst */
|
||||||
|
#define meth a4
|
||||||
|
|
||||||
|
// ELFMAINX has already done this for us:
|
||||||
|
// pushq %rbp; push %rbx // C callable
|
||||||
|
// pushq ldst
|
||||||
|
// pushq dst
|
||||||
|
// addq src,lsrc; push lsrc // &input_eof
|
||||||
|
|
||||||
|
#define M_LZMA 14
|
||||||
|
teq r0,r0 // debugging
|
||||||
|
cmpli cr0,meth,M_LZMA
|
||||||
|
bne cr0,not_lzma
|
||||||
|
mflr r0
|
||||||
|
|
||||||
|
//LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
|
||||||
|
// a0= &CLzmaDecoderState,
|
||||||
|
// a1= inp, a2= inSize, a3= &inSizeProcessed,
|
||||||
|
// a4= outp, a5= outSize, a6= &outSizeProcessed
|
||||||
|
//)
|
||||||
|
lwz a5,0(ldst) // outSize
|
||||||
|
mr a4,dst // outp
|
||||||
|
|
||||||
|
addi a2,lsrc,-2 // inSize
|
||||||
|
la a1,2(src) // inp
|
||||||
|
|
||||||
|
stw r0,4(sp) // ret.addr
|
||||||
|
lbz r0,0(src) // first byte, replaces LzmaDecodeProperties()
|
||||||
|
rlwinm t1,r0,32-3,3,31 // t1= (r0>>3)==(lit_context-bits + lit_pos_bits)
|
||||||
|
rlwinm t0,r0,0,32-3,31 // t0= (7& t0)==pos_bits
|
||||||
|
|
||||||
|
#define LZMA_BASE_SIZE 1846
|
||||||
|
#define LZMA_LIT_SIZE 768
|
||||||
|
#define szSizeT 4
|
||||||
|
|
||||||
|
li a0,-2*LZMA_LIT_SIZE
|
||||||
|
slw a0,a0,t1 // -2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
|
||||||
|
addi a0,a0,-2*4 -(2*szSizeT +4) - 2*LZMA_BASE_SIZE
|
||||||
|
// alloca{sp,ra, inSizeProcessed, outSizeProcessed, *_bits, CLzmaDecoderState}
|
||||||
|
mr a3,sp
|
||||||
|
add sp,sp,a0
|
||||||
|
rlwinm sp,sp,0,0,32-6 // (1<<6) byte align
|
||||||
|
|
||||||
|
mr a0,a3 // old sp
|
||||||
|
li r0,0
|
||||||
|
1:
|
||||||
|
stwu r0,-4(a0) // clear CLZmaDecoderState on stack
|
||||||
|
cmpl cr0,sp,a0 // compare logical ==> compare unsigned
|
||||||
|
blt cr0,1b
|
||||||
|
stw a3,0(sp) // frame chain
|
||||||
|
|
||||||
|
lbz r0,-1(a1) // second byte, replaces LzmaDecodeProperties()
|
||||||
|
la a6,2*4 (sp) // &outSizeProcessed
|
||||||
|
la a3,2*4+1*szSizeT(sp) // &inSizeProcessed
|
||||||
|
la a0,2*4+2*szSizeT(sp) // &CLzmaDecoderState
|
||||||
|
rlwinm t1,r0,32-4,4,31 // t1= (r0>>4)==lit_pos_bits
|
||||||
|
rlwinm r0,r0,0,32-4,31 // r0= (0xf& r0)==lit_context_bits
|
||||||
|
stb t0,2(a0) // pos_bits
|
||||||
|
stb t1,1(a0) // lit_pos_bits
|
||||||
|
stb r0,0(a0) // lit_context_bits
|
||||||
|
|
||||||
|
section LZMA_DEC10
|
||||||
|
#include "lzma_d_cs.S"
|
||||||
|
|
||||||
|
section LZMA_DEC20
|
||||||
|
#include "lzma_d_cf.S"
|
||||||
|
|
||||||
|
section LZMA_DEC30
|
||||||
|
lwz sp,0(sp) // old sp
|
||||||
|
lwz r0,4(sp) // ret.addr
|
||||||
|
mtlr r0
|
||||||
|
not_lzma:
|
||||||
|
|
||||||
|
// vi:ts=8:et
|
||||||
|
|
||||||
@@ -151,4 +151,4 @@
|
|||||||
.byte 56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1 /* 0x0960 */
|
.byte 56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1 /* 0x0960 */
|
||||||
.byte 72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80 /* 0x0970 */
|
.byte 72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80 /* 0x0970 */
|
||||||
.byte 144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100 /* 0x0980 */
|
.byte 144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100 /* 0x0980 */
|
||||||
.byte 185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96, 78,128, 0, 32 /* 0x0990 */
|
.byte 185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96 /* 0x0990 */
|
||||||
|
|||||||
@@ -151,4 +151,4 @@
|
|||||||
.byte 56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1 /* 0x0960 */
|
.byte 56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1 /* 0x0960 */
|
||||||
.byte 72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80 /* 0x0970 */
|
.byte 72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80 /* 0x0970 */
|
||||||
.byte 144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100 /* 0x0980 */
|
.byte 144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100 /* 0x0980 */
|
||||||
.byte 185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96, 78,128, 0, 32 /* 0x0990 */
|
.byte 185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96 /* 0x0990 */
|
||||||
|
|||||||
@@ -29,41 +29,27 @@
|
|||||||
<jreiser@users.sourceforge.net>
|
<jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ppc_regs.h"
|
#define M_NRV2B_LE32 2
|
||||||
|
dcbtst 0,dst // prime dcache for store
|
||||||
|
mflr t3 // return address
|
||||||
|
|
||||||
SZ_DLINE=128 # size of data cache line in Apple G5
|
cmpli cr0,meth,M_NRV2B_LE32
|
||||||
|
bne cr0,not_nrv2b
|
||||||
|
|
||||||
/* Returns 0 on success; non-zero on failure. */
|
stw dst,0(ldst) // original dst
|
||||||
decompress: # (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint method)
|
add lsrc,lsrc,src // input eof
|
||||||
|
|
||||||
/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */
|
lis hibit,0x8000 // 0x80000000 for detecting next bit
|
||||||
#define hibit r0 /* holds 0x80000000 during decompress */
|
lis bits,0x8000 // prepare for first load
|
||||||
|
addi src,src,-1 // prepare for 'lbzu'
|
||||||
#define src a0
|
addi dst,dst,-1 // prepare for 'stbu'
|
||||||
#define lsrc a1
|
li disp,-1 // initial displacement
|
||||||
#define dst a2
|
|
||||||
#define ldst a3 /* Out: actually a reference: &len_dst */
|
|
||||||
#define meth a4
|
|
||||||
|
|
||||||
#define off a4
|
|
||||||
#define len a5
|
|
||||||
#define bits a6
|
|
||||||
#define disp a7
|
|
||||||
|
|
||||||
dcbtst 0,dst # prime dcache for store
|
|
||||||
|
|
||||||
stw dst,0(ldst) # original dst
|
|
||||||
add lsrc,lsrc,src # input eof
|
|
||||||
|
|
||||||
lis hibit,0x8000 # 0x80000000 for detecting next bit
|
|
||||||
lis bits,0x8000 # prepare for first load
|
|
||||||
addi src,src,-1 # prepare for 'lbzu'
|
|
||||||
addi dst,dst,-1 # prepare for 'stbu'
|
|
||||||
li disp,-1 # initial displacement
|
|
||||||
|
|
||||||
mflr t3 # return address
|
|
||||||
b bot_n2b
|
b bot_n2b
|
||||||
|
|
||||||
|
#undef jnextb0y
|
||||||
|
#undef jnextb0n
|
||||||
|
#undef jnextb1y
|
||||||
|
#undef jnextb1n
|
||||||
/* jump on next bit, with branch prediction: y==>likely; n==>unlikely
|
/* jump on next bit, with branch prediction: y==>likely; n==>unlikely
|
||||||
cr0 is set by the cmpl ["compare logical"==>unsigned]:
|
cr0 is set by the cmpl ["compare logical"==>unsigned]:
|
||||||
lt next bit is 0
|
lt next bit is 0
|
||||||
@@ -75,66 +61,67 @@ decompress: # (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint me
|
|||||||
#define jnextb1y call get1; bgt+ cr0,
|
#define jnextb1y call get1; bgt+ cr0,
|
||||||
#define jnextb1n call get1; bgt- cr0,
|
#define jnextb1n call get1; bgt- cr0,
|
||||||
|
|
||||||
|
#undef getnextb
|
||||||
/* rotate next bit into bottom bit of reg; set cr0 based on entire result reg */
|
/* rotate next bit into bottom bit of reg; set cr0 based on entire result reg */
|
||||||
#define getnextb(reg) call get1; adde. reg,reg,reg
|
#define getnextb(reg) call get1; adde. reg,reg,reg
|
||||||
|
|
||||||
get1:
|
get1:
|
||||||
cmpl cr0,bits,hibit # cr0 for jnextb
|
cmpl cr0,bits,hibit // cr0 for jnextb
|
||||||
addc bits,bits,bits # CArry for getnextb
|
addc bits,bits,bits // CArry for getnextb
|
||||||
bnelr+ cr0 # return if reload not needed; likely 31/32
|
bnelr+ cr0 // return if reload not needed; likely 31/32
|
||||||
|
|
||||||
/* CArry has been set from adding 0x80000000 to itself; preserve for 'adde' */
|
/* CArry has been set from adding 0x80000000 to itself; preserve for 'adde' */
|
||||||
# fetch 4 bytes unaligned and LITTLE ENDIAN
|
// fetch 4 bytes unaligned and LITTLE ENDIAN
|
||||||
#if 0 /*{ clean; but 4 instr larger, and 3 cycles longer */
|
#if 0 /*{ clean; but 4 instr larger, and 3 cycles longer */
|
||||||
lbz bits,1(src) # lo8
|
lbz bits,1(src) // lo8
|
||||||
lbz t0,2(src); rlwimi bits,t0, 8,16,23
|
lbz t0,2(src); rlwimi bits,t0, 8,16,23
|
||||||
lbz t0,3(src); rlwimi bits,t0,16, 8,15
|
lbz t0,3(src); rlwimi bits,t0,16, 8,15
|
||||||
lbzu t0,4(src); rlwimi bits,t0,24, 0, 7
|
lbzu t0,4(src); rlwimi bits,t0,24, 0, 7
|
||||||
#else /*}{ pray for no unalignment trap or slowdown */
|
#else /*}{ pray for no unalignment trap or slowdown */
|
||||||
li bits,1 # compensate for 'lbzu'
|
li bits,1 // compensate for 'lbzu'
|
||||||
lwbrx bits,bits,src # bits= fetch_le32(bits+src)
|
lwbrx bits,bits,src // bits= fetch_le32(bits+src)
|
||||||
addi src,src,4
|
addi src,src,4
|
||||||
#endif /*}*/
|
#endif /*}*/
|
||||||
|
|
||||||
cmpl cr0,bits,hibit # cr0 for jnextb
|
cmpl cr0,bits,hibit // cr0 for jnextb
|
||||||
adde bits,bits,bits # CArry for getnextb; set lo bit from CarryIn
|
adde bits,bits,bits // CArry for getnextb; set lo bit from CarryIn
|
||||||
ret
|
ret
|
||||||
|
|
||||||
lit_n2b:
|
lit_n2b:
|
||||||
#define tmp len
|
#define tmp len
|
||||||
lbzu tmp,1(src) # tmp= *++src;
|
lbzu tmp,1(src) // tmp= *++src;
|
||||||
stbu tmp,1(dst) # *++dst= tmp;
|
stbu tmp,1(dst) // *++dst= tmp;
|
||||||
#undef tmp
|
#undef tmp
|
||||||
top_n2b:
|
top_n2b:
|
||||||
jnextb1y lit_n2b
|
jnextb1y lit_n2b
|
||||||
li off,1 # "the msb"
|
li off,1 // "the msb"
|
||||||
offmore_n2b:
|
offmore_n2b:
|
||||||
getnextb(off)
|
getnextb(off)
|
||||||
jnextb0n offmore_n2b
|
jnextb0n offmore_n2b
|
||||||
|
|
||||||
addic. off,off,-3 # CArry set [and ignored], but no 'addi.'
|
addic. off,off,-3 // CArry set [and ignored], but no 'addi.'
|
||||||
li len,0
|
li len,0
|
||||||
blt- offprev_n2b
|
blt- offprev_n2b
|
||||||
lbzu t0,1(src)
|
lbzu t0,1(src)
|
||||||
rlwinm off,off,8,0,31-8 # off<<=8;
|
rlwinm off,off,8,0,31-8 // off<<=8;
|
||||||
nor. disp,off,t0 # disp = -(1+ (off|t0));
|
nor. disp,off,t0 // disp = -(1+ (off|t0));
|
||||||
beq- eof_n2b
|
beq- eof_nrv
|
||||||
|
|
||||||
offprev_n2b: # In: 0==len
|
offprev_n2b: // In: 0==len
|
||||||
getnextb(len); getnextb(len) # two bits; cr0 set on result
|
getnextb(len); getnextb(len) // two bits; cr0 set on result
|
||||||
li off,1; bne- gotlen_n2b # raw 1,2,3 ==> 2,3,4
|
li off,1; bne- gotlen_n2b // raw 1,2,3 ==> 2,3,4
|
||||||
li off,3 # raw 2.. ==> 5..
|
li off,3 // raw 2.. ==> 5..
|
||||||
li len,1 # "the msb"
|
li len,1 // "the msb"
|
||||||
lenmore_n2b:
|
lenmore_n2b:
|
||||||
getnextb(len)
|
getnextb(len)
|
||||||
jnextb0n lenmore_n2b
|
jnextb0n lenmore_n2b
|
||||||
gotlen_n2b:
|
gotlen_n2b:
|
||||||
subfic t0,disp,(~0)+(-0xd00) # want CArry only
|
subfic t0,disp,(~0)+(-0xd00) // want CArry only
|
||||||
adde len,len,off # len += off + (disp < -0xd00);
|
adde len,len,off // len += off + (disp < -0xd00);
|
||||||
|
|
||||||
copy:
|
copy:
|
||||||
#define back off
|
#define back off
|
||||||
add back,disp,dst # point back to match in dst
|
add back,disp,dst // point back to match in dst
|
||||||
mtctr len
|
mtctr len
|
||||||
short_n2b:
|
short_n2b:
|
||||||
#define tmp len
|
#define tmp len
|
||||||
@@ -151,21 +138,10 @@ short_n2b:
|
|||||||
*/
|
*/
|
||||||
bot_n2b:
|
bot_n2b:
|
||||||
li back,2*SZ_DLINE
|
li back,2*SZ_DLINE
|
||||||
dcbtst back,dst # 2 lines ahead [-1 for stbu]
|
dcbtst back,dst // 2 lines ahead [-1 for stbu]
|
||||||
dcbt back,src # jump start auto prefetch at page boundary
|
dcbt back,src // jump start auto prefetch at page boundary
|
||||||
/* Auto prefetch for Read quits at page boundary; needs 2 misses to restart. */
|
/* Auto prefetch for Read quits at page boundary; needs 2 misses to restart. */
|
||||||
#undef back
|
#undef back
|
||||||
b top_n2b
|
b top_n2b
|
||||||
|
|
||||||
eof_n2b:
|
not_nrv2b:
|
||||||
#define tmp r0 /* hibit is dead */
|
|
||||||
lwz tmp,0(ldst) # original dst
|
|
||||||
mtlr t3 # return address
|
|
||||||
addi dst,dst,1 # uncorrect for 'stbu'
|
|
||||||
addi src,src,1 # uncorrect for 'lbzu'
|
|
||||||
subf dst,tmp,dst # dst -= tmp; // dst length
|
|
||||||
#undef tmp
|
|
||||||
subf a0,lsrc,src # src -= eof; // return 0: good; else: bad
|
|
||||||
stw dst,0(ldst)
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,41 +29,27 @@
|
|||||||
<jreiser@users.sourceforge.net>
|
<jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "regs.h"
|
#define M_NRV2E_LE32 8
|
||||||
|
dcbtst 0,dst // prime dcache for store
|
||||||
|
mflr t3 // return address
|
||||||
|
|
||||||
SZ_DLINE=128 # size of data cache line in Apple G5
|
cmpli cr0,meth,M_NRV2E_LE32
|
||||||
|
bne cr0,not_nrv2e
|
||||||
|
|
||||||
/* Returns 0 on success; non-zero on failure. */
|
stw dst,0(ldst) // original dst
|
||||||
decompress: # (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint method)
|
add lsrc,lsrc,src // input eof
|
||||||
|
|
||||||
/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */
|
lis hibit,0x8000 // 0x80000000 for detecting next bit
|
||||||
#define hibit r0 /* holds 0x80000000 during decompress */
|
lis bits,0x8000 // prepare for first load
|
||||||
|
addi src,src,-1 // prepare for 'lbzu'
|
||||||
#define src a0
|
addi dst,dst,-1 // prepare for 'stbu'
|
||||||
#define lsrc a1
|
li disp,-1 // initial displacement
|
||||||
#define dst a2
|
|
||||||
#define ldst a3 /* Out: actually a reference: &len_dst */
|
|
||||||
#define meth a4
|
|
||||||
|
|
||||||
#define off a4
|
|
||||||
#define len a5
|
|
||||||
#define bits a6
|
|
||||||
#define disp a7
|
|
||||||
|
|
||||||
dcbtst 0,dst # prime dcache for store
|
|
||||||
|
|
||||||
stw dst,0(ldst) # original dst
|
|
||||||
add lsrc,lsrc,src # input eof
|
|
||||||
|
|
||||||
lis hibit,0x8000 # 0x80000000 for detecting next bit
|
|
||||||
lis bits,0x8000 # prepare for first load
|
|
||||||
addi src,src,-1 # prepare for 'lbzu'
|
|
||||||
addi dst,dst,-1 # prepare for 'stbu'
|
|
||||||
li disp,-1 # initial displacement
|
|
||||||
|
|
||||||
mflr t3 # return address
|
|
||||||
b bot_n2e
|
b bot_n2e
|
||||||
|
|
||||||
|
#undef jnextb0y
|
||||||
|
#undef jnextb0n
|
||||||
|
#undef jnextb1y
|
||||||
|
#undef jnextb1n
|
||||||
/* jump on next bit, with branch prediction: y==>likely; n==>unlikely
|
/* jump on next bit, with branch prediction: y==>likely; n==>unlikely
|
||||||
cr0 is set by the cmpl ["compare logical"==>unsigned]:
|
cr0 is set by the cmpl ["compare logical"==>unsigned]:
|
||||||
lt next bit is 0
|
lt next bit is 0
|
||||||
@@ -77,31 +63,32 @@ decompress: # (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint me
|
|||||||
#define jnextb1y cmpl 0,bits,hibit; add bits,bits,bits; beql- get32; bgt+
|
#define jnextb1y cmpl 0,bits,hibit; add bits,bits,bits; beql- get32; bgt+
|
||||||
#define jnextb1n cmpl 0,bits,hibit; add bits,bits,bits; beql- get32; bgt-
|
#define jnextb1n cmpl 0,bits,hibit; add bits,bits,bits; beql- get32; bgt-
|
||||||
|
|
||||||
|
#undef getnextb
|
||||||
/* rotate next bit into bottom bit of reg */
|
/* rotate next bit into bottom bit of reg */
|
||||||
#define getnextb(reg) addc. bits,bits,bits; beql- get32; adde reg,reg,reg
|
#define getnextb(reg) addc. bits,bits,bits; beql- get32; adde reg,reg,reg
|
||||||
|
|
||||||
get32:
|
get32:
|
||||||
# fetch 4 bytes unaligned and LITTLE ENDIAN
|
// fetch 4 bytes unaligned and LITTLE ENDIAN
|
||||||
#if 0 /*{ clean; but 4 instr larger, and 3 cycles longer */
|
#if 0 /*{ clean; but 4 instr larger, and 3 cycles longer */
|
||||||
lbz bits,1(src) # lo8
|
lbz bits,1(src) // lo8
|
||||||
lbz t0,2(src); rlwimi bits,t0, 8,16,23
|
lbz t0,2(src); rlwimi bits,t0, 8,16,23
|
||||||
lbz t0,3(src); rlwimi bits,t0,16, 8,15
|
lbz t0,3(src); rlwimi bits,t0,16, 8,15
|
||||||
lbzu t0,4(src); rlwimi bits,t0,24, 0, 7
|
lbzu t0,4(src); rlwimi bits,t0,24, 0, 7
|
||||||
#else /*}{ pray for no unalignment trap or slowdown */
|
#else /*}{ pray for no unalignment trap or slowdown */
|
||||||
li bits,1 # compensate for 'lbzu'
|
li bits,1 // compensate for 'lbzu'
|
||||||
lwbrx bits,bits,src # bits= fetch_le32(bits+src)
|
lwbrx bits,bits,src // bits= fetch_le32(bits+src)
|
||||||
addi src,src,4
|
addi src,src,4
|
||||||
#endif /*}*/
|
#endif /*}*/
|
||||||
|
|
||||||
cmpl 0,bits,hibit # cr0 for jnextb
|
cmpl 0,bits,hibit // cr0 for jnextb
|
||||||
addc bits,bits,bits # CArry for getnextb
|
addc bits,bits,bits // CArry for getnextb
|
||||||
ori bits,bits,1 # the flag bit
|
ori bits,bits,1 // the flag bit
|
||||||
ret
|
ret
|
||||||
|
|
||||||
lit_n2e:
|
lit_n2e:
|
||||||
#define tmp len
|
#define tmp len
|
||||||
lbzu tmp,1(src) # tmp= *++src;
|
lbzu tmp,1(src) // tmp= *++src;
|
||||||
stbu tmp,1(dst) # *++dst= tmp;
|
stbu tmp,1(dst) // *++dst= tmp;
|
||||||
#undef tmp
|
#undef tmp
|
||||||
top_n2e:
|
top_n2e:
|
||||||
jnextb1y lit_n2e
|
jnextb1y lit_n2e
|
||||||
@@ -116,21 +103,21 @@ getoff_n2e:
|
|||||||
jnextb0n off_n2e
|
jnextb0n off_n2e
|
||||||
|
|
||||||
li len,0
|
li len,0
|
||||||
addic. off,off,-3 # CArry set [and ignored], but no 'addi.'
|
addic. off,off,-3 // CArry set [and ignored], but no 'addi.'
|
||||||
rlwinm off,off,8,0,31-8 # off<<=8;
|
rlwinm off,off,8,0,31-8 // off<<=8;
|
||||||
blt- offprev_n2e
|
blt- offprev_n2e
|
||||||
lbzu t0,1(src)
|
lbzu t0,1(src)
|
||||||
nor. disp,off,t0 # disp = -(1+ (off|t0));
|
nor. disp,off,t0 // disp = -(1+ (off|t0));
|
||||||
srawi disp,disp,1 # shift off low bit (sets CArry; ignored)
|
srawi disp,disp,1 // shift off low bit (sets CArry; ignored)
|
||||||
beq- eof_n2e
|
beq- eof_nrv
|
||||||
andi. t0,t0,1 # complement of low bit of unshifted disp
|
andi. t0,t0,1 // complement of low bit of unshifted disp
|
||||||
beq+ lenlast_n2e # low bit was 1
|
beq+ lenlast_n2e // low bit was 1
|
||||||
b lenmore_n2e # low bit was 0
|
b lenmore_n2e // low bit was 0
|
||||||
|
|
||||||
offprev_n2e:
|
offprev_n2e:
|
||||||
jnextb1y lenlast_n2e
|
jnextb1y lenlast_n2e
|
||||||
lenmore_n2e:
|
lenmore_n2e:
|
||||||
li len,1 # 1: "the msb"
|
li len,1 // 1: "the msb"
|
||||||
jnextb1y lenlast_n2e
|
jnextb1y lenlast_n2e
|
||||||
len_n2e:
|
len_n2e:
|
||||||
getnextb(len)
|
getnextb(len)
|
||||||
@@ -139,16 +126,16 @@ len_n2e:
|
|||||||
b gotlen_n2e
|
b gotlen_n2e
|
||||||
|
|
||||||
lenlast_n2e:
|
lenlast_n2e:
|
||||||
getnextb(len) # 0,1,2,3
|
getnextb(len) // 0,1,2,3
|
||||||
gotlen_n2e:
|
gotlen_n2e:
|
||||||
#define tmp off
|
#define tmp off
|
||||||
subfic tmp,disp,(~0)+(-0x500) # want CArry only
|
subfic tmp,disp,(~0)+(-0x500) // want CArry only
|
||||||
#undef tmp
|
#undef tmp
|
||||||
addi len,len,2
|
addi len,len,2
|
||||||
addze len,len # len += (disp < -0x500);
|
addze len,len // len += (disp < -0x500);
|
||||||
|
|
||||||
#define back off
|
#define back off
|
||||||
add back,disp,dst # point back to match in dst
|
add back,disp,dst // point back to match in dst
|
||||||
mtctr len
|
mtctr len
|
||||||
short_n2e:
|
short_n2e:
|
||||||
#define tmp len
|
#define tmp len
|
||||||
@@ -164,21 +151,10 @@ bot_n2e:
|
|||||||
pace the dcbtst optimally; but that takes 7 or 8 instructions of space.
|
pace the dcbtst optimally; but that takes 7 or 8 instructions of space.
|
||||||
*/
|
*/
|
||||||
li back,2*SZ_DLINE
|
li back,2*SZ_DLINE
|
||||||
dcbtst back,dst # 2 lines ahead [-1 for stbu]
|
dcbtst back,dst // 2 lines ahead [-1 for stbu]
|
||||||
dcbt back,src # jump start auto prefetch at page boundary
|
dcbt back,src // jump start auto prefetch at page boundary
|
||||||
/* Auto prefetch for Read quits at page boundary; needs 2 misses to restart. */
|
/* Auto prefetch for Read quits at page boundary; needs 2 misses to restart. */
|
||||||
b top_n2e
|
b top_n2e
|
||||||
#undef back
|
#undef back
|
||||||
|
|
||||||
eof_n2e:
|
not_nrv2e:
|
||||||
#define tmp r0 /* hibit is dead */
|
|
||||||
lwz tmp,0(ldst) # original dst
|
|
||||||
mtlr t3 # return address
|
|
||||||
addi dst,dst,1 # uncorrect for 'stbu'
|
|
||||||
addi src,src,1 # uncorrect for 'lbzu'
|
|
||||||
subf dst,tmp,dst # dst -= tmp; // dst length
|
|
||||||
#undef tmp
|
|
||||||
subf a0,lsrc,src # src -= eof; // return 0: good; else: bad
|
|
||||||
stw dst,0(ldst)
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#ifndef __PPC_REGS__ /*{*/
|
||||||
|
#define __PPC_REGS__
|
||||||
|
|
||||||
|
#define r0 0
|
||||||
|
#define r1 1
|
||||||
|
#define r2 2
|
||||||
|
|
||||||
|
#define r29 29
|
||||||
|
#define r30 30
|
||||||
|
#define r31 31
|
||||||
|
|
||||||
|
/* Stack pointer */
|
||||||
|
#define sp 1
|
||||||
|
|
||||||
|
/* Subroutine arguments; not saved by callee */
|
||||||
|
#define a0 3
|
||||||
|
#define a1 4
|
||||||
|
#define a2 5
|
||||||
|
#define a3 6
|
||||||
|
#define a4 7
|
||||||
|
#define a5 8
|
||||||
|
#define a6 9
|
||||||
|
#define a7 10
|
||||||
|
|
||||||
|
/* Scratch (temporary) registers; not saved by callee */
|
||||||
|
#define t0 2
|
||||||
|
#define t1 11
|
||||||
|
#define t2 12
|
||||||
|
#define t3 13
|
||||||
|
|
||||||
|
/* branch and link */
|
||||||
|
#define call bl
|
||||||
|
|
||||||
|
/* branch to link register */
|
||||||
|
#define ret blr
|
||||||
|
|
||||||
|
/* move register */
|
||||||
|
#define movr mr
|
||||||
|
|
||||||
|
#endif /*} __PPC_REGS__ */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
vi:ts=4:et:nowrap
|
||||||
|
*/
|
||||||
|
|
||||||
@@ -30,11 +30,11 @@
|
|||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
*/
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
// CPU 386
|
// CPU 386
|
||||||
|
|
||||||
#include "arch/i386/macros2.ash"
|
// CPU 386
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
// program entry point
|
// program entry point
|
||||||
@@ -65,11 +65,11 @@ _start: .globl _start
|
|||||||
call main // push address of decompress subroutine
|
call main // push address of decompress subroutine
|
||||||
decompress:
|
decompress:
|
||||||
|
|
||||||
; /*************************************************************************
|
// /*************************************************************************
|
||||||
; // C callable decompressor
|
// // C callable decompressor
|
||||||
; **************************************************************************/
|
// **************************************************************************/
|
||||||
|
|
||||||
; /* Offsets to parameters, allowing for {push + pusha + call} */
|
// /* Offsets to parameters, allowing for {push + pusha + call} */
|
||||||
#define O_INP (4+ 8*4 +1*4)
|
#define O_INP (4+ 8*4 +1*4)
|
||||||
#define O_INS (4+ 8*4 +2*4)
|
#define O_INS (4+ 8*4 +2*4)
|
||||||
#define O_OUTP (4+ 8*4 +3*4)
|
#define O_OUTP (4+ 8*4 +3*4)
|
||||||
@@ -93,12 +93,13 @@ section LEXEC010
|
|||||||
mov edi, OUTP
|
mov edi, OUTP
|
||||||
|
|
||||||
or ebp, -1
|
or ebp, -1
|
||||||
//// align 8
|
// align 8
|
||||||
|
|
||||||
#include "arch/i386/nrv2b_d32_2.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
#include "arch/i386/nrv2d_d32_2.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
//#include "arch/i386/lzma_d.ash" // FIXME
|
#define db .byte
|
||||||
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
cjt32 0
|
cjt32 0
|
||||||
|
|
||||||
section LEXEC015
|
section LEXEC015
|
||||||
@@ -148,11 +149,13 @@ section LEXEC020
|
|||||||
#define __NR_write 4
|
#define __NR_write 4
|
||||||
#define __NR_exit 1
|
#define __NR_exit 1
|
||||||
|
|
||||||
|
#define pushsbli .byte 0x6a, /* push sign-extended byte to long immediate */
|
||||||
|
|
||||||
fail_mmap:
|
fail_mmap:
|
||||||
push L71 - L70
|
pushsbli L71 - L70
|
||||||
call L71
|
call L71
|
||||||
L70:
|
L70:
|
||||||
.ascii "PROT_EXEC|PROT_WRITE failed\n"
|
.ascii "PROT_EXEC|PROT_WRITE failed.\n"
|
||||||
L71:
|
L71:
|
||||||
push 2 // fd stderr
|
push 2 // fd stderr
|
||||||
push eax // fake ret.addr
|
push eax // fake ret.addr
|
||||||
@@ -179,7 +182,7 @@ unfold:
|
|||||||
// So first PT_LOAD must be PF_R|PF_X only, and .p_memsz==.p_filesz.
|
// So first PT_LOAD must be PF_R|PF_X only, and .p_memsz==.p_filesz.
|
||||||
// So we must round up here, instead of pre-rounding .p_memsz.
|
// So we must round up here, instead of pre-rounding .p_memsz.
|
||||||
add eax, [p_memsz + szElf32_Ehdr + eax] // address after .text
|
add eax, [p_memsz + szElf32_Ehdr + eax] // address after .text
|
||||||
add eax, PAGE_SIZE -1
|
add eax, PAGE_SIZE -1
|
||||||
and eax, 0-PAGE_SIZE
|
and eax, 0-PAGE_SIZE
|
||||||
|
|
||||||
push eax // destination for 'ret'
|
push eax // destination for 'ret'
|
||||||
|
|||||||
+145
-154
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; i386-bsd.elf-fold.asm -- linkage to C code to process Elf binary
|
; i386-bsd.elf-fold.asm -- linkage to C code to process Elf binary
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -26,256 +27,246 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
// CPU 386
|
||||||
|
|
||||||
BITS 32
|
#define PAGE_SIZE ( 1<<12)
|
||||||
SECTION .text
|
#define szElf32_Ehdr 0x34
|
||||||
CPU 386
|
#define szElf32_Phdr 8*4
|
||||||
|
#define e_type 16
|
||||||
|
#define e_entry (16 + 2*2 + 4)
|
||||||
|
#define p_memsz 5*4
|
||||||
|
#define szb_info 12
|
||||||
|
#define szl_info 12
|
||||||
|
#define szp_info 12
|
||||||
|
#define a_type 0
|
||||||
|
#define a_val 4
|
||||||
|
#define sz_auxv 8
|
||||||
|
|
||||||
%define PAGE_SIZE ( 1<<12)
|
#define __NR_munmap 73
|
||||||
%define szElf32_Ehdr 0x34
|
|
||||||
%define szElf32_Phdr 8*4
|
|
||||||
%define e_type 16
|
|
||||||
%define e_entry (16 + 2*2 + 4)
|
|
||||||
%define p_memsz 5*4
|
|
||||||
%define szb_info 12
|
|
||||||
%define szl_info 12
|
|
||||||
%define szp_info 12
|
|
||||||
%define a_type 0
|
|
||||||
%define a_val 4
|
|
||||||
%define sz_auxv 8
|
|
||||||
|
|
||||||
%define __NR_munmap 73
|
// control just falls through, after this part and compiled C code
|
||||||
|
// are uncompressed.
|
||||||
|
|
||||||
;; control just falls through, after this part and compiled C code
|
fold_begin: // enter: %ebx= &Elf32_Ehdr of this program
|
||||||
;; are uncompressed.
|
// patchLoader will modify to be
|
||||||
|
// dword sz_uncompressed, sz_compressed
|
||||||
|
// byte compressed_data...
|
||||||
|
|
||||||
fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
// ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
||||||
; patchLoader will modify to be
|
// Move argc,argv,envp down to make room for Elf_auxv table.
|
||||||
; dword sz_uncompressed, sz_compressed
|
// Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
||||||
; byte compressed_data...
|
// because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
||||||
|
// give not quite everything. It is simpler and smaller code for us
|
||||||
|
// to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
||||||
|
// On second thought, that wastes a lot of stack space (the entire kernel
|
||||||
|
// auxv, plus those slots that remain empty anyway). So try for minimal
|
||||||
|
// space on stack, without too much code, by doing it serially.
|
||||||
|
|
||||||
; ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
#define AT_NULL 0
|
||||||
; Move argc,argv,envp down to make room for Elf_auxv table.
|
#define AT_IGNORE 1
|
||||||
; Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
#define AT_PHDR 3
|
||||||
; because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
#define AT_PHENT 4
|
||||||
; give not quite everything. It is simpler and smaller code for us
|
#define AT_PHNUM 5
|
||||||
; to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
#define AT_PAGESZ 6
|
||||||
; On second thought, that wastes a lot of stack space (the entire kernel
|
#define AT_BASE 7
|
||||||
; auxv, plus those slots that remain empty anyway). So try for minimal
|
#define AT_ENTRY 9
|
||||||
; space on stack, without too much code, by doing it serially.
|
|
||||||
|
|
||||||
%define AT_NULL 0
|
#define ET_DYN 3
|
||||||
%define AT_IGNORE 1
|
|
||||||
%define AT_PHDR 3
|
|
||||||
%define AT_PHENT 4
|
|
||||||
%define AT_PHNUM 5
|
|
||||||
%define AT_PAGESZ 6
|
|
||||||
%define AT_BASE 7
|
|
||||||
%define AT_ENTRY 9
|
|
||||||
|
|
||||||
%define ET_DYN 3
|
|
||||||
|
|
||||||
sub ecx, ecx
|
sub ecx, ecx
|
||||||
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_BASE) | (1<<AT_ENTRY)
|
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_BASE) | (1<<AT_ENTRY)
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
call do_auxv ; clear bits in edx according to existing auxv slots
|
call do_auxv // clear bits in edx according to existing auxv slots
|
||||||
|
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
L50:
|
L50:
|
||||||
shr edx, 1 ; Carry = bottom bit
|
shr edx, 1 // Carry = bottom bit
|
||||||
sbb eax, eax ; -1 or 0
|
sbb eax, eax // -1 or 0
|
||||||
sub ecx, eax ; count of 1 bits that remained in edx
|
sub ecx, eax // count of 1 bits that remained in edx
|
||||||
lea esp, [esp + sz_auxv * eax] ; allocate one auxv slot, if needed
|
lea esp, [esp + sz_auxv * eax] // allocate one auxv slot, if needed
|
||||||
test edx,edx
|
test edx,edx
|
||||||
jne L50
|
jne L50
|
||||||
|
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
call do_auxv ; move; fill new auxv slots with AT_IGNORE
|
call do_auxv // move; fill new auxv slots with AT_IGNORE
|
||||||
|
|
||||||
%define OVERHEAD 2048
|
#define OVERHEAD 2048
|
||||||
%define MAX_ELF_HDR 512
|
#define MAX_ELF_HDR 512
|
||||||
|
|
||||||
sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca
|
sub esp, MAX_ELF_HDR + OVERHEAD // alloca
|
||||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
push ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
|
|
||||||
; Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
// Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
||||||
; but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
// but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
||||||
mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz
|
mov edx, [p_memsz + szElf32_Ehdr + ebx] // phdr[0].p_memsz
|
||||||
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] ; 1 page for round, 1 for unfold
|
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] // 1 page for round, 1 for unfold
|
||||||
and edx, -PAGE_SIZE
|
and edx, 0-PAGE_SIZE
|
||||||
|
|
||||||
push edx ; end of unmap region
|
push edx // end of unmap region
|
||||||
sub eax, eax ; 0
|
sub eax, eax // 0
|
||||||
cmp word [e_type + ebx], byte ET_DYN
|
cmp word ptr [e_type + ebx], ET_DYN
|
||||||
jne L53
|
jne L53
|
||||||
xchg eax, edx ; dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
xchg eax, edx // dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
||||||
L53:
|
L53:
|
||||||
push eax ; dynbase
|
push eax // dynbase
|
||||||
|
|
||||||
mov esi, [e_entry + ebx] ; end of compressed data
|
mov esi, [e_entry + ebx] // end of compressed data
|
||||||
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] ; 1st &b_info
|
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] // 1st &b_info
|
||||||
sub esi, eax ; length of compressed data
|
sub esi, eax // length of compressed data
|
||||||
mov ebx, [ eax] ; length of uncompressed ELF headers
|
mov ebx, [ eax] // length of uncompressed ELF headers
|
||||||
mov ecx, [4+ eax] ; length of compressed ELF headers
|
mov ecx, [4+ eax] // length of compressed ELF headers
|
||||||
add ecx, byte szb_info
|
add ecx, szb_info
|
||||||
lea edx, [3*4 + esp] ; &tmp
|
lea edx, [3*4 + esp] // &tmp
|
||||||
pusha ; (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
pusha // (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
||||||
inc edi ; swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
inc edi // swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
||||||
EXTERN upx_main
|
.extern upx_main
|
||||||
call upx_main ; returns entry address
|
call upx_main // returns entry address
|
||||||
add esp, byte (8 +1)*4 ; remove 8 params from pusha, also dynbase
|
add esp, (8 +1)*4 // remove 8 params from pusha, also dynbase
|
||||||
pop ecx ; end of unmap region
|
pop ecx // end of unmap region
|
||||||
pop ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
pop ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
add esp, dword MAX_ELF_HDR + OVERHEAD ; un-alloca
|
add esp, MAX_ELF_HDR + OVERHEAD // un-alloca
|
||||||
|
|
||||||
push eax ; save entry address as ret.addr
|
push eax // save entry address as ret.addr
|
||||||
push byte 0 ; 'leave' uses this to clear ebp
|
push 0 // 'leave' uses this to clear ebp
|
||||||
mov ebp,esp ; frame
|
mov ebp,esp // frame
|
||||||
|
|
||||||
sub ecx, ebx
|
sub ecx, ebx
|
||||||
sub eax,eax ; 0, also AT_NULL
|
sub eax,eax // 0, also AT_NULL
|
||||||
push ecx ; length to unmap
|
push ecx // length to unmap
|
||||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
push ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
push eax ; fake ret.addr
|
push eax // fake ret.addr
|
||||||
|
|
||||||
dec edi ; auxv table
|
dec edi // auxv table
|
||||||
db 0x3c ; "cmpb al, byte ..." like "jmp 1+L60" but 1 byte shorter
|
.byte 0x3c // "cmpb al, ..." like "jmp 1+L60" but 1 byte shorter
|
||||||
L60:
|
L60:
|
||||||
scasd ; a_un.a_val etc.
|
scasd // a_un.a_val etc.
|
||||||
scasd ; a_type
|
scasd // a_type
|
||||||
jne L60 ; not AT_NULL
|
jne L60 // not AT_NULL
|
||||||
; edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
// edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
||||||
push dword [edi] ; &escape hatch
|
push dword ptr [edi] // &escape hatch
|
||||||
|
|
||||||
xor edi,edi
|
xor edi,edi
|
||||||
xor esi,esi
|
xor esi,esi
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
mov al, __NR_munmap ; eax was 0 from L60
|
mov al, __NR_munmap // eax was 0 from L60
|
||||||
ret ; goto escape hatch: int 0x80; leave; ret
|
ret // goto escape hatch: int 0x80; leave; ret
|
||||||
|
|
||||||
; called twice:
|
// called twice:
|
||||||
; 1st with esi==edi, ecx=0, edx= bitmap of slots needed: just update edx.
|
// 1st with esi==edi, ecx=0, edx= bitmap of slots needed: just update edx.
|
||||||
; 2nd with esi!=edi, ecx= slot_count: move, then append AT_IGNORE slots
|
// 2nd with esi!=edi, ecx= slot_count: move, then append AT_IGNORE slots
|
||||||
; entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
// entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
||||||
; exit: edi= &auxtab; edx= bits still needed
|
// exit: edi= &auxtab; edx= bits still needed
|
||||||
do_auxv:
|
do_auxv:
|
||||||
; cld
|
// cld
|
||||||
|
|
||||||
L10: ; move argc+argv
|
L10: // move argc+argv
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L10
|
jne L10
|
||||||
|
|
||||||
L20: ; move envp
|
L20: // move envp
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L20
|
jne L20
|
||||||
|
|
||||||
push edi ; return value
|
push edi // return value
|
||||||
L30: ; process auxv
|
L30: // process auxv
|
||||||
lodsd ; a_type
|
lodsd // a_type
|
||||||
stosd
|
stosd
|
||||||
cmp eax, byte 32
|
cmp eax, 32
|
||||||
jae L32 ; prevent aliasing by 'btr' when 32<=a_type
|
jae L32 // prevent aliasing by 'btr' when 32<=a_type
|
||||||
btr edx, eax ; no longer need a slot of type eax [Carry only]
|
btr edx, eax // no longer need a slot of type eax [Carry only]
|
||||||
L32:
|
L32:
|
||||||
test eax, eax ; AT_NULL ?
|
test eax, eax // AT_NULL ?
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
jnz L30 ; a_type != AT_NULL
|
jnz L30 // a_type != AT_NULL
|
||||||
|
|
||||||
sub edi, byte 8 ; backup to AT_NULL
|
sub edi, 8 // backup to AT_NULL
|
||||||
add ecx, ecx ; two words per auxv
|
add ecx, ecx // two words per auxv
|
||||||
inc eax ; convert 0 to AT_IGNORE
|
inc eax // convert 0 to AT_IGNORE
|
||||||
rep stosd ; allocate and fill
|
rep stosd // allocate and fill
|
||||||
dec eax ; convert AT_IGNORE to AT_NULL
|
dec eax // convert AT_IGNORE to AT_NULL
|
||||||
stosd ; re-terminate with AT_NULL
|
stosd // re-terminate with AT_NULL
|
||||||
stosd
|
stosd
|
||||||
|
|
||||||
pop edi ; &auxtab
|
pop edi // &auxtab
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define __NR_mmap 197
|
#define __NR_mmap 197
|
||||||
%define __NR_syscall 198
|
#define __NR_syscall 198
|
||||||
|
|
||||||
global mmap
|
mmap: .globl mmap
|
||||||
mmap:
|
|
||||||
push ebp
|
push ebp
|
||||||
mov ebp,esp
|
mov ebp,esp
|
||||||
xor eax,eax ; 0
|
xor eax,eax // 0
|
||||||
push eax ; convert to 64-bit
|
push eax // convert to 64-bit
|
||||||
push dword [7*4+ebp] ; offset
|
push dword ptr [7*4+ebp] // offset
|
||||||
push eax ; pad
|
push eax // pad
|
||||||
push dword [6*4+ebp] ; fd
|
push dword ptr [6*4+ebp] // fd
|
||||||
push dword [5*4+ebp] ; flags
|
push dword ptr [5*4+ebp] // flags
|
||||||
push dword [4*4+ebp] ; prot
|
push dword ptr [4*4+ebp] // prot
|
||||||
push dword [3*4+ebp] ; len
|
push dword ptr [3*4+ebp] // len
|
||||||
push dword [2*4+ebp] ; addr
|
push dword ptr [2*4+ebp] // addr
|
||||||
push eax ; current thread
|
push eax // current thread
|
||||||
mov al,__NR_mmap
|
mov al,__NR_mmap
|
||||||
push eax
|
push eax
|
||||||
push eax ; fake ret.addr
|
push eax // fake ret.addr
|
||||||
mov al,__NR_syscall
|
mov al,__NR_syscall
|
||||||
int 0x80
|
int 0x80
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
|
|
||||||
global brk
|
brk: .globl brk
|
||||||
brk:
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define __NR_exit 1
|
#define __NR_exit 1
|
||||||
%define __NR_read 3
|
#define __NR_read 3
|
||||||
%define __NR_write 4
|
#define __NR_write 4
|
||||||
%define __NR_open 5
|
#define __NR_open 5
|
||||||
%define __NR_close 6
|
#define __NR_close 6
|
||||||
%define __NR_munmap 73
|
#define __NR_munmap 73
|
||||||
%define __NR_mprotect 74
|
#define __NR_mprotect 74
|
||||||
|
|
||||||
global exit
|
exit: .globl exit
|
||||||
exit:
|
|
||||||
mov al,__NR_exit
|
mov al,__NR_exit
|
||||||
nf_sysgo:
|
nf_sysgo:
|
||||||
movzx eax,al
|
movzx eax,al
|
||||||
int 0x80
|
int 0x80
|
||||||
ret
|
ret
|
||||||
|
|
||||||
global read
|
read: .globl read
|
||||||
read:
|
|
||||||
mov al,__NR_read
|
mov al,__NR_read
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global write
|
write: .globl write
|
||||||
write:
|
|
||||||
mov al,__NR_write
|
mov al,__NR_write
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global open
|
open: .globl open
|
||||||
open:
|
|
||||||
mov al,__NR_open
|
mov al,__NR_open
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global close
|
close: .globl close
|
||||||
close:
|
|
||||||
mov al,__NR_close
|
mov al,__NR_close
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
|
|
||||||
global munmap
|
munmap: .globl munmap
|
||||||
munmap:
|
|
||||||
mov al,__NR_munmap
|
mov al,__NR_munmap
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global mprotect
|
mprotect: .globl mprotect
|
||||||
mprotect:
|
|
||||||
mov al,__NR_mprotect
|
mov al,__NR_mprotect
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -63,10 +63,11 @@ section LZMA_INIT_STACK
|
|||||||
; =============
|
; =============
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
//#include "arch/i386/lzma_d.ash"
|
#define db .byte
|
||||||
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
|
||||||
section LZMA_DONE_STACK
|
section LZMA_DONE_STACK
|
||||||
mov ss, [eax] // eax is always 0 here
|
mov ss, [eax] // eax is always 0 here
|
||||||
|
|||||||
@@ -66,10 +66,10 @@ decompressor:
|
|||||||
// ============= DECOMPRESSION
|
// ============= DECOMPRESSION
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
//#include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
//#include "arch/i386/lzma_d.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
|
||||||
section TMTMAIN5
|
section TMTMAIN5
|
||||||
pop ebp
|
pop ebp
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ decompressor:
|
|||||||
// ============= DECOMPRESSION
|
// ============= DECOMPRESSION
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
//#include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
//#include "arch/i386/lzma_d.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
|
|||||||
@@ -30,17 +30,20 @@
|
|||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
*/
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
#include "arch/i386/macros2.ash"
|
// CPU 386
|
||||||
|
|
||||||
; /*************************************************************************
|
#define jmps jmp short
|
||||||
; // program entry point
|
#define jmpn jmp near
|
||||||
; // see glibc/sysdeps/i386/elf/start.S
|
|
||||||
; **************************************************************************/
|
/*************************************************************************
|
||||||
|
// program entry point
|
||||||
|
// see glibc/sysdeps/i386/elf/start.S
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
.globl _start
|
|
||||||
section LEXEC000
|
section LEXEC000
|
||||||
_start:
|
_start: .globl _start
|
||||||
//// int3
|
//// int3
|
||||||
/*
|
/*
|
||||||
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
||||||
@@ -63,11 +66,11 @@ _start:
|
|||||||
call main // push address of decompress subroutine
|
call main // push address of decompress subroutine
|
||||||
decompress:
|
decompress:
|
||||||
|
|
||||||
//
|
// /*************************************************************************
|
||||||
// C callable decompressor
|
// // C callable decompressor
|
||||||
//
|
// **************************************************************************/
|
||||||
|
|
||||||
/* Offsets to parameters, allowing for {push + pusha + call} */
|
// /* Offsets to parameters, allowing for {push + pusha + call} */
|
||||||
#define O_INP (4+ 8*4 +1*4)
|
#define O_INP (4+ 8*4 +1*4)
|
||||||
#define O_INS (4+ 8*4 +2*4)
|
#define O_INS (4+ 8*4 +2*4)
|
||||||
#define O_OUTP (4+ 8*4 +3*4)
|
#define O_OUTP (4+ 8*4 +3*4)
|
||||||
@@ -84,19 +87,20 @@ section LEXEC009
|
|||||||
//; empty section for commonality with l_lx_exec86.asm
|
//; empty section for commonality with l_lx_exec86.asm
|
||||||
section LEXEC010
|
section LEXEC010
|
||||||
pusha
|
pusha
|
||||||
push /*byte*/ '?' // cto8 (sign extension does not matter)
|
push '?' // cto8 (sign extension does not matter)
|
||||||
// cld
|
// cld
|
||||||
|
|
||||||
mov esi, INP
|
mov esi, INP
|
||||||
mov edi, OUTP
|
mov edi, OUTP
|
||||||
|
|
||||||
or ebp, byte -1
|
or ebp, byte -1
|
||||||
// align 8
|
//;; align 8
|
||||||
|
|
||||||
#include "arch/i386/nrv2b_d32_2.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
#include "arch/i386/nrv2d_d32_2.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
//#include "arch/i386/lzma_d_2.ash"
|
#define db .byte
|
||||||
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
cjt32 0
|
cjt32 0
|
||||||
|
|
||||||
section LEXEC015
|
section LEXEC015
|
||||||
@@ -145,22 +149,24 @@ section LEXEC020
|
|||||||
#define __NR_write 4
|
#define __NR_write 4
|
||||||
#define __NR_exit 1
|
#define __NR_exit 1
|
||||||
|
|
||||||
|
#define pushsbli .byte 0x6a, /* push sign-extended byte to long immediate*/
|
||||||
|
|
||||||
msg_SELinux:
|
msg_SELinux:
|
||||||
push /*byte*/ L71 - L70
|
pushsbli L71 - L70
|
||||||
pop edx // length
|
pop edx // length
|
||||||
call L71
|
call L71
|
||||||
L70:
|
L70:
|
||||||
.ascii "PROT_EXEC|PROT_WRITE failed.\n"
|
.ascii "PROT_EXEC|PROT_WRITE failed.\n"
|
||||||
L71:
|
L71:
|
||||||
pop ecx // message text
|
pop ecx // message text
|
||||||
push /*byte*/ 2 // fd stderr
|
push 2 // fd stderr
|
||||||
pop ebx
|
pop ebx
|
||||||
push /*byte*/ __NR_write
|
push __NR_write
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80
|
||||||
die:
|
die:
|
||||||
mov bl, /*byte*/ 127 // only low 7 bits matter!
|
mov bl, 127 // only low 7 bits matter!
|
||||||
push /*byte*/ __NR_exit
|
push __NR_exit
|
||||||
pop eax // write to stderr could fail, leaving eax as -EBADF etc.
|
pop eax // write to stderr could fail, leaving eax as -EBADF etc.
|
||||||
int 0x80
|
int 0x80
|
||||||
|
|
||||||
@@ -177,7 +183,7 @@ unfold:
|
|||||||
// So first PT_LOAD must be PF_R|PF_X only, and .p_memsz==.p_filesz.
|
// So first PT_LOAD must be PF_R|PF_X only, and .p_memsz==.p_filesz.
|
||||||
// So we must round up here, instead of pre-rounding .p_memsz.
|
// So we must round up here, instead of pre-rounding .p_memsz.
|
||||||
add eax, [p_memsz + szElf32_Ehdr + eax] // address after .text
|
add eax, [p_memsz + szElf32_Ehdr + eax] // address after .text
|
||||||
add eax, PAGE_SIZE -1
|
add eax, PAGE_SIZE -1
|
||||||
and eax, 0-PAGE_SIZE
|
and eax, 0-PAGE_SIZE
|
||||||
|
|
||||||
push eax // destination for 'ret'
|
push eax // destination for 'ret'
|
||||||
@@ -186,14 +192,14 @@ unfold:
|
|||||||
xor ecx, ecx // %ecx= 0
|
xor ecx, ecx // %ecx= 0
|
||||||
// MAP_ANONYMOUS ==>offset is ignored, so do not push!
|
// MAP_ANONYMOUS ==>offset is ignored, so do not push!
|
||||||
// push ecx ; offset
|
// push ecx ; offset
|
||||||
push /*byte*/ -1 // *BSD demands -1==fd for mmap(,,,MAP_ANON,,)
|
push -1 // *BSD demands -1==fd for mmap(,,,MAP_ANON,,)
|
||||||
push /*byte*/ MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
push MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||||
mov ch, PAGE_SIZE >> 8 // %ecx= PAGE_SIZE
|
mov ch, PAGE_SIZE >> 8 // %ecx= PAGE_SIZE
|
||||||
push /*byte*/ PROT_READ | PROT_WRITE | PROT_EXEC
|
push PROT_READ | PROT_WRITE | PROT_EXEC
|
||||||
push ecx // length
|
push ecx // length
|
||||||
push eax // destination
|
push eax // destination
|
||||||
mov ebx, esp // address of parameter vector for __NR_mmap
|
mov ebx, esp // address of parameter vector for __NR_mmap
|
||||||
push /*byte*/ __NR_mmap
|
push __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80 // changes only %eax; %edx is live
|
int 0x80 // changes only %eax; %edx is live
|
||||||
test eax,eax
|
test eax,eax
|
||||||
@@ -214,7 +220,7 @@ unfold:
|
|||||||
mov [4*3 + esp],eax
|
mov [4*3 + esp],eax
|
||||||
push esi // &compressed_data
|
push esi // &compressed_data
|
||||||
call ebp // decompress(&src, srclen, &dst, &dstlen, b_info.misc)
|
call ebp // decompress(&src, srclen, &dst, &dstlen, b_info.misc)
|
||||||
add esp, /*byte*/ (5+1 + 6-1)*4 // (5+1) args to decompress, (6-1) args to mmap
|
add esp, 0+(5+1 + 6-1)*4 // (5+1) args to decompress, (6-1) args to mmap
|
||||||
ret // &destination
|
ret // &destination
|
||||||
main:
|
main:
|
||||||
pop ebp // &decompress
|
pop ebp // &decompress
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; fold_elf86.asm -- linkage to C code to process Elf binary
|
; fold_elf86.asm -- linkage to C code to process Elf binary
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -26,118 +27,118 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
|
||||||
BITS 32
|
// CPU 386
|
||||||
SECTION .text
|
|
||||||
CPU 386
|
|
||||||
|
|
||||||
%define PAGE_SIZE ( 1<<12)
|
#define PAGE_SIZE ( 1<<12)
|
||||||
%define szElf32_Ehdr 0x34
|
#define szElf32_Ehdr 0x34
|
||||||
%define szElf32_Phdr 8*4
|
#define szElf32_Phdr 8*4
|
||||||
%define e_type 16
|
#define e_type 16
|
||||||
%define e_entry (16 + 2*2 + 4)
|
#define e_entry (16 + 2*2 + 4)
|
||||||
%define p_memsz 5*4
|
#define p_memsz 5*4
|
||||||
%define szb_info 12
|
#define szb_info 12
|
||||||
%define szl_info 12
|
#define szl_info 12
|
||||||
%define szp_info 12
|
#define szp_info 12
|
||||||
%define a_type 0
|
#define a_type 0
|
||||||
%define a_val 4
|
#define a_val 4
|
||||||
%define sz_auxv 8
|
#define sz_auxv 8
|
||||||
|
|
||||||
%define __NR_munmap 91
|
#define __NR_munmap 91
|
||||||
|
|
||||||
;; control just falls through, after this part and compiled C code
|
// control just falls through, after this part and compiled C code
|
||||||
;; are uncompressed.
|
// are uncompressed.
|
||||||
|
|
||||||
fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
fold_begin: // enter: %ebx= &Elf32_Ehdr of this program
|
||||||
; patchLoader will modify to be
|
// patchLoader will modify to be
|
||||||
; dword sz_uncompressed, sz_compressed
|
// dword sz_uncompressed, sz_compressed
|
||||||
; byte compressed_data...
|
// byte compressed_data...
|
||||||
|
|
||||||
; ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
// ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
||||||
; Move argc,argv,envp down to make room for Elf_auxv table.
|
// Move argc,argv,envp down to make room for Elf_auxv table.
|
||||||
; Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
// Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
||||||
; because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
// because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
||||||
; give not quite everything. It is simpler and smaller code for us
|
// give not quite everything. It is simpler and smaller code for us
|
||||||
; to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
// to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
||||||
; On second thought, that wastes a lot of stack space (the entire kernel
|
// On second thought, that wastes a lot of stack space (the entire kernel
|
||||||
; auxv, plus those slots that remain empty anyway). So try for minimal
|
// auxv, plus those slots that remain empty anyway). So try for minimal
|
||||||
; space on stack, without too much code, by doing it serially.
|
// space on stack, without too much code, by doing it serially.
|
||||||
|
|
||||||
%define AT_NULL 0
|
#define AT_NULL 0
|
||||||
%define AT_IGNORE 1
|
#define AT_IGNORE 1
|
||||||
%define AT_PHDR 3
|
#define AT_PHDR 3
|
||||||
%define AT_PHENT 4
|
#define AT_PHENT 4
|
||||||
%define AT_PHNUM 5
|
#define AT_PHNUM 5
|
||||||
%define AT_PAGESZ 6
|
#define AT_PAGESZ 6
|
||||||
%define AT_ENTRY 9
|
#define AT_ENTRY 9
|
||||||
|
|
||||||
%define ET_DYN 3
|
#define ET_DYN 3
|
||||||
|
|
||||||
sub ecx, ecx
|
sub ecx, ecx
|
||||||
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_ENTRY)
|
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_ENTRY)
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
call do_auxv ; clear bits in edx according to existing auxv slots
|
call do_auxv // clear bits in edx according to existing auxv slots
|
||||||
|
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
L50:
|
L50:
|
||||||
shr edx, 1 ; Carry = bottom bit
|
shr edx, 1 // Carry = bottom bit
|
||||||
sbb eax, eax ; -1 or 0
|
sbb eax, eax // -1 or 0
|
||||||
sub ecx, eax ; count of 1 bits that remained in edx
|
sub ecx, eax // count of 1 bits that remained in edx
|
||||||
lea esp, [esp + sz_auxv * eax] ; allocate one auxv slot, if needed
|
lea esp, [esp + sz_auxv * eax] // allocate one auxv slot, if needed
|
||||||
test edx,edx
|
test edx,edx
|
||||||
jne L50
|
jne L50
|
||||||
|
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
call do_auxv ; move; fill new auxv slots with AT_IGNORE
|
call do_auxv // move; fill new auxv slots with AT_IGNORE
|
||||||
|
|
||||||
%define OVERHEAD 2048
|
#define OVERHEAD 2048
|
||||||
%define MAX_ELF_HDR 512
|
#define MAX_ELF_HDR 512
|
||||||
|
|
||||||
sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca
|
sub esp, MAX_ELF_HDR + OVERHEAD // alloca
|
||||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
push ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
|
|
||||||
; Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
// Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
||||||
; but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
// but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
||||||
mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz
|
mov edx, [p_memsz + szElf32_Ehdr + ebx] // phdr[0].p_memsz
|
||||||
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] ; 1 page for round, 1 for unfold
|
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] // 1 page for round, 1 for unfold
|
||||||
and edx, -PAGE_SIZE
|
and edx, 0-PAGE_SIZE
|
||||||
|
|
||||||
push edx ; end of unmap region
|
push edx // end of unmap region
|
||||||
sub eax, eax ; 0
|
sub eax, eax // 0
|
||||||
cmp word [e_type + ebx], byte ET_DYN
|
cmp word ptr [e_type + ebx], ET_DYN
|
||||||
jne L53
|
jne L53
|
||||||
xchg eax, edx ; dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
xchg eax, edx // dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
||||||
L53:
|
L53:
|
||||||
push eax ; dynbase
|
push eax // dynbase
|
||||||
|
|
||||||
mov esi, [e_entry + ebx] ; end of compressed data
|
mov esi, [e_entry + ebx] // end of compressed data
|
||||||
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] ; 1st &b_info
|
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] // 1st &b_info
|
||||||
sub esi, eax ; length of compressed data
|
sub esi, eax // length of compressed data
|
||||||
mov ebx, [ eax] ; length of uncompressed ELF headers
|
mov ebx, [ eax] // length of uncompressed ELF headers
|
||||||
mov ecx, [4+ eax] ; length of compressed ELF headers
|
mov ecx, [4+ eax] // length of compressed ELF headers
|
||||||
add ecx, byte szb_info
|
add ecx, szb_info
|
||||||
lea edx, [3*4 + esp] ; &tmp
|
lea edx, [3*4 + esp] // &tmp
|
||||||
pusha ; (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
pusha // (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
||||||
inc edi ; swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
inc edi // swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
||||||
EXTERN upx_main
|
.extern upx_main
|
||||||
call upx_main ; returns entry address
|
call upx_main // returns entry address
|
||||||
add esp, byte (8 +1)*4 ; remove 8 params from pusha, also dynbase
|
add esp, (8 +1)*4 // remove 8 params from pusha, also dynbase
|
||||||
pop ecx ; end of unmap region
|
pop ecx // end of unmap region
|
||||||
pop ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
pop ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
add esp, dword MAX_ELF_HDR + OVERHEAD ; un-alloca
|
add esp, MAX_ELF_HDR + OVERHEAD // un-alloca
|
||||||
push eax ; save entry address
|
push eax // save entry address
|
||||||
|
|
||||||
dec edi ; auxv table
|
dec edi // auxv table
|
||||||
sub eax,eax ; 0, also AT_NULL
|
sub eax,eax // 0, also AT_NULL
|
||||||
db 0x3c ; "cmpb al, byte ..." like "jmp 1+L60" but 1 byte shorter
|
.byte 0x3c // "cmpb al, byte ..." like "jmp 1+L60" but 1 byte shorter
|
||||||
L60:
|
L60:
|
||||||
scasd ; a_un.a_val etc.
|
scasd // a_un.a_val etc.
|
||||||
scasd ; a_type
|
scasd // a_type
|
||||||
jne L60 ; not AT_NULL
|
jne L60 // not AT_NULL
|
||||||
; edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
// edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
||||||
|
|
||||||
push eax
|
push eax
|
||||||
push eax
|
push eax
|
||||||
@@ -146,67 +147,66 @@ L60:
|
|||||||
push eax
|
push eax
|
||||||
push eax
|
push eax
|
||||||
push eax
|
push eax
|
||||||
push eax ; 32 bytes of zeroes now on stack, ready for 'popa'
|
push eax // 32 bytes of zeroes now on stack, ready for 'popa'
|
||||||
|
|
||||||
sub ecx, ebx ; length to unmap
|
sub ecx, ebx // length to unmap
|
||||||
mov al, __NR_munmap ; eax was 0 from L60
|
mov al, __NR_munmap // eax was 0 from L60
|
||||||
jmp [edi] ; unmap ourselves via escape hatch, then goto entry
|
jmp [edi] // unmap ourselves via escape hatch, then goto entry
|
||||||
|
|
||||||
; called twice:
|
// called twice:
|
||||||
; 1st with esi==edi, ecx=0, edx= bitmap of slots needed: just update edx.
|
// 1st with esi==edi, ecx=0, edx= bitmap of slots needed: just update edx.
|
||||||
; 2nd with esi!=edi, ecx= slot_count: move, then append AT_IGNORE slots
|
// 2nd with esi!=edi, ecx= slot_count: move, then append AT_IGNORE slots
|
||||||
; entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
// entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
||||||
; exit: edi= &auxtab; edx= bits still needed
|
// exit: edi= &auxtab; edx= bits still needed
|
||||||
do_auxv:
|
do_auxv:
|
||||||
; cld
|
// cld
|
||||||
|
|
||||||
L10: ; move argc+argv
|
L10: // move argc+argv
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L10
|
jne L10
|
||||||
|
|
||||||
L20: ; move envp
|
L20: // move envp
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L20
|
jne L20
|
||||||
|
|
||||||
push edi ; return value
|
push edi // return value
|
||||||
L30: ; process auxv
|
L30: // process auxv
|
||||||
lodsd ; a_type
|
lodsd // a_type
|
||||||
stosd
|
stosd
|
||||||
cmp eax, byte 32
|
cmp eax, 32
|
||||||
jae L32 ; prevent aliasing by 'btr' when 32<=a_type
|
jae L32 // prevent aliasing by 'btr' when 32<=a_type
|
||||||
btr edx, eax ; no longer need a slot of type eax [Carry only]
|
btr edx, eax // no longer need a slot of type eax [Carry only]
|
||||||
L32:
|
L32:
|
||||||
test eax, eax ; AT_NULL ?
|
test eax, eax // AT_NULL ?
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
jnz L30 ; a_type != AT_NULL
|
jnz L30 // a_type != AT_NULL
|
||||||
|
|
||||||
sub edi, byte 8 ; backup to AT_NULL
|
sub edi, 8 // backup to AT_NULL
|
||||||
add ecx, ecx ; two words per auxv
|
add ecx, ecx // two words per auxv
|
||||||
inc eax ; convert 0 to AT_IGNORE
|
inc eax // convert 0 to AT_IGNORE
|
||||||
rep stosd ; allocate and fill
|
rep stosd // allocate and fill
|
||||||
dec eax ; convert AT_IGNORE to AT_NULL
|
dec eax // convert AT_IGNORE to AT_NULL
|
||||||
stosd ; re-terminate with AT_NULL
|
stosd // re-terminate with AT_NULL
|
||||||
stosd
|
stosd
|
||||||
|
|
||||||
pop edi ; &auxtab
|
pop edi // &auxtab
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define __NR_mmap 90
|
#define __NR_mmap 90
|
||||||
|
|
||||||
global mmap
|
mmap: .globl mmap
|
||||||
mmap:
|
|
||||||
push ebx
|
push ebx
|
||||||
lea ebx, [2*4 + esp]
|
lea ebx, [2*4 + esp]
|
||||||
push byte __NR_mmap
|
push __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; l_lx_exec86.asm -- Linux program entry point & decompressor (kernel exec)
|
; l_lx_exec86.asm -- Linux program entry point & decompressor (kernel exec)
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -28,24 +29,23 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
// CPU 386
|
||||||
|
|
||||||
BITS 32
|
#define jmps jmp short
|
||||||
SECTION .text
|
#define jmpn jmp near
|
||||||
CPU 386
|
|
||||||
|
|
||||||
%define jmps jmp short
|
/*************************************************************************
|
||||||
%define jmpn jmp near
|
// program entry point
|
||||||
|
// see glibc/sysdeps/i386/elf/start.S
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
; /*************************************************************************
|
section LEXEC000
|
||||||
; // program entry point
|
_start: .globl _start
|
||||||
; // see glibc/sysdeps/i386/elf/start.S
|
//// int3
|
||||||
; **************************************************************************/
|
/*
|
||||||
|
|
||||||
GLOBAL _start
|
|
||||||
;__LEXEC000__
|
|
||||||
_start:
|
|
||||||
;;;; int3
|
|
||||||
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
||||||
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
||||||
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
||||||
@@ -62,106 +62,104 @@ _start:
|
|||||||
;; end
|
;; end
|
||||||
;; Step through the code; remember that <Enter> repeats the previous command.
|
;; Step through the code; remember that <Enter> repeats the previous command.
|
||||||
;;
|
;;
|
||||||
|
*/
|
||||||
|
|
||||||
%if 0
|
#if 0
|
||||||
; personality(PER_LINUX)
|
// personality(PER_LINUX)
|
||||||
mov eax, 136 ; syscall_personality
|
mov eax, 136 // syscall_personality
|
||||||
xor ebx, ebx ; PER_LINUX
|
xor ebx, ebx // PER_LINUX
|
||||||
int 0x80
|
int 0x80
|
||||||
%endif
|
#endif
|
||||||
|
|
||||||
call main ; push address of decompress subroutine
|
call main // push address of decompress subroutine
|
||||||
decompress:
|
decompress:
|
||||||
|
|
||||||
; /*************************************************************************
|
// /*************************************************************************
|
||||||
; // C callable decompressor
|
// // C callable decompressor
|
||||||
; **************************************************************************/
|
// **************************************************************************/
|
||||||
|
|
||||||
; /* Offsets to parameters, allowing for {push + pusha + call} */
|
// /* Offsets to parameters, allowing for {push + pusha + call} */
|
||||||
%define O_INP (4+ 8*4 +1*4)
|
#define O_INP (4+ 8*4 +1*4)
|
||||||
%define O_INS (4+ 8*4 +2*4)
|
#define O_INS (4+ 8*4 +2*4)
|
||||||
%define O_OUTP (4+ 8*4 +3*4)
|
#define O_OUTP (4+ 8*4 +3*4)
|
||||||
%define O_OUTS (4+ 8*4 +4*4)
|
#define O_OUTS (4+ 8*4 +4*4)
|
||||||
%define O_PARAM (4+ 8*4 +5*4)
|
#define O_PARAM (4+ 8*4 +5*4)
|
||||||
|
|
||||||
%define INP dword [esp+O_INP]
|
#define INP dword [esp+O_INP]
|
||||||
%define INS dword [esp+O_INS]
|
#define INS dword [esp+O_INS]
|
||||||
%define OUTP dword [esp+O_OUTP]
|
#define OUTP dword [esp+O_OUTP]
|
||||||
%define OUTS dword [esp+O_OUTS]
|
#define OUTS dword [esp+O_OUTS]
|
||||||
%define PARM dword [esp+O_PARAM]
|
#define PARM dword [esp+O_PARAM]
|
||||||
|
|
||||||
;__LEXEC009__
|
section LEXEC009
|
||||||
mov eax, 'NMRU' ; free slot in following 'pusha'
|
mov eax, offset NMRU // free slot in following 'pusha'
|
||||||
;__LEXEC010__
|
section LEXEC010
|
||||||
pusha
|
pusha
|
||||||
push byte '?' ; cto8 (sign extension does not matter)
|
push '?' // cto8 (sign extension does not matter)
|
||||||
; cld
|
// cld
|
||||||
|
|
||||||
mov esi, INP
|
mov esi, INP
|
||||||
mov edi, OUTP
|
mov edi, OUTP
|
||||||
|
|
||||||
or ebp, byte -1
|
or ebp, byte -1
|
||||||
;;; align 8
|
// align 8
|
||||||
|
|
||||||
%include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
%include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
%include "arch/i386/nrv2e_d32.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
%include "arch/i386/lzma_d.ash"
|
#define db .byte
|
||||||
%include "arch/i386/macros.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
cjt32 0
|
cjt32 0
|
||||||
|
|
||||||
;__LEXEC015__
|
section LEXEC015
|
||||||
; eax is 0 from decompressor code
|
// eax is 0 from decompressor code
|
||||||
;xor eax, eax ; return code
|
//xor eax, eax ; return code
|
||||||
|
|
||||||
; check compressed size
|
// check compressed size
|
||||||
mov edx, INP
|
mov edx, INP
|
||||||
add edx, INS
|
add edx, INS
|
||||||
cmp edx, esi
|
cmp edx, esi
|
||||||
jz .ok
|
jz .ok
|
||||||
dec eax
|
dec eax
|
||||||
.ok:
|
.ok:
|
||||||
xchg [8*4 + esp], eax ; store success/failure, fetch NMRU
|
xchg [8*4 + esp], eax // store success/failure, fetch NMRU
|
||||||
|
|
||||||
; write back the uncompressed size, and prepare for unfilter
|
// write back the uncompressed size, and prepare for unfilter
|
||||||
mov edx, OUTS
|
mov edx, OUTS
|
||||||
mov ecx, edi
|
mov ecx, edi
|
||||||
mov edi, OUTP
|
mov edi, OUTP
|
||||||
sub ecx, edi ; ecx= uncompressed size
|
sub ecx, edi // ecx= uncompressed size
|
||||||
mov [edx], ecx
|
mov [edx], ecx
|
||||||
|
|
||||||
pop edx ; cto8
|
pop edx // cto8
|
||||||
|
|
||||||
;__LEXEC110__ Jcc and/or possible n_mru
|
section LEXEC110 // Jcc and/or possible n_mru
|
||||||
push edi ; addvalue
|
push edi // addvalue
|
||||||
push byte 0x0f
|
push 0x0f
|
||||||
pop ebx
|
pop ebx
|
||||||
mov bh, dl ; ebx= 0,,cto8,0x0F
|
mov bh, dl // ebx= 0,,cto8,0x0F
|
||||||
|
|
||||||
;__LEXEC100__ 0!=n_mru
|
section LEXEC100 // 0!=n_mru
|
||||||
xchg eax, ebx ; eax= ct08_0f; ebx= n_mru {or n_mru1}
|
xchg eax, ebx // eax= ct08_0f; ebx= n_mru {or n_mru1}
|
||||||
|
|
||||||
;;LEXEC016 bug in APP: jmp and target must be in same .asx
|
section LEXEC016 // bug in APP: jmp and target must be in same .asx
|
||||||
;; jmpn lxunf0 ; logically belongs here
|
//; jmpn lxunf0 ; logically belongs here
|
||||||
|
|
||||||
ctojr32
|
ctojr32
|
||||||
ckt32 edi, dl
|
ckt32 edi, dl
|
||||||
;__LEXEC017__
|
section LEXEC017
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;__LEXEC020__
|
section LEXEC020
|
||||||
|
|
||||||
main:
|
main:
|
||||||
pop ebp ; &decompress
|
pop ebp // &decompress
|
||||||
mov ebx, 0x401000 ; &Elf32_Ehdr of this program
|
mov ebx, 0x401000 // &Elf32_Ehdr of this program
|
||||||
;; fall into fold_begin
|
//; fall into fold_begin
|
||||||
|
|
||||||
eof:
|
eof:
|
||||||
; __XTHEENDX__
|
|
||||||
section .data
|
|
||||||
dd -1
|
|
||||||
dw eof
|
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; fold_exec86.asm -- linkage to C code to process Elf binary
|
; fold_exec86.asm -- linkage to C code to process Elf binary
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -26,47 +27,45 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
// CPU 386
|
||||||
|
|
||||||
BITS 32
|
// control just falls through, after this part and compiled C code
|
||||||
SECTION .text
|
// are uncompressed.
|
||||||
CPU 386
|
|
||||||
|
|
||||||
;; control just falls through, after this part and compiled C code
|
#define szElf32_Ehdr 0x34
|
||||||
;; are uncompressed.
|
#define szElf32_Phdr 8*4
|
||||||
|
#define e_entry (16 + 2*2 + 4)
|
||||||
|
#define p_vaddr 2*4
|
||||||
|
#define p_memsz 5*4
|
||||||
|
#define szl_info 12
|
||||||
|
#define szp_info 12
|
||||||
|
|
||||||
%define szElf32_Ehdr 0x34
|
fold_begin: // enter: %ebx= &Elf32_Ehdr of this program
|
||||||
%define szElf32_Phdr 8*4
|
|
||||||
%define e_entry (16 + 2*2 + 4)
|
|
||||||
%define p_vaddr 2*4
|
|
||||||
%define p_memsz 5*4
|
|
||||||
%define szl_info 12
|
|
||||||
%define szp_info 12
|
|
||||||
|
|
||||||
fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
pop eax // Pop the argument count
|
||||||
|
mov ecx, esp // argv starts just at the current stack top
|
||||||
pop eax ; Pop the argument count
|
lea edx, [esp+eax*4+4] // envp = &argv[argc + 1]
|
||||||
mov ecx, esp ; argv starts just at the current stack top
|
|
||||||
lea edx, [esp+eax*4+4] ; envp = &argv[argc + 1]
|
|
||||||
mov edi, [ebx + e_entry]
|
mov edi, [ebx + e_entry]
|
||||||
lea esi, [ebx + szElf32_Ehdr + 2*szElf32_Phdr + szl_info]
|
lea esi, [ebx + szElf32_Ehdr + 2*szElf32_Phdr + szl_info]
|
||||||
sub edi, esi ; length
|
sub edi, esi // length
|
||||||
lea ebx, [2 + ebp] ; f_unfilter, maybe
|
lea ebx, [2 + ebp] // f_unfilter, maybe
|
||||||
pusha ; (cprLen, cprSrc, f_decpr, xx, f_unf, envp, argv, argc)
|
pusha // (cprLen, cprSrc, f_decpr, xx, f_unf, envp, argv, argc)
|
||||||
EXTERN upx_main
|
.extern upx_main
|
||||||
call upx_main ; Call the UPX main function
|
call upx_main // Call the UPX main function
|
||||||
hlt ; Crash if somehow upx_main does return
|
hlt // Crash if somehow upx_main does return
|
||||||
|
|
||||||
%define __NR_mmap 90
|
#define __NR_mmap 90
|
||||||
|
|
||||||
global mmap
|
mmap: .globl mmap
|
||||||
mmap:
|
|
||||||
push ebx
|
push ebx
|
||||||
lea ebx, [2*4 + esp]
|
lea ebx, [2*4 + esp]
|
||||||
push byte __NR_mmap
|
push __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; l_lx_pti86.asm -- Linux separate ELF PT_INTERP
|
; l_lx_pti86.asm -- Linux separate ELF PT_INTERP
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -28,24 +29,20 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
// CPU 386
|
||||||
|
|
||||||
BITS 32
|
/*************************************************************************
|
||||||
SECTION .text
|
// program entry point
|
||||||
CPU 386
|
// see glibc/sysdeps/i386/elf/start.S
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
%define jmps jmp short
|
section LXPTI000
|
||||||
%define jmpn jmp near
|
_start: .globl _start
|
||||||
|
//// int3
|
||||||
; /*************************************************************************
|
/*
|
||||||
; // program entry point
|
|
||||||
; // see glibc/sysdeps/i386/elf/start.S
|
|
||||||
; **************************************************************************/
|
|
||||||
|
|
||||||
GLOBAL _start
|
|
||||||
;__LXPTI000__
|
|
||||||
_start:
|
|
||||||
;;;; int3
|
|
||||||
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
||||||
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
||||||
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
||||||
@@ -62,12 +59,13 @@ _start:
|
|||||||
;; end
|
;; end
|
||||||
;; Step through the code; remember that <Enter> repeats the previous command.
|
;; Step through the code; remember that <Enter> repeats the previous command.
|
||||||
;;
|
;;
|
||||||
call L200 ; push address of get_funf
|
*/
|
||||||
|
call L200 // push address of get_funf
|
||||||
get_funf:
|
get_funf:
|
||||||
cmp eax, byte 0x46
|
cmp eax, 0x46
|
||||||
mov ecx, unf46
|
mov ecx, unf46
|
||||||
je L110
|
je L110
|
||||||
cmp eax, byte 0x49
|
cmp eax, 0x49
|
||||||
mov ecx, unf49
|
mov ecx, unf49
|
||||||
je L110
|
je L110
|
||||||
L120:
|
L120:
|
||||||
@@ -77,66 +75,67 @@ L110:
|
|||||||
none:
|
none:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define M_NRV2B_LE32 2
|
#define M_NRV2B_LE32 2
|
||||||
%define M_NRV2D_LE32 5
|
#define M_NRV2D_LE32 5
|
||||||
%define M_NRV2E_LE32 8
|
#define M_NRV2E_LE32 8
|
||||||
%define M_CL1B_LE32 11
|
#define M_CL1B_LE32 11
|
||||||
%define M_LZMA 14
|
#define M_LZMA 14
|
||||||
|
|
||||||
L200:
|
L200:
|
||||||
call L300 ; push address of get_fexp
|
call L300 // push address of get_fexp
|
||||||
get_fexp:
|
get_fexp:
|
||||||
cmp eax, byte M_NRV2B_LE32
|
cmp eax, M_NRV2B_LE32
|
||||||
mov ecx, nrv2b
|
mov ecx, nrv2b
|
||||||
je L110
|
je L110
|
||||||
cmp eax, byte M_NRV2D_LE32
|
cmp eax, M_NRV2D_LE32
|
||||||
mov ecx, nrv2d
|
mov ecx, nrv2d
|
||||||
je L110
|
je L110
|
||||||
cmp eax, byte M_NRV2E_LE32
|
cmp eax, M_NRV2E_LE32
|
||||||
mov ecx, nrv2e
|
mov ecx, nrv2e
|
||||||
je L110
|
je L110
|
||||||
cmp eax, byte M_CL1B_LE32
|
cmp eax, M_CL1B_LE32
|
||||||
mov ecx, cl1b
|
mov ecx, cl1b
|
||||||
je L110
|
je L110
|
||||||
jmpn L120
|
jmp L120
|
||||||
|
|
||||||
; /*************************************************************************
|
/*************************************************************************
|
||||||
; // C callable decompressor
|
// C callable decompressor
|
||||||
; **************************************************************************/
|
**************************************************************************/
|
||||||
;__LXPTI040__
|
section LXPTI040
|
||||||
nrv2b:
|
nrv2b:
|
||||||
;__LXPTI041__
|
section LXPTI041
|
||||||
nrv2d:
|
nrv2d:
|
||||||
;__LXPTI042__
|
section LXPTI042
|
||||||
nrv2e:
|
nrv2e:
|
||||||
;__LXPTI043__
|
section LXPTI043
|
||||||
cl1b:
|
cl1b:
|
||||||
|
|
||||||
%define INP dword [esp+8*4+1*4]
|
#define INP dword [esp+8*4+1*4]
|
||||||
%define INS dword [esp+8*4+2*4]
|
#define INS dword [esp+8*4+2*4]
|
||||||
%define OUTP dword [esp+8*4+3*4]
|
#define OUTP dword [esp+8*4+3*4]
|
||||||
%define OUTS dword [esp+8*4+4*4]
|
#define OUTS dword [esp+8*4+4*4]
|
||||||
|
|
||||||
;__LXPTI050__
|
section LXPTI050
|
||||||
pusha
|
pusha
|
||||||
; cld
|
// cld
|
||||||
or ebp, byte -1
|
or ebp, -1
|
||||||
mov esi, INP
|
mov esi, INP
|
||||||
mov edi, OUTP
|
mov edi, OUTP
|
||||||
;;; align 8
|
// align 8
|
||||||
|
|
||||||
%include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
%include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
%include "arch/i386/nrv2e_d32.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
%include "arch/i386/cl1_d32.ash"
|
#include "arch/i386/cl1_d32_2.ash"
|
||||||
%include "arch/i386/lzma_d.ash"
|
#define db .byte
|
||||||
;__LXPTI090__
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
jmpn exp_done
|
section LXPTI090
|
||||||
;__LXPTI091__
|
jmp exp_done
|
||||||
; eax is 0 from decompressor code
|
section LXPTI091
|
||||||
;xor eax, eax ; return code
|
// eax is 0 from decompressor code
|
||||||
|
//xor eax, eax ; return code
|
||||||
exp_done:
|
exp_done:
|
||||||
; check compressed size
|
// check compressed size
|
||||||
mov edx, INP
|
mov edx, INP
|
||||||
add edx, INS
|
add edx, INS
|
||||||
cmp esi, edx
|
cmp esi, edx
|
||||||
@@ -144,7 +143,7 @@ exp_done:
|
|||||||
dec eax
|
dec eax
|
||||||
.ok:
|
.ok:
|
||||||
|
|
||||||
; write back the uncompressed size
|
// write back the uncompressed size
|
||||||
sub edi, OUTP
|
sub edi, OUTP
|
||||||
mov edx, OUTS
|
mov edx, OUTS
|
||||||
mov [edx], edi
|
mov [edx], edi
|
||||||
@@ -153,18 +152,17 @@ exp_done:
|
|||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%include "arch/i386/macros.ash"
|
|
||||||
cjt32 0
|
cjt32 0
|
||||||
ctojr32
|
ctojr32
|
||||||
|
|
||||||
;__LXPTI140__
|
section LXPTI140
|
||||||
unf46:
|
unf46:
|
||||||
;__LXPTI141__
|
section LXPTI141
|
||||||
unf49:
|
unf49:
|
||||||
|
|
||||||
%define CTO8 dword [esp+8*4+3*4]
|
#define CTO8 dword ptr [esp+8*4+3*4]
|
||||||
|
|
||||||
;__LXPTI150__
|
section LXPTI150
|
||||||
pusha
|
pusha
|
||||||
mov edi,INP
|
mov edi,INP
|
||||||
mov ecx,INS
|
mov ecx,INS
|
||||||
@@ -172,18 +170,14 @@ unf49:
|
|||||||
|
|
||||||
ckt32 edi, dl
|
ckt32 edi, dl
|
||||||
|
|
||||||
;__LXPTI160__
|
section LXPTI160
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;__LXPTI200__
|
section LXPTI200
|
||||||
L300:
|
L300:
|
||||||
|
|
||||||
eof:
|
eof:
|
||||||
; __XTHEENDX__
|
|
||||||
section .data
|
|
||||||
dd -1
|
|
||||||
dw eof
|
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; fold_pti86.asm -- linkage to C code to act as ELF PT_INTERP
|
; fold_pti86.asm -- linkage to C code to act as ELF PT_INTERP
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -26,85 +27,84 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
// CPU 386
|
||||||
|
|
||||||
|
|
||||||
BITS 32
|
#define PAGE_SIZE ( 1<<12)
|
||||||
SECTION .text
|
|
||||||
CPU 386
|
|
||||||
|
|
||||||
|
#define AT_NULL 0
|
||||||
|
#define AT_PHDR 3
|
||||||
|
|
||||||
%define PAGE_SIZE ( 1<<12)
|
#define szElf32_Ehdr 0x34
|
||||||
|
#define szElf32_Phdr 8*4
|
||||||
|
#define e_entry (16 + 2*2 + 4)
|
||||||
|
#define p_vaddr 2*4
|
||||||
|
#define p_memsz 5*4
|
||||||
|
#define szb_info 12
|
||||||
|
#define szl_info 12
|
||||||
|
#define szp_info 12
|
||||||
|
#define a_type 0
|
||||||
|
#define a_val 4
|
||||||
|
#define sz_auxv 8
|
||||||
|
|
||||||
%define AT_NULL 0
|
#define MAP_FIXED 0x10
|
||||||
%define AT_PHDR 3
|
#define MAP_PRIVATE 0x02
|
||||||
|
#define MAP_ANONYMOUS 0x20
|
||||||
|
#define PROT_READ 1
|
||||||
|
#define PROT_WRITE 2
|
||||||
|
#define PROT_EXEC 4
|
||||||
|
#define __NR_mmap 90
|
||||||
|
#define __NR_munmap 91
|
||||||
|
|
||||||
%define szElf32_Ehdr 0x34
|
#define OVERHEAD 2048
|
||||||
%define szElf32_Phdr 8*4
|
#define MAX_ELF_HDR 512
|
||||||
%define e_entry (16 + 2*2 + 4)
|
|
||||||
%define p_vaddr 2*4
|
|
||||||
%define p_memsz 5*4
|
|
||||||
%define szb_info 12
|
|
||||||
%define szl_info 12
|
|
||||||
%define szp_info 12
|
|
||||||
%define a_type 0
|
|
||||||
%define a_val 4
|
|
||||||
%define sz_auxv 8
|
|
||||||
|
|
||||||
%define MAP_FIXED 0x10
|
pop ebp // get_fexp
|
||||||
%define MAP_PRIVATE 0x02
|
pop ecx // get_funf
|
||||||
%define MAP_ANONYMOUS 0x20
|
pop eax // argc
|
||||||
%define PROT_READ 1
|
lea edi, [4+ 4*eax + esp] // &environ
|
||||||
%define PROT_WRITE 2
|
push eax // argc
|
||||||
%define PROT_EXEC 4
|
|
||||||
%define __NR_mmap 90
|
|
||||||
%define __NR_munmap 91
|
|
||||||
|
|
||||||
%define OVERHEAD 2048
|
sub eax,eax // 0
|
||||||
%define MAX_ELF_HDR 512
|
|
||||||
|
|
||||||
pop ebp ; get_fexp
|
|
||||||
pop ecx ; get_funf
|
|
||||||
pop eax ; argc
|
|
||||||
lea edi, [4+ 4*eax + esp] ; &environ
|
|
||||||
push eax ; argc
|
|
||||||
|
|
||||||
sub eax,eax ; 0
|
|
||||||
L310:
|
L310:
|
||||||
scasd
|
scasd
|
||||||
jne L310
|
jne L310
|
||||||
scasd ; edi= &Elf32_auxv_t
|
scasd // edi= &Elf32_auxv_t
|
||||||
|
|
||||||
mov esi,edi
|
mov esi,edi
|
||||||
L320:
|
L320:
|
||||||
mov eax,[esi] ; a_type
|
mov eax,[esi] // a_type
|
||||||
cmp eax, byte AT_PHDR
|
cmp eax, AT_PHDR
|
||||||
je L330
|
je L330
|
||||||
add esi, byte sz_auxv
|
add esi, sz_auxv
|
||||||
cmp eax, byte AT_NULL
|
cmp eax, AT_NULL
|
||||||
jne L320
|
jne L320
|
||||||
L330:
|
L330:
|
||||||
mov ebx,[a_val + esi]
|
mov ebx,[a_val + esi]
|
||||||
push ebx ; save &Elf32_Phdr of compressed data
|
push ebx // save &Elf32_Phdr of compressed data
|
||||||
|
|
||||||
sub esp, dword MAX_ELF_HDR + OVERHEAD ; working storage
|
sub esp, MAX_ELF_HDR + OVERHEAD // working storage
|
||||||
mov edx, esp
|
mov edx, esp
|
||||||
push ecx ; get_funf 9th param to pti_main
|
push ecx // get_funf 9th param to pti_main
|
||||||
lea eax, [2*szElf32_Phdr + szl_info + szp_info + ebx] ; 1st &b_info
|
lea eax, [2*szElf32_Phdr + szl_info + szp_info + ebx] // 1st &b_info
|
||||||
mov esi, [e_entry + ebx] ; beyond compressed data
|
mov esi, [e_entry + ebx] // beyond compressed data
|
||||||
sub esi, eax ; length of compressed data
|
sub esi, eax // length of compressed data
|
||||||
mov ebx, [ eax] ; length of uncompressed ELF headers
|
mov ebx, [ eax] // length of uncompressed ELF headers
|
||||||
mov ecx, [4+ eax] ; length of compressed ELF headers
|
mov ecx, [4+ eax] // length of compressed ELF headers
|
||||||
add ecx, byte szb_info
|
add ecx, szb_info
|
||||||
pusha ; (AT_table, sz_cpr, get_fexp, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
pusha // (AT_table, sz_cpr, get_fexp, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
||||||
EXTERN pti_main
|
.extern pti_main
|
||||||
call pti_main ; returns entry address
|
call pti_main // returns entry address
|
||||||
add esp, dword 9*4 + MAX_ELF_HDR + OVERHEAD ; remove 9 params, temp space
|
add esp, 9*4 + MAX_ELF_HDR + OVERHEAD // remove 9 params, temp space
|
||||||
pop ebx ; &Elf32_Phdr
|
pop ebx // &Elf32_Phdr
|
||||||
push eax ; save entry address
|
push eax // save entry address
|
||||||
mov ecx,[p_memsz + ebx]
|
mov ecx,[p_memsz + ebx]
|
||||||
mov ebx,[p_vaddr + ebx]
|
mov ebx,[p_vaddr + ebx]
|
||||||
mov eax,__NR_munmap
|
mov eax,__NR_munmap
|
||||||
int 0x80 ; unmap compressed data
|
int 0x80 // unmap compressed data
|
||||||
|
|
||||||
sub eax,eax
|
sub eax,eax
|
||||||
sub ecx,ecx
|
sub ecx,ecx
|
||||||
@@ -113,19 +113,18 @@ EXTERN pti_main
|
|||||||
sub ebp,ebp
|
sub ebp,ebp
|
||||||
sub esi,esi
|
sub esi,esi
|
||||||
sub edi,edi
|
sub edi,edi
|
||||||
ret ; goto entry point
|
ret // goto entry point
|
||||||
|
|
||||||
%define __NR_mmap 90
|
#define __NR_mmap 90
|
||||||
|
|
||||||
global mmap
|
mmap: .globl mmap
|
||||||
mmap:
|
|
||||||
push ebx
|
push ebx
|
||||||
lea ebx, [2*4 + esp]
|
lea ebx, [2*4 + esp]
|
||||||
push byte __NR_mmap
|
push __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; l_lx_sh86.asm -- Linux program entry point & decompressor (shell script)
|
; l_lx_sh86.asm -- Linux program entry point & decompressor (shell script)
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -28,21 +29,21 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
|
||||||
BITS 32
|
// CPU 386
|
||||||
SECTION .text
|
|
||||||
CPU 386
|
|
||||||
|
|
||||||
; /*************************************************************************
|
/*************************************************************************
|
||||||
; // program entry point
|
// program entry point
|
||||||
; // see glibc/sysdeps/i386/elf/start.S
|
// see glibc/sysdeps/i386/elf/start.S
|
||||||
; **************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
GLOBAL _start
|
section LEXEC000
|
||||||
;__LEXEC000__
|
_start: .globl _start
|
||||||
_start:
|
//// int3
|
||||||
;;;; int3
|
/*
|
||||||
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
||||||
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
||||||
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
||||||
@@ -59,42 +60,43 @@ _start:
|
|||||||
;; end
|
;; end
|
||||||
;; Step through the code; remember that <Enter> repeats the previous command.
|
;; Step through the code; remember that <Enter> repeats the previous command.
|
||||||
;;
|
;;
|
||||||
|
*/
|
||||||
|
|
||||||
call main ; push address of decompress subroutine
|
call main // push address of decompress subroutine
|
||||||
decompress:
|
decompress:
|
||||||
|
|
||||||
; /*************************************************************************
|
/*************************************************************************
|
||||||
; // C callable decompressor
|
// C callable decompressor
|
||||||
; **************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
%define INP dword [esp+8*4+4]
|
#define INP dword [esp+8*4+4]
|
||||||
%define INS dword [esp+8*4+8]
|
#define INS dword [esp+8*4+8]
|
||||||
%define OUTP dword [esp+8*4+12]
|
#define OUTP dword [esp+8*4+12]
|
||||||
%define OUTS dword [esp+8*4+16]
|
#define OUTS dword [esp+8*4+16]
|
||||||
|
|
||||||
;__LEXEC010__
|
section LEXEC010
|
||||||
pusha
|
pusha
|
||||||
; cld
|
; cld
|
||||||
|
|
||||||
mov esi, INP
|
mov esi, INP
|
||||||
mov edi, OUTP
|
mov edi, OUTP
|
||||||
|
|
||||||
or ebp, byte -1
|
or ebp, -1
|
||||||
;;; align 8
|
// .balign 8
|
||||||
|
|
||||||
%include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
%include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
%include "arch/i386/nrv2e_d32.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
%include "arch/i386/cl1_d32.ash"
|
#include "arch/i386/cl1_d32_2.ash"
|
||||||
%include "arch/i386/lzma_d.ash"
|
#define db .byte
|
||||||
%include "arch/i386/macros.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
cjt32 0
|
cjt32 0
|
||||||
|
|
||||||
;__LEXEC015__
|
section LEXEC015
|
||||||
; eax is 0 from decompressor code
|
// eax is 0 from decompressor code
|
||||||
;xor eax, eax ; return code
|
//xor eax, eax ; return code
|
||||||
|
|
||||||
; check compressed size
|
// check compressed size
|
||||||
mov edx, INP
|
mov edx, INP
|
||||||
add edx, INS
|
add edx, INS
|
||||||
cmp esi, edx
|
cmp esi, edx
|
||||||
@@ -102,65 +104,61 @@ decompress:
|
|||||||
dec eax
|
dec eax
|
||||||
.ok:
|
.ok:
|
||||||
|
|
||||||
; write back the uncompressed size
|
// write back the uncompressed size
|
||||||
sub edi, OUTP
|
sub edi, OUTP
|
||||||
mov edx, OUTS
|
mov edx, OUTS
|
||||||
mov [edx], edi
|
mov [edx], edi
|
||||||
|
|
||||||
mov [7*4 + esp], eax
|
mov [7*4 + esp], eax
|
||||||
;__LEXEC017__
|
section LEXEC017
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;__LEXEC020__
|
section LEXEC020
|
||||||
|
|
||||||
%define PAGE_SIZE ( 1<<12)
|
#define PAGE_SIZE ( 1<<12)
|
||||||
|
|
||||||
%define MAP_FIXED 0x10
|
#define MAP_FIXED 0x10
|
||||||
%define MAP_PRIVATE 0x02
|
#define MAP_PRIVATE 0x02
|
||||||
%define MAP_ANONYMOUS 0x20
|
#define MAP_ANONYMOUS 0x20
|
||||||
%define PROT_READ 1
|
#define PROT_READ 1
|
||||||
%define PROT_WRITE 2
|
#define PROT_WRITE 2
|
||||||
%define PROT_EXEC 4
|
#define PROT_EXEC 4
|
||||||
%define __NR_mmap 90
|
#define __NR_mmap 90
|
||||||
|
|
||||||
%define szElf32_Ehdr 0x34
|
#define szElf32_Ehdr 0x34
|
||||||
%define szElf32_Phdr 8*4
|
#define szElf32_Phdr 8*4
|
||||||
%define e_entry (16 + 2*2 + 4)
|
#define e_entry (16 + 2*2 + 4)
|
||||||
%define p_memsz 5*4
|
#define p_memsz 5*4
|
||||||
%define szl_info 12
|
#define szl_info 12
|
||||||
%define szp_info 12
|
#define szp_info 12
|
||||||
%define p_filesize 4
|
#define p_filesize 4
|
||||||
|
|
||||||
; Decompress the rest of this loader, and jump to it
|
// Decompress the rest of this loader, and jump to it
|
||||||
main:
|
main:
|
||||||
pop ebp ; &decompress
|
pop ebp // &decompress
|
||||||
mov eax,0x1400000 ; &Elf32_Ehdr of this stub
|
mov eax,0x1400000 // &Elf32_Ehdr of this stub
|
||||||
lea edx,[0x80 + szp_info + eax] ; &cprScript
|
lea edx,[0x80 + szp_info + eax] // &cprScript
|
||||||
add eax,[p_memsz + szElf32_Ehdr + eax] ; after .text
|
add eax,[p_memsz + szElf32_Ehdr + eax] // after .text
|
||||||
add eax,PAGE_SIZE -1
|
add eax,PAGE_SIZE -1
|
||||||
and eax, -PAGE_SIZE ; round up to next page
|
and eax, 0-PAGE_SIZE // round up to next page
|
||||||
|
|
||||||
push byte 0
|
push 0
|
||||||
push byte -1
|
push -1
|
||||||
push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
push MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||||
push byte PROT_READ | PROT_WRITE
|
push PROT_READ | PROT_WRITE
|
||||||
push dword [edx] ; sz_unc length
|
push dword ptr [edx] // sz_unc length
|
||||||
push eax ; address
|
push eax // address
|
||||||
mov ebx,esp
|
mov ebx,esp
|
||||||
push byte __NR_mmap
|
push __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80
|
||||||
add esp, byte 6*4 ; remove arguments
|
add esp, 6*4 // remove arguments
|
||||||
|
|
||||||
lea ebx,[3+ eax] ; space for "-c"
|
lea ebx,[3+ eax] // space for "-c"
|
||||||
; fall into fold [not compressed!]
|
// fall into fold [not compressed!]
|
||||||
|
|
||||||
eof:
|
eof:
|
||||||
; __XTHEENDX__
|
|
||||||
section .data
|
|
||||||
dd -1
|
|
||||||
dw eof
|
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; fold_sh86.asm -- Linux program entry point & decompressor (shell script)
|
; fold_sh86.asm -- Linux program entry point & decompressor (shell script)
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -28,151 +29,150 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
|
||||||
BITS 32
|
// CPU 386
|
||||||
SECTION .text
|
|
||||||
CPU 386
|
|
||||||
|
|
||||||
%define PAGE_SIZE ( 1<<12)
|
#define PAGE_SIZE ( 1<<12)
|
||||||
%define szElf32_Ehdr 0x34
|
#define szElf32_Ehdr 0x34
|
||||||
%define szElf32_Phdr 8*4
|
#define szElf32_Phdr 8*4
|
||||||
%define e_entry (16 + 2*2 + 4)
|
#define e_entry (16 + 2*2 + 4)
|
||||||
%define szl_info 12
|
#define szl_info 12
|
||||||
%define szp_info 12
|
#define szp_info 12
|
||||||
%define a_type 0
|
#define a_type 0
|
||||||
%define a_val 4
|
#define a_val 4
|
||||||
%define sz_auxv 8
|
#define sz_auxv 8
|
||||||
|
|
||||||
fold_begin: ; In: %ebx= uncDst; edx= &b_info cprSrc; ebp = &decompress
|
fold_begin: // In: %ebx= uncDst; edx= &b_info cprSrc; ebp = &decompress
|
||||||
|
|
||||||
; Move argc,argv,envp down to make room for complete Elf_auxv table.
|
// Move argc,argv,envp down to make room for complete Elf_auxv table.
|
||||||
; Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
// Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
||||||
; because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
// because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
||||||
; give not quite everything. It is simpler and smaller code for us
|
// give not quite everything. It is simpler and smaller code for us
|
||||||
; to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
// to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
||||||
; ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance
|
// ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance
|
||||||
|
|
||||||
%define AT_NULL 0
|
#define AT_NULL 0
|
||||||
%define AT_IGNORE 1
|
#define AT_IGNORE 1
|
||||||
%define AT_PHDR 3
|
#define AT_PHDR 3
|
||||||
%define AT_NUMBER (5+ 37)
|
#define AT_NUMBER (5+ 37)
|
||||||
; 2002-11-09 glibc-2.2.90 AT_IGNOREPPC==22 plus 5 for future growth
|
// 2002-11-09 glibc-2.2.90 AT_IGNOREPPC==22 plus 5 for future growth
|
||||||
; 2006-05-15 glibc-2.4-4 AT_L3_CACHESHAPE==37
|
// 2006-05-15 glibc-2.4-4 AT_L3_CACHESHAPE==37
|
||||||
|
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
sub esp, sz_auxv * AT_NUMBER ; more than 128 bytes
|
sub esp, sz_auxv * AT_NUMBER // more than 128 bytes
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
do_auxv: ; entry: %esi=src = &argc; %edi=dst. exit: %edi= &AT_NULL
|
do_auxv: // entry: %esi=src = &argc; %edi=dst. exit: %edi= &AT_NULL
|
||||||
; cld
|
// cld
|
||||||
|
|
||||||
L10: ; move argc+argv
|
L10: // move argc+argv
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L10
|
jne L10
|
||||||
|
|
||||||
L20: ; move envp
|
L20: // move envp
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L20
|
jne L20
|
||||||
|
|
||||||
; complete Elf_auxv table full of AT_IGNORE
|
// complete Elf_auxv table full of AT_IGNORE
|
||||||
push edi ; save base of resulting table
|
push edi // save base of resulting table
|
||||||
inc eax ; convert 0 to AT_IGNORE
|
inc eax // convert 0 to AT_IGNORE
|
||||||
push byte 2 * (AT_NUMBER -1) ; less than 128
|
push 2 * (AT_NUMBER -1) // less than 128
|
||||||
pop ecx
|
pop ecx
|
||||||
rep stosd
|
rep stosd
|
||||||
dec eax ; convert AT_IGNORE into AT_NULL
|
dec eax // convert AT_IGNORE into AT_NULL
|
||||||
stosd ; terminate Elf_auxv
|
stosd // terminate Elf_auxv
|
||||||
stosd
|
stosd
|
||||||
pop edi ; base of resulting table
|
pop edi // base of resulting table
|
||||||
|
|
||||||
L30: ; distribute existing Elf32_auxv into new table
|
L30: // distribute existing Elf32_auxv into new table
|
||||||
lodsd
|
lodsd
|
||||||
test eax,eax ; AT_NULL ?
|
test eax,eax // AT_NULL ?
|
||||||
xchg eax,ecx ; edx is busy, do not use
|
xchg eax,ecx // edx is busy, do not use
|
||||||
lodsd
|
lodsd
|
||||||
je L40
|
je L40
|
||||||
cmp ecx, byte AT_NUMBER
|
cmp ecx, AT_NUMBER
|
||||||
jae L30
|
jae L30
|
||||||
mov [a_type + sz_auxv*(ecx -1) + edi], ecx
|
mov [a_type + sz_auxv*(ecx -1) + edi], ecx
|
||||||
mov [a_val + sz_auxv*(ecx -1) + edi], eax
|
mov [a_val + sz_auxv*(ecx -1) + edi], eax
|
||||||
jmp L30
|
jmp L30
|
||||||
L40:
|
L40:
|
||||||
|
|
||||||
%define OVERHEAD 2048
|
#define OVERHEAD 2048
|
||||||
%define MAX_ELF_HDR 512
|
#define MAX_ELF_HDR 512
|
||||||
|
|
||||||
sub esp, dword MAX_ELF_HDR + OVERHEAD
|
sub esp, MAX_ELF_HDR + OVERHEAD
|
||||||
|
|
||||||
xchg eax, ebx ; eax= uncDst
|
xchg eax, ebx // eax= uncDst
|
||||||
mov ecx, [ edx] ; sz_unc
|
mov ecx, [ edx] // sz_unc
|
||||||
mov ebx, [4+ edx] ; sz_cpr
|
mov ebx, [4+ edx] // sz_cpr
|
||||||
mov esi, eax ; extra copy of uncDst
|
mov esi, eax // extra copy of uncDst
|
||||||
pusha ; (AT_table,uncDst,f_decpr,&ehdr,{sz_cpr,cprSrc},{sz_unc,uncDst})
|
pusha // (AT_table,uncDst,f_decpr,&ehdr,{sz_cpr,cprSrc},{sz_unc,uncDst})
|
||||||
EXTERN upx_main
|
.extern upx_main
|
||||||
call upx_main ; entry = upx_main(...)
|
call upx_main // entry = upx_main(...)
|
||||||
pop ecx ; junk
|
pop ecx // junk
|
||||||
push eax ; save entry address
|
push eax // save entry address
|
||||||
popa ; edi= entry address; esi= uncDst
|
popa // edi= entry address; esi= uncDst
|
||||||
add esp, dword MAX_ELF_HDR + OVERHEAD ; remove temp space
|
add esp, MAX_ELF_HDR + OVERHEAD // remove temp space
|
||||||
|
|
||||||
pop ecx ; argc
|
pop ecx // argc
|
||||||
pop edx ; $0 filename, to become argv[0]
|
pop edx // $0 filename, to become argv[0]
|
||||||
push edx ; restore $0 filename
|
push edx // restore $0 filename
|
||||||
|
|
||||||
inc ecx
|
inc ecx
|
||||||
push esi ; &uncompressed shell script
|
push esi // &uncompressed shell script
|
||||||
sub esi, byte 3
|
sub esi, 3
|
||||||
|
|
||||||
mov [esi], word 0x632d ; "-c"
|
mov word ptr [esi], 0x632d // "-c"
|
||||||
inc ecx
|
inc ecx
|
||||||
push esi ; &"-c"
|
push esi // &"-c"
|
||||||
|
|
||||||
inc ecx
|
inc ecx
|
||||||
push edx ; argv[0] is duplicate of $0
|
push edx // argv[0] is duplicate of $0
|
||||||
|
|
||||||
push ecx ; new argc
|
push ecx // new argc
|
||||||
push edi ; save entry address
|
push edi // save entry address
|
||||||
|
|
||||||
; _dl_start and company (ld-linux.so.2) assumes that it has virgin stack,
|
// _dl_start and company (ld-linux.so.2) assumes that it has virgin stack,
|
||||||
; and does not initialize all its stack local variables to zero.
|
// and does not initialize all its stack local variables to zero.
|
||||||
; Ulrich Drepper (drepper@cyngus.com) has refused to fix the bugs.
|
// Ulrich Drepper (drepper@cyngus.com) has refused to fix the bugs.
|
||||||
; See GNU wwwgnats libc/1165 .
|
// See GNU wwwgnats libc/1165 .
|
||||||
|
|
||||||
%define N_STKCLR (0x100 + MAX_ELF_HDR + OVERHEAD)/4
|
#define N_STKCLR (0x100 + MAX_ELF_HDR + OVERHEAD)/4
|
||||||
lea edi, [esp - 4*N_STKCLR]
|
lea edi, [esp - 4*N_STKCLR]
|
||||||
pusha ; values will be zeroed
|
pusha // values will be zeroed
|
||||||
mov ebx,esp ; save
|
mov ebx,esp // save
|
||||||
mov esp,edi ; Linux does not grow stack below esp
|
mov esp,edi // Linux does not grow stack below esp
|
||||||
mov ecx, N_STKCLR
|
mov ecx, N_STKCLR
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
rep stosd
|
rep stosd
|
||||||
mov esp,ebx ; restore
|
mov esp,ebx // restore
|
||||||
|
|
||||||
; Because the decompressed shell script occupies low memory anyway,
|
// Because the decompressed shell script occupies low memory anyway,
|
||||||
; there isn't much payback to unmapping the compressed script and
|
// there isn't much payback to unmapping the compressed script and
|
||||||
; ourselves the stub. We would need a place to put the escape hatch
|
// ourselves the stub. We would need a place to put the escape hatch
|
||||||
; "int $0x80; popa; ret", and some kernels do not allow execution
|
// "int $0x80; popa; ret", and some kernels do not allow execution
|
||||||
; on the stack. So, we would have to dirty a page of the shell
|
// on the stack. So, we would have to dirty a page of the shell
|
||||||
; or of /lib/ld-linux.so. It's simpler just to omit the unmapping.
|
// or of /lib/ld-linux.so. It's simpler just to omit the unmapping.
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define __NR_mmap 90
|
#define __NR_mmap 90
|
||||||
|
|
||||||
global mmap
|
mmap: .globl mmap
|
||||||
mmap:
|
|
||||||
push ebx
|
push ebx
|
||||||
lea ebx, [2*4 + esp]
|
lea ebx, [2*4 + esp]
|
||||||
push byte __NR_mmap
|
push __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "arch/i386/macros2.ash"
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
; =============
|
; =============
|
||||||
@@ -67,11 +67,11 @@ section LXMOVEUP
|
|||||||
// ============= DECOMPRESSION
|
// ============= DECOMPRESSION
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
//#include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2e_d32.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#define db .byte
|
||||||
//#include "arch/i386/lzma_d.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
|
||||||
// =============
|
// =============
|
||||||
// ============= UNFILTER
|
// ============= UNFILTER
|
||||||
@@ -135,6 +135,6 @@ move_up:
|
|||||||
or ebp, -1 // decompressor assumption
|
or ebp, -1 // decompressor assumption
|
||||||
jmp eax // enter moved decompressor
|
jmp eax // enter moved decompressor
|
||||||
|
|
||||||
#include "include/header2.ash"
|
#include "include/header2.ash"
|
||||||
|
|
||||||
// vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "arch/i386/macros2.ash"
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
// =============
|
// =============
|
||||||
// ============= ENTRY POINT
|
// ============= ENTRY POINT
|
||||||
@@ -124,11 +124,11 @@ section LZCUTPOI
|
|||||||
// ============= DECOMPRESSION
|
// ============= DECOMPRESSION
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
//#include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2e_d32.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#define db .byte
|
||||||
//#include "arch/i386/lzma_d.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
|
||||||
// =============
|
// =============
|
||||||
// ============= UNFILTER
|
// ============= UNFILTER
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
; i386-openbsd.elf-fold.asm -- linkage to C code to process Elf binary
|
; i386-openbsd.elf-fold.asm -- linkage to C code to process Elf binary
|
||||||
;
|
;
|
||||||
; This file is part of the UPX executable compressor.
|
; This file is part of the UPX executable compressor.
|
||||||
@@ -26,262 +27,249 @@
|
|||||||
; John F. Reiser
|
; John F. Reiser
|
||||||
; <jreiser@users.sourceforge.net>
|
; <jreiser@users.sourceforge.net>
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
|
#define PAGE_SIZE ( 1<<12)
|
||||||
|
#define szElf32_Ehdr 0x34
|
||||||
|
#define szElf32_Phdr 8*4
|
||||||
|
#define e_type 16
|
||||||
|
#define e_entry (16 + 2*2 + 4)
|
||||||
|
#define p_memsz 5*4
|
||||||
|
#define sznote 0x18
|
||||||
|
#define szb_info 12
|
||||||
|
#define szl_info 12
|
||||||
|
#define szp_info 12
|
||||||
|
#define a_type 0
|
||||||
|
#define a_val 4
|
||||||
|
#define sz_auxv 8
|
||||||
|
|
||||||
BITS 32
|
#define __NR_munmap 73
|
||||||
SECTION .text
|
|
||||||
CPU 386
|
|
||||||
|
|
||||||
%define PAGE_SIZE ( 1<<12)
|
// control just falls through, after this part and compiled C code
|
||||||
%define szElf32_Ehdr 0x34
|
// are uncompressed.
|
||||||
%define szElf32_Phdr 8*4
|
|
||||||
%define e_type 16
|
|
||||||
%define e_entry (16 + 2*2 + 4)
|
|
||||||
%define p_memsz 5*4
|
|
||||||
%define sznote 0x18
|
|
||||||
%define szb_info 12
|
|
||||||
%define szl_info 12
|
|
||||||
%define szp_info 12
|
|
||||||
%define a_type 0
|
|
||||||
%define a_val 4
|
|
||||||
%define sz_auxv 8
|
|
||||||
|
|
||||||
%define __NR_munmap 73
|
fold_begin: // enter: %ebx= &Elf32_Ehdr of this program
|
||||||
|
// patchLoader will modify to be
|
||||||
|
// dword sz_uncompressed, sz_compressed
|
||||||
|
// byte compressed_data...
|
||||||
|
|
||||||
;; control just falls through, after this part and compiled C code
|
// ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
||||||
;; are uncompressed.
|
// Move argc,argv,envp down to make room for Elf_auxv table.
|
||||||
|
// Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
||||||
|
// because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
||||||
|
// give not quite everything. It is simpler and smaller code for us
|
||||||
|
// to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
||||||
|
// On second thought, that wastes a lot of stack space (the entire kernel
|
||||||
|
// auxv, plus those slots that remain empty anyway). So try for minimal
|
||||||
|
// space on stack, without too much code, by doing it serially.
|
||||||
|
|
||||||
fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
#define AT_NULL 0
|
||||||
; patchLoader will modify to be
|
#define AT_IGNORE 1
|
||||||
; dword sz_uncompressed, sz_compressed
|
#define AT_PHDR 3
|
||||||
; byte compressed_data...
|
#define AT_PHENT 4
|
||||||
|
#define AT_PHNUM 5
|
||||||
|
#define AT_PAGESZ 6
|
||||||
|
#define AT_BASE 7
|
||||||
|
#define AT_ENTRY 9
|
||||||
|
|
||||||
; ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
#define ET_DYN 3
|
||||||
; Move argc,argv,envp down to make room for Elf_auxv table.
|
|
||||||
; Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
|
||||||
; because we have no PT_INTERP. Linux kernel 2.4.5 (and later?)
|
|
||||||
; give not quite everything. It is simpler and smaller code for us
|
|
||||||
; to generate a "complete" table where Elf_auxv[k -1].a_type = k.
|
|
||||||
; On second thought, that wastes a lot of stack space (the entire kernel
|
|
||||||
; auxv, plus those slots that remain empty anyway). So try for minimal
|
|
||||||
; space on stack, without too much code, by doing it serially.
|
|
||||||
|
|
||||||
%define AT_NULL 0
|
|
||||||
%define AT_IGNORE 1
|
|
||||||
%define AT_PHDR 3
|
|
||||||
%define AT_PHENT 4
|
|
||||||
%define AT_PHNUM 5
|
|
||||||
%define AT_PAGESZ 6
|
|
||||||
%define AT_BASE 7
|
|
||||||
%define AT_ENTRY 9
|
|
||||||
|
|
||||||
%define ET_DYN 3
|
|
||||||
|
|
||||||
sub ecx, ecx
|
sub ecx, ecx
|
||||||
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_BASE) | (1<<AT_ENTRY)
|
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_BASE) | (1<<AT_ENTRY)
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
call do_auxv ; clear bits in edx according to existing auxv slots
|
call do_auxv // clear bits in edx according to existing auxv slots
|
||||||
|
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
L50:
|
L50:
|
||||||
shr edx, 1 ; Carry = bottom bit
|
shr edx, 1 // Carry = bottom bit
|
||||||
sbb eax, eax ; -1 or 0
|
sbb eax, eax // -1 or 0
|
||||||
sub ecx, eax ; count of 1 bits that remained in edx
|
sub ecx, eax // count of 1 bits that remained in edx
|
||||||
lea esp, [esp + sz_auxv * eax] ; allocate one auxv slot, if needed
|
lea esp, [esp + sz_auxv * eax] // allocate one auxv slot, if needed
|
||||||
test edx,edx
|
test edx,edx
|
||||||
jne L50
|
jne L50
|
||||||
|
|
||||||
mov edi, esp
|
mov edi, esp
|
||||||
call do_auxv ; move; fill new auxv slots with AT_IGNORE
|
call do_auxv // move; fill new auxv slots with AT_IGNORE
|
||||||
|
|
||||||
%define OVERHEAD 2048
|
#define OVERHEAD 2048
|
||||||
%define MAX_ELF_HDR 512
|
#define MAX_ELF_HDR 512
|
||||||
|
|
||||||
sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca
|
sub esp, MAX_ELF_HDR + OVERHEAD // alloca
|
||||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
push ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
|
|
||||||
; Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
// Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
||||||
; but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
// but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
||||||
mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz
|
mov edx, [p_memsz + szElf32_Ehdr + ebx] // phdr[0].p_memsz
|
||||||
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] ; 1 page for round, 1 for unfold
|
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] // 1 page for round, 1 for unfold
|
||||||
and edx, -PAGE_SIZE
|
and edx, 0-PAGE_SIZE
|
||||||
|
|
||||||
push edx ; end of unmap region
|
push edx // end of unmap region
|
||||||
sub eax, eax ; 0
|
sub eax, eax // 0
|
||||||
cmp word [e_type + ebx], byte ET_DYN
|
cmp word ptr [e_type + ebx], ET_DYN
|
||||||
jne L53
|
jne L53
|
||||||
xchg eax, edx ; dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
xchg eax, edx // dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
||||||
L53:
|
L53:
|
||||||
push eax ; dynbase
|
push eax // dynbase
|
||||||
|
|
||||||
mov esi, [e_entry + ebx] ; end of compressed data
|
mov esi, [e_entry + ebx] // end of compressed data
|
||||||
lea eax, [szElf32_Ehdr + 3*szElf32_Phdr + sznote + szl_info + szp_info + ebx] ; 1st &b_info
|
lea eax, [szElf32_Ehdr + 3*szElf32_Phdr + sznote + szl_info + szp_info + ebx] // 1st &b_info
|
||||||
sub esi, eax ; length of compressed data
|
sub esi, eax // length of compressed data
|
||||||
mov ebx, [ eax] ; length of uncompressed ELF headers
|
mov ebx, [ eax] // length of uncompressed ELF headers
|
||||||
mov ecx, [4+ eax] ; length of compressed ELF headers
|
mov ecx, [4+ eax] // length of compressed ELF headers
|
||||||
add ecx, byte szb_info
|
add ecx, szb_info
|
||||||
lea edx, [3*4 + esp] ; &tmp
|
lea edx, [3*4 + esp] // &tmp
|
||||||
pusha ; (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
pusha // (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
||||||
inc edi ; swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
inc edi // swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
||||||
EXTERN upx_main
|
.extern upx_main
|
||||||
call upx_main ; returns entry address
|
call upx_main // returns entry address
|
||||||
add esp, byte (8 +1)*4 ; remove 8 params from pusha, also dynbase
|
add esp, (8 +1)*4 // remove 8 params from pusha, also dynbase
|
||||||
pop ecx ; end of unmap region
|
pop ecx // end of unmap region
|
||||||
pop ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
pop ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
add esp, dword MAX_ELF_HDR + OVERHEAD ; un-alloca
|
add esp, MAX_ELF_HDR + OVERHEAD // un-alloca
|
||||||
|
|
||||||
push eax ; save entry address as ret.addr
|
push eax // save entry address as ret.addr
|
||||||
push byte 0 ; 'leave' uses this to clear ebp
|
push 0 // 'leave' uses this to clear ebp
|
||||||
mov ebp,esp ; frame
|
mov ebp,esp // frame
|
||||||
|
|
||||||
sub ecx, ebx
|
sub ecx, ebx
|
||||||
sub eax,eax ; 0, also AT_NULL
|
sub eax,eax // 0, also AT_NULL
|
||||||
push ecx ; length to unmap
|
push ecx // length to unmap
|
||||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
push ebx // start of unmap region (&Elf32_Ehdr of this stub)
|
||||||
push eax ; fake ret.addr
|
push eax // fake ret.addr
|
||||||
|
|
||||||
dec edi ; auxv table
|
dec edi // auxv table
|
||||||
db 0x3c ; "cmpb al, byte ..." like "jmp 1+L60" but 1 byte shorter
|
.byte 0x3c // "cmpb al, ..." like "jmp 1+L60" but 1 byte shorter
|
||||||
L60:
|
L60:
|
||||||
scasd ; a_un.a_val etc.
|
scasd // a_un.a_val etc.
|
||||||
scasd ; a_type
|
scasd // a_type
|
||||||
jne L60 ; not AT_NULL
|
jne L60 // not AT_NULL
|
||||||
; edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
// edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
||||||
push dword [edi] ; &escape hatch
|
push dword ptr [edi] // &escape hatch
|
||||||
|
|
||||||
xor edi,edi
|
xor edi,edi
|
||||||
xor esi,esi
|
xor esi,esi
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
mov al, __NR_munmap ; eax was 0 from L60
|
mov al, __NR_munmap // eax was 0 from L60
|
||||||
ret ; goto escape hatch: int 0x80; leave; ret
|
ret // goto escape hatch: int 0x80; leave; ret
|
||||||
|
|
||||||
; called twice:
|
// called twice:
|
||||||
; 1st with esi==edi, ecx=0, edx= bitmap of slots needed: just update edx.
|
// 1st with esi==edi, ecx=0, edx= bitmap of slots needed: just update edx.
|
||||||
; 2nd with esi!=edi, ecx= slot_count: move, then append AT_IGNORE slots
|
// 2nd with esi!=edi, ecx= slot_count: move, then append AT_IGNORE slots
|
||||||
; entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
// entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
||||||
; exit: edi= &auxtab; edx= bits still needed
|
// exit: edi= &auxtab; edx= bits still needed
|
||||||
do_auxv:
|
do_auxv:
|
||||||
; cld
|
// cld
|
||||||
|
|
||||||
L10: ; move argc+argv
|
L10: // move argc+argv
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L10
|
jne L10
|
||||||
|
|
||||||
L20: ; move envp
|
L20: // move envp
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jne L20
|
jne L20
|
||||||
|
|
||||||
push edi ; return value
|
push edi // return value
|
||||||
L30: ; process auxv
|
L30: // process auxv
|
||||||
lodsd ; a_type
|
lodsd // a_type
|
||||||
stosd
|
stosd
|
||||||
cmp eax, byte 32
|
cmp eax, 32
|
||||||
jae L32 ; prevent aliasing by 'btr' when 32<=a_type
|
jae L32 // prevent aliasing by 'btr' when 32<=a_type
|
||||||
btr edx, eax ; no longer need a slot of type eax [Carry only]
|
btr edx, eax // no longer need a slot of type eax [Carry only]
|
||||||
L32:
|
L32:
|
||||||
test eax, eax ; AT_NULL ?
|
test eax, eax // AT_NULL ?
|
||||||
lodsd
|
lodsd
|
||||||
stosd
|
stosd
|
||||||
jnz L30 ; a_type != AT_NULL
|
jnz L30 // a_type != AT_NULL
|
||||||
|
|
||||||
sub edi, byte 8 ; backup to AT_NULL
|
sub edi, 8 // backup to AT_NULL
|
||||||
add ecx, ecx ; two words per auxv
|
add ecx, ecx // two words per auxv
|
||||||
inc eax ; convert 0 to AT_IGNORE
|
inc eax // convert 0 to AT_IGNORE
|
||||||
rep stosd ; allocate and fill
|
rep stosd // allocate and fill
|
||||||
dec eax ; convert AT_IGNORE to AT_NULL
|
dec eax // convert AT_IGNORE to AT_NULL
|
||||||
stosd ; re-terminate with AT_NULL
|
stosd // re-terminate with AT_NULL
|
||||||
stosd
|
stosd
|
||||||
|
|
||||||
pop edi ; &auxtab
|
pop edi // &auxtab
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define __NR_mmap 197
|
#define __NR_mmap 197
|
||||||
%define __NR_syscall 198
|
#define __NR_syscall 198
|
||||||
|
|
||||||
global mmap
|
mmap: .globl mmap
|
||||||
mmap:
|
|
||||||
push ebp
|
push ebp
|
||||||
mov ebp,esp
|
mov ebp,esp
|
||||||
xor eax,eax ; 0
|
xor eax,eax // 0
|
||||||
push eax ; convert to 64-bit
|
push eax // convert to 64-bit
|
||||||
push dword [7*4+ebp] ; offset
|
push dword ptr [7*4+ebp] // offset
|
||||||
push eax ; pad
|
push eax // pad
|
||||||
push dword [6*4+ebp] ; fd
|
push dword ptr [6*4+ebp] // fd
|
||||||
push dword [5*4+ebp] ; flags
|
push dword ptr [5*4+ebp] // flags
|
||||||
push dword [4*4+ebp] ; prot
|
push dword ptr [4*4+ebp] // prot
|
||||||
push dword [3*4+ebp] ; len
|
push dword ptr [3*4+ebp] // len
|
||||||
push dword [2*4+ebp] ; addr
|
push dword ptr [2*4+ebp] // addr
|
||||||
push eax ; current thread
|
push eax // current thread
|
||||||
mov al,__NR_mmap
|
mov al,__NR_mmap
|
||||||
push eax
|
push eax
|
||||||
push eax ; fake ret.addr
|
push eax // fake ret.addr
|
||||||
mov al,__NR_syscall
|
mov al,__NR_syscall
|
||||||
int 0x80
|
int 0x80
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
|
|
||||||
global brk
|
brk: .globl brk
|
||||||
brk:
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
global bkpt
|
bkpt: .globl bkpt
|
||||||
bkpt:
|
|
||||||
int3
|
int3
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define __NR_exit 1
|
#define __NR_exit 1
|
||||||
%define __NR_read 3
|
#define __NR_read 3
|
||||||
%define __NR_write 4
|
#define __NR_write 4
|
||||||
%define __NR_open 5
|
#define __NR_open 5
|
||||||
%define __NR_close 6
|
#define __NR_close 6
|
||||||
%define __NR_munmap 73
|
#define __NR_munmap 73
|
||||||
%define __NR_mprotect 74
|
#define __NR_mprotect 74
|
||||||
|
|
||||||
global exit
|
exit: .globl exit
|
||||||
exit:
|
|
||||||
mov al,__NR_exit
|
mov al,__NR_exit
|
||||||
nf_sysgo:
|
nf_sysgo:
|
||||||
movzx eax,al
|
movzx eax,al
|
||||||
int 0x80
|
int 0x80
|
||||||
ret
|
ret
|
||||||
|
|
||||||
global read
|
read: .globl read
|
||||||
read:
|
|
||||||
mov al,__NR_read
|
mov al,__NR_read
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global write
|
write: .globl write
|
||||||
write:
|
|
||||||
mov al,__NR_write
|
mov al,__NR_write
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global open
|
open: .globl open
|
||||||
open:
|
|
||||||
mov al,__NR_open
|
mov al,__NR_open
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global close
|
close: .globl close
|
||||||
close:
|
|
||||||
mov al,__NR_close
|
mov al,__NR_close
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
|
|
||||||
global munmap
|
munmap: .globl munmap
|
||||||
munmap:
|
|
||||||
mov al,__NR_munmap
|
mov al,__NR_munmap
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
global mprotect
|
mprotect: .globl mprotect
|
||||||
mprotect:
|
|
||||||
mov al,__NR_mprotect
|
mov al,__NR_mprotect
|
||||||
jmp nf_sysgo
|
jmp nf_sysgo
|
||||||
|
|
||||||
; vi:ts=8:et:nowrap
|
// vi:ts=8:et:nowrap
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define UPX102 1
|
#define UPX102 1
|
||||||
#include "arch/i386/macros2.ash"
|
#include "arch/i386/macros2.ash"
|
||||||
|
|
||||||
CPU 386
|
CPU 386
|
||||||
|
|
||||||
@@ -57,11 +57,11 @@ section PEMAIN02
|
|||||||
// ============= DECOMPRESSION
|
// ============= DECOMPRESSION
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
//#include "arch/i386/nrv2b_d32.ash"
|
#include "arch/i386/nrv2b_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2d_d32.ash"
|
#include "arch/i386/nrv2d_d32_2.ash"
|
||||||
//#include "arch/i386/nrv2e_d32.ash"
|
#include "arch/i386/nrv2e_d32_2.ash"
|
||||||
#include "arch/i386/nrv2e_d32_2.ash"
|
#define db .byte
|
||||||
//#include "arch/i386/lzma_d.ash"
|
#include "arch/i386/lzma_d_2.ash"
|
||||||
|
|
||||||
// =============
|
// =============
|
||||||
section PEMAIN10
|
section PEMAIN10
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
* John F. Reiser
|
* John F. Reiser
|
||||||
* <jreiser@users.sourceforge.net>
|
* <jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
#include "arch/powerpc/32/regs.h"
|
#include "arch/powerpc/32/ppc_regs.h"
|
||||||
|
|
||||||
sz_b_info= 12
|
sz_b_info= 12
|
||||||
sz_unc= 0
|
sz_unc= 0
|
||||||
|
|||||||
@@ -29,12 +29,8 @@
|
|||||||
* <jreiser@users.sourceforge.net>
|
* <jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "arch/powerpc/32/regs.h"
|
#include "arch/powerpc/32/ppc_regs.h"
|
||||||
|
#define section .section
|
||||||
/*__MACOS000__*/
|
|
||||||
_start: .globl _start
|
|
||||||
call main # must be exactly 1 instruction; link_register= &decompress
|
|
||||||
#include "arch/powerpc/32/nrv2e_d.S"
|
|
||||||
|
|
||||||
sz_b_info= 12
|
sz_b_info= 12
|
||||||
sz_unc= 0
|
sz_unc= 0
|
||||||
@@ -49,29 +45,77 @@ MAP_PRIVATE= 2
|
|||||||
MAP_FIXED= 0x10
|
MAP_FIXED= 0x10
|
||||||
MAP_ANONYMOUS= 0x20
|
MAP_ANONYMOUS= 0x20
|
||||||
|
|
||||||
__NR_mmap= 90
|
|
||||||
|
|
||||||
PAGE_SHIFT= 12
|
PAGE_SHIFT= 12
|
||||||
PAGE_SIZE = -(~0<<PAGE_SHIFT)
|
PAGE_SIZE = -(~0<<PAGE_SHIFT)
|
||||||
|
|
||||||
/* Temporary until we get the buildLoader stuff working ... */
|
|
||||||
.ascii "\n$Id: UPX (C) 1996-2006 the UPX Team. "
|
|
||||||
.asciz "All Rights Reserved. http://upx.sf.net $\n"
|
|
||||||
.p2align 2 # (1<<2)
|
|
||||||
|
|
||||||
/* /usr/include/asm-ppc/unistd.h */
|
/* /usr/include/asm-ppc/unistd.h */
|
||||||
__NR_write = 4
|
__NR_write = 4
|
||||||
__NR_exit = 1
|
__NR_exit = 1
|
||||||
|
__NR_mmap = 90
|
||||||
|
|
||||||
|
section ELFMAINX
|
||||||
|
.balign 4
|
||||||
|
_start: .globl _start
|
||||||
|
call main // must be exactly 1 instruction; link_register= &decompress
|
||||||
|
|
||||||
|
/* Returns 0 on success; non-zero on failure. */
|
||||||
|
decompress: // (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint method)
|
||||||
|
|
||||||
|
section NRV_COMMON
|
||||||
|
.balign 4
|
||||||
|
SZ_DLINE=128 # size of data cache line in Apple G5
|
||||||
|
|
||||||
|
/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */
|
||||||
|
#define hibit r0 /* holds 0x80000000 during decompress */
|
||||||
|
|
||||||
|
#define src a0
|
||||||
|
#define lsrc a1
|
||||||
|
#define dst a2
|
||||||
|
#define ldst a3 /* Out: actually a reference: &len_dst */
|
||||||
|
#define meth a4
|
||||||
|
|
||||||
|
#define off a4
|
||||||
|
#define len a5
|
||||||
|
#define bits a6
|
||||||
|
#define disp a7
|
||||||
|
|
||||||
|
section NRV2E
|
||||||
|
.balign 4
|
||||||
|
#include "arch/powerpc/32/nrv2e_d.S"
|
||||||
|
|
||||||
|
section NRV2B
|
||||||
|
.balign 4
|
||||||
|
#include "arch/powerpc/32/nrv2b_d.S"
|
||||||
|
|
||||||
|
#include "arch/powerpc/32/lzma_d.S"
|
||||||
|
|
||||||
|
section ELFMAINY
|
||||||
|
.balign 4
|
||||||
|
eof_nrv:
|
||||||
|
#define tmp r0 /* hibit is dead */
|
||||||
|
lwz tmp,0(ldst) // original dst
|
||||||
|
mtlr t3 // return address
|
||||||
|
addi dst,dst,1 // uncorrect for 'stbu'
|
||||||
|
addi src,src,1 // uncorrect for 'lbzu'
|
||||||
|
subf dst,tmp,dst // dst -= tmp; // dst length
|
||||||
|
#undef tmp
|
||||||
|
subf a0,lsrc,src // src -= eof; // return 0: good; else: bad
|
||||||
|
stw dst,0(ldst)
|
||||||
|
ret
|
||||||
|
|
||||||
msg_SELinux:
|
msg_SELinux:
|
||||||
call L71
|
call L72
|
||||||
L70:
|
L70:
|
||||||
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
|
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
|
||||||
.p2align 2 # (1<<2)
|
|
||||||
L71:
|
L71:
|
||||||
li a2,L71 - L70 # length
|
// IDENTSTR goes here
|
||||||
mflr a1 # message text
|
|
||||||
li a0,2 # fd stderr
|
section ELFMAINZ
|
||||||
|
.balign 4
|
||||||
|
L72:
|
||||||
|
li a2,L71 - L70 // length
|
||||||
|
mflr a1 // message text
|
||||||
|
li a0,2 // fd stderr
|
||||||
li 0,__NR_write; sc
|
li 0,__NR_write; sc
|
||||||
die:
|
die:
|
||||||
li a0,127
|
li a0,127
|
||||||
@@ -79,10 +123,10 @@ die:
|
|||||||
|
|
||||||
/* Decompress the rest of this loader, and jump to it. */
|
/* Decompress the rest of this loader, and jump to it. */
|
||||||
unfold:
|
unfold:
|
||||||
mflr r30 # &{ b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...}
|
mflr r30 // &{ b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...}
|
||||||
|
|
||||||
li a5,0 # off_t
|
li a5,0 // off_t
|
||||||
li a4,-1 # fd; cater to *BSD for MAP_ANON
|
li a4,-1 // fd; cater to *BSD for MAP_ANON
|
||||||
lwz a0,sz_cpr(r30)
|
lwz a0,sz_cpr(r30)
|
||||||
li a3,MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS
|
li a3,MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS
|
||||||
li a2,PROT_READ | PROT_WRITE | PROT_EXEC
|
li a2,PROT_READ | PROT_WRITE | PROT_EXEC
|
||||||
@@ -90,28 +134,28 @@ unfold:
|
|||||||
add a0,a0,r30
|
add a0,a0,r30
|
||||||
li 0,__NR_mmap
|
li 0,__NR_mmap
|
||||||
addi a0,a0,sz_b_info+PAGE_SIZE-1
|
addi a0,a0,sz_b_info+PAGE_SIZE-1
|
||||||
rlwinm a0,a0,0,0,31-PAGE_SHIFT # next page boundary after fold
|
rlwinm a0,a0,0,0,31-PAGE_SHIFT // next page boundary after fold
|
||||||
sc; bso- msg_SELinux # Branch if SummaryOverflow (failure)
|
sc; bso- msg_SELinux // Branch if SummaryOverflow (failure)
|
||||||
0:
|
0:
|
||||||
mtctr r31
|
mtctr r31
|
||||||
|
lwz r0,sz_unc(r30)
|
||||||
lbz meth,b_method(r30)
|
lbz meth,b_method(r30)
|
||||||
la ldst,31*4(sp) # &do_not_care
|
la ldst,31*4(sp) // &slot on stack
|
||||||
|
stw r0,31*4(sp) // lzma uses for EOF
|
||||||
mr dst,a0
|
mr dst,a0
|
||||||
mtlr a0 # &continuation
|
mtlr a0 // &continuation
|
||||||
lwz lsrc,sz_cpr(r30)
|
lwz lsrc,sz_cpr(r30)
|
||||||
addi src,r30,sz_b_info
|
addi src,r30,sz_b_info
|
||||||
bctr # goto decomrpess; return to link register (mmap'ed page)
|
bctr // goto decomrpess; return to link register (mmap'ed page)
|
||||||
|
|
||||||
main:
|
main:
|
||||||
stwu r1,-32*4(sp) # allocate space (keeping 0 mod 16), save r1
|
//// teq r0,r0 // debugging
|
||||||
stmw r2,4(sp) # save registers r2 thru r31
|
stwu r1,-32*4(sp) // allocate space (keeping 0 mod 16), save r1
|
||||||
mflr r31 # &decompress
|
stmw r2,4(sp) // save registers r2 thru r31
|
||||||
|
mflr r31 // &decompress
|
||||||
call unfold
|
call unfold
|
||||||
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
|
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
|
||||||
|
|
||||||
eof:
|
|
||||||
/*__XTHEENDX__*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vi:ts=8:et:nowrap
|
vi:ts=8:et:nowrap
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#include "arch/powerpc/32/regs.h"
|
#include "arch/powerpc/32/ppc_regs.h"
|
||||||
|
|
||||||
|
#define szElf32_Ehdr 0x34
|
||||||
|
#define szElf32_Phdr 0x20
|
||||||
|
|
||||||
sz_b_info= 12
|
sz_b_info= 12
|
||||||
sz_unc= 0
|
sz_unc= 0
|
||||||
@@ -8,9 +11,9 @@ sz_l_info= 12
|
|||||||
sz_p_info= 12
|
sz_p_info= 12
|
||||||
|
|
||||||
OVERHEAD= 2048
|
OVERHEAD= 2048
|
||||||
LINKAREA= 4*4 # SysV C linkage area: (sp, lr); but 16-byte align
|
LINKAREA= 4*4 // SysV C linkage area: (sp, lr); but 16-byte align
|
||||||
/* In:
|
/* In:
|
||||||
r31= &decompress; also 8+ (char *)&(offset to {l_info; p_info; b_info})
|
r31= &decompress; also 8+ (char *)&(#bytes which preceed &-8(r31)
|
||||||
*/
|
*/
|
||||||
fold_begin:
|
fold_begin:
|
||||||
call L90
|
call L90
|
||||||
@@ -22,9 +25,9 @@ fold_begin:
|
|||||||
a2= envp
|
a2= envp
|
||||||
a3= auxvp
|
a3= auxvp
|
||||||
a4= fini
|
a4= fini
|
||||||
sp= ~0xf & (-2*4 + (void *)&argc) # 0(sp): old_sp, pc
|
sp= ~0xf & (-2*4 + (void *)&argc) // 0(sp): old_sp, pc
|
||||||
Instead, Linux gives only
|
Instead, Linux gives only
|
||||||
sp= &{argc,argv...,0,env...,0,auxv...,strings} # 16-byte aligned?
|
sp= &{argc,argv...,0,env...,0,auxv...,strings} // 16-byte aligned?
|
||||||
We must figure out the rest, particularly auxvp.
|
We must figure out the rest, particularly auxvp.
|
||||||
*/
|
*/
|
||||||
zfind:
|
zfind:
|
||||||
@@ -32,32 +35,34 @@ zfind:
|
|||||||
cmpi cr7,t0,0; bne+ cr7,zfind
|
cmpi cr7,t0,0; bne+ cr7,zfind
|
||||||
ret
|
ret
|
||||||
L90:
|
L90:
|
||||||
mflr a5 # &ppcbxx: f_unfilter
|
mflr a5 // &ppcbxx: f_unfilter
|
||||||
lwz a6,0(sp) # sp at execve
|
lwz a6,0(sp) // sp at execve
|
||||||
call zfind # a6= &env
|
call zfind // a6= &env
|
||||||
call zfind # a6= &Elf32_auxv
|
call zfind // a6= &Elf32_auxv
|
||||||
lwz a1,-8(r31) # total size = offset to {l_info; p_info; b_info}
|
lwz a1,-8(r31) // #bytes which preceed -8(r31)
|
||||||
rlwinm r30,a5,0,0,31-12 # r30= &this_page
|
rlwinm r30,a5,0,0,31-12 // r30= &this_page
|
||||||
la a2,-OVERHEAD(sp) # &Elf32_Ehdr temporary space
|
mr a4,r31 // &decompress: f_expand
|
||||||
mr a4,r31 # &decompress: f_expand
|
subf r29,a1,r31 // 8+ (char *)&our_Elf32_Ehdr
|
||||||
subf a0,a1,r31 # &l_info
|
la a2,-OVERHEAD(sp) // &Elf32_Ehdr temporary space
|
||||||
|
addi r29,r29,-8 // &our_Elf32_Ehdr
|
||||||
|
addi a1,a1,-(szElf32_Ehdr + 2*szElf32_Phdr)
|
||||||
|
addi a0,r29,(szElf32_Ehdr + 2*szElf32_Phdr) // &{l_info; p_info; b_info}
|
||||||
addi sp,sp,-(LINKAREA+OVERHEAD)
|
addi sp,sp,-(LINKAREA+OVERHEAD)
|
||||||
rlwinm r29,a0,0,0,31-12 # r29= &our_Elf32_Ehdr
|
lwz a3,sz_unc+sz_p_info+sz_l_info(a0) // sz_elf_headers
|
||||||
lwz a3,sz_unc+sz_p_info+sz_l_info(a0) # sz_elf_headers
|
call upx_main // Out: a0= entry
|
||||||
call upx_main # Out: a0= entry
|
/* entry= upx_main(l_info *a0, total_size a1, Elf32_Ehdr *a2, sz_ehdr a3,
|
||||||
/* entry= upx_main(l_info *a0, total_size a1, Elf32_Ehdr *a2, sz_ehdr a3,
|
|
||||||
f_decomp a4, f_unf a5, Elf32_auxv_t *a6)
|
f_decomp a4, f_unf a5, Elf32_auxv_t *a6)
|
||||||
*/
|
*/
|
||||||
mr r31,a0 # save &entry
|
mr r31,a0 // save &entry
|
||||||
|
|
||||||
mr a0,r29 # &our_Elf32_Ehdr
|
mr a0,r29 // &our_Elf32_Ehdr
|
||||||
subf a1,r29,r30 # size
|
subf a1,r29,r30 // size
|
||||||
call munmap # unmap compressed program; /proc/self/exe disappears
|
call munmap // unmap compressed program; /proc/self/exe disappears
|
||||||
|
|
||||||
mtlr r31 # entry address
|
mtlr r31 // entry address
|
||||||
lmw r2,4+LINKAREA+OVERHEAD(sp) # restore registers r2 thru r31
|
lmw r2,4+LINKAREA+OVERHEAD(sp) // restore registers r2 thru r31
|
||||||
lwz r1, LINKAREA+OVERHEAD(sp) # restore r1; deallocate space
|
lwz r1, LINKAREA+OVERHEAD(sp) // restore r1; deallocate space
|
||||||
ret # enter /lib/ld.so.1
|
ret // enter /lib/ld.so.1
|
||||||
|
|
||||||
SYS_exit= 1
|
SYS_exit= 1
|
||||||
SYS_fork= 2
|
SYS_fork= 2
|
||||||
@@ -75,8 +80,8 @@ mmap: .globl mmap
|
|||||||
li 0,SYS_mmap
|
li 0,SYS_mmap
|
||||||
sysgo:
|
sysgo:
|
||||||
sc
|
sc
|
||||||
bns+ no_fail # 'bns': branch if No Summary[Overflow]
|
bns+ no_fail // 'bns': branch if No Summary[Overflow]
|
||||||
li a0,-1 # failure; IGNORE errno
|
li a0,-1 // failure; IGNORE errno
|
||||||
no_fail:
|
no_fail:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|||||||
@@ -139,8 +139,8 @@ ERR_LAB
|
|||||||
|
|
||||||
if (h.sz_cpr < h.sz_unc) { // Decompress block
|
if (h.sz_cpr < h.sz_unc) { // Decompress block
|
||||||
nrv_uint out_len = h.sz_unc; // EOF for lzma
|
nrv_uint out_len = h.sz_unc; // EOF for lzma
|
||||||
int const j = (*f_decompress)(xi->buf, h.sz_cpr, xo->buf, &out_len,
|
int const j = (*f_decompress)(xi->buf, h.sz_cpr,
|
||||||
*(int *)(void *)&h.b_method);
|
xo->buf, &out_len, h.b_method);
|
||||||
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
|
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
|
||||||
err_exit(7);
|
err_exit(7);
|
||||||
if (h.b_ftid!=0 && f_unf) { // have filter
|
if (h.b_ftid!=0 && f_unf) { // have filter
|
||||||
|
|||||||
Reference in New Issue
Block a user