Merge.
This commit is contained in:
commit
26a0eb68ef
@ -545,6 +545,10 @@ inline void operator delete[](void *p)
|
||||
#define UPX_F_LINUX_ELF64_AMD 22
|
||||
#define UPX_F_LINUX_ELF32_ARMLE 23
|
||||
|
||||
#define UPX_F_BSD_i386 24
|
||||
#define UPX_F_BSD_ELF_i386 25
|
||||
#define UPX_F_BSD_SH_i386 26
|
||||
|
||||
#define UPX_F_PLAIN_TEXT 127
|
||||
|
||||
#define UPX_F_ATARI_TOS 129
|
||||
|
||||
@ -71,7 +71,10 @@ struct Ehdr
|
||||
ELFDATA2MSB = 2 /* 2's complement, big endian */
|
||||
};
|
||||
enum { // e_ident[EI_OSABI]
|
||||
ELFOSABI_LINUX = 3
|
||||
ELFOSABI_NONE = 0,
|
||||
ELFOSABI_LINUX = 3,
|
||||
ELFOSABI_FREEBSD = 9,
|
||||
ELFOSABI_ARM = 97
|
||||
};
|
||||
enum { // e_type
|
||||
ET_NONE = 0, /* No file type */
|
||||
|
||||
@ -53,7 +53,9 @@ PackLinuxElf32::checkEhdr(Elf32_Ehdr const *ehdr) const
|
||||
|
||||
if (0!=memcmp(buf, "\x7f\x45\x4c\x46", 4) // "\177ELF"
|
||||
|| buf[Elf32_Ehdr::EI_CLASS]!=ei_class
|
||||
|| buf[Elf32_Ehdr::EI_DATA] !=ei_data ) {
|
||||
|| buf[Elf32_Ehdr::EI_DATA] !=ei_data
|
||||
|| buf[Elf32_Ehdr::EI_OSABI] !=ei_osabi
|
||||
) {
|
||||
return -1;
|
||||
}
|
||||
if (!memcmp(buf+8, "FreeBSD", 7)) // branded
|
||||
@ -96,7 +98,9 @@ PackLinuxElf64::checkEhdr(Elf64_Ehdr const *ehdr) const
|
||||
|
||||
if (0!=memcmp(buf, "\x7f\x45\x4c\x46", 4) // "\177ELF"
|
||||
|| buf[Elf64_Ehdr::EI_CLASS]!=ei_class
|
||||
|| buf[Elf64_Ehdr::EI_DATA] !=ei_data ) {
|
||||
|| buf[Elf64_Ehdr::EI_DATA] !=ei_data
|
||||
|| buf[Elf64_Ehdr::EI_OSABI] !=ei_osabi
|
||||
) {
|
||||
return -1;
|
||||
}
|
||||
if (!memcmp(buf+8, "FreeBSD", 7)) // branded
|
||||
@ -134,7 +138,7 @@ PackLinuxElf64::checkEhdr(Elf64_Ehdr const *ehdr) const
|
||||
PackLinuxElf::PackLinuxElf(InputFile *f)
|
||||
: super(f), file_image(NULL), dynstr(NULL),
|
||||
sz_phdrs(0), sz_elf_hdrs(0),
|
||||
e_machine(0), ei_class(0), ei_data(0)
|
||||
e_machine(0), ei_class(0), ei_data(0), ei_osabi(0)
|
||||
{
|
||||
delete[] file_image;
|
||||
}
|
||||
@ -263,6 +267,7 @@ PackLinuxElf32ppc::PackLinuxElf32ppc(InputFile *f)
|
||||
e_machine = Elf32_Ehdr::EM_PPC;
|
||||
ei_class = Elf32_Ehdr::ELFCLASS32;
|
||||
ei_data = Elf32_Ehdr::ELFDATA2MSB;
|
||||
ei_osabi = Elf32_Ehdr::ELFOSABI_NONE;
|
||||
}
|
||||
|
||||
PackLinuxElf32ppc::~PackLinuxElf32ppc()
|
||||
@ -275,6 +280,7 @@ PackLinuxElf64amd::PackLinuxElf64amd(InputFile *f)
|
||||
e_machine = Elf64_Ehdr::EM_X86_64;
|
||||
ei_class = Elf64_Ehdr::ELFCLASS64;
|
||||
ei_data = Elf64_Ehdr::ELFDATA2LSB;
|
||||
ei_osabi = Elf32_Ehdr::ELFOSABI_NONE;
|
||||
}
|
||||
|
||||
PackLinuxElf64amd::~PackLinuxElf64amd()
|
||||
@ -580,6 +586,36 @@ PackLinuxElf32x86::buildLoader(const Filter *ft)
|
||||
tmp, sizeof(linux_i386elf_fold), ft );
|
||||
}
|
||||
|
||||
static const
|
||||
#include "stub/i386-BSD.elf-entry.h"
|
||||
static const
|
||||
#include "stub/i386-BSD.elf-fold.h"
|
||||
|
||||
int
|
||||
PackBSDElf32x86::buildLoader(const Filter *ft)
|
||||
{
|
||||
unsigned char tmp[sizeof(BSD_i386elf_fold)];
|
||||
memcpy(tmp, BSD_i386elf_fold, sizeof(BSD_i386elf_fold));
|
||||
((Elf32_Ehdr *)tmp)->e_ident[Elf32_Ehdr::EI_OSABI] = ei_osabi;
|
||||
((Elf32_Ehdr *)tmp)->e_ident[Elf32_Ehdr::EI_ABIVERSION] = 0;
|
||||
checkPatch(NULL, 0, 0, 0); // reset
|
||||
if (opt->o_unix.is_ptinterp) {
|
||||
unsigned j;
|
||||
for (j = 0; j < sizeof(BSD_i386elf_fold)-1; ++j) {
|
||||
if (0x60==tmp[ j]
|
||||
&& 0x47==tmp[1+j] ) {
|
||||
/* put INC EDI before PUSHA: inhibits auxv_up for PT_INTERP */
|
||||
tmp[ j] = 0x47;
|
||||
tmp[1+j] = 0x60;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return buildLinuxLoader(
|
||||
BSD_i386elf_loader, sizeof(BSD_i386elf_loader),
|
||||
tmp, sizeof(BSD_i386elf_fold), ft );
|
||||
}
|
||||
|
||||
static const
|
||||
#include "stub/arm-linux.elf-entry.h"
|
||||
static const
|
||||
@ -1005,10 +1041,16 @@ void PackLinuxElf32::pack1(OutputFile */*fo*/, Filter &/*ft*/)
|
||||
|
||||
void PackLinuxElf32x86::pack1(OutputFile *fo, Filter &ft)
|
||||
{
|
||||
super::pack1(fo, ft);
|
||||
PackLinuxElf32::pack1(fo, ft);
|
||||
generateElfHdr(fo, linux_i386elf_fold, getbrk(phdri, get_native16(&ehdri.e_phnum)) );
|
||||
}
|
||||
|
||||
void PackBSDElf32x86::pack1(OutputFile *fo, Filter &ft)
|
||||
{
|
||||
PackLinuxElf32::pack1(fo, ft);
|
||||
generateElfHdr(fo, BSD_i386elf_fold, getbrk(phdri, get_native16(&ehdri.e_phnum)) );
|
||||
}
|
||||
|
||||
void PackLinuxElf32::ARM_pack1(OutputFile *fo, bool const isBE)
|
||||
{
|
||||
Elf32_Ehdr const *const fold = (Elf32_Ehdr const *)&linux_elf32arm_fold;
|
||||
@ -1820,12 +1862,25 @@ PackLinuxElf32x86::PackLinuxElf32x86(InputFile *f) : super(f)
|
||||
e_machine = Elf32_Ehdr::EM_386;
|
||||
ei_class = Elf32_Ehdr::ELFCLASS32;
|
||||
ei_data = Elf32_Ehdr::ELFDATA2LSB;
|
||||
ei_osabi = Elf32_Ehdr::ELFOSABI_NONE; // ELFOSABI_LINUX
|
||||
}
|
||||
|
||||
PackLinuxElf32x86::~PackLinuxElf32x86()
|
||||
{
|
||||
}
|
||||
|
||||
PackBSDElf32x86::PackBSDElf32x86(InputFile *f) : super(f)
|
||||
{
|
||||
e_machine = Elf32_Ehdr::EM_386;
|
||||
ei_class = Elf32_Ehdr::ELFCLASS32;
|
||||
ei_data = Elf32_Ehdr::ELFDATA2LSB;
|
||||
ei_osabi = Elf32_Ehdr::ELFOSABI_FREEBSD;
|
||||
}
|
||||
|
||||
PackBSDElf32x86::~PackBSDElf32x86()
|
||||
{
|
||||
}
|
||||
|
||||
int const *
|
||||
PackLinuxElf32x86::getFilters() const
|
||||
{
|
||||
@ -1854,6 +1909,7 @@ PackLinuxElf32armLe::PackLinuxElf32armLe(InputFile *f) : super(f)
|
||||
e_machine = Elf32_Ehdr::EM_ARM;
|
||||
ei_class = Elf32_Ehdr::ELFCLASS32;
|
||||
ei_data = Elf32_Ehdr::ELFDATA2LSB;
|
||||
ei_osabi = Elf32_Ehdr::ELFOSABI_ARM;
|
||||
}
|
||||
|
||||
PackLinuxElf32armLe::~PackLinuxElf32armLe()
|
||||
@ -1865,6 +1921,7 @@ PackLinuxElf32armBe::PackLinuxElf32armBe(InputFile *f) : super(f)
|
||||
e_machine = Elf32_Ehdr::EM_ARM;
|
||||
ei_class = Elf32_Ehdr::ELFCLASS32;
|
||||
ei_data = Elf32_Ehdr::ELFDATA2MSB;
|
||||
ei_osabi = Elf32_Ehdr::ELFOSABI_ARM;
|
||||
}
|
||||
|
||||
PackLinuxElf32armBe::~PackLinuxElf32armBe()
|
||||
|
||||
@ -71,6 +71,7 @@ protected:
|
||||
unsigned short e_machine;
|
||||
unsigned char ei_class;
|
||||
unsigned char ei_data;
|
||||
unsigned char ei_osabi;
|
||||
};
|
||||
|
||||
class PackLinuxElf32 : public PackLinuxElf
|
||||
@ -326,6 +327,21 @@ protected:
|
||||
);
|
||||
};
|
||||
|
||||
class PackBSDElf32x86 : public PackLinuxElf32x86
|
||||
{
|
||||
typedef PackLinuxElf32x86 super;
|
||||
public:
|
||||
PackBSDElf32x86(InputFile *f);
|
||||
virtual ~PackBSDElf32x86();
|
||||
virtual int getFormat() const { return UPX_F_BSD_ELF_i386; }
|
||||
virtual const char *getName() const { return "BSD/elf386"; }
|
||||
|
||||
protected:
|
||||
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
||||
|
||||
virtual int buildLoader(const Filter *);
|
||||
};
|
||||
|
||||
/*************************************************************************
|
||||
// linux/elfarm
|
||||
**************************************************************************/
|
||||
|
||||
@ -213,6 +213,8 @@ static Packer* try_packers(InputFile *f, try_function func)
|
||||
if ((p = func(new PackLinuxElf32x86interp(f),f)) != NULL)
|
||||
return p;
|
||||
}
|
||||
if ((p = func(new PackBSDElf32x86(f),f)) != NULL)
|
||||
return p;
|
||||
if ((p = func(new PackLinuxElf32x86(f),f)) != NULL)
|
||||
return p;
|
||||
if ((p = func(new PackLinuxElf64amd(f),f)) != NULL)
|
||||
|
||||
@ -51,6 +51,8 @@ STUBS += i386-dos32.tmt.h
|
||||
STUBS += i386-dos32.watcom.le.h
|
||||
STUBS += i386-linux.elf-entry.h
|
||||
STUBS += i386-linux.elf-fold.h
|
||||
STUBS += i386-BSD.elf-entry.h
|
||||
STUBS += i386-BSD.elf-fold.h
|
||||
STUBS += i386-linux.elf.execve-entry.h
|
||||
STUBS += i386-linux.elf.execve-fold.h
|
||||
STUBS += i386-linux.elf.interp-entry.h
|
||||
@ -120,6 +122,7 @@ override T = $(basename $(notdir $@))
|
||||
# default settings for $(tc_list)
|
||||
tc.default.bin2h = python $(srcdir)/scripts/bin2h.py
|
||||
tc.default.brandelf = perl -w $(srcdir)/scripts/brandelf.pl
|
||||
tc.default.brandBSD = perl -w $(srcdir)/scripts/brandBSD.pl
|
||||
tc.default.djasm = djasm
|
||||
tc.default.gpp_inc = python $(srcdir)/scripts/gpp_inc.py
|
||||
tc.default.m-objcopy = multiarch-objcopy-2.17
|
||||
@ -345,6 +348,50 @@ i386-dos32.watcom.le.h : $(srcdir)/src/$$T.asm
|
||||
$(call tc,bin2h) --ident=nrv_loader tmp/$T.bin $@
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
# // i386-BSD.elf
|
||||
# ************************************************************************/
|
||||
|
||||
i386-BSD.elf% : tc_list = i386-BSD.elf arch-i386 default
|
||||
|
||||
tc.i386-BSD.elf.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD
|
||||
tc.i386-BSD.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
|
||||
tc.i386-BSD.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror
|
||||
tc.i386-BSD.elf.gcc += -march=i386 -mtune=k6
|
||||
tc.i386-BSD.elf.gcc += -Os -fno-omit-frame-pointer
|
||||
tc.i386-BSD.elf.gcc += -momit-leaf-frame-pointer
|
||||
tc.i386-BSD.elf.gcc += -fno-align-functions -fno-align-jumps -fno-align-labels -fno-align-loops
|
||||
tc.i386-BSD.elf.gcc += -mpreferred-stack-boundary=2
|
||||
tc.i386-BSD.elf.gcc += -fweb
|
||||
##tc.i386-BSD.elf.ld = i386-linux-ld-2.16.1
|
||||
##tc.i386-BSD.elf.objcopy = i386-linux-objcopy-2.16.1
|
||||
##tc.i386-BSD.elf.objdump = i386-linux-objdump
|
||||
tc.i386-BSD.elf.ld = $(call tc,m-ld) -b elf32-i386
|
||||
tc.i386-BSD.elf.objcopy = $(call tc,m-objcopy) -I elf32-i386
|
||||
tc.i386-BSD.elf.objdump = $(call tc,m-objdump) -b elf32-i386
|
||||
tc.i386-BSD.elf.objstrip = $(call tc,objcopy) -R .comment -R .note
|
||||
|
||||
i386-BSD.elf-entry.h : $(srcdir)/src/$$T.asm
|
||||
$(call tc,pp-nasm) $< -o tmp/$T.tmp1
|
||||
$(call tc,app-nasm) tmp/$T.tmp1 tmp/$T.tmp2
|
||||
$(call tc,nasm) -f bin -l tmp/$T.bin.lst tmp/$T.tmp2 -o tmp/$T.bin
|
||||
$(call tc,bin2h) --ident=BSD_i386elf_loader tmp/$T.bin $@
|
||||
|
||||
i386-BSD.elf-fold.h : tmp/$$T.o tmp/i386-BSD.elf-main.o $(srcdir)/src/$$T.lds
|
||||
$(call tc,ld) -T $(srcdir)/src/$T.lds -Map tmp/$T.map -o tmp/$T.bin --strip-all $(filter %.o,$^)
|
||||
$(call tc,objstrip) tmp/$T.bin
|
||||
$(call tc,sstrip) tmp/$T.bin
|
||||
$(call tc,brandBSD) tmp/$T.bin
|
||||
$(call tc,bin2h) --ident=BSD_i386elf_fold tmp/$T.bin $@
|
||||
|
||||
tmp/i386-BSD.elf-fold.o : $(srcdir)/src/$$T.asm
|
||||
$(call tc,nasm) -f elf -l $@.lst $< -o $@
|
||||
$(call tc,objstrip) $@
|
||||
|
||||
tmp/i386-BSD.elf-main.o : $(srcdir)/src/$$T.c
|
||||
$(call tc,gcc) -c $< -o $@
|
||||
$(call tc,objstrip) $@
|
||||
|
||||
# /***********************************************************************
|
||||
# // i386-linux.elf
|
||||
# ************************************************************************/
|
||||
|
||||
721
src/stub/i386-BSD.elf-entry.h
Normal file
721
src/stub/i386-BSD.elf-entry.h
Normal file
@ -0,0 +1,721 @@
|
||||
/* i386-BSD.elf-entry.h -- created from i386-BSD.elf-entry.bin, 10972 (0x2adc) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#define BSD_I386ELF_LOADER_SIZE 10972
|
||||
#define BSD_I386ELF_LOADER_ADLER32 0xf87da5ea
|
||||
#define BSD_I386ELF_LOADER_CRC32 0x5c4c2f5c
|
||||
|
||||
unsigned char BSD_i386elf_loader[10972] = {
|
||||
232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, 48, /* 0x 0 */
|
||||
131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 10 */
|
||||
117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 20 */
|
||||
114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 30 */
|
||||
17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,115, /* 0x 40 */
|
||||
0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, /* 0x 50 */
|
||||
49,201,131,232, 3,114, 13,193,224, 8,138, 6, 70,131,240,255, /* 0x 60 */
|
||||
116, 0,137,197, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 70 */
|
||||
201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, 0, /* 0x 80 */
|
||||
65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219, /* 0x 90 */
|
||||
117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0,117, /* 0x a0 */
|
||||
9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2,129, /* 0x b0 */
|
||||
253, 0,243,255,255,131,209, 1, 86,141, 52, 47,243,164, 94,233, /* 0x c0 */
|
||||
0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0,138, /* 0x d0 */
|
||||
2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2,131, /* 0x e0 */
|
||||
194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, 0, /* 0x f0 */
|
||||
0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 100 */
|
||||
117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 110 */
|
||||
114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 120 */
|
||||
17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,114, /* 0x 130 */
|
||||
0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, 0, /* 0x 140 */
|
||||
72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, 0, /* 0x 150 */
|
||||
49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240,255, /* 0x 160 */
|
||||
116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131,238, /* 0x 170 */
|
||||
252, 17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 180 */
|
||||
17,201,117, 0, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 190 */
|
||||
17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1, /* 0x 1a0 */
|
||||
219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65, /* 0x 1b0 */
|
||||
131,193, 2,129,253, 0,251,255,255,131,209, 1, 86,141, 52, 47, /* 0x 1c0 */
|
||||
243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, /* 0x 1d0 */
|
||||
15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, /* 0x 1e0 */
|
||||
0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, /* 0x 1f0 */
|
||||
1,207,233, 0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, /* 0x 200 */
|
||||
7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49, /* 0x 210 */
|
||||
192, 64,138, 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, /* 0x 220 */
|
||||
30,131,238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238, /* 0x 230 */
|
||||
252, 17,219,114, 0, 1,219,115, 11,117, 0,139, 30,131,238,252, /* 0x 240 */
|
||||
17,219,114, 0, 72, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 250 */
|
||||
17,192,235, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 260 */
|
||||
201,235, 0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70, /* 0x 270 */
|
||||
131,240,255,116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, /* 0x 280 */
|
||||
30,131,238,252, 17,219,114,204, 65, 1,219,117, 7,139, 30,131, /* 0x 290 */
|
||||
238,252, 17,219,114,190, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 2a0 */
|
||||
219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, /* 0x 2b0 */
|
||||
1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, /* 0x 2c0 */
|
||||
65,131,193, 2,129,253, 0,251,255,255,131,209, 2, 86,141, 52, /* 0x 2d0 */
|
||||
47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, /* 0x 2e0 */
|
||||
4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, /* 0x 2f0 */
|
||||
0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119, /* 0x 300 */
|
||||
241, 1,207,233, 0, 0, 0, 0,137,229,141,156, 36, 85, 80, 88, /* 0x 310 */
|
||||
97, 49,192, 80, 57,220,117,251, 70, 70, 83,104, 85, 80, 88, 98, /* 0x 320 */
|
||||
87,131,195, 4, 83,104, 85, 80, 88, 99, 86,131,195, 4, 83, 80, /* 0x 330 */
|
||||
199, 3, 85, 80, 88,100,137,229,139, 85, 44,172, 74,136,193, 36, /* 0x 340 */
|
||||
7,192,233, 3,187, 0,253,255,255,211,227,141,156, 92,136,241, /* 0x 350 */
|
||||
255,255,131,227,224,106, 0, 57,220,117,250, 83,131,195, 4,139, /* 0x 360 */
|
||||
77, 52,255, 49, 87, 83,131,195, 4,136, 67, 2,172, 74,136,193, /* 0x 370 */
|
||||
36, 15,136, 3,192,233, 4,136, 75, 1, 82, 86, 83, 80, 85, 87, /* 0x 380 */
|
||||
86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68, 36,116, /* 0x 390 */
|
||||
0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0, 0, 0, /* 0x 3a0 */
|
||||
141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182, 74, 2, /* 0x 3b0 */
|
||||
137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74, 1,211, /* 0x 3c0 */
|
||||
224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15,182, 50, /* 0x 3d0 */
|
||||
199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0, 0,199, /* 0x 3e0 */
|
||||
0, 0, 0, 0, 0,184, 0, 3, 0, 0,137,116, 36,100,199, 68, /* 0x 3f0 */
|
||||
36, 92, 1, 0, 0, 0,199, 68, 36, 88, 1, 0, 0, 0,199, 68, /* 0x 400 */
|
||||
36, 84, 1, 0, 0, 0,199, 68, 36, 80, 1, 0, 0, 0, 15,182, /* 0x 410 */
|
||||
74, 1, 1,241,211,224,141,136, 54, 7, 0, 0, 57, 76, 36,116, /* 0x 420 */
|
||||
115, 14,139, 68, 36,120,102,199, 0, 0, 4,131,192, 2,226,246, /* 0x 430 */
|
||||
139,156, 36,148, 0, 0, 0, 49,255,199, 68, 36, 72,255,255,255, /* 0x 440 */
|
||||
255,137,218, 3,148, 36,152, 0, 0, 0,137, 84, 36, 76, 49,210, /* 0x 450 */
|
||||
59, 92, 36, 76, 15,132,124, 9, 0, 0, 15,182, 3,193,231, 8, /* 0x 460 */
|
||||
66, 67, 9,199,131,250, 4,126,231,139,140, 36,164, 0, 0, 0, /* 0x 470 */
|
||||
57, 76, 36,116, 15,131,100, 9, 0, 0,139,116, 36,116, 35,116, /* 0x 480 */
|
||||
36,108,139, 68, 36, 96,139, 84, 36,120,193,224, 4,137,116, 36, /* 0x 490 */
|
||||
68, 1,240,129,124, 36, 72,255,255,255, 0,141, 44, 66,119, 24, /* 0x 4a0 */
|
||||
59, 92, 36, 76, 15,132, 44, 9, 0, 0,193,100, 36, 72, 8, 15, /* 0x 4b0 */
|
||||
182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139, 85, 0, /* 0x 4c0 */
|
||||
193,232, 11, 15,183,202, 15,175,193, 57,199, 15,131,221, 1, 0, /* 0x 4d0 */
|
||||
0,137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,138, 76, 36,100, /* 0x 4e0 */
|
||||
193,248, 5,190, 1, 0, 0, 0,141, 4, 2, 15,182, 84, 36,115, /* 0x 4f0 */
|
||||
102,137, 69, 0,139, 68, 36,116, 35, 68, 36,104,139,108, 36,120, /* 0x 500 */
|
||||
211,224,185, 8, 0, 0, 0, 43, 76, 36,100,211,250, 1,208,105, /* 0x 510 */
|
||||
192, 0, 6, 0, 0,131,124, 36, 96, 6,141,132, 5,108, 14, 0, /* 0x 520 */
|
||||
0,137, 68, 36, 20, 15,142,202, 0, 0, 0,139, 68, 36,116, 43, /* 0x 530 */
|
||||
68, 36, 92,139,148, 36,160, 0, 0, 0, 15,182, 4, 2,137, 68, /* 0x 540 */
|
||||
36, 64,209,100, 36, 64,139, 76, 36, 64,141, 20, 54,139,108, 36, /* 0x 550 */
|
||||
20,129,225, 0, 1, 0, 0,129,124, 36, 72,255,255,255, 0,141, /* 0x 560 */
|
||||
68, 77, 0,137, 76, 36, 60,141, 44, 16,119, 24, 59, 92, 36, 76, /* 0x 570 */
|
||||
15,132, 96, 8, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, /* 0x 580 */
|
||||
8, 67, 9,199,139, 68, 36, 72,102,139,141, 0, 2, 0, 0,193, /* 0x 590 */
|
||||
232, 11, 15,183,241, 15,175,198, 57,199,115, 35,137, 68, 36, 72, /* 0x 5a0 */
|
||||
184, 0, 8, 0, 0, 41,240,137,214,193,248, 5,131,124, 36, 60, /* 0x 5b0 */
|
||||
0,141, 4, 1,102,137,133, 0, 2, 0, 0,116, 34,235, 46, 41, /* 0x 5c0 */
|
||||
68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5,102, 41, /* 0x 5d0 */
|
||||
193,131,124, 36, 60, 0,102,137,141, 0, 2, 0, 0,116, 14,129, /* 0x 5e0 */
|
||||
254,255, 0, 0, 0, 15,142, 87,255,255,255,235,121,129,254,255, /* 0x 5f0 */
|
||||
0, 0, 0,127,113,141, 20, 54,139,108, 36, 20, 1,213,129,124, /* 0x 600 */
|
||||
36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132,196, 7, /* 0x 610 */
|
||||
0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199, /* 0x 620 */
|
||||
139, 68, 36, 72,102,139, 77, 0,193,232, 11, 15,183,241, 15,175, /* 0x 630 */
|
||||
198, 57,199,115, 25,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240, /* 0x 640 */
|
||||
137,214,193,248, 5,141, 4, 1,102,137, 69, 0,235,159, 41, 68, /* 0x 650 */
|
||||
36, 72, 41,199,137,200,141,114, 1,102,193,232, 5,102, 41,193, /* 0x 660 */
|
||||
102,137, 77, 0,235,135,139, 84, 36,116,137,240,139,140, 36,160, /* 0x 670 */
|
||||
0, 0, 0,136, 68, 36,115,136, 4, 10, 66,131,124, 36, 96, 3, /* 0x 680 */
|
||||
137, 84, 36,116,127, 13,199, 68, 36, 96, 0, 0, 0, 0,233, 27, /* 0x 690 */
|
||||
7, 0, 0,131,124, 36, 96, 9,127, 10,131,108, 36, 96, 3,233, /* 0x 6a0 */
|
||||
10, 7, 0, 0,131,108, 36, 96, 6,233, 0, 7, 0, 0,139, 76, /* 0x 6b0 */
|
||||
36, 72, 41,199,139,116, 36, 96, 41,193,137,208,102,193,232, 5, /* 0x 6c0 */
|
||||
102, 41,194,129,249,255,255,255, 0,102,137, 85, 0,139,108, 36, /* 0x 6d0 */
|
||||
120,141,116,117, 0,137,116, 36, 56,119, 22, 59, 92, 36, 76, 15, /* 0x 6e0 */
|
||||
132,241, 6, 0, 0, 15,182, 3,193,231, 8,193,225, 8, 67, 9, /* 0x 6f0 */
|
||||
199,139,108, 36, 56,137,200,193,232, 11,102,139,149,128, 1, 0, /* 0x 700 */
|
||||
0, 15,183,234, 15,175,197, 57,199,115, 82,137,198,184, 0, 8, /* 0x 710 */
|
||||
0, 0, 41,232,139,108, 36, 88,193,248, 5,139, 76, 36, 84,141, /* 0x 720 */
|
||||
4, 2,139, 84, 36, 56,137, 76, 36, 80,139, 76, 36,120,102,137, /* 0x 730 */
|
||||
130,128, 1, 0, 0,139, 68, 36, 92,137,108, 36, 84,137, 68, 36, /* 0x 740 */
|
||||
88, 49,192,131,124, 36, 96, 6, 15,159,192,129,193,100, 6, 0, /* 0x 750 */
|
||||
0,141, 4, 64,137, 68, 36, 96,233,116, 2, 0, 0,137,206, 41, /* 0x 760 */
|
||||
199, 41,198,137,208,102,193,232, 5,139, 76, 36, 56,102, 41,194, /* 0x 770 */
|
||||
129,254,255,255,255, 0,102,137,145,128, 1, 0, 0,119, 22, 59, /* 0x 780 */
|
||||
92, 36, 76, 15,132, 77, 6, 0, 0, 15,182, 3,193,231, 8,193, /* 0x 790 */
|
||||
230, 8, 67, 9,199,139,108, 36, 56,137,242,193,234, 11,102,139, /* 0x 7a0 */
|
||||
141,152, 1, 0, 0, 15,183,193, 15,175,208, 57,215, 15,131,227, /* 0x 7b0 */
|
||||
0, 0, 0,189, 0, 8, 0, 0,137,214, 41,197,199, 68, 36, 52, /* 0x 7c0 */
|
||||
0, 8, 0, 0,137,232,193,248, 5,141, 4, 1,139, 76, 36, 56, /* 0x 7d0 */
|
||||
102,137,129,152, 1, 0, 0,139, 68, 36, 96,139, 76, 36, 68,193, /* 0x 7e0 */
|
||||
224, 5, 3, 68, 36,120,129,250,255,255,255, 0,141, 44, 72,119, /* 0x 7f0 */
|
||||
22, 59, 92, 36, 76, 15,132,219, 5, 0, 0, 15,182, 3,193,231, /* 0x 800 */
|
||||
8,193,230, 8, 67, 9,199,102,139,149,224, 1, 0, 0,137,240, /* 0x 810 */
|
||||
193,232, 11, 15,183,202, 15,175,193, 57,199,115, 96, 41, 76, 36, /* 0x 820 */
|
||||
52,193,124, 36, 52, 5,139,116, 36, 52,137, 68, 36, 72,131,124, /* 0x 830 */
|
||||
36,116, 0,141, 4, 50,102,137,133,224, 1, 0, 0, 15,132,147, /* 0x 840 */
|
||||
5, 0, 0, 49,192,131,124, 36, 96, 6,139,172, 36,160, 0, 0, /* 0x 850 */
|
||||
0,139, 84, 36,116, 15,159,192,141, 68, 0, 9,137, 68, 36, 96, /* 0x 860 */
|
||||
139, 68, 36,116, 43, 68, 36, 92,138, 68, 5, 0,136, 68, 36,115, /* 0x 870 */
|
||||
136, 4, 42, 66,137, 84, 36,116,233, 49, 5, 0, 0, 41,198, 41, /* 0x 880 */
|
||||
199,137,208,102,193,232, 5,102, 41,194,102,137,149,224, 1, 0, /* 0x 890 */
|
||||
0,233, 31, 1, 0, 0,137,200, 41,214,102,193,232, 5,139,108, /* 0x 8a0 */
|
||||
36, 56,102, 41,193, 41,215,129,254,255,255,255, 0,102,137,141, /* 0x 8b0 */
|
||||
152, 1, 0, 0,119, 22, 59, 92, 36, 76, 15,132, 22, 5, 0, 0, /* 0x 8c0 */
|
||||
15,182, 3,193,231, 8,193,230, 8, 67, 9,199,139, 76, 36, 56, /* 0x 8d0 */
|
||||
137,240,193,232, 11,102,139,145,176, 1, 0, 0, 15,183,202, 15, /* 0x 8e0 */
|
||||
175,193, 57,199,115, 35,137,198,184, 0, 8, 0, 0, 41,200,139, /* 0x 8f0 */
|
||||
108, 36, 56,193,248, 5,141, 4, 2,102,137,133,176, 1, 0, 0, /* 0x 900 */
|
||||
139, 68, 36, 88,233,160, 0, 0, 0,137,241, 41,199, 41,193,137, /* 0x 910 */
|
||||
208,102,193,232, 5,102, 41,194,139, 68, 36, 56,129,249,255,255, /* 0x 920 */
|
||||
255, 0,102,137,144,176, 1, 0, 0,119, 22, 59, 92, 36, 76, 15, /* 0x 930 */
|
||||
132,161, 4, 0, 0, 15,182, 3,193,231, 8,193,225, 8, 67, 9, /* 0x 940 */
|
||||
199,139,116, 36, 56,137,200,193,232, 11,102,139,150,200, 1, 0, /* 0x 950 */
|
||||
0, 15,183,234, 15,175,197, 57,199,115, 32,137,198,184, 0, 8, /* 0x 960 */
|
||||
0, 0, 41,232,139,108, 36, 56,193,248, 5,141, 4, 2,102,137, /* 0x 970 */
|
||||
133,200, 1, 0, 0,139, 68, 36, 84,235, 38,137,206, 41,199, 41, /* 0x 980 */
|
||||
198,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56,102,137, /* 0x 990 */
|
||||
144,200, 1, 0, 0,139, 84, 36, 84,139, 68, 36, 80,137, 84, 36, /* 0x 9a0 */
|
||||
80,139, 76, 36, 88,137, 76, 36, 84,139,108, 36, 92,137, 68, 36, /* 0x 9b0 */
|
||||
92,137,108, 36, 88, 49,192,131,124, 36, 96, 6,139, 76, 36,120, /* 0x 9c0 */
|
||||
15,159,192,129,193,104, 10, 0, 0,141, 68, 64, 8,137, 68, 36, /* 0x 9d0 */
|
||||
96,129,254,255,255,255, 0,119, 22, 59, 92, 36, 76, 15,132,243, /* 0x 9e0 */
|
||||
3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,102, /* 0x 9f0 */
|
||||
139, 17,137,240,193,232, 11, 15,183,234, 15,175,197, 57,199,115, /* 0x a00 */
|
||||
47,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100, 36, 68, /* 0x a10 */
|
||||
4,193,248, 5,199, 68, 36, 44, 0, 0, 0, 0,141, 4, 2,102, /* 0x a20 */
|
||||
137, 1,139, 68, 36, 68,141, 76, 1, 4,137, 76, 36, 16,235,114, /* 0x a30 */
|
||||
41,198, 41,199,137,208,102,193,232, 5,102, 41,194,129,254,255, /* 0x a40 */
|
||||
255,255, 0,102,137, 17,119, 22, 59, 92, 36, 76, 15,132,132, 3, /* 0x a50 */
|
||||
0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,102,139, /* 0x a60 */
|
||||
81, 2,137,240,193,232, 11, 15,183,234, 15,175,197, 57,199,115, /* 0x a70 */
|
||||
59,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100, 36, 68, /* 0x a80 */
|
||||
4,193,248, 5,199, 68, 36, 44, 8, 0, 0, 0,141, 4, 2,139, /* 0x a90 */
|
||||
84, 36, 68,102,137, 65, 2,141,140, 17, 4, 1, 0, 0,137, 76, /* 0x aa0 */
|
||||
36, 16,199, 68, 36, 48, 3, 0, 0, 0,235, 47, 41,198, 41,199, /* 0x ab0 */
|
||||
137,208,137,116, 36, 72,102,193,232, 5,199, 68, 36, 44, 16, 0, /* 0x ac0 */
|
||||
0, 0,102, 41,194,199, 68, 36, 48, 8, 0, 0, 0,102,137, 81, /* 0x ad0 */
|
||||
2,129,193, 4, 2, 0, 0,137, 76, 36, 16,139, 76, 36, 48,186, /* 0x ae0 */
|
||||
1, 0, 0, 0,137, 76, 36, 40,141, 44, 18,139,116, 36, 16, 1, /* 0x af0 */
|
||||
238,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15, /* 0x b00 */
|
||||
132,209, 2, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, /* 0x b10 */
|
||||
67, 9,199,139, 68, 36, 72,102,139, 22,193,232, 11, 15,183,202, /* 0x b20 */
|
||||
15,175,193, 57,199,115, 24,137, 68, 36, 72,184, 0, 8, 0, 0, /* 0x b30 */
|
||||
41,200,193,248, 5,141, 4, 2,137,234,102,137, 6,235, 21, 41, /* 0x b40 */
|
||||
68, 36, 72, 41,199,137,208,102,193,232, 5,102, 41,194,102,137, /* 0x b50 */
|
||||
22,141, 85, 1,139,116, 36, 40, 78,137,116, 36, 40,117,137,138, /* 0x b60 */
|
||||
76, 36, 48,184, 1, 0, 0, 0,211,224, 41,194, 3, 84, 36, 44, /* 0x b70 */
|
||||
131,124, 36, 96, 3,137, 84, 36, 12, 15,143,231, 1, 0, 0,131, /* 0x b80 */
|
||||
68, 36, 96, 7,131,250, 3,137,208,126, 5,184, 3, 0, 0, 0, /* 0x b90 */
|
||||
139,116, 36,120,193,224, 7,199, 68, 36, 36, 6, 0, 0, 0,141, /* 0x ba0 */
|
||||
132, 6, 96, 3, 0, 0,137, 68, 36, 8,184, 1, 0, 0, 0,141, /* 0x bb0 */
|
||||
44, 0,139,116, 36, 8, 1,238,129,124, 36, 72,255,255,255, 0, /* 0x bc0 */
|
||||
119, 24, 59, 92, 36, 76, 15,132, 10, 2, 0, 0,193,100, 36, 72, /* 0x bd0 */
|
||||
8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139, /* 0x be0 */
|
||||
22,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 24,137, 68, /* 0x bf0 */
|
||||
36, 72,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4, 2,102, /* 0x c00 */
|
||||
137, 6,137,232,235, 21, 41, 68, 36, 72, 41,199,137,208,102,193, /* 0x c10 */
|
||||
232, 5,102, 41,194,141, 69, 1,102,137, 22,139,108, 36, 36, 77, /* 0x c20 */
|
||||
137,108, 36, 36,117,137,141, 80,192,131,250, 3,137, 20, 36, 15, /* 0x c30 */
|
||||
142, 39, 1, 0, 0,137,208,137,214,209,248,131,230, 1,141, 72, /* 0x c40 */
|
||||
255,131,206, 2,131,250, 13,137, 76, 36, 32,127, 28,139,108, 36, /* 0x c50 */
|
||||
120,211,230, 1,210,137, 52, 36,141, 68,117, 0, 41,208, 5, 94, /* 0x c60 */
|
||||
5, 0, 0,137, 68, 36, 4,235, 86,141, 80,251,129,124, 36, 72, /* 0x c70 */
|
||||
255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132, 86, 1, 0, 0, /* 0x c80 */
|
||||
193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,209,108, /* 0x c90 */
|
||||
36, 72, 1,246, 59,124, 36, 72,114, 7, 43,124, 36, 72,131,206, /* 0x ca0 */
|
||||
1, 74,117,200,139, 68, 36,120,193,230, 4,137, 52, 36, 5, 68, /* 0x cb0 */
|
||||
6, 0, 0,199, 68, 36, 32, 4, 0, 0, 0,137, 68, 36, 4,199, /* 0x cc0 */
|
||||
68, 36, 28, 1, 0, 0, 0,184, 1, 0, 0, 0,139,108, 36, 4, /* 0x cd0 */
|
||||
1,192,137, 68, 36, 24, 1,197,129,124, 36, 72,255,255,255, 0, /* 0x ce0 */
|
||||
119, 24, 59, 92, 36, 76, 15,132,234, 0, 0, 0,193,100, 36, 72, /* 0x cf0 */
|
||||
8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139, /* 0x d00 */
|
||||
85, 0,193,232, 11, 15,183,242, 15,175,198, 57,199,115, 27,137, /* 0x d10 */
|
||||
68, 36, 72,184, 0, 8, 0, 0, 41,240,193,248, 5,141, 4, 2, /* 0x d20 */
|
||||
102,137, 69, 0,139, 68, 36, 24,235, 31, 41, 68, 36, 72, 41,199, /* 0x d30 */
|
||||
137,208,102,193,232, 5,102, 41,194,139, 68, 36, 24,102,137, 85, /* 0x d40 */
|
||||
0,139, 84, 36, 28, 64, 9, 20, 36,139, 76, 36, 32,209,100, 36, /* 0x d50 */
|
||||
28, 73,137, 76, 36, 32, 15,133,112,255,255,255,139, 52, 36, 70, /* 0x d60 */
|
||||
137,116, 36, 92,116, 89,139, 76, 36, 12,139,108, 36,116,131,193, /* 0x d70 */
|
||||
2, 57,108, 36, 92,119, 95,139,132, 36,160, 0, 0, 0,137,234, /* 0x d80 */
|
||||
43, 68, 36, 92, 3,148, 36,160, 0, 0, 0,141, 52, 40,138, 6, /* 0x d90 */
|
||||
70,136, 68, 36,115,136, 2, 66,255, 68, 36,116, 73,116, 15,139, /* 0x da0 */
|
||||
172, 36,164, 0, 0, 0, 57,108, 36,116,114,226,235, 17,139,132, /* 0x db0 */
|
||||
36,164, 0, 0, 0, 57, 68, 36,116, 15,130,187,246,255,255,129, /* 0x dc0 */
|
||||
124, 36, 72,255,255,255, 0,119, 21, 59, 92, 36, 76,184, 1, 0, /* 0x dd0 */
|
||||
0, 0,116, 41,235, 7,184, 1, 0, 0, 0,235, 32, 67, 43,156, /* 0x de0 */
|
||||
36,148, 0, 0, 0, 49,192,139,148, 36,156, 0, 0, 0,139, 76, /* 0x df0 */
|
||||
36,116,137, 26,139,156, 36,168, 0, 0, 0,137, 11,131,196,124, /* 0x e00 */
|
||||
91, 94, 95, 93, 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, /* 0x e10 */
|
||||
0, 0,199, 68, 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139, /* 0x e20 */
|
||||
172, 36,156, 0, 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, /* 0x e30 */
|
||||
0, 0, 15,182, 74, 2,137,195,211,227,137,217, 73,137, 76, 36, /* 0x e40 */
|
||||
108, 15,182, 74, 1,211,224, 72,137, 68, 36,104,139,132, 36,168, /* 0x e50 */
|
||||
0, 0, 0, 15,182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, /* 0x e60 */
|
||||
96, 0, 0, 0, 0,199, 0, 0, 0, 0, 0,184, 0, 3, 0, 0, /* 0x e70 */
|
||||
137,116, 36,100,199, 68, 36, 92, 1, 0, 0, 0,199, 68, 36, 88, /* 0x e80 */
|
||||
1, 0, 0, 0,199, 68, 36, 84, 1, 0, 0, 0,199, 68, 36, 80, /* 0x e90 */
|
||||
1, 0, 0, 0, 15,182, 74, 1, 1,241,211,224,141,136, 54, 7, /* 0x ea0 */
|
||||
0, 0, 57, 76, 36,116,115, 14,139, 68, 36,120,102,199, 0, 0, /* 0x eb0 */
|
||||
4,131,192, 2,226,246,139,156, 36,148, 0, 0, 0, 49,255,199, /* 0x ec0 */
|
||||
68, 36, 72,255,255,255,255,137,218, 3,148, 36,152, 0, 0, 0, /* 0x ed0 */
|
||||
137, 84, 36, 76, 49,210, 59, 92, 36, 76, 15,132,124, 9, 0, 0, /* 0x ee0 */
|
||||
15,182, 3,193,231, 8, 66, 67, 9,199,131,250, 4,126,231,139, /* 0x ef0 */
|
||||
140, 36,164, 0, 0, 0, 57, 76, 36,116, 15,131,100, 9, 0, 0, /* 0x f00 */
|
||||
139,116, 36,116, 35,116, 36,108,139, 68, 36, 96,139, 84, 36,120, /* 0x f10 */
|
||||
193,224, 4,137,116, 36, 68, 1,240,129,124, 36, 72,255,255,255, /* 0x f20 */
|
||||
0,141, 44, 66,119, 24, 59, 92, 36, 76, 15,132, 44, 9, 0, 0, /* 0x f30 */
|
||||
193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, /* 0x f40 */
|
||||
36, 72,102,139, 85, 0,193,232, 11, 15,183,202, 15,175,193, 57, /* 0x f50 */
|
||||
199, 15,131,221, 1, 0, 0,137, 68, 36, 72,184, 0, 8, 0, 0, /* 0x f60 */
|
||||
41,200,138, 76, 36,100,193,248, 5,190, 1, 0, 0, 0,141, 4, /* 0x f70 */
|
||||
2, 15,182, 84, 36,115,102,137, 69, 0,139, 68, 36,116, 35, 68, /* 0x f80 */
|
||||
36,104,139,108, 36,120,211,224,185, 8, 0, 0, 0, 43, 76, 36, /* 0x f90 */
|
||||
100,211,250, 1,208,105,192, 0, 6, 0, 0,131,124, 36, 96, 6, /* 0x fa0 */
|
||||
141,132, 5,108, 14, 0, 0,137, 68, 36, 20, 15,142,202, 0, 0, /* 0x fb0 */
|
||||
0,139, 68, 36,116, 43, 68, 36, 92,139,148, 36,160, 0, 0, 0, /* 0x fc0 */
|
||||
15,182, 4, 2,137, 68, 36, 64,209,100, 36, 64,139, 76, 36, 64, /* 0x fd0 */
|
||||
141, 20, 54,139,108, 36, 20,129,225, 0, 1, 0, 0,129,124, 36, /* 0x fe0 */
|
||||
72,255,255,255, 0,141, 68, 77, 0,137, 76, 36, 60,141, 44, 16, /* 0x ff0 */
|
||||
119, 24, 59, 92, 36, 76, 15,132, 96, 8, 0, 0,193,100, 36, 72, /* 0x1000 */
|
||||
8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139, /* 0x1010 */
|
||||
141, 0, 2, 0, 0,193,232, 11, 15,183,241, 15,175,198, 57,199, /* 0x1020 */
|
||||
115, 35,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240,137,214,193, /* 0x1030 */
|
||||
248, 5,131,124, 36, 60, 0,141, 4, 1,102,137,133, 0, 2, 0, /* 0x1040 */
|
||||
0,116, 34,235, 46, 41, 68, 36, 72, 41,199,137,200,141,114, 1, /* 0x1050 */
|
||||
102,193,232, 5,102, 41,193,131,124, 36, 60, 0,102,137,141, 0, /* 0x1060 */
|
||||
2, 0, 0,116, 14,129,254,255, 0, 0, 0, 15,142, 87,255,255, /* 0x1070 */
|
||||
255,235,121,129,254,255, 0, 0, 0,127,113,141, 20, 54,139,108, /* 0x1080 */
|
||||
36, 20, 1,213,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, /* 0x1090 */
|
||||
36, 76, 15,132,196, 7, 0, 0,193,100, 36, 72, 8, 15,182, 3, /* 0x10a0 */
|
||||
193,231, 8, 67, 9,199,139, 68, 36, 72,102,139, 77, 0,193,232, /* 0x10b0 */
|
||||
11, 15,183,241, 15,175,198, 57,199,115, 25,137, 68, 36, 72,184, /* 0x10c0 */
|
||||
0, 8, 0, 0, 41,240,137,214,193,248, 5,141, 4, 1,102,137, /* 0x10d0 */
|
||||
69, 0,235,159, 41, 68, 36, 72, 41,199,137,200,141,114, 1,102, /* 0x10e0 */
|
||||
193,232, 5,102, 41,193,102,137, 77, 0,235,135,139, 84, 36,116, /* 0x10f0 */
|
||||
137,240,139,140, 36,160, 0, 0, 0,136, 68, 36,115,136, 4, 10, /* 0x1100 */
|
||||
66,131,124, 36, 96, 3,137, 84, 36,116,127, 13,199, 68, 36, 96, /* 0x1110 */
|
||||
0, 0, 0, 0,233, 27, 7, 0, 0,131,124, 36, 96, 9,127, 10, /* 0x1120 */
|
||||
131,108, 36, 96, 3,233, 10, 7, 0, 0,131,108, 36, 96, 6,233, /* 0x1130 */
|
||||
0, 7, 0, 0,139, 76, 36, 72, 41,199,139,116, 36, 96, 41,193, /* 0x1140 */
|
||||
137,208,102,193,232, 5,102, 41,194,129,249,255,255,255, 0,102, /* 0x1150 */
|
||||
137, 85, 0,139,108, 36,120,141,116,117, 0,137,116, 36, 56,119, /* 0x1160 */
|
||||
22, 59, 92, 36, 76, 15,132,241, 6, 0, 0, 15,182, 3,193,231, /* 0x1170 */
|
||||
8,193,225, 8, 67, 9,199,139,108, 36, 56,137,200,193,232, 11, /* 0x1180 */
|
||||
102,139,149,128, 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, /* 0x1190 */
|
||||
82,137,198,184, 0, 8, 0, 0, 41,232,139,108, 36, 88,193,248, /* 0x11a0 */
|
||||
5,139, 76, 36, 84,141, 4, 2,139, 84, 36, 56,137, 76, 36, 80, /* 0x11b0 */
|
||||
139, 76, 36,120,102,137,130,128, 1, 0, 0,139, 68, 36, 92,137, /* 0x11c0 */
|
||||
108, 36, 84,137, 68, 36, 88, 49,192,131,124, 36, 96, 6, 15,159, /* 0x11d0 */
|
||||
192,129,193,100, 6, 0, 0,141, 4, 64,137, 68, 36, 96,233,116, /* 0x11e0 */
|
||||
2, 0, 0,137,206, 41,199, 41,198,137,208,102,193,232, 5,139, /* 0x11f0 */
|
||||
76, 36, 56,102, 41,194,129,254,255,255,255, 0,102,137,145,128, /* 0x1200 */
|
||||
1, 0, 0,119, 22, 59, 92, 36, 76, 15,132, 77, 6, 0, 0, 15, /* 0x1210 */
|
||||
182, 3,193,231, 8,193,230, 8, 67, 9,199,139,108, 36, 56,137, /* 0x1220 */
|
||||
242,193,234, 11,102,139,141,152, 1, 0, 0, 15,183,193, 15,175, /* 0x1230 */
|
||||
208, 57,215, 15,131,227, 0, 0, 0,189, 0, 8, 0, 0,137,214, /* 0x1240 */
|
||||
41,197,199, 68, 36, 52, 0, 8, 0, 0,137,232,193,248, 5,141, /* 0x1250 */
|
||||
4, 1,139, 76, 36, 56,102,137,129,152, 1, 0, 0,139, 68, 36, /* 0x1260 */
|
||||
96,139, 76, 36, 68,193,224, 5, 3, 68, 36,120,129,250,255,255, /* 0x1270 */
|
||||
255, 0,141, 44, 72,119, 22, 59, 92, 36, 76, 15,132,219, 5, 0, /* 0x1280 */
|
||||
0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,102,139,149, /* 0x1290 */
|
||||
224, 1, 0, 0,137,240,193,232, 11, 15,183,202, 15,175,193, 57, /* 0x12a0 */
|
||||
199,115, 96, 41, 76, 36, 52,193,124, 36, 52, 5,139,116, 36, 52, /* 0x12b0 */
|
||||
137, 68, 36, 72,131,124, 36,116, 0,141, 4, 50,102,137,133,224, /* 0x12c0 */
|
||||
1, 0, 0, 15,132,147, 5, 0, 0, 49,192,131,124, 36, 96, 6, /* 0x12d0 */
|
||||
139,172, 36,160, 0, 0, 0,139, 84, 36,116, 15,159,192,141, 68, /* 0x12e0 */
|
||||
0, 9,137, 68, 36, 96,139, 68, 36,116, 43, 68, 36, 92,138, 68, /* 0x12f0 */
|
||||
5, 0,136, 68, 36,115,136, 4, 42, 66,137, 84, 36,116,233, 49, /* 0x1300 */
|
||||
5, 0, 0, 41,198, 41,199,137,208,102,193,232, 5,102, 41,194, /* 0x1310 */
|
||||
102,137,149,224, 1, 0, 0,233, 31, 1, 0, 0,137,200, 41,214, /* 0x1320 */
|
||||
102,193,232, 5,139,108, 36, 56,102, 41,193, 41,215,129,254,255, /* 0x1330 */
|
||||
255,255, 0,102,137,141,152, 1, 0, 0,119, 22, 59, 92, 36, 76, /* 0x1340 */
|
||||
15,132, 22, 5, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, /* 0x1350 */
|
||||
9,199,139, 76, 36, 56,137,240,193,232, 11,102,139,145,176, 1, /* 0x1360 */
|
||||
0, 0, 15,183,202, 15,175,193, 57,199,115, 35,137,198,184, 0, /* 0x1370 */
|
||||
8, 0, 0, 41,200,139,108, 36, 56,193,248, 5,141, 4, 2,102, /* 0x1380 */
|
||||
137,133,176, 1, 0, 0,139, 68, 36, 88,233,160, 0, 0, 0,137, /* 0x1390 */
|
||||
241, 41,199, 41,193,137,208,102,193,232, 5,102, 41,194,139, 68, /* 0x13a0 */
|
||||
36, 56,129,249,255,255,255, 0,102,137,144,176, 1, 0, 0,119, /* 0x13b0 */
|
||||
22, 59, 92, 36, 76, 15,132,161, 4, 0, 0, 15,182, 3,193,231, /* 0x13c0 */
|
||||
8,193,225, 8, 67, 9,199,139,116, 36, 56,137,200,193,232, 11, /* 0x13d0 */
|
||||
102,139,150,200, 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, /* 0x13e0 */
|
||||
32,137,198,184, 0, 8, 0, 0, 41,232,139,108, 36, 56,193,248, /* 0x13f0 */
|
||||
5,141, 4, 2,102,137,133,200, 1, 0, 0,139, 68, 36, 84,235, /* 0x1400 */
|
||||
38,137,206, 41,199, 41,198,137,208,102,193,232, 5,102, 41,194, /* 0x1410 */
|
||||
139, 68, 36, 56,102,137,144,200, 1, 0, 0,139, 84, 36, 84,139, /* 0x1420 */
|
||||
68, 36, 80,137, 84, 36, 80,139, 76, 36, 88,137, 76, 36, 84,139, /* 0x1430 */
|
||||
108, 36, 92,137, 68, 36, 92,137,108, 36, 88, 49,192,131,124, 36, /* 0x1440 */
|
||||
96, 6,139, 76, 36,120, 15,159,192,129,193,104, 10, 0, 0,141, /* 0x1450 */
|
||||
68, 64, 8,137, 68, 36, 96,129,254,255,255,255, 0,119, 22, 59, /* 0x1460 */
|
||||
92, 36, 76, 15,132,243, 3, 0, 0, 15,182, 3,193,231, 8,193, /* 0x1470 */
|
||||
230, 8, 67, 9,199,102,139, 17,137,240,193,232, 11, 15,183,234, /* 0x1480 */
|
||||
15,175,197, 57,199,115, 47,137, 68, 36, 72,184, 0, 8, 0, 0, /* 0x1490 */
|
||||
41,232,193,100, 36, 68, 4,193,248, 5,199, 68, 36, 44, 0, 0, /* 0x14a0 */
|
||||
0, 0,141, 4, 2,102,137, 1,139, 68, 36, 68,141, 76, 1, 4, /* 0x14b0 */
|
||||
137, 76, 36, 16,235,114, 41,198, 41,199,137,208,102,193,232, 5, /* 0x14c0 */
|
||||
102, 41,194,129,254,255,255,255, 0,102,137, 17,119, 22, 59, 92, /* 0x14d0 */
|
||||
36, 76, 15,132,132, 3, 0, 0, 15,182, 3,193,231, 8,193,230, /* 0x14e0 */
|
||||
8, 67, 9,199,102,139, 81, 2,137,240,193,232, 11, 15,183,234, /* 0x14f0 */
|
||||
15,175,197, 57,199,115, 59,137, 68, 36, 72,184, 0, 8, 0, 0, /* 0x1500 */
|
||||
41,232,193,100, 36, 68, 4,193,248, 5,199, 68, 36, 44, 8, 0, /* 0x1510 */
|
||||
0, 0,141, 4, 2,139, 84, 36, 68,102,137, 65, 2,141,140, 17, /* 0x1520 */
|
||||
4, 1, 0, 0,137, 76, 36, 16,199, 68, 36, 48, 3, 0, 0, 0, /* 0x1530 */
|
||||
235, 47, 41,198, 41,199,137,208,137,116, 36, 72,102,193,232, 5, /* 0x1540 */
|
||||
199, 68, 36, 44, 16, 0, 0, 0,102, 41,194,199, 68, 36, 48, 8, /* 0x1550 */
|
||||
0, 0, 0,102,137, 81, 2,129,193, 4, 2, 0, 0,137, 76, 36, /* 0x1560 */
|
||||
16,139, 76, 36, 48,186, 1, 0, 0, 0,137, 76, 36, 40,141, 44, /* 0x1570 */
|
||||
18,139,116, 36, 16, 1,238,129,124, 36, 72,255,255,255, 0,119, /* 0x1580 */
|
||||
24, 59, 92, 36, 76, 15,132,209, 2, 0, 0,193,100, 36, 72, 8, /* 0x1590 */
|
||||
15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139, 22, /* 0x15a0 */
|
||||
193,232, 11, 15,183,202, 15,175,193, 57,199,115, 24,137, 68, 36, /* 0x15b0 */
|
||||
72,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4, 2,137,234, /* 0x15c0 */
|
||||
102,137, 6,235, 21, 41, 68, 36, 72, 41,199,137,208,102,193,232, /* 0x15d0 */
|
||||
5,102, 41,194,102,137, 22,141, 85, 1,139,116, 36, 40, 78,137, /* 0x15e0 */
|
||||
116, 36, 40,117,137,138, 76, 36, 48,184, 1, 0, 0, 0,211,224, /* 0x15f0 */
|
||||
41,194, 3, 84, 36, 44,131,124, 36, 96, 3,137, 84, 36, 12, 15, /* 0x1600 */
|
||||
143,231, 1, 0, 0,131, 68, 36, 96, 7,131,250, 3,137,208,126, /* 0x1610 */
|
||||
5,184, 3, 0, 0, 0,139,116, 36,120,193,224, 7,199, 68, 36, /* 0x1620 */
|
||||
36, 6, 0, 0, 0,141,132, 6, 96, 3, 0, 0,137, 68, 36, 8, /* 0x1630 */
|
||||
184, 1, 0, 0, 0,141, 44, 0,139,116, 36, 8, 1,238,129,124, /* 0x1640 */
|
||||
36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132, 10, 2, /* 0x1650 */
|
||||
0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199, /* 0x1660 */
|
||||
139, 68, 36, 72,102,139, 22,193,232, 11, 15,183,202, 15,175,193, /* 0x1670 */
|
||||
57,199,115, 24,137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,193, /* 0x1680 */
|
||||
248, 5,141, 4, 2,102,137, 6,137,232,235, 21, 41, 68, 36, 72, /* 0x1690 */
|
||||
41,199,137,208,102,193,232, 5,102, 41,194,141, 69, 1,102,137, /* 0x16a0 */
|
||||
22,139,108, 36, 36, 77,137,108, 36, 36,117,137,141, 80,192,131, /* 0x16b0 */
|
||||
250, 3,137, 20, 36, 15,142, 39, 1, 0, 0,137,208,137,214,209, /* 0x16c0 */
|
||||
248,131,230, 1,141, 72,255,131,206, 2,131,250, 13,137, 76, 36, /* 0x16d0 */
|
||||
32,127, 28,139,108, 36,120,211,230, 1,210,137, 52, 36,141, 68, /* 0x16e0 */
|
||||
117, 0, 41,208, 5, 94, 5, 0, 0,137, 68, 36, 4,235, 86,141, /* 0x16f0 */
|
||||
80,251,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, /* 0x1700 */
|
||||
15,132, 86, 1, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, /* 0x1710 */
|
||||
8, 67, 9,199,209,108, 36, 72, 1,246, 59,124, 36, 72,114, 7, /* 0x1720 */
|
||||
43,124, 36, 72,131,206, 1, 74,117,200,139, 68, 36,120,193,230, /* 0x1730 */
|
||||
4,137, 52, 36, 5, 68, 6, 0, 0,199, 68, 36, 32, 4, 0, 0, /* 0x1740 */
|
||||
0,137, 68, 36, 4,199, 68, 36, 28, 1, 0, 0, 0,184, 1, 0, /* 0x1750 */
|
||||
0, 0,139,108, 36, 4, 1,192,137, 68, 36, 24, 1,197,129,124, /* 0x1760 */
|
||||
36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132,234, 0, /* 0x1770 */
|
||||
0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199, /* 0x1780 */
|
||||
139, 68, 36, 72,102,139, 85, 0,193,232, 11, 15,183,242, 15,175, /* 0x1790 */
|
||||
198, 57,199,115, 27,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240, /* 0x17a0 */
|
||||
193,248, 5,141, 4, 2,102,137, 69, 0,139, 68, 36, 24,235, 31, /* 0x17b0 */
|
||||
41, 68, 36, 72, 41,199,137,208,102,193,232, 5,102, 41,194,139, /* 0x17c0 */
|
||||
68, 36, 24,102,137, 85, 0,139, 84, 36, 28, 64, 9, 20, 36,139, /* 0x17d0 */
|
||||
76, 36, 32,209,100, 36, 28, 73,137, 76, 36, 32, 15,133,112,255, /* 0x17e0 */
|
||||
255,255,139, 52, 36, 70,137,116, 36, 92,116, 89,139, 76, 36, 12, /* 0x17f0 */
|
||||
139,108, 36,116,131,193, 2, 57,108, 36, 92,119, 95,139,132, 36, /* 0x1800 */
|
||||
160, 0, 0, 0,137,234, 43, 68, 36, 92, 3,148, 36,160, 0, 0, /* 0x1810 */
|
||||
0,141, 52, 40,138, 6, 70,136, 68, 36,115,136, 2, 66,255, 68, /* 0x1820 */
|
||||
36,116, 73,116, 15,139,172, 36,164, 0, 0, 0, 57,108, 36,116, /* 0x1830 */
|
||||
114,226,235, 17,139,132, 36,164, 0, 0, 0, 57, 68, 36,116, 15, /* 0x1840 */
|
||||
130,187,246,255,255,129,124, 36, 72,255,255,255, 0,119, 21, 59, /* 0x1850 */
|
||||
92, 36, 76,184, 1, 0, 0, 0,116, 41,235, 7,184, 1, 0, 0, /* 0x1860 */
|
||||
0,235, 32, 67, 43,156, 36,148, 0, 0, 0, 49,192,139,148, 36, /* 0x1870 */
|
||||
156, 0, 0, 0,139, 76, 36,116,137, 26,139,156, 36,168, 0, 0, /* 0x1880 */
|
||||
0,137, 11,131,196,124, 91, 94, 95, 93, 3,115,252, 3,123,248, /* 0x1890 */
|
||||
49,192,141,140, 36, 0,255,255,255,137,236, 80, 57,204,117,251, /* 0x18a0 */
|
||||
137,236, 49,201,185, 84, 69, 88, 76,138, 7, 71, 44,232, 60, 1, /* 0x18b0 */
|
||||
119,247,128, 63, 63,117, 0,139, 7,138, 95, 4,102,193,232, 8, /* 0x18c0 */
|
||||
134,196,193,192, 16,134,196, 41,248,128,235,232,137, 7,131,199, /* 0x18d0 */
|
||||
5,136,216,226, 0,185, 84, 69, 88, 76,176,232,176,233,242,174, /* 0x18e0 */
|
||||
117, 0,128, 63, 63,117, 0,139, 7,102,193,232, 8,134,196,193, /* 0x18f0 */
|
||||
192, 16,134,196, 41,248,171,235, 0,139, 84, 36, 40, 3, 84, 36, /* 0x1900 */
|
||||
44, 57,214,116, 1, 72, 43,124, 36, 48,139, 84, 36, 52,137, 58, /* 0x1910 */
|
||||
90,137, 68, 36, 28, 97,195,235, 0, 90, 88, 89,151, 96, 49,219, /* 0x1920 */
|
||||
187, 78, 77, 82, 85,106, 15, 88,138,100, 36, 32,106, 15, 91,138, /* 0x1930 */
|
||||
124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, 0, 15,183, 47, 43, /* 0x1940 */
|
||||
110, 12, 41,221,117, 0,131,237, 1,115, 0,136, 95,255, 73,136, /* 0x1950 */
|
||||
7, 71,139, 7,156,102,193,232, 8,193,192, 16,134,196,157,115, /* 0x1960 */
|
||||
0,176, 0, 15,200,115, 0,209,232,115, 0,254,203, 75, 35, 30, /* 0x1970 */
|
||||
125, 2, 3, 30,137, 4,156,235, 0,141, 20, 24, 15,182,210, 35, /* 0x1980 */
|
||||
22, 59, 22,114, 2, 43, 22,139, 4,148,254,203, 75, 35, 30,125, /* 0x1990 */
|
||||
2, 3, 30,139, 44,156,133,237,117, 0, 80,139, 70, 4,254,200, /* 0x19a0 */
|
||||
72, 35, 6,125, 2, 3, 6, 49,237,137, 70, 4,135,108,132, 4, /* 0x19b0 */
|
||||
88,137, 44,148,137, 4,156, 41,248,131,233, 4, 3, 70, 16, 1, /* 0x19c0 */
|
||||
240,137, 7,131,199, 4,235, 0,235, 0, 80,176,233,176,232, 80, /* 0x19d0 */
|
||||
106, 0, 83,137,230, 94,137,218,178,233,178,232, 67,106, 0,254, /* 0x19e0 */
|
||||
203, 75,117, 0, 15,183, 7,131,199, 1, 60,128,114, 4, 60,143, /* 0x19f0 */
|
||||
118, 0, 41,208, 43, 70, 8,131,232, 2,116, 0,131,232, 1,114, /* 0x1a00 */
|
||||
0,115, 0,122, 0,123, 0,248,235, 0,131,233, 1,127, 0,137, /* 0x1a10 */
|
||||
231,185, 4, 1, 0, 0,139, 14,131,193, 5,139, 14,131,193, 4, /* 0x1a20 */
|
||||
49,192,243,171,137,252, 86, 97,151, 81, 80, 82,195,137,254,235, /* 0x1a30 */
|
||||
0,138, 7,131,199, 1, 60,128,114, 10, 60,143,119, 6,128,127, /* 0x1a40 */
|
||||
254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23,117, 0,139, 7, /* 0x1a50 */
|
||||
102,193,232, 8,193,192, 16,134,196, 41,248, 1,240,137, 7,131, /* 0x1a60 */
|
||||
199, 4,131,233, 4,138, 7,131,199, 1,226, 0,131,233, 1,127, /* 0x1a70 */
|
||||
0, 97,195,106, 29,232, 29, 0, 0, 0, 80, 82, 79, 84, 95, 69, /* 0x1a80 */
|
||||
88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, 32,102, /* 0x1a90 */
|
||||
97,105,108,101,100, 46, 10,106, 2, 80,106, 4, 88,205,128,106, /* 0x1aa0 */
|
||||
127, 80,106, 1, 88,205,128, 94,141, 69,247, 43, 0,137,194, 3, /* 0x1ab0 */
|
||||
64, 72, 5,255, 15, 0, 0, 37, 0,240,255,255, 80, 49,201, 81, /* 0x1ac0 */
|
||||
106,255,104, 18, 16, 0, 0,181, 16,106, 7, 81, 80, 49,192, 80, /* 0x1ad0 */
|
||||
176,197, 80, 80,176,198,205,128,114,153,146,147,252,173, 80,137, /* 0x1ae0 */
|
||||
225, 80, 81, 82,173, 80,173,137, 68, 36, 12, 86,255,213,131,196, /* 0x1af0 */
|
||||
60,195, 93,232,175,255,255,255, 76, 69, 88, 69, 67, 48, 48, 48, /* 0x1b00 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 76, 69, 88, /* 0x1b10 */
|
||||
69, 67, 48, 50, 48, 0,127, 0, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x1b20 */
|
||||
48, 57, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 48, 0, /* 0x1b30 */
|
||||
5, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 19, 0, 0, /* 0x1b40 */
|
||||
0, 0, 0, 0, 0, 21, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x1b50 */
|
||||
48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 22, /* 0x1b60 */
|
||||
0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x1b70 */
|
||||
67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, /* 0x1b80 */
|
||||
0, 24, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 30, 0, /* 0x1b90 */
|
||||
0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 41, 0, 0, 0, 0, /* 0x1ba0 */
|
||||
0, 0, 0, 43, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, /* 0x1bb0 */
|
||||
2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, 0, 46, 0, 0, /* 0x1bc0 */
|
||||
0, 0, 0, 0, 0, 50, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, /* 0x1bd0 */
|
||||
49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 55, /* 0x1be0 */
|
||||
0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, 68, 0, 0, 0, /* 0x1bf0 */
|
||||
0, 0, 0, 0, 81, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, /* 0x1c00 */
|
||||
0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, 48, 0, 81, 0, /* 0x1c10 */
|
||||
0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x1c20 */
|
||||
50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 78, /* 0x1c30 */
|
||||
50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, /* 0x1c40 */
|
||||
69, 67, 51, 48, 0, 96, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, /* 0x1c50 */
|
||||
0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x1c60 */
|
||||
0, 0,144, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, /* 0x1c70 */
|
||||
0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0,158, 0, 0, 0, /* 0x1c80 */
|
||||
0, 0, 0, 0,171, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x1c90 */
|
||||
0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, 48, 0,171, 0, /* 0x1ca0 */
|
||||
0, 0, 0, 0, 0, 0,175, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x1cb0 */
|
||||
51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,186, 0, 0, 0, 78, /* 0x1cc0 */
|
||||
50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, /* 0x1cd0 */
|
||||
85, 77, 77, 49, 0,186, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, /* 0x1ce0 */
|
||||
48, 0,186, 0, 0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,188, /* 0x1cf0 */
|
||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0,191, 0, 0, 0, /* 0x1d00 */
|
||||
78, 50, 66, 83, 77, 65, 54, 48, 0,200, 0, 0, 0, 0, 0, 0, /* 0x1d10 */
|
||||
0,212, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x1d20 */
|
||||
0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,212, 0, 0, 0, 0, /* 0x1d30 */
|
||||
0, 0, 0,223, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, /* 0x1d40 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,237, 0, 0, 0, 78, 50, 66, 68, /* 0x1d50 */
|
||||
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x1d60 */
|
||||
49, 0,237, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 78, 50, /* 0x1d70 */
|
||||
66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x1d80 */
|
||||
67, 54, 48, 0, 3, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, /* 0x1d90 */
|
||||
0, 3, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 3, 1, /* 0x1da0 */
|
||||
0, 0, 0, 0, 0, 0, 5, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x1db0 */
|
||||
49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, /* 0x1dc0 */
|
||||
6, 1, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 78, 50, 68, 68, /* 0x1dd0 */
|
||||
69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, /* 0x1de0 */
|
||||
49, 0, 8, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 14, /* 0x1df0 */
|
||||
1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, 25, 1, 0, 0, /* 0x1e00 */
|
||||
0, 0, 0, 0, 27, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, /* 0x1e10 */
|
||||
0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 30, 1, /* 0x1e20 */
|
||||
0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x1e30 */
|
||||
49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, /* 0x1e40 */
|
||||
39, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, 0, 52, 1, 0, /* 0x1e50 */
|
||||
0, 0, 0, 0, 0, 65, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x1e60 */
|
||||
48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 65, /* 0x1e70 */
|
||||
1, 0, 0, 0, 0, 0, 0, 71, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x1e80 */
|
||||
67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, 80, 1, 0, 0, /* 0x1e90 */
|
||||
78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x1ea0 */
|
||||
68, 69, 67, 51, 48, 0, 80, 1, 0, 0, 0, 0, 0, 0, 96, 1, /* 0x1eb0 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x1ec0 */
|
||||
0, 0, 0,114, 1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, /* 0x1ed0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,148, 1, 0, 0, 78, 50, 68, 68, /* 0x1ee0 */
|
||||
69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, /* 0x1ef0 */
|
||||
48, 0,162, 1, 0, 0, 0, 0, 0, 0,175, 1, 0, 0, 78, 50, /* 0x1f00 */
|
||||
68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x1f10 */
|
||||
83, 52, 48, 0,175, 1, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, /* 0x1f20 */
|
||||
78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, /* 0x1f30 */
|
||||
0,190, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x1f40 */
|
||||
0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,190, 1, 0, 0, 78, /* 0x1f50 */
|
||||
50, 68, 83, 77, 65, 53, 48, 0,190, 1, 0, 0, 78, 50, 68, 70, /* 0x1f60 */
|
||||
65, 83, 53, 48, 0,192, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, /* 0x1f70 */
|
||||
48, 0,195, 1, 0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,204, /* 0x1f80 */
|
||||
1, 0, 0, 0, 0, 0, 0,216, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x1f90 */
|
||||
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, /* 0x1fa0 */
|
||||
0,216, 1, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 78, 50, 68, /* 0x1fb0 */
|
||||
70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 1, /* 0x1fc0 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x1fd0 */
|
||||
50, 68, 70, 65, 83, 54, 49, 0,241, 1, 0, 0, 0, 0, 0, 0, /* 0x1fe0 */
|
||||
7, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x1ff0 */
|
||||
0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 7, 2, 0, 0, 78, 82, /* 0x2000 */
|
||||
86, 50, 68, 69, 78, 68, 0, 7, 2, 0, 0, 78, 50, 69, 83, 77, /* 0x2010 */
|
||||
65, 49, 48, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 2, 0, 0, /* 0x2020 */
|
||||
78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, /* 0x2030 */
|
||||
70, 65, 83, 49, 48, 0, 10, 2, 0, 0, 0, 0, 0, 0, 12, 2, /* 0x2040 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x2050 */
|
||||
50, 69, 70, 65, 83, 49, 49, 0, 12, 2, 0, 0, 78, 50, 69, 68, /* 0x2060 */
|
||||
69, 67, 49, 48, 0, 18, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, /* 0x2070 */
|
||||
48, 0, 29, 2, 0, 0, 0, 0, 0, 0, 31, 2, 0, 0, 78, 50, /* 0x2080 */
|
||||
69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x2090 */
|
||||
83, 50, 48, 0, 34, 2, 0, 0, 0, 0, 0, 0, 38, 2, 0, 0, /* 0x20a0 */
|
||||
78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x20b0 */
|
||||
68, 69, 67, 50, 48, 0, 43, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x20c0 */
|
||||
51, 48, 0, 56, 2, 0, 0, 0, 0, 0, 0, 69, 2, 0, 0, 78, /* 0x20d0 */
|
||||
50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, /* 0x20e0 */
|
||||
65, 83, 51, 48, 0, 69, 2, 0, 0, 0, 0, 0, 0, 75, 2, 0, /* 0x20f0 */
|
||||
0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, /* 0x2100 */
|
||||
0, 0, 84, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x2110 */
|
||||
0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 84, 2, 0, 0, /* 0x2120 */
|
||||
0, 0, 0, 0,100, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, /* 0x2130 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,115, 2, 0, 0, 78, 50, 69, /* 0x2140 */
|
||||
68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,133, 2, /* 0x2150 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, /* 0x2160 */
|
||||
50, 69, 83, 77, 65, 52, 48, 0,179, 2, 0, 0, 0, 0, 0, 0, /* 0x2170 */
|
||||
192, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, /* 0x2180 */
|
||||
0, 78, 50, 69, 70, 65, 83, 52, 48, 0,192, 2, 0, 0, 0, 0, /* 0x2190 */
|
||||
0, 0,196, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, /* 0x21a0 */
|
||||
0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x21b0 */
|
||||
67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, /* 0x21c0 */
|
||||
0,207, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, 48, 0,207, 2, /* 0x21d0 */
|
||||
0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,209, 2, 0, 0, 78, /* 0x21e0 */
|
||||
50, 69, 68, 69, 67, 53, 48, 0,212, 2, 0, 0, 78, 50, 69, 83, /* 0x21f0 */
|
||||
77, 65, 54, 48, 0,221, 2, 0, 0, 0, 0, 0, 0,233, 2, 0, /* 0x2200 */
|
||||
0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x2210 */
|
||||
69, 70, 65, 83, 54, 48, 0,233, 2, 0, 0, 0, 0, 0, 0,244, /* 0x2220 */
|
||||
2, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x2230 */
|
||||
0, 0, 0, 0, 2, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x2240 */
|
||||
0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 2, 3, /* 0x2250 */
|
||||
0, 0, 0, 0, 0, 0, 24, 3, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x2260 */
|
||||
49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, /* 0x2270 */
|
||||
24, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, 0, 24, 3, 0, /* 0x2280 */
|
||||
0, 76, 90, 77, 65, 95, 68, 69, 67, 48, 48, 0, 24, 3, 0, 0, /* 0x2290 */
|
||||
76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 0, 70, 3, 0, 0, 76, /* 0x22a0 */
|
||||
90, 77, 65, 95, 68, 69, 67, 49, 48, 0,142, 3, 0, 0, 76, 90, /* 0x22b0 */
|
||||
77, 65, 95, 68, 69, 67, 50, 48, 0, 20, 14, 0, 0, 76, 90, 77, /* 0x22c0 */
|
||||
65, 95, 68, 69, 67, 51, 48, 0,154, 24, 0, 0, 67, 65, 76, 76, /* 0x22d0 */
|
||||
84, 82, 48, 48, 0,180, 24, 0, 0, 67, 84, 67, 76, 69, 86, 69, /* 0x22e0 */
|
||||
49, 0,194, 24, 0, 0, 0, 0, 0, 0,199, 24, 0, 0, 67, 65, /* 0x22f0 */
|
||||
76, 76, 84, 82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, /* 0x2300 */
|
||||
82, 48, 49, 0,199, 24, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, /* 0x2310 */
|
||||
0,204, 24, 0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0,204, 24, /* 0x2320 */
|
||||
0, 0, 67, 84, 66, 82, 79, 82, 48, 49, 0,208, 24, 0, 0, 67, /* 0x2330 */
|
||||
84, 66, 83, 87, 65, 48, 49, 0,210, 24, 0, 0, 67, 65, 76, 76, /* 0x2340 */
|
||||
84, 82, 48, 50, 0,215, 24, 0, 0, 0, 0, 0, 0,229, 24, 0, /* 0x2350 */
|
||||
0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, /* 0x2360 */
|
||||
76, 76, 84, 82, 49, 48, 0,229, 24, 0, 0, 67, 65, 76, 76, 84, /* 0x2370 */
|
||||
82, 69, 56, 0,234, 24, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, /* 0x2380 */
|
||||
0,236, 24, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0,238, 24, /* 0x2390 */
|
||||
0, 0, 0, 0, 0, 0,242, 24, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x23a0 */
|
||||
49, 51, 0, 5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, /* 0x23b0 */
|
||||
242, 24, 0, 0, 0, 0, 0, 0,247, 24, 0, 0, 67, 65, 76, 76, /* 0x23c0 */
|
||||
84, 82, 49, 49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, /* 0x23d0 */
|
||||
50, 0,247, 24, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0,249, /* 0x23e0 */
|
||||
24, 0, 0, 67, 84, 66, 83, 72, 82, 49, 49, 0,249, 24, 0, 0, /* 0x23f0 */
|
||||
67, 84, 66, 82, 79, 82, 49, 49, 0,253, 24, 0, 0, 67, 84, 66, /* 0x2400 */
|
||||
83, 87, 65, 49, 49, 0,255, 24, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x2410 */
|
||||
49, 51, 0, 4, 25, 0, 0, 0, 0, 0, 0, 9, 25, 0, 0, 67, /* 0x2420 */
|
||||
65, 76, 76, 84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, /* 0x2430 */
|
||||
69, 69, 78, 68, 0, 9, 25, 0, 0, 76, 69, 88, 69, 67, 48, 49, /* 0x2440 */
|
||||
53, 0, 9, 25, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0, 39, /* 0x2450 */
|
||||
25, 0, 0, 0, 0, 0, 0, 41, 25, 0, 0, 76, 88, 85, 78, 70, /* 0x2460 */
|
||||
48, 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, /* 0x2470 */
|
||||
0, 41, 25, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0, 46, 25, /* 0x2480 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 48, 53, 0, 48, 25, 0, 0, 76, /* 0x2490 */
|
||||
88, 77, 82, 85, 48, 48, 54, 0, 53, 25, 0, 0, 76, 88, 77, 82, /* 0x24a0 */
|
||||
85, 48, 48, 55, 0, 60, 25, 0, 0, 76, 88, 85, 78, 70, 48, 48, /* 0x24b0 */
|
||||
56, 0, 67, 25, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0, 71, /* 0x24c0 */
|
||||
25, 0, 0, 0, 0, 0, 0, 76, 25, 0, 0, 76, 88, 85, 78, 70, /* 0x24d0 */
|
||||
48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, /* 0x24e0 */
|
||||
0, 76, 25, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0, 79, 25, /* 0x24f0 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 52, 54, 0, 82, 25, 0, 0, 76, /* 0x2500 */
|
||||
88, 74, 67, 67, 48, 50, 48, 0, 84, 25, 0, 0, 0, 0, 0, 0, /* 0x2510 */
|
||||
86, 25, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, /* 0x2520 */
|
||||
0, 76, 88, 74, 67, 67, 48, 50, 49, 0, 86, 25, 0, 0, 0, 0, /* 0x2530 */
|
||||
0, 0, 91, 25, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, /* 0x2540 */
|
||||
0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0, 91, 25, 0, 0, /* 0x2550 */
|
||||
76, 88, 85, 78, 70, 48, 51, 55, 0, 98, 25, 0, 0, 76, 88, 85, /* 0x2560 */
|
||||
78, 70, 51, 56, 54, 0,100, 25, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x2570 */
|
||||
56, 55, 0,101, 25, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0, /* 0x2580 */
|
||||
110, 25, 0, 0, 0, 0, 0, 0,113, 25, 0, 0, 76, 88, 85, 78, /* 0x2590 */
|
||||
70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, /* 0x25a0 */
|
||||
54, 0,113, 25, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,117, /* 0x25b0 */
|
||||
25, 0, 0, 0, 0, 0, 0,119, 25, 0, 0, 76, 88, 85, 78, 70, /* 0x25c0 */
|
||||
48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, /* 0x25d0 */
|
||||
0,119, 25, 0, 0, 0, 0, 0, 0,123, 25, 0, 0, 76, 88, 77, /* 0x25e0 */
|
||||
82, 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, /* 0x25f0 */
|
||||
69, 51, 0,123, 25, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0, /* 0x2600 */
|
||||
125, 25, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,126, 25, 0, /* 0x2610 */
|
||||
0, 77, 82, 85, 65, 82, 66, 52, 48, 0,128, 25, 0, 0, 76, 88, /* 0x2620 */
|
||||
77, 82, 85, 48, 55, 48, 0,132, 25, 0, 0, 0, 0, 0, 0,137, /* 0x2630 */
|
||||
25, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, /* 0x2640 */
|
||||
77, 82, 85, 66, 89, 84, 69, 52, 0,140, 25, 0, 0, 77, 82, 85, /* 0x2650 */
|
||||
66, 73, 84, 83, 52, 0,143, 25, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x2660 */
|
||||
53, 48, 0,145, 25, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0, /* 0x2670 */
|
||||
151, 25, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0,154, 25, 0, /* 0x2680 */
|
||||
0, 77, 82, 85, 65, 82, 66, 54, 48, 0,156, 25, 0, 0, 77, 82, /* 0x2690 */
|
||||
85, 66, 73, 84, 83, 53, 0,157, 25, 0, 0, 77, 82, 85, 65, 82, /* 0x26a0 */
|
||||
66, 55, 48, 0,159, 25, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, /* 0x26b0 */
|
||||
0,163, 25, 0, 0, 0, 0, 0, 0,170, 25, 0, 0, 76, 88, 77, /* 0x26c0 */
|
||||
82, 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, /* 0x26d0 */
|
||||
69, 54, 0,174, 25, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, /* 0x26e0 */
|
||||
176, 25, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0,177, 25, 0, /* 0x26f0 */
|
||||
0, 77, 82, 85, 65, 82, 66, 57, 48, 0,179, 25, 0, 0, 76, 88, /* 0x2700 */
|
||||
77, 82, 85, 49, 48, 48, 0,183, 25, 0, 0, 76, 88, 85, 78, 70, /* 0x2710 */
|
||||
48, 52, 48, 0,199, 25, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, /* 0x2720 */
|
||||
0,204, 25, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0,207, 25, /* 0x2730 */
|
||||
0, 0, 76, 88, 85, 78, 70, 48, 52, 49, 0,209, 25, 0, 0, 0, /* 0x2740 */
|
||||
0, 0, 0,216, 25, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, /* 0x2750 */
|
||||
0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0,216, 25, 0, /* 0x2760 */
|
||||
0, 76, 69, 88, 69, 67, 48, 49, 54, 0,216, 25, 0, 0, 0, 0, /* 0x2770 */
|
||||
0, 0,218, 25, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, /* 0x2780 */
|
||||
0, 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0,218, 25, 0, 0, /* 0x2790 */
|
||||
76, 88, 74, 77, 80, 65, 48, 48, 0,219, 25, 0, 0, 76, 88, 67, /* 0x27a0 */
|
||||
65, 76, 76, 66, 48, 0,221, 25, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x27b0 */
|
||||
50, 49, 0,223, 25, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, /* 0x27c0 */
|
||||
229, 25, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0,232, 25, 0, /* 0x27d0 */
|
||||
0, 76, 88, 67, 65, 76, 76, 66, 49, 0,234, 25, 0, 0, 77, 82, /* 0x27e0 */
|
||||
85, 66, 73, 84, 83, 49, 0,236, 25, 0, 0, 76, 88, 77, 82, 85, /* 0x27f0 */
|
||||
48, 51, 48, 0,237, 25, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, /* 0x2800 */
|
||||
0,239, 25, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0,241, 25, /* 0x2810 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 52, 48, 0,242, 25, 0, 0, 0, /* 0x2820 */
|
||||
0, 0, 0,244, 25, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, /* 0x2830 */
|
||||
0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0,244, 25, 0, /* 0x2840 */
|
||||
0, 76, 88, 74, 67, 67, 48, 48, 48, 0,250, 25, 0, 0, 0, 0, /* 0x2850 */
|
||||
0, 0, 2, 26, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, /* 0x2860 */
|
||||
0, 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0, 2, 26, 0, 0, /* 0x2870 */
|
||||
76, 88, 67, 74, 49, 77, 82, 85, 0, 4, 26, 0, 0, 76, 88, 67, /* 0x2880 */
|
||||
65, 76, 74, 77, 80, 0, 7, 26, 0, 0, 76, 88, 67, 65, 76, 76, /* 0x2890 */
|
||||
48, 48, 0, 10, 26, 0, 0, 0, 0, 0, 0, 12, 26, 0, 0, 76, /* 0x28a0 */
|
||||
88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, /* 0x28b0 */
|
||||
76, 76, 48, 49, 0, 12, 26, 0, 0, 76, 88, 67, 74, 50, 77, 82, /* 0x28c0 */
|
||||
85, 0, 15, 26, 0, 0, 0, 0, 0, 0, 17, 26, 0, 0, 76, 88, /* 0x28d0 */
|
||||
85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, /* 0x28e0 */
|
||||
77, 82, 85, 0, 17, 26, 0, 0, 0, 0, 0, 0, 19, 26, 0, 0, /* 0x28f0 */
|
||||
76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, /* 0x2900 */
|
||||
74, 54, 77, 82, 85, 0, 19, 26, 0, 0, 0, 0, 0, 0, 21, 26, /* 0x2910 */
|
||||
0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, /* 0x2920 */
|
||||
88, 67, 74, 55, 77, 82, 85, 0, 21, 26, 0, 0, 0, 0, 0, 0, /* 0x2930 */
|
||||
23, 26, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, /* 0x2940 */
|
||||
0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 23, 26, 0, 0, 0, 0, /* 0x2950 */
|
||||
0, 0, 26, 26, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, /* 0x2960 */
|
||||
0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 26, 26, 0, 0, /* 0x2970 */
|
||||
0, 0, 0, 0, 31, 26, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, /* 0x2980 */
|
||||
0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0, 31, 26, /* 0x2990 */
|
||||
0, 0, 77, 82, 85, 66, 89, 84, 69, 50, 0, 33, 26, 0, 0, 77, /* 0x29a0 */
|
||||
82, 85, 66, 73, 84, 83, 50, 0, 38, 26, 0, 0, 77, 82, 85, 65, /* 0x29b0 */
|
||||
82, 66, 50, 48, 0, 43, 26, 0, 0, 76, 88, 77, 82, 85, 48, 53, /* 0x29c0 */
|
||||
55, 0, 48, 26, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0, 54, /* 0x29d0 */
|
||||
26, 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0, 55, 26, 0, 0, /* 0x29e0 */
|
||||
67, 75, 76, 76, 84, 82, 48, 48, 0, 61, 26, 0, 0, 0, 0, 0, /* 0x29f0 */
|
||||
0, 65, 26, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, /* 0x2a00 */
|
||||
0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 70, 26, 0, 0, 0, /* 0x2a10 */
|
||||
0, 0, 0, 84, 26, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, /* 0x2a20 */
|
||||
6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 84, 26, 0, /* 0x2a30 */
|
||||
0, 0, 0, 0, 0, 90, 26, 0, 0, 67, 75, 76, 76, 84, 82, 52, /* 0x2a40 */
|
||||
48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 26, 0, 0, 67, 75, /* 0x2a50 */
|
||||
76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, /* 0x2a60 */
|
||||
82, 51, 48, 0,117, 26, 0, 0, 0, 0, 0, 0,124, 26, 0, 0, /* 0x2a70 */
|
||||
67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, /* 0x2a80 */
|
||||
76, 84, 82, 52, 48, 0,124, 26, 0, 0, 0, 0, 0, 0,129, 26, /* 0x2a90 */
|
||||
0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, /* 0x2aa0 */
|
||||
69, 88, 69, 67, 48, 49, 55, 0,129, 26, 0, 0, 76, 69, 88, 69, /* 0x2ab0 */
|
||||
67, 48, 50, 48, 0,131, 26, 0, 0, 88, 84, 72, 69, 69, 78, 68, /* 0x2ac0 */
|
||||
88, 0, 8, 27, 0, 0,255,255,255,255, 8, 27 /* 0x2ad0 */
|
||||
};
|
||||
142
src/stub/i386-BSD.elf-fold.h
Normal file
142
src/stub/i386-BSD.elf-fold.h
Normal file
@ -0,0 +1,142 @@
|
||||
/* i386-BSD.elf-fold.h -- created from i386-BSD.elf-fold.bin, 1702 (0x6a6) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#define BSD_I386ELF_FOLD_SIZE 1702
|
||||
#define BSD_I386ELF_FOLD_ADLER32 0xd3fbf52c
|
||||
#define BSD_I386ELF_FOLD_CRC32 0x627f021f
|
||||
|
||||
unsigned char BSD_i386elf_fold[1702] = {
|
||||
127, 69, 76, 70, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
|
||||
2, 0, 3, 0, 1, 0, 0, 0,128, 16,192, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0, /* 0x 30 */
|
||||
0, 16,192, 0,166, 6, 0, 0,168, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
||||
0, 16, 0, 0, 1, 0, 0, 0,166, 6, 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, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
||||
41,201,186,120, 2, 0, 0,137,230,137,231,232,121, 0, 0, 0, /* 0x 80 */
|
||||
137,230,209,234, 25,192, 41,193,141, 36,196,133,210,117,243,137, /* 0x 90 */
|
||||
231,232, 99, 0, 0, 0,129,236, 0, 10, 0, 0, 83,139, 83, 72, /* 0x a0 */
|
||||
141,148, 26,255, 31, 0, 0,129,226, 0,240,255,255, 82, 41,192, /* 0x b0 */
|
||||
102,131,123, 16, 3,117, 1,146, 80,139,115, 24,141,131,140, 0, /* 0x c0 */
|
||||
0, 0, 41,198,139, 24,139, 72, 4,131,193, 12,141, 84, 36, 12, /* 0x d0 */
|
||||
96, 71,232,157, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, /* 0x e0 */
|
||||
0, 0, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, /* 0x f0 */
|
||||
80, 80, 80, 41,217,176, 73,255, 39,173,171,133,192,117,250,173, /* 0x 100 */
|
||||
171,133,192,117,250, 87,173,171,131,248, 32,115, 3, 15,179,194, /* 0x 110 */
|
||||
133,192,173,171,117,240,131,239, 8, 1,201, 64,243,171, 72,171, /* 0x 120 */
|
||||
171, 95,195, 85,137,229, 49,192, 80,255,117, 28, 80,255,117, 24, /* 0x 130 */
|
||||
255,117, 20,255,117, 16,255,117, 12,255,117, 8, 80,176,197, 80, /* 0x 140 */
|
||||
80,176,198,205,128,201,195,195,176, 1, 15,182,192,205,128,195, /* 0x 150 */
|
||||
176, 3,235,246,176, 4,235,242,176, 5,235,238,176, 6,235,234, /* 0x 160 */
|
||||
176, 73,235,230,176, 74,235,226, 85,137,229, 87, 86,137,206, 83, /* 0x 170 */
|
||||
137,195, 57, 8,139,120, 4,115, 7,106,127,232,200,255,255,255, /* 0x 180 */
|
||||
133,201,116, 8,138, 7, 71,136, 2, 66,226,248, 1,115, 4, 41, /* 0x 190 */
|
||||
51,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, 86,137,198, /* 0x 1a0 */
|
||||
83,137,211,131,236, 24,139, 69, 8,139,125, 12,137, 69,220,131, /* 0x 1b0 */
|
||||
58, 0, 15,132,182, 0, 0, 0,141, 85,228,185, 12, 0, 0, 0, /* 0x 1c0 */
|
||||
137,240,232,161,255,255,255,139, 69,228,139, 77,232,133,192,117, /* 0x 1d0 */
|
||||
19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, 15,132,140, 0, /* 0x 1e0 */
|
||||
0, 0,235, 4,133,201,117, 7,106,127,232, 89,255,255,255, 57, /* 0x 1f0 */
|
||||
193,119,245, 59, 3,119,241, 57,193,115, 86,137, 69,224,141, 69, /* 0x 200 */
|
||||
224,255,117,236, 80,255,115, 4, 81,255,118, 4,255, 85,220,131, /* 0x 210 */
|
||||
196, 20,133,192,117,210,139, 85,224, 59, 85,228,117,202,138, 69, /* 0x 220 */
|
||||
237,132,192,116, 34,133,255,116, 30,129,250, 0, 2, 0, 0,119, /* 0x 230 */
|
||||
4, 57, 19,117, 18, 15,182,192, 80, 15,182, 69,238, 80, 82,255, /* 0x 240 */
|
||||
115, 4,255,215,131,196, 16,139, 69,232, 1, 70, 4, 41, 6,235, /* 0x 250 */
|
||||
10,139, 83, 4,137,240,232, 13,255,255,255,139, 85,228,139, 3, /* 0x 260 */
|
||||
1, 83, 4, 41,208,133,192,137, 3,233, 68,255,255,255,141,101, /* 0x 270 */
|
||||
244, 91, 94, 95,201,195,133,192, 83,137,211,116, 29,168, 1,117, /* 0x 280 */
|
||||
25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7,137, 24, /* 0x 290 */
|
||||
137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137,229, 87, /* 0x 2a0 */
|
||||
86, 83,131,236, 60,137, 85,224,137, 69,228,139, 85, 12,139, 69, /* 0x 2b0 */
|
||||
8,199, 69,204,255,255,255,255,137, 85,216,139,125,224,139, 85, /* 0x 2c0 */
|
||||
224,137, 69,220,139, 69, 20, 3,127, 28,137, 69,212, 49,192,102, /* 0x 2d0 */
|
||||
131,122, 16, 2, 15,183, 74, 44,137,251, 15,148,192, 49,246,193, /* 0x 2e0 */
|
||||
224, 4,137,202, 5, 2, 16, 0, 0, 74,120, 30,131, 59, 1,117, /* 0x 2f0 */
|
||||
20,139, 83, 8, 59, 85,204,115, 3,137, 85,204, 3, 83, 20, 57, /* 0x 300 */
|
||||
214,115, 2,137,214,131,195, 32,226,226,139, 93,204,106, 0,106, /* 0x 310 */
|
||||
255,129,227, 0,240,255,255, 80, 41,222,106, 0,129,198,255, 15, /* 0x 320 */
|
||||
0, 0,129,230, 0,240,255,255, 86, 83,232,244,253,255,255,131, /* 0x 330 */
|
||||
196, 24,141, 52, 48, 41,216,137, 69,208,139, 69,224,137,117,240, /* 0x 340 */
|
||||
102,131,120, 44, 0,199, 69,200, 0, 0, 0, 0, 15,132,216, 1, /* 0x 350 */
|
||||
0, 0,139, 7,131,248, 6,117, 24,139, 77,208,186, 3, 0, 0, /* 0x 360 */
|
||||
0, 3, 79, 8,139, 69,216,232, 10,255,255,255,233,163, 1, 0, /* 0x 370 */
|
||||
0, 72, 15,133,156, 1, 0, 0,139, 69,208,199, 69,196, 64, 98, /* 0x 380 */
|
||||
81,115, 3, 71, 8,139, 87, 20,139, 79, 24, 1,194,137, 69,236, /* 0x 390 */
|
||||
137, 85,188,137,194,129,226,255, 15, 0, 0,131,225, 7, 41,208, /* 0x 3a0 */
|
||||
193,225, 2,137, 69,192,139, 71, 4,211,109,196, 41,208,131,101, /* 0x 3b0 */
|
||||
196, 7,131,125,220, 0,139, 79, 16, 80,139, 69,228,137, 77,232, /* 0x 3c0 */
|
||||
141, 52, 17,116, 3,131,200,255,131,125,220, 1, 80, 25,192, 37, /* 0x 3d0 */
|
||||
0,240,255,255, 5, 18, 16, 0, 0,131,125,220, 0, 80,139, 69, /* 0x 3e0 */
|
||||
196,116, 3,131,200, 2,131,125,220, 0, 80,137,240,116, 3,141, /* 0x 3f0 */
|
||||
70, 3, 80,255,117,192,232, 40,253,255,255,131,196, 24, 57, 69, /* 0x 400 */
|
||||
192, 15,133,185, 0, 0, 0,131,125,220, 0,116, 28,246, 69,196, /* 0x 410 */
|
||||
4,139, 69,212,117, 2, 49,192, 80,139, 69,220,255,117,228,141, /* 0x 420 */
|
||||
85,232,232,114,253,255,255, 88, 90,137,240,247,216, 37,255, 15, /* 0x 430 */
|
||||
0, 0,246, 69,196, 2,137, 69,184,116, 20,139, 69,192, 1,240, /* 0x 440 */
|
||||
131,125,184, 0,116, 9,139, 77,184,198, 0, 0, 64,226,250,131, /* 0x 450 */
|
||||
125,220, 0,116,114,131, 63, 1,117, 83,246, 71, 24, 1,116, 77, /* 0x 460 */
|
||||
139, 87, 20,139, 95, 8,141, 12, 26, 3, 77,208, 59, 87, 16,117, /* 0x 470 */
|
||||
14,137,200,247,216, 37,255, 15, 0, 0,131,248, 3,119, 14,107, /* 0x 480 */
|
||||
69,208, 52,131,127, 4, 0,141, 76, 3, 12,117, 15,139, 1, 61, /* 0x 490 */
|
||||
205,128, 97,195,116, 6,199, 1,205,128, 97,195,133,201,116, 13, /* 0x 4a0 */
|
||||
139, 69,216, 49,210,131,224,254,232,201,253,255,255,255,117,196, /* 0x 4b0 */
|
||||
86,255,117,192,232,171,252,255,255,131,196, 12,133,192,116, 7, /* 0x 4c0 */
|
||||
106,127,232,129,252,255,255,139, 85,184,139, 93,192,141, 4, 22, /* 0x 4d0 */
|
||||
1,195, 59, 93,188,115, 33,106, 0,106,255,104, 18, 16, 0, 0, /* 0x 4e0 */
|
||||
255,117,196, 41, 93,188,255,117,188, 83,232, 52,252,255,255,131, /* 0x 4f0 */
|
||||
196, 24, 57,195,116, 30,235,200,131,125,220, 0,116, 22,141, 70, /* 0x 500 */
|
||||
3, 37,255, 15, 0, 0,131,248, 3,119, 9, 80, 83,232, 78,252, /* 0x 510 */
|
||||
255,255, 89, 91,139, 85,224,131,199, 32,255, 69,200, 15,183, 66, /* 0x 520 */
|
||||
44, 57, 69,200, 15,140, 40,254,255,255,131,125,220, 0,117, 15, /* 0x 530 */
|
||||
255,117,228,232, 36,252,255,255, 90,133,192,116, 21,235,129,139, /* 0x 540 */
|
||||
69,224,102,131,120, 16, 3,116, 9,255,117,240,232,246,251,255, /* 0x 550 */
|
||||
255, 88,131,125, 16, 0,116, 8,139, 69,208,139, 85, 16,137, 2, /* 0x 560 */
|
||||
139, 85,224,139, 82, 24, 1, 85,208,139, 69,208,141,101,244, 91, /* 0x 570 */
|
||||
94, 95,201,195, 85,137,229, 87, 86, 83,131,236, 16,139,125, 16, /* 0x 580 */
|
||||
106, 0,139, 69, 28,141, 87, 2,139,117, 8,137, 69,232,131,192, /* 0x 590 */
|
||||
52,137, 69,228,139, 93, 32,137, 85,236,141, 69, 32,141, 85, 24, /* 0x 5a0 */
|
||||
87,232,243,251,255,255,139, 69, 12,186, 5, 0, 0, 0, 41, 93, /* 0x 5b0 */
|
||||
36,137, 69, 32,139, 69,232, 15,183, 72, 44,137,240,232,180,252, /* 0x 5c0 */
|
||||
255,255,139, 85,232,137,240, 15,183, 74, 42,186, 4, 0, 0, 0, /* 0x 5d0 */
|
||||
232,161,252,255,255,139, 69,228,139, 77, 40,186, 3, 0, 0, 0, /* 0x 5e0 */
|
||||
3, 72, 8,137,240,131,193, 52,232,137,252,255,255,141, 69,240, /* 0x 5f0 */
|
||||
255,117,236, 80,139, 85,232,141, 69, 32, 86, 80,137,248,232,153, /* 0x 600 */
|
||||
252,255,255,186, 9, 0, 0, 0,137,193,137,195,137,240,232, 99, /* 0x 610 */
|
||||
252,255,255,139, 85,232,131,196, 24,102,139, 74, 44, 49,210,102, /* 0x 620 */
|
||||
133,201,116,104,139, 69,228,131, 56, 3,117, 84,106, 0,139, 85, /* 0x 630 */
|
||||
228,106, 0,139, 69,240, 3, 66, 8, 80,232, 25,251,255,255,131, /* 0x 640 */
|
||||
196, 12,133,192,137,195,120, 24,104, 0, 2, 0, 0,255,117,232, /* 0x 650 */
|
||||
80,232,250,250,255,255,131,196, 12, 61, 0, 2, 0, 0,116, 7, /* 0x 660 */
|
||||
106,127,232,225,250,255,255,106, 0,139, 85,232,106, 0,137,216, /* 0x 670 */
|
||||
106, 0,106, 0,232, 35,252,255,255,131,196, 16,137,195,235, 12, /* 0x 680 */
|
||||
66, 15,183,193,131, 69,228, 32, 57,194,124,152,141,101,244,137, /* 0x 690 */
|
||||
216, 91, 94, 95,201,195 /* 0x 6a0 */
|
||||
};
|
||||
49
src/stub/scripts/brandBSD.pl
Normal file
49
src/stub/scripts/brandBSD.pl
Normal file
@ -0,0 +1,49 @@
|
||||
#! /usr/bin/perl -w
|
||||
#
|
||||
# brandBSD.pl -- brand an ELF binary as Linux or FreeBSD
|
||||
#
|
||||
# This file is part of the UPX executable compressor.
|
||||
#
|
||||
# Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
# Copyright (C) 1996-2006 Laszlo Molnar
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# UPX and the UCL library are free software; you can redistribute them
|
||||
# and/or modify them under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; see the file COPYING.
|
||||
# If not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
# <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
#
|
||||
|
||||
|
||||
$fname = shift || die;
|
||||
|
||||
$sig = shift || "FreeBSD";
|
||||
die if length($sig) > 7;
|
||||
|
||||
sysopen (FH,$fname,2) || die;
|
||||
binmode FH;
|
||||
|
||||
sysread (FH,$header,7) || die;
|
||||
die if (substr($header, 0, 7) ne "\x7f\x45\x4c\x46\x01\x01\x01");
|
||||
|
||||
syswrite (FH,"\011\0",2) || die;
|
||||
# syswrite (FH,$sig,length($sig)) || die;
|
||||
# syswrite (FH,"\0\0\0\0\0\0\0\0",8-length($sig)) || die;
|
||||
close (FH) || die;
|
||||
|
||||
exit (0);
|
||||
|
||||
# vi:ts=4:et
|
||||
235
src/stub/src/i386-BSD.elf-entry.asm
Normal file
235
src/stub/src/i386-BSD.elf-entry.asm
Normal file
@ -0,0 +1,235 @@
|
||||
; i386-BSD.elf-entry.asm -- BSD program entry point & decompressor (Elf binary)
|
||||
;
|
||||
; This file is part of the UPX executable compressor.
|
||||
;
|
||||
; Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
; Copyright (C) 1996-2006 Laszlo Molnar
|
||||
; Copyright (C) 2000-2006 John F. Reiser
|
||||
; All Rights Reserved.
|
||||
;
|
||||
; UPX and the UCL library are free software; you can redistribute them
|
||||
; and/or modify them under the terms of the GNU General Public License as
|
||||
; published by the Free Software Foundation; either version 2 of
|
||||
; the License, or (at your option) any later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program; see the file COPYING.
|
||||
; If not, write to the Free Software Foundation, Inc.,
|
||||
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
;
|
||||
; Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
; <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
;
|
||||
; John F. Reiser
|
||||
; <jreiser@users.sourceforge.net>
|
||||
;
|
||||
|
||||
|
||||
BITS 32
|
||||
SECTION .text
|
||||
CPU 386
|
||||
|
||||
%define jmps jmp short
|
||||
%define jmpn jmp near
|
||||
|
||||
; /*************************************************************************
|
||||
; // program entry point
|
||||
; // see glibc/sysdeps/i386/elf/start.S
|
||||
; **************************************************************************/
|
||||
|
||||
GLOBAL _start
|
||||
;__LEXEC000__
|
||||
_start:
|
||||
;;;; int3
|
||||
;; 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.
|
||||
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
||||
;; define g
|
||||
;; stepi
|
||||
;; x/i $pc
|
||||
;; end
|
||||
;; and a step-over macro such as
|
||||
;; define h
|
||||
;; x/2i $pc
|
||||
;; tbreak *$_
|
||||
;; continue
|
||||
;; x/i $pc
|
||||
;; end
|
||||
;; Step through the code; remember that <Enter> repeats the previous command.
|
||||
;;
|
||||
call main ; push address of decompress subroutine
|
||||
decompress:
|
||||
|
||||
; /*************************************************************************
|
||||
; // C callable decompressor
|
||||
; **************************************************************************/
|
||||
|
||||
; /* Offsets to parameters, allowing for {push + pusha + call} */
|
||||
%define O_INP (4+ 8*4 +1*4)
|
||||
%define O_INS (4+ 8*4 +2*4)
|
||||
%define O_OUTP (4+ 8*4 +3*4)
|
||||
%define O_OUTS (4+ 8*4 +4*4)
|
||||
%define O_PARAM (4+ 8*4 +5*4)
|
||||
|
||||
%define INP dword [esp+O_INP]
|
||||
%define INS dword [esp+O_INS]
|
||||
%define OUTP dword [esp+O_OUTP]
|
||||
%define OUTS dword [esp+O_OUTS]
|
||||
%define PARM dword [esp+O_PARAM]
|
||||
|
||||
;__LEXEC009__
|
||||
;; empty section for commonality with l_lx_exec86.asm
|
||||
;__LEXEC010__
|
||||
pusha
|
||||
push byte '?' ; cto8 (sign extension does not matter)
|
||||
; cld
|
||||
|
||||
mov esi, INP
|
||||
mov edi, OUTP
|
||||
|
||||
or ebp, byte -1
|
||||
;;; align 8
|
||||
|
||||
%include "arch/i386/nrv2b_d32.ash"
|
||||
%include "arch/i386/nrv2d_d32.ash"
|
||||
%include "arch/i386/nrv2e_d32.ash"
|
||||
%include "arch/i386/lzma_d.ash"
|
||||
%include "arch/i386/macros.ash"
|
||||
cjt32 0
|
||||
|
||||
;__LEXEC015__
|
||||
; eax is 0 from decompressor code
|
||||
;xor eax, eax ; return code
|
||||
|
||||
; check compressed size
|
||||
mov edx, INP
|
||||
add edx, INS
|
||||
cmp esi, edx
|
||||
jz .ok
|
||||
dec eax
|
||||
.ok:
|
||||
|
||||
; write back the uncompressed size
|
||||
sub edi, OUTP
|
||||
mov edx, OUTS
|
||||
mov [edx], edi
|
||||
|
||||
pop edx ; cto8
|
||||
|
||||
mov [7*4 + esp], eax
|
||||
popa
|
||||
ret
|
||||
|
||||
ctojr32
|
||||
ckt32 edi, dl
|
||||
;__LEXEC017__
|
||||
popa
|
||||
ret
|
||||
|
||||
;__LEXEC020__
|
||||
|
||||
%define PAGE_SIZE ( 1<<12)
|
||||
|
||||
%define MAP_FIXED 0x10
|
||||
%define MAP_PRIVATE 0x02
|
||||
%define MAP_ANONYMOUS 0x1000
|
||||
%define PROT_READ 1
|
||||
%define PROT_WRITE 2
|
||||
%define PROT_EXEC 4
|
||||
%define __NR_mmap 197
|
||||
%define __NR_syscall 198
|
||||
%define szElf32_Ehdr 0x34
|
||||
%define p_memsz 5*4
|
||||
|
||||
%define __NR_write 4
|
||||
%define __NR_exit 1
|
||||
|
||||
fail_mmap:
|
||||
push byte L71 - L70
|
||||
call L71
|
||||
L70:
|
||||
db "PROT_EXEC|PROT_WRITE failed.",10
|
||||
L71:
|
||||
push byte 2 ; fd stderr
|
||||
push eax ; fake ret.addr
|
||||
push byte __NR_write
|
||||
pop eax
|
||||
int 0x80
|
||||
die:
|
||||
push byte 127 ; only low 7 bits matter!
|
||||
push eax ; fake ret.addr
|
||||
push byte __NR_exit
|
||||
pop eax ; write to stderr could fail, leaving eax as -EBADF etc.
|
||||
int 0x80
|
||||
|
||||
; Decompress the rest of this loader, and jump to it
|
||||
unfold:
|
||||
pop esi ; &{ b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_data...}
|
||||
|
||||
lea eax, [ebp - (4+ decompress - _start)] ; 4: sizeof(int)
|
||||
sub eax, [eax] ; %eax= &Elf32_Ehdr of this program
|
||||
mov edx, eax ; %edx= &Elf32_Ehdr of this program
|
||||
|
||||
; Linux requires PF_W in order to create .bss (implied by .p_filesz!=.p_memsz),
|
||||
; but strict SELinux (or PaX, grSecurity) forbids PF_W with PF_X.
|
||||
; 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.
|
||||
add eax, [p_memsz + szElf32_Ehdr + eax] ; address after .text
|
||||
add eax, PAGE_SIZE -1
|
||||
and eax, -PAGE_SIZE
|
||||
|
||||
push eax ; destination for 'ret'
|
||||
|
||||
; mmap a page to hold the decompressed fold_elf86
|
||||
xor ecx, ecx ; %ecx= 0
|
||||
; MAP_ANONYMOUS ==>offset is ignored, so do not push!
|
||||
push ecx ; pad (must be zero?)
|
||||
push byte -1 ; *BSD demands -1==fd for mmap(,,,MAP_ANON,,)
|
||||
push dword MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||
mov ch, PAGE_SIZE >> 8 ; %ecx= PAGE_SIZE
|
||||
push byte PROT_READ | PROT_WRITE | PROT_EXEC
|
||||
push ecx ; length
|
||||
push eax ; destination
|
||||
xor eax,eax ; 0
|
||||
push eax ; current thread
|
||||
mov al, __NR_mmap
|
||||
push eax ; __NR_mmap
|
||||
push eax ; fake return address
|
||||
mov al, __NR_syscall
|
||||
int 0x80 ; changes only %eax; %edx is live
|
||||
jb fail_mmap
|
||||
xchg eax, edx ; %edx= page after .text; %eax= &Elf32_Ehdr of this program
|
||||
xchg eax, ebx ; %ebx= &Elf32_Ehdr of this program
|
||||
|
||||
cld
|
||||
lodsd
|
||||
push eax ; sz_uncompressed (maximum dstlen for lzma)
|
||||
mov ecx,esp ; save &dstlen
|
||||
push eax ; space for 5th param
|
||||
push ecx ; &dstlen
|
||||
push edx ; &dst
|
||||
lodsd
|
||||
push eax ; sz_compressed (srclen)
|
||||
lodsd ; last 4 bytes of b_info
|
||||
mov [4*3 + esp],eax
|
||||
push esi ; &compressed_data
|
||||
call ebp ; decompress(&src, srclen, &dst, &dstlen, b_info.misc)
|
||||
add esp, byte (5+1 + 9)*4 ; (5+1) args to decompress, 9 "args" to mmap
|
||||
ret ; &destination
|
||||
main:
|
||||
pop ebp ; &decompress
|
||||
call unfold
|
||||
; compressed fold_elf86 follows
|
||||
eof:
|
||||
; __XTHEENDX__
|
||||
section .data
|
||||
dd -1
|
||||
dw eof
|
||||
|
||||
; vi:ts=8:et:nowrap
|
||||
|
||||
276
src/stub/src/i386-BSD.elf-fold.asm
Normal file
276
src/stub/src/i386-BSD.elf-fold.asm
Normal file
@ -0,0 +1,276 @@
|
||||
; fold_elf86.asm -- linkage to C code to process Elf binary
|
||||
;
|
||||
; This file is part of the UPX executable compressor.
|
||||
;
|
||||
; Copyright (C) 2000-2006 John F. Reiser
|
||||
; All Rights Reserved.
|
||||
;
|
||||
; UPX and the UCL library are free software; you can redistribute them
|
||||
; and/or modify them under the terms of the GNU General Public License as
|
||||
; published by the Free Software Foundation; either version 2 of
|
||||
; the License, or (at your option) any later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program; see the file COPYING.
|
||||
; If not, write to the Free Software Foundation, Inc.,
|
||||
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
;
|
||||
; Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
; <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
;
|
||||
; John F. Reiser
|
||||
; <jreiser@users.sourceforge.net>
|
||||
;
|
||||
|
||||
|
||||
BITS 32
|
||||
SECTION .text
|
||||
CPU 386
|
||||
|
||||
%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 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.
|
||||
|
||||
fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
||||
; patchLoader will modify to be
|
||||
; dword sz_uncompressed, sz_compressed
|
||||
; byte compressed_data...
|
||||
|
||||
; 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.
|
||||
; 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_ENTRY 9
|
||||
|
||||
%define ET_DYN 3
|
||||
|
||||
sub ecx, ecx
|
||||
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_ENTRY)
|
||||
mov esi, esp
|
||||
mov edi, esp
|
||||
call do_auxv ; clear bits in edx according to existing auxv slots
|
||||
|
||||
mov esi, esp
|
||||
L50:
|
||||
shr edx, 1 ; Carry = bottom bit
|
||||
sbb eax, eax ; -1 or 0
|
||||
sub ecx, eax ; count of 1 bits that remained in edx
|
||||
lea esp, [esp + sz_auxv * eax] ; allocate one auxv slot, if needed
|
||||
test edx,edx
|
||||
jne L50
|
||||
|
||||
mov edi, esp
|
||||
call do_auxv ; move; fill new auxv slots with AT_IGNORE
|
||||
|
||||
%define OVERHEAD 2048
|
||||
%define MAX_ELF_HDR 512
|
||||
|
||||
sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca
|
||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
||||
|
||||
; 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.
|
||||
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
|
||||
and edx, -PAGE_SIZE
|
||||
|
||||
push edx ; end of unmap region
|
||||
sub eax, eax ; 0
|
||||
cmp word [e_type + ebx], byte ET_DYN
|
||||
jne L53
|
||||
xchg eax, edx ; dynbase for ET_DYN; assumes mmap(0, ...) is placed after us!
|
||||
L53:
|
||||
push eax ; dynbase
|
||||
|
||||
mov esi, [e_entry + ebx] ; end of compressed data
|
||||
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] ; 1st &b_info
|
||||
sub esi, eax ; length of compressed data
|
||||
mov ebx, [ eax] ; length of uncompressed ELF headers
|
||||
mov ecx, [4+ eax] ; length of compressed ELF headers
|
||||
add ecx, byte szb_info
|
||||
lea edx, [3*4 + esp] ; &tmp
|
||||
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
|
||||
EXTERN upx_main
|
||||
call upx_main ; returns entry address
|
||||
add esp, byte (8 +1)*4 ; remove 8 params from pusha, also dynbase
|
||||
pop ecx ; end of unmap region
|
||||
pop ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
||||
add esp, dword MAX_ELF_HDR + OVERHEAD ; un-alloca
|
||||
push eax ; save entry address
|
||||
|
||||
dec edi ; auxv table
|
||||
sub eax,eax ; 0, also AT_NULL
|
||||
db 0x3c ; "cmpb al, byte ..." like "jmp 1+L60" but 1 byte shorter
|
||||
L60:
|
||||
scasd ; a_un.a_val etc.
|
||||
scasd ; a_type
|
||||
jne L60 ; not AT_NULL
|
||||
; edi now points at [AT_NULL]a_un.a_ptr which contains result of make_hatch()
|
||||
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push eax ; 32 bytes of zeroes now on stack, ready for 'popa'
|
||||
|
||||
sub ecx, ebx ; length to unmap
|
||||
mov al, __NR_munmap ; eax was 0 from L60
|
||||
jmp [edi] ; unmap ourselves via escape hatch, then goto entry
|
||||
|
||||
; called twice:
|
||||
; 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
|
||||
; entry: esi= src = &argc; edi= dst; ecx= # slots wanted; edx= bits wanted
|
||||
; exit: edi= &auxtab; edx= bits still needed
|
||||
do_auxv:
|
||||
; cld
|
||||
|
||||
L10: ; move argc+argv
|
||||
lodsd
|
||||
stosd
|
||||
test eax,eax
|
||||
jne L10
|
||||
|
||||
L20: ; move envp
|
||||
lodsd
|
||||
stosd
|
||||
test eax,eax
|
||||
jne L20
|
||||
|
||||
push edi ; return value
|
||||
L30: ; process auxv
|
||||
lodsd ; a_type
|
||||
stosd
|
||||
cmp eax, byte 32
|
||||
jae L32 ; prevent aliasing by 'btr' when 32<=a_type
|
||||
btr edx, eax ; no longer need a slot of type eax [Carry only]
|
||||
L32:
|
||||
test eax, eax ; AT_NULL ?
|
||||
lodsd
|
||||
stosd
|
||||
jnz L30 ; a_type != AT_NULL
|
||||
|
||||
sub edi, byte 8 ; backup to AT_NULL
|
||||
add ecx, ecx ; two words per auxv
|
||||
inc eax ; convert 0 to AT_IGNORE
|
||||
rep stosd ; allocate and fill
|
||||
dec eax ; convert AT_IGNORE to AT_NULL
|
||||
stosd ; re-terminate with AT_NULL
|
||||
stosd
|
||||
|
||||
pop edi ; &auxtab
|
||||
ret
|
||||
|
||||
%define __NR_mmap 197
|
||||
%define __NR_syscall 198
|
||||
|
||||
global mmap
|
||||
mmap:
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
xor eax,eax ; 0
|
||||
push eax ; convert to 64-bit
|
||||
push dword [7*4+ebp] ; offset
|
||||
push eax ; pad
|
||||
push dword [6*4+ebp] ; fd
|
||||
push dword [5*4+ebp] ; flags
|
||||
push dword [4*4+ebp] ; prot
|
||||
push dword [3*4+ebp] ; len
|
||||
push dword [2*4+ebp] ; addr
|
||||
push eax ; current thread
|
||||
mov al,__NR_mmap
|
||||
push eax
|
||||
push eax ; fake ret.addr
|
||||
mov al,__NR_syscall
|
||||
int 0x80
|
||||
leave
|
||||
ret
|
||||
|
||||
global brk
|
||||
brk:
|
||||
ret
|
||||
|
||||
%define __NR_exit 1
|
||||
%define __NR_read 3
|
||||
%define __NR_write 4
|
||||
%define __NR_open 5
|
||||
%define __NR_close 6
|
||||
%define __NR_munmap 73
|
||||
%define __NR_mprotect 74
|
||||
|
||||
global exit
|
||||
exit:
|
||||
mov al,__NR_exit
|
||||
nf_sysgo:
|
||||
movzx eax,al
|
||||
int 0x80
|
||||
ret
|
||||
|
||||
global read
|
||||
read:
|
||||
mov al,__NR_read
|
||||
jmp nf_sysgo
|
||||
|
||||
global write
|
||||
write:
|
||||
mov al,__NR_write
|
||||
jmp nf_sysgo
|
||||
|
||||
global open
|
||||
open:
|
||||
mov al,__NR_open
|
||||
jmp nf_sysgo
|
||||
|
||||
global close
|
||||
close:
|
||||
mov al,__NR_close
|
||||
jmp nf_sysgo
|
||||
|
||||
|
||||
global munmap
|
||||
munmap:
|
||||
mov al,__NR_munmap
|
||||
jmp nf_sysgo
|
||||
|
||||
global mprotect
|
||||
mprotect:
|
||||
mov al,__NR_mprotect
|
||||
jmp nf_sysgo
|
||||
|
||||
; vi:ts=8:et:nowrap
|
||||
|
||||
49
src/stub/src/i386-BSD.elf-fold.lds
Normal file
49
src/stub/src/i386-BSD.elf-fold.lds
Normal file
@ -0,0 +1,49 @@
|
||||
/* l_lx_elf86.lds --
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
|
||||
OUTPUT_ARCH(i386)
|
||||
/*ENTRY(_start)*/
|
||||
PHDRS
|
||||
{
|
||||
text PT_LOAD FILEHDR PHDRS ;
|
||||
data PT_LOAD ; /* for setting brk(0) */
|
||||
}
|
||||
SECTIONS
|
||||
{
|
||||
/* 0x00c01000: 12MB+4KB for Fedora Core 5 vDSO at 0xc00000 */
|
||||
. = 0x00c01000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
|
||||
.text : {
|
||||
*(.text)
|
||||
*(.data)
|
||||
} : text
|
||||
.data : {
|
||||
} : data
|
||||
}
|
||||
588
src/stub/src/i386-BSD.elf-main.c
Normal file
588
src/stub/src/i386-BSD.elf-main.c
Normal file
@ -0,0 +1,588 @@
|
||||
/* l_lx_elf.c -- stub loader for Linux x86 ELF executable
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#include "include/BSD.h"
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// configuration section
|
||||
**************************************************************************/
|
||||
|
||||
// In order to make it much easier to move this code at runtime and execute
|
||||
// it at an address different from it load address: there must be no
|
||||
// static data, and no string constants.
|
||||
|
||||
#if 1 /*{*/
|
||||
#define DPRINTF(a) /* empty: no debug drivel */
|
||||
#else /*}{*/
|
||||
#include "stdarg.h"
|
||||
|
||||
static int
|
||||
unsimal(unsigned x, char *ptr, int n)
|
||||
{
|
||||
if (10<=x) {
|
||||
n = unsimal(x/10, ptr, n);
|
||||
x %= 10;
|
||||
}
|
||||
ptr[n] = '0' + x;
|
||||
return 1+ n;
|
||||
}
|
||||
|
||||
static int
|
||||
decimal(int x, char *ptr, int n)
|
||||
{
|
||||
if (x < 0) {
|
||||
*ptr++ = '-'; ++n;
|
||||
x = -x;
|
||||
}
|
||||
return unsimal(x, ptr, n);
|
||||
}
|
||||
|
||||
extern char const *STR_hex();
|
||||
|
||||
static int
|
||||
heximal(unsigned x, char *ptr, int n)
|
||||
{
|
||||
if (16<=x) {
|
||||
n = heximal(x>>4, ptr, n);
|
||||
x &= 0xf;
|
||||
}
|
||||
ptr[n] = STR_hex()[x];
|
||||
return 1+ n;
|
||||
}
|
||||
|
||||
|
||||
#define DPRINTF(a) dprintf a
|
||||
extern char const *STR_0x();
|
||||
extern char const *STR_xread();
|
||||
extern char const *STR_unpackExtent();
|
||||
extern char const *STR_make_hatch_arm();
|
||||
extern char const *STR_auxv_up();
|
||||
extern char const *STR_xfind_pages();
|
||||
extern char const *STR_do_xmap();
|
||||
extern char const *STR_upx_main();
|
||||
|
||||
static int
|
||||
dprintf(char const *fmt, ...)
|
||||
{
|
||||
char c;
|
||||
int n= 0;
|
||||
char *ptr;
|
||||
char buf[20];
|
||||
va_list va; va_start(va, fmt);
|
||||
ptr= &buf[0];
|
||||
while (0!=(c= *fmt++)) if ('%'!=c) goto literal;
|
||||
else switch (c= *fmt++) {
|
||||
default: {
|
||||
literal:
|
||||
n+= write(2, fmt-1, 1);
|
||||
} break;
|
||||
case 0: goto done; /* early */
|
||||
case 'u': {
|
||||
n+= write(2, buf, unsimal(va_arg(va, unsigned), buf, 0));
|
||||
} break;
|
||||
case 'd': {
|
||||
n+= write(2, buf, decimal(va_arg(va, int), buf, 0));
|
||||
} break;
|
||||
case 'p': /* same as 'x'; relies on sizeof(int)==sizeof(void *) */
|
||||
case 'x': {
|
||||
buf[0] = '0';
|
||||
buf[1] = 'x';
|
||||
n+= write(2, buf, heximal(va_arg(va, int), buf, 2));
|
||||
} break;
|
||||
}
|
||||
done:
|
||||
va_end(va);
|
||||
return n;
|
||||
}
|
||||
#endif /*}*/
|
||||
|
||||
#define MAX_ELF_HDR 512 // Elf32_Ehdr + n*Elf32_Phdr must fit in this
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// "file" util
|
||||
**************************************************************************/
|
||||
|
||||
struct Extent {
|
||||
size_t size; // must be first to match size[0] uncompressed size
|
||||
char *buf;
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
#if (ACC_CC_GNUC >= 0x030300) && defined(__i386__) /*{*/
|
||||
__attribute__((__noinline__, __used__, regparm(3), stdcall))
|
||||
#endif /*}*/
|
||||
xread(struct Extent *x, char *buf, size_t count)
|
||||
{
|
||||
char *p=x->buf, *q=buf;
|
||||
size_t j;
|
||||
DPRINTF((STR_xread(), x, x->size, x->buf, buf, count));
|
||||
if (x->size < count) {
|
||||
exit(127);
|
||||
}
|
||||
for (j = count; 0!=j--; ++p, ++q) {
|
||||
*q = *p;
|
||||
}
|
||||
x->buf += count;
|
||||
x->size -= count;
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// util
|
||||
**************************************************************************/
|
||||
|
||||
#if 1 //{ save space
|
||||
#define ERR_LAB error: exit(127);
|
||||
#define err_exit(a) goto error
|
||||
#else //}{ save debugging time
|
||||
#define ERR_LAB
|
||||
static void
|
||||
err_exit(int a) __attribute__ ((__noreturn__));
|
||||
{
|
||||
(void)a; // debugging convenience
|
||||
exit(127);
|
||||
}
|
||||
#endif //}
|
||||
|
||||
static void *
|
||||
do_brk(void *addr)
|
||||
{
|
||||
return brk(addr);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
// UPX & NRV stuff
|
||||
**************************************************************************/
|
||||
|
||||
typedef void f_unfilter(
|
||||
nrv_byte *, // also addvalue
|
||||
nrv_uint,
|
||||
unsigned cto8, // junk in high 24 bits
|
||||
unsigned ftid
|
||||
);
|
||||
typedef int f_expand(
|
||||
const nrv_byte *, nrv_uint,
|
||||
nrv_byte *, nrv_uint *, unsigned );
|
||||
|
||||
static void
|
||||
unpackExtent(
|
||||
struct Extent *const xi, // input
|
||||
struct Extent *const xo, // output
|
||||
f_expand *const f_decompress,
|
||||
f_unfilter *f_unf
|
||||
)
|
||||
{
|
||||
DPRINTF((STR_unpackExtent(),
|
||||
xi, xi->size, xi->buf, xo, xo->size, xo->buf, f_decompress, f_unf));
|
||||
while (xo->size) {
|
||||
struct b_info h;
|
||||
// Note: if h.sz_unc == h.sz_cpr then the block was not
|
||||
// compressible and is stored in its uncompressed form.
|
||||
|
||||
// Read and check block sizes.
|
||||
xread(xi, (char *)&h, sizeof(h));
|
||||
if (h.sz_unc == 0) { // uncompressed size 0 -> EOF
|
||||
if (h.sz_cpr != UPX_MAGIC_LE32) // h.sz_cpr must be h->magic
|
||||
err_exit(2);
|
||||
if (xi->size != 0) // all bytes must be written
|
||||
err_exit(3);
|
||||
break;
|
||||
}
|
||||
if (h.sz_cpr <= 0) {
|
||||
err_exit(4);
|
||||
ERR_LAB
|
||||
}
|
||||
if (h.sz_cpr > h.sz_unc
|
||||
|| h.sz_unc > xo->size ) {
|
||||
err_exit(5);
|
||||
}
|
||||
// Now we have:
|
||||
// assert(h.sz_cpr <= h.sz_unc);
|
||||
// assert(h.sz_unc > 0 && h.sz_unc <= blocksize);
|
||||
// assert(h.sz_cpr > 0 && h.sz_cpr <= blocksize);
|
||||
|
||||
if (h.sz_cpr < h.sz_unc) { // Decompress block
|
||||
nrv_uint out_len = h.sz_unc; // EOF for lzma
|
||||
int const j = (*f_decompress)((unsigned char *)xi->buf, h.sz_cpr,
|
||||
(unsigned char *)xo->buf, &out_len, *(int *)(void *)&h.b_method );
|
||||
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
|
||||
err_exit(7);
|
||||
// Skip Ehdr+Phdrs: separate 1st block, not filtered
|
||||
if (h.b_ftid!=0 && f_unf // have filter
|
||||
&& ((512 < out_len) // this block is longer than Ehdr+Phdrs
|
||||
|| (xo->size==(unsigned)h.sz_unc) ) // block is last in Extent
|
||||
) {
|
||||
(*f_unf)((unsigned char *)xo->buf, out_len, h.b_cto8, h.b_ftid);
|
||||
}
|
||||
xi->buf += h.sz_cpr;
|
||||
xi->size -= h.sz_cpr;
|
||||
}
|
||||
else { // copy literal block
|
||||
xread(xi, xo->buf, h.sz_cpr);
|
||||
}
|
||||
xo->buf += h.sz_unc;
|
||||
xo->size -= h.sz_unc;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__i386__) /*{*/
|
||||
// Create (or find) an escape hatch to use when munmapping ourselves the stub.
|
||||
// Called by do_xmap to create it; remembered in AT_NULL.d_val
|
||||
static void *
|
||||
make_hatch_x86(Elf32_Phdr const *const phdr, unsigned const reloc)
|
||||
{
|
||||
unsigned *hatch = 0;
|
||||
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
|
||||
// The format of the 'if' is
|
||||
// if ( ( (hatch = loc1), test_loc1 )
|
||||
// || ( (hatch = loc2), test_loc2 ) ) {
|
||||
// action
|
||||
// }
|
||||
// which uses the comma to save bytes when test_locj involves locj
|
||||
// and the action is the same when either test succeeds.
|
||||
|
||||
// Try page fragmentation just beyond .text .
|
||||
if ( ( (hatch = (void *)(phdr->p_memsz + phdr->p_vaddr + reloc)),
|
||||
( phdr->p_memsz==phdr->p_filesz // don't pollute potential .bss
|
||||
&& 4<=(~PAGE_MASK & -(int)hatch) ) ) // space left on page
|
||||
// Try Elf32_Ehdr.e_ident[12..15] . warning: 'const' cast away
|
||||
|| ( (hatch = (void *)(&((Elf32_Ehdr *)phdr->p_vaddr + reloc)->e_ident[12])),
|
||||
(phdr->p_offset==0) ) ) {
|
||||
// Omitting 'const' saves repeated literal in gcc.
|
||||
unsigned /*const*/ escape = 0xc36180cd; // "int $0x80; popa; ret"
|
||||
// Don't store into read-only page if value is already there.
|
||||
if (* (volatile unsigned*) hatch != escape) {
|
||||
* hatch = escape;
|
||||
}
|
||||
}
|
||||
}
|
||||
return hatch;
|
||||
}
|
||||
#elif defined(__arm__) /*}{*/
|
||||
static void *
|
||||
make_hatch_arm(Elf32_Phdr const *const phdr, unsigned const reloc)
|
||||
{
|
||||
unsigned *hatch = 0;
|
||||
DPRINTF((STR_make_hatch_arm(),phdr,reloc));
|
||||
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
|
||||
// The format of the 'if' is
|
||||
// if ( ( (hatch = loc1), test_loc1 )
|
||||
// || ( (hatch = loc2), test_loc2 ) ) {
|
||||
// action
|
||||
// }
|
||||
// which uses the comma to save bytes when test_locj involves locj
|
||||
// and the action is the same when either test succeeds.
|
||||
|
||||
// Try page fragmentation just beyond .text .
|
||||
if ( ( (hatch = (void *)(phdr->p_memsz + phdr->p_vaddr + reloc)),
|
||||
( phdr->p_memsz==phdr->p_filesz // don't pollute potential .bss
|
||||
&& 8<=(~PAGE_MASK & -(int)hatch) ) ) // space left on page
|
||||
// Try Elf32_Ehdr.e_ident[8..15] . warning: 'const' cast away
|
||||
|| ( (hatch = (void *)(&((Elf32_Ehdr *)phdr->p_vaddr + reloc)->e_ident[8])),
|
||||
(phdr->p_offset==0) ) )
|
||||
{
|
||||
hatch[0]= 0xef90005b; // syscall __NR_unmap
|
||||
hatch[1]= 0xe1a0f00e; // mov pc,lr
|
||||
}
|
||||
}
|
||||
return hatch;
|
||||
}
|
||||
#endif /*}*/
|
||||
|
||||
static void
|
||||
#if defined(__i386__) /*{*/
|
||||
__attribute__((regparm(2), stdcall))
|
||||
#endif /*}*/
|
||||
upx_bzero(char *p, size_t len)
|
||||
{
|
||||
if (len) do {
|
||||
*p++= 0;
|
||||
} while (--len);
|
||||
}
|
||||
#define bzero upx_bzero
|
||||
|
||||
|
||||
static void
|
||||
#if defined(__i386__) /*{*/
|
||||
__attribute__((regparm(3), stdcall))
|
||||
#endif /*}*/
|
||||
auxv_up(Elf32_auxv_t *av, unsigned const type, unsigned const value)
|
||||
{
|
||||
DPRINTF((STR_auxv_up(),av,type,value));
|
||||
if (av
|
||||
#if defined(__i386__) /*{*/
|
||||
&& 0==(1&(int)av) /* PT_INTERP usually inhibits, except for hatch */
|
||||
#endif /*}*/
|
||||
)
|
||||
for (;; ++av) {
|
||||
if (av->a_type==type || (av->a_type==AT_IGNORE && type!=AT_NULL)) {
|
||||
av->a_type = type;
|
||||
av->a_un.a_val = value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The PF_* and PROT_* bits are {1,2,4}; the conversion table fits in 32 bits.
|
||||
#define REP8(x) \
|
||||
((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28))
|
||||
#define EXP8(y) \
|
||||
((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0)
|
||||
#define PF_TO_PROT(pf) \
|
||||
((PROT_READ|PROT_WRITE|PROT_EXEC) & ( \
|
||||
( (REP8(PROT_EXEC ) & EXP8(PF_X)) \
|
||||
|(REP8(PROT_READ ) & EXP8(PF_R)) \
|
||||
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
|
||||
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
|
||||
|
||||
|
||||
// Find convex hull of PT_LOAD (the minimal interval which covers all PT_LOAD),
|
||||
// and mmap that much, to be sure that a kernel using exec-shield-randomize
|
||||
// won't place the first piece in a way that leaves no room for the rest.
|
||||
static unsigned long // returns relocation constant
|
||||
#if defined(__i386__) /*{*/
|
||||
__attribute__((regparm(3), stdcall))
|
||||
#endif /*}*/
|
||||
xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum,
|
||||
char **const p_brk
|
||||
)
|
||||
{
|
||||
size_t lo= ~0, hi= 0, szlo= 0;
|
||||
char *addr;
|
||||
DPRINTF((STR_xfind_pages(), mflags, phdr, phnum, p_brk));
|
||||
mflags += MAP_PRIVATE | MAP_ANONYMOUS; // '+' can optimize better than '|'
|
||||
for (; --phnum>=0; ++phdr) if (PT_LOAD==phdr->p_type) {
|
||||
if (phdr->p_vaddr < lo) {
|
||||
lo = phdr->p_vaddr;
|
||||
szlo = phdr->p_filesz;
|
||||
}
|
||||
if (hi < (phdr->p_memsz + phdr->p_vaddr)) {
|
||||
hi = phdr->p_memsz + phdr->p_vaddr;
|
||||
}
|
||||
}
|
||||
szlo += ~PAGE_MASK & lo; // page fragment on lo edge
|
||||
lo -= ~PAGE_MASK & lo; // round down to page boundary
|
||||
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
|
||||
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
|
||||
addr = mmap((void *)lo, hi, PROT_NONE, mflags, -1, 0);
|
||||
*p_brk = hi + addr; // the logical value of brk(0)
|
||||
//mprotect(szlo + addr, hi - szlo, PROT_NONE); // no access, but keep the frames!
|
||||
return (unsigned long)addr - lo;
|
||||
}
|
||||
|
||||
static Elf32_Addr // entry address
|
||||
do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi,
|
||||
Elf32_auxv_t *const av, unsigned *p_reloc, f_unfilter *const f_unf)
|
||||
{
|
||||
Elf32_Phdr const *phdr = (Elf32_Phdr const *) (ehdr->e_phoff +
|
||||
(void const *)ehdr);
|
||||
char *v_brk;
|
||||
unsigned const reloc = xfind_pages(
|
||||
((ET_EXEC==ehdr->e_type) ? MAP_FIXED : 0), phdr, ehdr->e_phnum, &v_brk);
|
||||
int j;
|
||||
DPRINTF((STR_do_xmap(),
|
||||
fdi, ehdr, xi, (xi? xi->size: 0), (xi? xi->buf: 0), av, p_reloc, f_unf));
|
||||
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
|
||||
if (PT_PHDR==phdr->p_type) {
|
||||
auxv_up(av, AT_PHDR, phdr->p_vaddr + reloc);
|
||||
}
|
||||
else if (PT_LOAD==phdr->p_type) {
|
||||
unsigned const prot = PF_TO_PROT(phdr->p_flags);
|
||||
struct Extent xo;
|
||||
size_t mlen = xo.size = phdr->p_filesz;
|
||||
char *addr = xo.buf = (char *)(phdr->p_vaddr + reloc);
|
||||
char *haddr = phdr->p_memsz + addr;
|
||||
size_t frag = (int)addr &~ PAGE_MASK;
|
||||
mlen += frag;
|
||||
addr -= frag;
|
||||
|
||||
if (addr != mmap(addr, mlen
|
||||
#if defined(__i386__) /*{*/
|
||||
// Decompressor can overrun the destination by 3 bytes.
|
||||
+ (xi ? 3 : 0)
|
||||
#endif /*}*/
|
||||
, prot | (xi ? PROT_WRITE : 0),
|
||||
MAP_FIXED | MAP_PRIVATE | (xi ? MAP_ANONYMOUS : 0),
|
||||
(xi ? -1 : fdi), phdr->p_offset - frag) ) {
|
||||
err_exit(8);
|
||||
}
|
||||
if (xi) {
|
||||
unpackExtent(xi, &xo, (f_expand *)fdi,
|
||||
((PROT_EXEC & prot) ? f_unf : 0) );
|
||||
}
|
||||
// Linux does not fixup the low end, so neither do we.
|
||||
//if (PROT_WRITE & prot) {
|
||||
// bzero(addr, frag); // fragment at lo end
|
||||
//}
|
||||
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
|
||||
if (PROT_WRITE & prot) { // note: read-only .bss not supported here
|
||||
bzero(mlen+addr, frag); // fragment at hi end
|
||||
}
|
||||
if (xi) {
|
||||
#if defined(__i386__) /*{*/
|
||||
void *const hatch = make_hatch_x86(phdr, reloc);
|
||||
if (0!=hatch) {
|
||||
/* always update AT_NULL, especially for compressed PT_INTERP */
|
||||
auxv_up((Elf32_auxv_t *)(~1 & (int)av), AT_NULL, (unsigned)hatch);
|
||||
}
|
||||
#elif defined(__arm__) /*}{*/
|
||||
void *const hatch = make_hatch_arm(phdr, reloc);
|
||||
if (0!=hatch) {
|
||||
auxv_up((Elf32_auxv_t *)(void *)av, AT_NULL, (unsigned)hatch);
|
||||
}
|
||||
#endif /*}*/
|
||||
if (0!=mprotect(addr, mlen, prot)) {
|
||||
err_exit(10);
|
||||
ERR_LAB
|
||||
}
|
||||
}
|
||||
addr += mlen + frag; /* page boundary on hi end */
|
||||
if (addr < haddr) { // need pages for .bss
|
||||
if (addr != mmap(addr, haddr - addr, prot,
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) {
|
||||
err_exit(9);
|
||||
}
|
||||
}
|
||||
#if defined(__i386__) /*{*/
|
||||
else if (xi) { // cleanup if decompressor overrun crosses page boundary
|
||||
mlen = ~PAGE_MASK & (3+ mlen);
|
||||
if (mlen<=3) { // page fragment was overrun buffer only
|
||||
munmap(addr, mlen);
|
||||
}
|
||||
}
|
||||
#endif /*}*/
|
||||
}
|
||||
if (!xi) { // 2nd call (PT_INTERP); close()+check is smaller here
|
||||
if (0!=close(fdi)) {
|
||||
err_exit(11);
|
||||
}
|
||||
}
|
||||
else { // 1st call (main); also have (0!=av) here
|
||||
if (ET_DYN!=ehdr->e_type) {
|
||||
// Needed only if compressed shell script invokes compressed shell.
|
||||
do_brk(v_brk);
|
||||
}
|
||||
}
|
||||
if (0!=p_reloc) {
|
||||
*p_reloc = reloc;
|
||||
}
|
||||
return ehdr->e_entry + reloc;
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// upx_main - called by our entry code
|
||||
//
|
||||
// This function is optimized for size.
|
||||
**************************************************************************/
|
||||
|
||||
void *upx_main(
|
||||
Elf32_auxv_t *const av,
|
||||
unsigned const sz_compressed,
|
||||
f_expand *const f_decompress,
|
||||
f_unfilter */*const*/ f_unfilter,
|
||||
struct Extent xo,
|
||||
struct Extent xi,
|
||||
unsigned const volatile dynbase
|
||||
) __asm__("upx_main");
|
||||
|
||||
void *upx_main(
|
||||
Elf32_auxv_t *const av,
|
||||
unsigned const sz_compressed,
|
||||
f_expand *const f_decompress,
|
||||
f_unfilter */*const*/ f_unf,
|
||||
struct Extent xo, // {sz_unc, ehdr} for ELF headers
|
||||
struct Extent xi, // {sz_cpr, &b_info} for ELF headers
|
||||
unsigned const volatile dynbase // value+result: compiler must not change
|
||||
)
|
||||
{
|
||||
Elf32_Ehdr *const ehdr = (Elf32_Ehdr *)(void *)xo.buf; // temp char[MAX_ELF_HDR+OVERHEAD]
|
||||
Elf32_Phdr const *phdr = (Elf32_Phdr const *)(1+ ehdr);
|
||||
Elf32_Addr reloc;
|
||||
Elf32_Addr entry;
|
||||
|
||||
// sizeof(Ehdr+Phdrs), compressed; including b_info header
|
||||
size_t const sz_pckhdrs = xi.size;
|
||||
|
||||
DPRINTF((STR_upx_main(),
|
||||
av, sz_compressed, f_decompress, f_unf, &xo, xo.size, xo.buf,
|
||||
&xi, xi.size, xi.buf, dynbase));
|
||||
#if defined(__i386__) /*{*/
|
||||
f_unf = (f_unfilter *)(2+ (long)f_decompress);
|
||||
#endif /*}*/
|
||||
|
||||
// Uncompress Ehdr and Phdrs.
|
||||
unpackExtent(&xi, &xo, f_decompress, 0);
|
||||
|
||||
// Prepare to decompress the Elf headers again, into the first PT_LOAD.
|
||||
xi.buf -= sz_pckhdrs;
|
||||
xi.size = sz_compressed;
|
||||
|
||||
// Some kernels omit AT_PHNUM,AT_PHENT,AT_PHDR because this stub has no PT_INTERP.
|
||||
// That is "too much" optimization. Linux 2.6.x seems to give all AT_*.
|
||||
//auxv_up(av, AT_PAGESZ, PAGE_SIZE); /* ld-linux.so.2 does not need this */
|
||||
auxv_up(av, AT_PHNUM , ehdr->e_phnum);
|
||||
auxv_up(av, AT_PHENT , ehdr->e_phentsize);
|
||||
auxv_up(av, AT_PHDR , dynbase + (unsigned)(1+(Elf32_Ehdr *)phdr->p_vaddr));
|
||||
// AT_PHDR.a_un.a_val is set again by do_xmap if PT_PHDR is present.
|
||||
// This is necessary for ET_DYN if|when we override a prelink address.
|
||||
|
||||
entry = do_xmap((int)f_decompress, ehdr, &xi, av, &reloc, f_unf);
|
||||
auxv_up(av, AT_ENTRY , entry); // might not be necessary?
|
||||
|
||||
{ // Map PT_INTERP program interpreter
|
||||
int j;
|
||||
for (j=0; j < ehdr->e_phnum; ++phdr, ++j) if (PT_INTERP==phdr->p_type) {
|
||||
int const fdi = open(reloc + (char const *)phdr->p_vaddr, O_RDONLY, 0);
|
||||
if (0 > fdi) {
|
||||
err_exit(18);
|
||||
}
|
||||
if (MAX_ELF_HDR!=read(fdi, (void *)ehdr, MAX_ELF_HDR)) {
|
||||
ERR_LAB
|
||||
err_exit(19);
|
||||
}
|
||||
entry = do_xmap(fdi, ehdr, 0, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (void *)entry;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
vi:ts=4:et:nowrap
|
||||
*/
|
||||
|
||||
348
src/stub/src/include/BSD.h
Normal file
348
src/stub/src/include/BSD.h
Normal file
@ -0,0 +1,348 @@
|
||||
/* BSD.h -- common stuff to the BSD stub loaders
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
// NOTE:
|
||||
// to avoid endless problems with moving libc and kernel headers, this
|
||||
// section is now completely freestanding
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
|
||||
# define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
|
||||
# elif defined(__GNUC_MINOR__)
|
||||
# define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
|
||||
# else
|
||||
# define ACC_CC_GNUC (__GNUC__ * 0x10000L)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define ACC_UNUSED(var) ((void) var)
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
//
|
||||
**************************************************************************/
|
||||
|
||||
// <stddef.h>
|
||||
typedef long ptrdiff_t;
|
||||
typedef long ssize_t;
|
||||
typedef unsigned long size_t;
|
||||
// <stdint.h>
|
||||
typedef unsigned char uint8_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef int int32_t;
|
||||
typedef unsigned uint32_t;
|
||||
#if (ACC_CC_GNUC >= 0x020800ul)
|
||||
__extension__ typedef long long int64_t;
|
||||
__extension__ typedef unsigned long long uint64_t;
|
||||
#elif defined(_WIN32)
|
||||
typedef __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#else
|
||||
typedef long long int64_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
#endif
|
||||
typedef size_t uintptr_t;
|
||||
|
||||
// <sys/types.h>
|
||||
typedef long off_t;
|
||||
//typedef int64_t off64_t;
|
||||
//typedef size_t caddr_t;
|
||||
typedef void* caddr_t;
|
||||
typedef unsigned pid_t;
|
||||
|
||||
struct rusage;
|
||||
struct timex;
|
||||
struct timeval {
|
||||
unsigned tv_sec;
|
||||
unsigned tv_usec;
|
||||
};
|
||||
struct timespec {
|
||||
unsigned tv_sec;
|
||||
long tv_nsec;
|
||||
};
|
||||
|
||||
|
||||
// misc constants
|
||||
|
||||
#if defined(__amd64__) || defined(__powerpc64__)
|
||||
#define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page
|
||||
#define PAGE_SIZE ( 1ul<<12)
|
||||
#elif defined(__i386__) || defined(__powerpc__) || defined(__arm__)
|
||||
#define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page
|
||||
#define PAGE_SIZE ( 1ul<<12)
|
||||
#endif
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
|
||||
#define O_RDONLY 00
|
||||
#define O_WRONLY 01
|
||||
#define O_RDWR 02
|
||||
#define O_CREAT 0100
|
||||
#define O_EXCL 0200
|
||||
|
||||
#define R_OK 4
|
||||
#define W_OK 2
|
||||
#define X_OK 1
|
||||
#define F_OK 0
|
||||
|
||||
#define F_GETFD 1
|
||||
#define F_SETFD 2
|
||||
#define FD_CLOEXEC 1
|
||||
|
||||
// <errno.h>
|
||||
#define ENOENT 2
|
||||
#define EINTR 4
|
||||
|
||||
// <sys/mman.h>
|
||||
#define PROT_READ 0x1
|
||||
#define PROT_WRITE 0x2
|
||||
#define PROT_EXEC 0x4
|
||||
#define PROT_NONE 0x0
|
||||
|
||||
#define MAP_SHARED 0x01
|
||||
#define MAP_PRIVATE 0x02
|
||||
#define MAP_FIXED 0x10
|
||||
#define MAP_ANONYMOUS 0x1000 /* differs from Linux */
|
||||
#define MAP_DENYWRITE 0x0 /* does not exist on BSD ? */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// i386 syscalls
|
||||
//
|
||||
// Because of different <asm/unistd.h> versions and subtle bugs
|
||||
// in both gcc and egcs we define all syscalls manually.
|
||||
//
|
||||
// Also, errno conversion is not necessary in our case, and we
|
||||
// use optimized assembly statements to further decrease the size.
|
||||
**************************************************************************/
|
||||
|
||||
extern void *brk(void *);
|
||||
extern int close(int);
|
||||
extern void *mmap(void *, size_t, int, int, int, unsigned);
|
||||
extern int munmap(void *, size_t);
|
||||
extern int mprotect(void const *, size_t, int);
|
||||
extern int open(char const *, unsigned, unsigned);
|
||||
extern ssize_t read(int, void *, size_t);
|
||||
extern ssize_t write(int, char const *, size_t);
|
||||
void exit(int) __attribute__((noreturn));
|
||||
|
||||
/*************************************************************************
|
||||
// <elf.h>
|
||||
**************************************************************************/
|
||||
|
||||
typedef uint16_t Elf32_Half;
|
||||
typedef uint16_t Elf64_Half;
|
||||
typedef uint32_t Elf32_Word;
|
||||
typedef int32_t Elf32_Sword;
|
||||
typedef uint32_t Elf64_Word;
|
||||
typedef int32_t Elf64_Sword;
|
||||
typedef uint64_t Elf32_Xword;
|
||||
typedef int64_t Elf32_Sxword;
|
||||
typedef uint64_t Elf64_Xword;
|
||||
typedef int64_t Elf64_Sxword;
|
||||
typedef uint32_t Elf32_Addr;
|
||||
typedef uint64_t Elf64_Addr;
|
||||
typedef uint32_t Elf32_Off;
|
||||
typedef uint64_t Elf64_Off;
|
||||
typedef uint16_t Elf32_Section;
|
||||
typedef uint16_t Elf64_Section;
|
||||
typedef Elf32_Half Elf32_Versym;
|
||||
typedef Elf64_Half Elf64_Versym;
|
||||
|
||||
|
||||
#define EI_NIDENT 16
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char e_ident[EI_NIDENT];
|
||||
Elf32_Half e_type;
|
||||
Elf32_Half e_machine;
|
||||
Elf32_Word e_version;
|
||||
Elf32_Addr e_entry;
|
||||
Elf32_Off e_phoff;
|
||||
Elf32_Off e_shoff;
|
||||
Elf32_Word e_flags;
|
||||
Elf32_Half e_ehsize;
|
||||
Elf32_Half e_phentsize;
|
||||
Elf32_Half e_phnum;
|
||||
Elf32_Half e_shentsize;
|
||||
Elf32_Half e_shnum;
|
||||
Elf32_Half e_shstrndx;
|
||||
} Elf32_Ehdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char e_ident[EI_NIDENT];
|
||||
Elf64_Half e_type;
|
||||
Elf64_Half e_machine;
|
||||
Elf64_Word e_version;
|
||||
Elf64_Addr e_entry;
|
||||
Elf64_Off e_phoff;
|
||||
Elf64_Off e_shoff;
|
||||
Elf64_Word e_flags;
|
||||
Elf64_Half e_ehsize;
|
||||
Elf64_Half e_phentsize;
|
||||
Elf64_Half e_phnum;
|
||||
Elf64_Half e_shentsize;
|
||||
Elf64_Half e_shnum;
|
||||
Elf64_Half e_shstrndx;
|
||||
} Elf64_Ehdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Elf32_Word p_type;
|
||||
Elf32_Off p_offset;
|
||||
Elf32_Addr p_vaddr;
|
||||
Elf32_Addr p_paddr;
|
||||
Elf32_Word p_filesz;
|
||||
Elf32_Word p_memsz;
|
||||
Elf32_Word p_flags;
|
||||
Elf32_Word p_align;
|
||||
} Elf32_Phdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Elf64_Word p_type;
|
||||
Elf64_Word p_flags;
|
||||
Elf64_Off p_offset;
|
||||
Elf64_Addr p_vaddr;
|
||||
Elf64_Addr p_paddr;
|
||||
Elf64_Xword p_filesz;
|
||||
Elf64_Xword p_memsz;
|
||||
Elf64_Xword p_align;
|
||||
} Elf64_Phdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t a_type;
|
||||
union {
|
||||
uint32_t a_val;
|
||||
} a_un;
|
||||
} Elf32_auxv_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t a_type;
|
||||
union
|
||||
{
|
||||
uint64_t a_val;
|
||||
} a_un;
|
||||
} Elf64_auxv_t;
|
||||
|
||||
#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_ENTRY 9
|
||||
|
||||
#define ET_EXEC 2
|
||||
#define ET_DYN 3
|
||||
|
||||
#define PF_X 1
|
||||
#define PF_W 2
|
||||
#define PF_R 4
|
||||
|
||||
#define PT_LOAD 1
|
||||
#define PT_INTERP 3
|
||||
#define PT_PHDR 6
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// UPX stuff
|
||||
**************************************************************************/
|
||||
|
||||
// !!! must be the same as in p_unix.h !!!
|
||||
#define OVERHEAD 2048
|
||||
|
||||
#define UPX_MAGIC_LE32 0x21585055 // "UPX!"
|
||||
|
||||
// patch constants for our loader (le32 format)
|
||||
#define UPX1 0x31585055 // "UPX1"
|
||||
#define UPX2 0x32585055 // "UPX2"
|
||||
#define UPX3 0x33585055 // "UPX4"
|
||||
#define UPX4 0x34585055 // "UPX4"
|
||||
#define UPX5 0x35585055 // "UPX5"
|
||||
|
||||
|
||||
typedef int nrv_int;
|
||||
typedef int nrv_int32;
|
||||
typedef unsigned int nrv_uint;
|
||||
typedef unsigned int nrv_uint32;
|
||||
#define nrv_byte unsigned char
|
||||
#define nrv_bytep unsigned char *
|
||||
#define nrv_voidp void *
|
||||
|
||||
|
||||
// From ../p_unix.h
|
||||
struct b_info { // 12-byte header before each compressed block
|
||||
uint32_t sz_unc; // uncompressed_size
|
||||
uint32_t sz_cpr; // compressed_size
|
||||
unsigned char b_method; // compression algorithm
|
||||
unsigned char b_ftid; // filter id
|
||||
unsigned char b_cto8; // filter parameter
|
||||
unsigned char b_unused;
|
||||
};
|
||||
|
||||
struct l_info // 12-byte trailer in header for loader (offset 116)
|
||||
{
|
||||
uint32_t l_checksum;
|
||||
uint32_t l_magic;
|
||||
uint16_t l_lsize;
|
||||
uint8_t l_version;
|
||||
uint8_t l_format;
|
||||
};
|
||||
|
||||
struct p_info // 12-byte packed program header follows stub loader
|
||||
{
|
||||
uint32_t p_progid;
|
||||
uint32_t p_filesize;
|
||||
uint32_t p_blocksize;
|
||||
};
|
||||
|
||||
|
||||
#define CONST_CAST(type, var) \
|
||||
((type) ((uintptr_t) (var)))
|
||||
|
||||
|
||||
#if (ACC_CC_GNUC >= 0x030300)
|
||||
# define __attribute_cdecl __attribute__((__cdecl__, __used__))
|
||||
#elif (ACC_CC_GNUC >= 0x020700)
|
||||
# define __attribute_cdecl __attribute__((__cdecl__))
|
||||
#else
|
||||
# define __attribute_cdecl
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
vi:ts=4:et:nowrap
|
||||
*/
|
||||
|
||||
@ -160,17 +160,13 @@ struct timespec {
|
||||
#define __NR_access 33
|
||||
#define __NR_brk 45
|
||||
#define __NR_fcntl 55
|
||||
#define __NR_getrusage 77
|
||||
#define __NR_gettimeofday 78
|
||||
#define __NR_mmap 90
|
||||
#define __NR_munmap 91
|
||||
#define __NR_ftruncate 93
|
||||
#define __NR_adjtimex 124
|
||||
#define __NR_mprotect 125
|
||||
#define __NR_personality 136
|
||||
#define __NR_msync 144
|
||||
#define __NR_nanosleep 162
|
||||
#define __NR_getcwd 183
|
||||
|
||||
#undef _syscall0
|
||||
#undef _syscall1
|
||||
@ -337,17 +333,13 @@ static inline _syscall1nr(_exit,int,exitcode)
|
||||
static inline _syscall3(int,fcntl,int,fd,int,cmd,long,arg)
|
||||
static inline _syscall2(int,ftruncate,int,fd,size_t,len)
|
||||
static inline _syscall0(pid_t,fork)
|
||||
static inline _syscall2(int,getcwd,char *,buf,unsigned long,size);
|
||||
static inline _syscall0(pid_t,getpid)
|
||||
static inline _syscall2(int,getrusage,int,who,struct rusage *,usage);
|
||||
static inline _syscall2(int,gettimeofday,struct timeval *,tv,void *,tz)
|
||||
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,whence)
|
||||
static inline _syscall3(int,mprotect,void *,addr,size_t,len,int,prot)
|
||||
static inline _syscall3(int,msync,const void *,start,size_t,length,int,flags)
|
||||
static inline _syscall2(int,munmap,void *,start,size_t,length)
|
||||
static inline _syscall2(int,nanosleep,const struct timespec *,rqtp,struct timespec *,rmtp)
|
||||
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
|
||||
static inline _syscall1(int,personality,unsigned long,persona)
|
||||
static inline _syscall3(ssize_t,read,int,fd,void *,buf,size_t,count)
|
||||
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
|
||||
static inline _syscall3(ssize_t,write,int,fd,const void *,buf,size_t,count)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user