mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
Linux i386 allow compression of position-independent main executables (gcc -pie).
p_elf.h p_lx_elf.cpp p_lx_elf.h p_lx_exc.cpp stub/fold_elf86.asm stub/fold_elf86.h stub/l_lx_elf.c stub/l_lx_elf86.asm stub/l_lx_elf86.h stub/l_lx_elf86.lds stub/linux.hh committer: jreiser <jreiser> 1126886896 +0000
This commit is contained in:
parent
eb6c51426a
commit
3f7b642c7d
51
src/p_elf.h
51
src/p_elf.h
|
@ -181,12 +181,59 @@ struct Dyn
|
||||||
enum { // d_tag
|
enum { // d_tag
|
||||||
DT_NULL = 0, /* End flag */
|
DT_NULL = 0, /* End flag */
|
||||||
DT_NEEDED = 1, /* Name of needed library */
|
DT_NEEDED = 1, /* Name of needed library */
|
||||||
|
DT_HASH = 4, /* Hash table of symbol names */
|
||||||
DT_STRTAB = 5, /* String table */
|
DT_STRTAB = 5, /* String table */
|
||||||
|
DT_SYMTAB = 6, /* Symbol table */
|
||||||
DT_STRSZ = 10, /* Sizeof string table */
|
DT_STRSZ = 10, /* Sizeof string table */
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
__attribute_packed;
|
__attribute_packed;
|
||||||
|
|
||||||
|
template <class TT16, class TT32, class TT64>
|
||||||
|
struct Sym
|
||||||
|
{
|
||||||
|
TT32 st_name; /* symbol name (index into string table) */
|
||||||
|
TT32 st_value; /* symbol value */
|
||||||
|
TT32 st_size; /* symbol size */
|
||||||
|
unsigned char st_info; /* symbol type and binding */
|
||||||
|
unsigned char st_other; /* symbol visibility */
|
||||||
|
TT16 st_shndx; /* section index */
|
||||||
|
|
||||||
|
unsigned int st_bind(unsigned int x) const { return 0xf & (x>>4); }
|
||||||
|
unsigned int st_type(unsigned int x) const { return 0xf & x ; }
|
||||||
|
unsigned char St_info(unsigned bind, unsigned type) const { return (bind<<4) + (0xf & type); }
|
||||||
|
|
||||||
|
enum { // st_bind (high 4 bits of st_info)
|
||||||
|
STB_LOCAL = 0, /* Local symbol */
|
||||||
|
STB_GLOBAL = 1, /* Global symbol */
|
||||||
|
STB_WEAK = 2, /* Weak symbol */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // st_type (low 4 bits of st_info)
|
||||||
|
STT_NOTYPE = 0, /* Symbol type is unspecified */
|
||||||
|
STT_OBJECT = 1, /* Symbol is a data object */
|
||||||
|
STT_FUNC = 2, /* Symbol is a code object */
|
||||||
|
STT_SECTION = 3, /* Symbol associated with a section */
|
||||||
|
STT_FILE = 4, /* Symbol's name is file name */
|
||||||
|
STT_COMMON = 5, /* Symbol is a common data object */
|
||||||
|
STT_TLS = 6, /* Symbol is thread-local data object*/
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // st_other (visibility)
|
||||||
|
STV_DEFAULT = 0, /* Default symbol visibility rules */
|
||||||
|
STV_INTERNAL = 1, /* Processor specific hidden class */
|
||||||
|
STV_HIDDEN = 2, /* Sym unavailable in other modules */
|
||||||
|
STV_PROTECTED= 3, /* Not preemptible, not exported */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // st_shndx
|
||||||
|
SHN_UNDEF = 0, /* Undefined section */
|
||||||
|
SHN_ABS = 0xfff1, /* Associated symbol is absolute */
|
||||||
|
SHN_COMMON = 0xfff2, /* Associated symbol is common */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
__attribute_packed;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,22 +245,26 @@ typedef TT_Elf32::Ehdr<LE16,LE32,void> Elf_LE32_Ehdr;
|
||||||
typedef TT_Elf32::Phdr<LE16,LE32,void> Elf_LE32_Phdr;
|
typedef TT_Elf32::Phdr<LE16,LE32,void> Elf_LE32_Phdr;
|
||||||
typedef TT_Elf32::Shdr<LE16,LE32,void> Elf_LE32_Shdr;
|
typedef TT_Elf32::Shdr<LE16,LE32,void> Elf_LE32_Shdr;
|
||||||
typedef TT_Elf32::Dyn <LE16,LE32,void> Elf_LE32_Dyn;
|
typedef TT_Elf32::Dyn <LE16,LE32,void> Elf_LE32_Dyn;
|
||||||
|
typedef TT_Elf32::Sym <LE16,LE32,void> Elf_LE32_Sym;
|
||||||
|
|
||||||
typedef TT_Elf32::Ehdr<unsigned short,unsigned int,void> Elf32_Ehdr;
|
typedef TT_Elf32::Ehdr<unsigned short,unsigned int,void> Elf32_Ehdr;
|
||||||
typedef TT_Elf32::Phdr<unsigned short,unsigned int,void> Elf32_Phdr;
|
typedef TT_Elf32::Phdr<unsigned short,unsigned int,void> Elf32_Phdr;
|
||||||
typedef TT_Elf32::Shdr<unsigned short,unsigned int,void> Elf32_Shdr;
|
typedef TT_Elf32::Shdr<unsigned short,unsigned int,void> Elf32_Shdr;
|
||||||
typedef TT_Elf32::Dyn <unsigned short,unsigned int,void> Elf32_Dyn;
|
typedef TT_Elf32::Dyn <unsigned short,unsigned int,void> Elf32_Dyn;
|
||||||
|
typedef TT_Elf32::Sym <unsigned short,unsigned int,void> Elf32_Sym;
|
||||||
|
|
||||||
|
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Ehdr) == 52)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Ehdr) == 52)
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Phdr) == 32)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Phdr) == 32)
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Shdr) == 40)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Shdr) == 40)
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Dyn) == 8)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Dyn) == 8)
|
||||||
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf_LE32_Sym) == 16)
|
||||||
|
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Ehdr) == 52)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Ehdr) == 52)
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Phdr) == 32)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Phdr) == 32)
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Shdr) == 40)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Shdr) == 40)
|
||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Dyn) == 8)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Dyn) == 8)
|
||||||
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(Elf32_Sym) == 16)
|
||||||
|
|
||||||
|
|
||||||
#endif /* already included */
|
#endif /* already included */
|
||||||
|
|
162
src/p_lx_elf.cpp
162
src/p_lx_elf.cpp
|
@ -59,7 +59,8 @@ PackLinuxElf32::checkEhdr(
|
||||||
if (!memcmp(buf+8, "FreeBSD", 7)) // branded
|
if (!memcmp(buf+8, "FreeBSD", 7)) // branded
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (get_native16(&ehdr->e_type) != Elf32_Ehdr::ET_EXEC)
|
int const type = get_native16(&ehdr->e_type);
|
||||||
|
if (type != Elf32_Ehdr::ET_EXEC && type != Elf32_Ehdr::ET_DYN)
|
||||||
return 2;
|
return 2;
|
||||||
if (get_native16(&ehdr->e_machine) != e_machine)
|
if (get_native16(&ehdr->e_machine) != e_machine)
|
||||||
return 3;
|
return 3;
|
||||||
|
@ -498,6 +499,15 @@ void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft)
|
||||||
#undef PAGE_MASK
|
#undef PAGE_MASK
|
||||||
|
|
||||||
// rewrite Elf header
|
// rewrite Elf header
|
||||||
|
if (Elf32_Ehdr::ET_DYN==ehdri.e_type) {
|
||||||
|
unsigned const base= elfout.phdr[0].p_vaddr;
|
||||||
|
elfout.ehdr.e_type= Elf32_Ehdr::ET_DYN;
|
||||||
|
elfout.ehdr.e_phnum= 1;
|
||||||
|
elfout.ehdr.e_entry -= base;
|
||||||
|
elfout.phdr[0].p_vaddr -= base;
|
||||||
|
elfout.phdr[0].p_paddr -= base;
|
||||||
|
elfout.phdr[0].p_flags |= Elf32_Phdr::PF_W;
|
||||||
|
}
|
||||||
fo->seek(0, SEEK_SET);
|
fo->seek(0, SEEK_SET);
|
||||||
fo->rewrite(&elfout, sz_elf_hdrs);
|
fo->rewrite(&elfout, sz_elf_hdrs);
|
||||||
fo->rewrite(&linfo, sizeof(linfo));
|
fo->rewrite(&linfo, sizeof(linfo));
|
||||||
|
@ -621,12 +631,14 @@ void PackLinuxElf32::unpack(OutputFile *fo)
|
||||||
|
|
||||||
|
|
||||||
PackLinuxI386elf::PackLinuxI386elf(InputFile *f) :
|
PackLinuxI386elf::PackLinuxI386elf(InputFile *f) :
|
||||||
super(f), phdri(NULL)
|
super(f), phdri(NULL),
|
||||||
|
file_image(NULL), dynseg(NULL), hashtab(NULL), dynstr(NULL), dynsym(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PackLinuxI386elf::~PackLinuxI386elf()
|
PackLinuxI386elf::~PackLinuxI386elf()
|
||||||
{
|
{
|
||||||
|
delete[] file_image;
|
||||||
delete[] phdri;
|
delete[] phdri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,7 +720,7 @@ bool PackLinuxI386elf::canPack()
|
||||||
// The first PT_LOAD must cover the beginning of the file (0==p_offset).
|
// The first PT_LOAD must cover the beginning of the file (0==p_offset).
|
||||||
Elf32_Phdr const *phdr = (Elf32_Phdr const *)(buf + ehdr->e_phoff);
|
Elf32_Phdr const *phdr = (Elf32_Phdr const *)(buf + ehdr->e_phoff);
|
||||||
for (unsigned j=0; j < ehdr->e_phnum; ++phdr, ++j) {
|
for (unsigned j=0; j < ehdr->e_phnum; ++phdr, ++j) {
|
||||||
if (j >= 14)
|
if (j >= 14) // 512 bytes holds Elf32_Ehdr + Elf32_Phdr[0..13]
|
||||||
return false;
|
return false;
|
||||||
if (phdr->PT_LOAD == phdr->p_type) {
|
if (phdr->PT_LOAD == phdr->p_type) {
|
||||||
if (phdr->p_offset != 0) {
|
if (phdr->p_offset != 0) {
|
||||||
|
@ -717,8 +729,9 @@ bool PackLinuxI386elf::canPack()
|
||||||
}
|
}
|
||||||
|
|
||||||
// detect possible conflict upon invocation
|
// detect possible conflict upon invocation
|
||||||
if (phdr->p_vaddr < (unsigned)(0x400000 + file_size)
|
if (ehdr->e_type!=Elf32_Ehdr::ET_DYN
|
||||||
|| phdr->p_paddr < (unsigned)(0x400000 + file_size) ) {
|
&& (phdr->p_vaddr < (unsigned)(0xc00000 + file_size)
|
||||||
|
|| phdr->p_paddr < (unsigned)(0xc00000 + file_size) ) ) {
|
||||||
throwAlreadyPackedByUPX(); // not necessarily, but mostly true
|
throwAlreadyPackedByUPX(); // not necessarily, but mostly true
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -727,6 +740,46 @@ bool PackLinuxI386elf::canPack()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We want to compress position-independent executable (gcc -pie)
|
||||||
|
// main programs, but compressing a shared library must be avoided
|
||||||
|
// because the result is no longer usable. In theory, there is no way
|
||||||
|
// to tell them apart: both are just ET_DYN. Also in theory,
|
||||||
|
// neither the presence nor the absence of any particular symbol name
|
||||||
|
// can be used to tell them apart; there are counterexamples.
|
||||||
|
// However, we will use the following heuristic suggested by
|
||||||
|
// Peter S. Mazinger <ps.m@gmx.net> September 2005:
|
||||||
|
// If a ET_DYN has __libc_start_main as a global undefined symbol,
|
||||||
|
// then the file is a position-independent executable main program
|
||||||
|
// (that depends on libc.so.6) and is eligible to be compressed.
|
||||||
|
// Otherwise (no __libc_start_main as global undefined): skip it.
|
||||||
|
|
||||||
|
if (Elf32_Ehdr::ET_DYN==ehdr->e_type) {
|
||||||
|
// The DT_STRTAB has no designated length. Read the whole file.
|
||||||
|
file_image = new char[file_size];
|
||||||
|
fi->seek(0, SEEK_SET);
|
||||||
|
fi->readx(file_image, file_size);
|
||||||
|
ehdri= *ehdr;
|
||||||
|
phdri= (Elf32_Phdr *)(ehdr->e_phoff + file_image); // do not free() !!
|
||||||
|
|
||||||
|
int j= ehdr->e_phnum;
|
||||||
|
Elf32_Phdr const *phdr= phdri;
|
||||||
|
for (; --j>=0; ++phdr) if (Elf32_Phdr::PT_DYNAMIC==phdr->p_type) {
|
||||||
|
dynseg= (Elf32_Dyn const *)(phdr->p_offset + file_image);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// elf_find_dynamic() returns 0 if 0==dynseg.
|
||||||
|
hashtab= (unsigned int const *)elf_find_dynamic(Elf32_Dyn::DT_HASH);
|
||||||
|
dynstr= (char const *)elf_find_dynamic(Elf32_Dyn::DT_STRTAB);
|
||||||
|
dynsym= (Elf32_Sym const *)elf_find_dynamic(Elf32_Dyn::DT_SYMTAB);
|
||||||
|
// elf_lookup() returns 0 if any required table is missing.
|
||||||
|
Elf32_Sym const *const lsm = elf_lookup("__libc_start_main");
|
||||||
|
phdri = 0; // done "borrowing" this member
|
||||||
|
if (0==lsm || lsm->st_shndx!=Elf32_Sym::SHN_UNDEF
|
||||||
|
|| lsm->st_info!=lsm->Elf32_Sym::St_info(Elf32_Sym::STB_GLOBAL, Elf32_Sym::STT_FUNC)
|
||||||
|
|| lsm->st_other!=Elf32_Sym::STV_DEFAULT ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!super::canPack())
|
if (!super::canPack())
|
||||||
return false;
|
return false;
|
||||||
assert(exetype == 1);
|
assert(exetype == 1);
|
||||||
|
@ -736,6 +789,67 @@ bool PackLinuxI386elf::canPack()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
PackLinuxI386elf::elf_get_offset_from_address(unsigned const addr) const
|
||||||
|
{
|
||||||
|
Elf32_Phdr const *phdr = phdri;
|
||||||
|
int j = ehdri.e_phnum;
|
||||||
|
for (; --j>=0; ++phdr) if (PT_LOAD == phdr->p_type) {
|
||||||
|
unsigned const t = addr - phdr->p_vaddr;
|
||||||
|
if (t < phdr->p_filesz) {
|
||||||
|
return t + phdr->p_offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void const *
|
||||||
|
PackLinuxI386elf::elf_find_dynamic(unsigned int const key) const
|
||||||
|
{
|
||||||
|
Elf32_Dyn const *dynp= dynseg;
|
||||||
|
if (dynp)
|
||||||
|
for (; Elf32_Dyn::DT_NULL!=dynp->d_tag; ++dynp) if (dynp->d_tag == key) {
|
||||||
|
unsigned const t= elf_get_offset_from_address(dynp->d_val);
|
||||||
|
if (t) {
|
||||||
|
return t + file_image;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned PackLinuxI386elf::elf_hash(char const *p)
|
||||||
|
{
|
||||||
|
unsigned h;
|
||||||
|
for (h= 0; 0!=*p; ++p) {
|
||||||
|
h = *p + (h<<4);
|
||||||
|
{
|
||||||
|
unsigned const t = 0xf0000000u & h;
|
||||||
|
h &= ~t;
|
||||||
|
h ^= t>>24;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
Elf32_Sym const *PackLinuxI386elf::elf_lookup(char const *name) const
|
||||||
|
{
|
||||||
|
if (hashtab && dynsym && dynstr) {
|
||||||
|
unsigned const nbucket = hashtab[0];
|
||||||
|
unsigned const *const buckets = &hashtab[2];
|
||||||
|
unsigned const *const chains = &buckets[nbucket];
|
||||||
|
unsigned const m = elf_hash(name) % nbucket;
|
||||||
|
unsigned si;
|
||||||
|
for (si= buckets[m]; 0!=si; si= chains[si]) {
|
||||||
|
char const *const p= dynsym[si].st_name + dynstr;
|
||||||
|
if (0==strcmp(name, p)) {
|
||||||
|
return &dynsym[si];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void PackLinuxI386elf::pack1(OutputFile *fo, Filter &)
|
void PackLinuxI386elf::pack1(OutputFile *fo, Filter &)
|
||||||
{
|
{
|
||||||
|
@ -830,10 +944,18 @@ void PackLinuxI386elf::pack2(OutputFile *fo, Filter &ft)
|
||||||
|
|
||||||
void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft)
|
void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft)
|
||||||
{
|
{
|
||||||
|
unsigned disp;
|
||||||
|
unsigned len = fo->getBytesWritten();
|
||||||
|
unsigned const zero = 0;
|
||||||
|
fo->write(&zero, 3& -len); // align to 0 mod 4
|
||||||
|
len += (3& -len);
|
||||||
|
set_native32(&disp, len);
|
||||||
|
fo->write(&disp, sizeof(disp));
|
||||||
|
|
||||||
// We have packed multiple blocks, so PackLinuxI386::buildLinuxLoader
|
// We have packed multiple blocks, so PackLinuxI386::buildLinuxLoader
|
||||||
// needs an adjusted ph.c_len in order to get alignment correct.
|
// needs an adjusted ph.c_len in order to get alignment correct.
|
||||||
unsigned const save_c_len = ph.c_len;
|
unsigned const save_c_len = ph.c_len;
|
||||||
ph.c_len = fo->getBytesWritten() - (
|
ph.c_len = sizeof(disp) + len - (
|
||||||
// Elf32_Edhr
|
// Elf32_Edhr
|
||||||
sizeof(elfout.ehdr) +
|
sizeof(elfout.ehdr) +
|
||||||
// Elf32_Phdr: 1 for exec86, 2 for sh86, 3 for elf86
|
// Elf32_Phdr: 1 for exec86, 2 for sh86, 3 for elf86
|
||||||
|
@ -848,9 +970,37 @@ void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft)
|
||||||
b_len );
|
b_len );
|
||||||
buildLoader(&ft); /* redo for final .align constraints */
|
buildLoader(&ft); /* redo for final .align constraints */
|
||||||
ph.c_len = save_c_len;
|
ph.c_len = save_c_len;
|
||||||
|
|
||||||
super::pack3(fo, ft);
|
super::pack3(fo, ft);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PackLinuxI386elf::pack4(OutputFile *fo, Filter &ft)
|
||||||
|
{
|
||||||
|
super::pack4(fo, ft); // write PackHeader and overlay_offset
|
||||||
|
|
||||||
|
#if 0 /*{ where was this done already? FIXME */
|
||||||
|
#define PAGE_MASK (~0u<<12)
|
||||||
|
// pre-calculate for benefit of runtime disappearing act via munmap()
|
||||||
|
set_native32(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len));
|
||||||
|
#undef PAGE_MASK
|
||||||
|
#endif /*}*/
|
||||||
|
|
||||||
|
// rewrite Elf header
|
||||||
|
if (Elf32_Ehdr::ET_DYN==ehdri.e_type) {
|
||||||
|
// File being compressed was -pie.
|
||||||
|
// Turn the stub into -pie, too.
|
||||||
|
unsigned const base= elfout.phdr[0].p_vaddr;
|
||||||
|
elfout.ehdr.e_type= Elf32_Ehdr::ET_DYN;
|
||||||
|
elfout.ehdr.e_phnum= 1;
|
||||||
|
elfout.ehdr.e_entry -= base;
|
||||||
|
elfout.phdr[0].p_vaddr -= base;
|
||||||
|
elfout.phdr[0].p_paddr -= base;
|
||||||
|
elfout.phdr[0].p_flags |= Elf32_Phdr::PF_W;
|
||||||
|
}
|
||||||
|
fo->seek(0, SEEK_SET);
|
||||||
|
fo->rewrite(&elfout, sizeof(Elf32_Ehdr) + sizeof(Elf32_Phdr));
|
||||||
|
//fo->rewrite(&linfo, sizeof(linfo));
|
||||||
|
}
|
||||||
|
|
||||||
void PackLinuxI386elf::unpack(OutputFile *fo)
|
void PackLinuxI386elf::unpack(OutputFile *fo)
|
||||||
{
|
{
|
||||||
|
|
|
@ -171,6 +171,7 @@ protected:
|
||||||
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
virtual void pack1(OutputFile *, Filter &); // generate executable header
|
||||||
virtual void pack2(OutputFile *, Filter &); // append compressed data
|
virtual void pack2(OutputFile *, Filter &); // append compressed data
|
||||||
virtual void pack3(OutputFile *, Filter &); // append loader
|
virtual void pack3(OutputFile *, Filter &); // append loader
|
||||||
|
virtual void pack4(OutputFile *, Filter &); // append pack header
|
||||||
|
|
||||||
virtual void patchLoader();
|
virtual void patchLoader();
|
||||||
|
|
||||||
|
@ -178,6 +179,16 @@ protected:
|
||||||
Elf32_Phdr *phdri; // for input file
|
Elf32_Phdr *phdri; // for input file
|
||||||
unsigned sz_phdrs; // sizeof Phdr[]
|
unsigned sz_phdrs; // sizeof Phdr[]
|
||||||
|
|
||||||
|
char *file_image; // if ET_DYN investigation
|
||||||
|
Elf32_Dyn const *dynseg; // from PT_DYNAMIC
|
||||||
|
unsigned int const *hashtab; // from DT_HASH
|
||||||
|
char const *dynstr; // from DT_STRTAB
|
||||||
|
Elf32_Sym const *dynsym; // from DT_SYMTAB
|
||||||
|
|
||||||
|
static unsigned elf_hash(char const *) /*const*/;
|
||||||
|
virtual void const *elf_find_dynamic(unsigned) const;
|
||||||
|
virtual Elf32_Sym const *elf_lookup(char const *) const;
|
||||||
|
virtual unsigned elf_get_offset_from_address(unsigned) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -418,13 +418,14 @@ int PackLinuxI386::checkEhdr(const Elf32_Ehdr *ehdr) const
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// now check the ELF header
|
// now check the ELF header
|
||||||
if (!memcmp(buf+8, "FreeBSD", 7)) // branded
|
if (!memcmp(buf+8, "FreeBSD", 7)) // branded
|
||||||
return 1;
|
return 1;
|
||||||
if (ehdr->e_type != 2) // executable
|
if (ehdr->e_type != Elf32_Ehdr::ET_EXEC
|
||||||
|
&& ehdr->e_type != Elf32_Ehdr::ET_DYN ) // executable
|
||||||
return 2;
|
return 2;
|
||||||
if (ehdr->e_machine != 3) // Intel 80386
|
if (ehdr->e_machine != Elf32_Ehdr::EM_386) // Intel 80386
|
||||||
return 3;
|
return 3;
|
||||||
if (ehdr->e_version != 1) // version
|
if (ehdr->e_version != Elf32_Ehdr::EV_CURRENT) // version
|
||||||
return 4;
|
return 4;
|
||||||
if (ehdr->e_phnum < 1)
|
if (ehdr->e_phnum < 1)
|
||||||
return 5;
|
return 5;
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
%define PAGE_SIZE ( 1<<12)
|
%define PAGE_SIZE ( 1<<12)
|
||||||
%define szElf32_Ehdr 0x34
|
%define szElf32_Ehdr 0x34
|
||||||
%define szElf32_Phdr 8*4
|
%define szElf32_Phdr 8*4
|
||||||
|
%define e_type 16
|
||||||
%define e_entry (16 + 2*2 + 4)
|
%define e_entry (16 + 2*2 + 4)
|
||||||
%define p_memsz 5*4
|
%define p_memsz 5*4
|
||||||
%define szb_info 12
|
%define szb_info 12
|
||||||
|
@ -54,9 +55,6 @@ fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
||||||
; dword sz_uncompressed, sz_compressed
|
; dword sz_uncompressed, sz_compressed
|
||||||
; byte compressed_data...
|
; byte compressed_data...
|
||||||
|
|
||||||
pop eax ; discard &sz_uncompressed
|
|
||||||
pop eax ; discard sz_uncompressed
|
|
||||||
|
|
||||||
; ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
; ld-linux.so.2 depends on AT_PHDR and AT_ENTRY, for instance.
|
||||||
; Move argc,argv,envp down to make room for Elf_auxv table.
|
; Move argc,argv,envp down to make room for Elf_auxv table.
|
||||||
; Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
; Linux kernel 2.4.2 and earlier give only AT_HWCAP and AT_PLATFORM
|
||||||
|
@ -75,6 +73,8 @@ fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
||||||
%define AT_PAGESZ 6
|
%define AT_PAGESZ 6
|
||||||
%define AT_ENTRY 9
|
%define AT_ENTRY 9
|
||||||
|
|
||||||
|
%define ET_DYN 3
|
||||||
|
|
||||||
sub ecx, ecx
|
sub ecx, ecx
|
||||||
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_ENTRY)
|
mov edx, (1<<AT_PHDR) | (1<<AT_PHENT) | (1<<AT_PHNUM) | (1<<AT_PAGESZ) | (1<<AT_ENTRY)
|
||||||
mov esi, esp
|
mov esi, esp
|
||||||
|
@ -96,21 +96,34 @@ L50:
|
||||||
%define OVERHEAD 2048
|
%define OVERHEAD 2048
|
||||||
%define MAX_ELF_HDR 512
|
%define MAX_ELF_HDR 512
|
||||||
|
|
||||||
|
sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca
|
||||||
|
mov edx, esp ; %edx= &tmp
|
||||||
push ebx ; save &Elf32_Ehdr of this stub
|
push ebx ; save &Elf32_Ehdr of this stub
|
||||||
sub esp, dword MAX_ELF_HDR + OVERHEAD
|
xor ecx, ecx ; 0
|
||||||
|
push ecx ; assume not ET_DYN
|
||||||
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] ; 1st &b_info
|
lea eax, [szElf32_Ehdr + 2*szElf32_Phdr + szl_info + szp_info + ebx] ; 1st &b_info
|
||||||
mov esi, [e_entry + ebx] ; beyond compressed data
|
mov esi, [e_entry + ebx] ; beyond compressed data
|
||||||
|
cmp word [e_type + ebx], byte ET_DYN
|
||||||
|
jne L53
|
||||||
|
pop ecx ; is ET_DYN: discard false assumption
|
||||||
|
add esi, ebx ; relocate e_entry
|
||||||
|
mov ch, PAGE_SIZE>>8 ; %ecx= PAGE_SIZE
|
||||||
|
add ebx, [p_memsz + szElf32_Ehdr + ebx]
|
||||||
|
add ebx, ecx
|
||||||
|
push ebx ; dynbase
|
||||||
|
L53:
|
||||||
sub esi, eax ; length of compressed data
|
sub esi, eax ; length of compressed data
|
||||||
mov ebx, [ eax] ; length of uncompressed ELF headers
|
mov ebx, [ eax] ; length of uncompressed ELF headers
|
||||||
mov edx, esp ;
|
|
||||||
mov ecx, [4+ eax] ; length of compressed ELF headers
|
mov ecx, [4+ eax] ; length of compressed ELF headers
|
||||||
add ecx, byte szb_info
|
add ecx, byte szb_info
|
||||||
pusha ; (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
pusha ; (AT_table, sz_cpr, f_expand, &tmp_ehdr, {sz_unc, &tmp}, {sz_cpr, &b1st_info} )
|
||||||
inc edi ; swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
inc edi ; swap with above 'pusha' to inhibit auxv_up for PT_INTERP
|
||||||
EXTERN upx_main
|
EXTERN upx_main
|
||||||
call upx_main ; returns entry address
|
call upx_main ; returns entry address
|
||||||
add esp, dword 8*4 + MAX_ELF_HDR + OVERHEAD ; remove 8 params, temp space
|
add esp, byte 8*4 ; remove 8 params from pusha
|
||||||
|
pop ecx ; dynbase
|
||||||
pop ebx ; &Elf32_Ehdr of this stub
|
pop ebx ; &Elf32_Ehdr of this stub
|
||||||
|
add esp, dword MAX_ELF_HDR + OVERHEAD ; un-alloca
|
||||||
push eax ; save entry address
|
push eax ; save entry address
|
||||||
|
|
||||||
dec edi ; auxv table
|
dec edi ; auxv table
|
||||||
|
@ -127,9 +140,9 @@ L60:
|
||||||
; See bug libc/1165 at http://bugs.gnu.org/cgi-bin/gnatsweb.pl
|
; See bug libc/1165 at http://bugs.gnu.org/cgi-bin/gnatsweb.pl
|
||||||
; Found 1999-06-16 glibc-2.1.1
|
; Found 1999-06-16 glibc-2.1.1
|
||||||
; Fixed 1999-12-29 glibc-2.1.2
|
; Fixed 1999-12-29 glibc-2.1.2
|
||||||
|
;
|
||||||
%define N_STKCLR (0x100 + MAX_ELF_HDR + OVERHEAD)/4
|
;%define N_STKCLR (0x100 + MAX_ELF_HDR + OVERHEAD)/4
|
||||||
%define N_STKCLR 8
|
;%define N_STKCLR 8
|
||||||
; lea edi, [esp - 4*N_STKCLR]
|
; lea edi, [esp - 4*N_STKCLR]
|
||||||
; pusha ; values will be zeroed
|
; pusha ; values will be zeroed
|
||||||
; mov esi,esp ; save
|
; mov esi,esp ; save
|
||||||
|
@ -138,7 +151,6 @@ L60:
|
||||||
; ; xor eax,eax ; eax already 0 from L60
|
; ; xor eax,eax ; eax already 0 from L60
|
||||||
; rep stosd
|
; rep stosd
|
||||||
; mov esp,esi ; restore
|
; mov esp,esi ; restore
|
||||||
; xor ecx, ecx ; ecx already 0 from "rep stosd"
|
|
||||||
|
|
||||||
push eax
|
push eax
|
||||||
push eax
|
push eax
|
||||||
|
@ -148,13 +160,9 @@ L60:
|
||||||
push eax
|
push eax
|
||||||
push eax
|
push eax
|
||||||
push eax ; 32 bytes of zeroes now on stack
|
push eax ; 32 bytes of zeroes now on stack
|
||||||
push eax
|
|
||||||
pop ecx ; 0
|
|
||||||
|
|
||||||
|
sub ecx, ebx ; length to unmap
|
||||||
mov al, __NR_munmap ; eax was 0 from L60
|
mov al, __NR_munmap ; eax was 0 from L60
|
||||||
mov ch, PAGE_SIZE>>8 ; 0x1000
|
|
||||||
add ecx, [p_memsz + szElf32_Ehdr + ebx] ; length to unmap
|
|
||||||
mov bh, 0 ; from 0x401000 to 0x400000
|
|
||||||
jmp [edi] ; unmap ourselves via escape hatch, then goto entry
|
jmp [edi] ; unmap ourselves via escape hatch, then goto entry
|
||||||
|
|
||||||
; called twice:
|
; called twice:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* fold_elf86.h -- created from fold_elf86.bin, 1627 (0x65b) bytes
|
/* fold_elf86.h -- created from fold_elf86.bin, 1741 (0x6cd) bytes
|
||||||
|
|
||||||
This file is part of the UPX executable compressor.
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
|
@ -26,110 +26,117 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LINUX_I386ELF_FOLD_ADLER32 0x8a08c48a
|
#define LINUX_I386ELF_FOLD_ADLER32 0x5d97fd78
|
||||||
#define LINUX_I386ELF_FOLD_CRC32 0xa36945e1
|
#define LINUX_I386ELF_FOLD_CRC32 0x28681d5d
|
||||||
|
|
||||||
unsigned char linux_i386elf_fold[1627] = {
|
unsigned char linux_i386elf_fold[1741] = {
|
||||||
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
|
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
|
||||||
2, 0, 3, 0, 1, 0, 0, 0,128, 16, 0, 1, 52, 0, 0, 0, /* 0x 10 */
|
2, 0, 3, 0, 1, 0, 0, 0,128, 0,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, 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, 0, 1, /* 0x 30 */
|
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, /* 0x 30 */
|
||||||
0, 16, 0, 1, 91, 6, 0, 0, 92, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
0, 0,192, 0,205, 6, 0, 0,208, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
||||||
0, 16, 0, 0, 1, 0, 0, 0, 91, 6, 0, 0, 92, 22, 0, 1, /* 0x 50 */
|
0, 16, 0, 0, 1, 0, 0, 0,205, 6, 0, 0,208, 6,192, 0, /* 0x 50 */
|
||||||
92, 22, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */
|
208, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */
|
||||||
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
||||||
88, 88, 41,201,186,120, 2, 0, 0,137,230,137,231,232, 94, 0, /* 0x 80 */
|
41,201,186,120, 2, 0, 0,137,230,137,231,232,112, 0, 0, 0, /* 0x 80 */
|
||||||
0, 0,137,230,209,234, 25,192, 41,193,141, 36,196,133,210,117, /* 0x 90 */
|
137,230,209,234, 25,192, 41,193,141, 36,196,133,210,117,243,137, /* 0x 90 */
|
||||||
243,137,231,232, 72, 0, 0, 0, 83,129,236, 0, 10, 0, 0,141, /* 0x a0 */
|
231,232, 90, 0, 0, 0,129,236, 0, 10, 0, 0,137,226, 83, 49, /* 0x a0 */
|
||||||
131,140, 0, 0, 0,139,115, 24, 41,198,139, 24,137,226,139, 72, /* 0x b0 */
|
201, 81,141,131,140, 0, 0, 0,139,115, 24,102,131,123, 16, 3, /* 0x b0 */
|
||||||
4,131,193, 12, 96, 71,232,152, 4, 0, 0,129,196, 32, 10, 0, /* 0x c0 */
|
117, 11, 89, 1,222,181, 16, 3, 91, 72, 1,203, 83, 41,198,139, /* 0x c0 */
|
||||||
0, 91, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, /* 0x d0 */
|
24,139, 72, 4,131,193, 12, 96, 71,232,248, 4, 0, 0,131,196, /* 0x d0 */
|
||||||
80, 80, 80, 80, 89,176, 91,181, 16, 3, 75, 72,183, 0,255, 39, /* 0x e0 */
|
32, 89, 91,129,196, 0, 10, 0, 0, 80, 79, 41,192, 60,175,175, /* 0x e0 */
|
||||||
173,171,133,192,117,250,173,171,133,192,117,250, 87,173,171,131, /* 0x f0 */
|
117,252, 80, 80, 80, 80, 80, 80, 80, 80, 41,217,176, 91,255, 39, /* 0x f0 */
|
||||||
248, 32,115, 3, 15,179,194,133,192,173,171,117,240,131,239, 8, /* 0x 100 */
|
173,171,133,192,117,250,173,171,133,192,117,250, 87,173,171,131, /* 0x 100 */
|
||||||
1,201, 64,243,171, 72,171,171, 95,195, 0, 0, 85, 87,137,207, /* 0x 110 */
|
248, 32,115, 3, 15,179,194,133,192,173,171,117,240,131,239, 8, /* 0x 110 */
|
||||||
86,137,198, 83, 57, 8,139,104, 4,115, 8,106,127, 91,106, 1, /* 0x 120 */
|
1,201, 64,243,171, 72,171,171, 95,195, 0, 0, 83,137,195,106, /* 0x 120 */
|
||||||
88,205,128,133,255,116, 11,137,249,138, 69, 0, 69,136, 2, 66, /* 0x 130 */
|
1, 88,205,128, 91,195, 83,137,209,137,195,106, 91, 88,205,128, /* 0x 130 */
|
||||||
226,247, 91, 1,126, 4, 41, 62, 94, 95, 93,195, 83,141, 92, 36, /* 0x 140 */
|
91,195, 85,137,229, 87, 86,137,206, 83,137,195,131,236, 12,137, /* 0x 140 */
|
||||||
8,106, 90, 88,205,128, 91,195, 85,137,229, 87, 86,137,199, 83, /* 0x 150 */
|
85,240, 57, 11,139, 64, 4,137, 69,236,115, 10,184,127, 0, 0, /* 0x 150 */
|
||||||
137,214,131,236, 24,139, 69, 8,131, 58, 0,137, 69,220, 15,132, /* 0x 160 */
|
0,232,198,255,255,255,141, 78, 1, 49,210,235, 14,139, 69,236, /* 0x 160 */
|
||||||
189, 0, 0, 0,141, 85,228,137,248,185, 12, 0, 0, 0,232,153, /* 0x 170 */
|
139,125,240,138, 68, 2,255,136, 68, 58,255, 66,226,239, 1,115, /* 0x 170 */
|
||||||
255,255,255,131,125,228, 0,139, 69,232,117, 18, 61, 85, 80, 88, /* 0x 180 */
|
4, 41, 51,131,196, 12, 91, 94, 95,201,195, 83,141, 92, 36, 8, /* 0x 180 */
|
||||||
33,117, 15,131, 63, 0, 15,132,149, 0, 0, 0,235, 4,133,192, /* 0x 190 */
|
106, 90, 88,205,128, 91,195, 85,137,229, 87, 86,137,207, 83,137, /* 0x 190 */
|
||||||
117, 8,106,127, 91,106, 1, 88,205,128,139, 77,232,139, 69,228, /* 0x 1a0 */
|
198,137,211,131,236, 16,233,178, 0, 0, 0,141, 85,228,137,240, /* 0x 1a0 */
|
||||||
57,193,119,238, 59, 6,119,234, 57,193,115, 88, 15,182, 69,236, /* 0x 1b0 */
|
185, 12, 0, 0, 0,232,136,255,255,255,131,125,228, 0,139, 69, /* 0x 1b0 */
|
||||||
80,141, 69,224, 80,255,118, 4, 81,255,119, 4,255, 85,220,131, /* 0x 1c0 */
|
232,117, 17, 61, 85, 80, 88, 33,117, 14,131, 62, 0,117, 9,233, /* 0x 1c0 */
|
||||||
196, 20,133,192,117,204,139, 85,224, 59, 85,228,117,196,138, 69, /* 0x 1d0 */
|
146, 0, 0, 0,133,192,117, 10,184,127, 0, 0, 0,232, 74,255, /* 0x 1d0 */
|
||||||
237,132,192,116, 37,131,125, 12, 0,116, 31,129,250, 0, 2, 0, /* 0x 1e0 */
|
255,255,139, 77,232,139, 69,228, 57,193,119,236, 59, 3,119,232, /* 0x 1e0 */
|
||||||
0,119, 4, 57, 22,117, 19, 15,182,192, 80, 15,182, 69,238, 80, /* 0x 1f0 */
|
57,193,115, 87, 15,182, 69,236, 80,141, 69,240, 80,255,115, 4, /* 0x 1f0 */
|
||||||
82,255,118, 4,255, 85, 12,131,196, 16,139, 69,232, 1, 71, 4, /* 0x 200 */
|
81,255,118, 4,255,215,131,196, 20,133,192,117,203,139, 85,240, /* 0x 200 */
|
||||||
41, 7,235, 10,139, 86, 4,137,248,232,254,254,255,255,139, 85, /* 0x 210 */
|
59, 85,228,117,195,138, 69,237,132,192,116, 37,131,125, 8, 0, /* 0x 210 */
|
||||||
228,139, 6, 1, 86, 4, 41,208,133,192,137, 6,233, 61,255,255, /* 0x 220 */
|
116, 31,129,250, 0, 2, 0, 0,119, 4, 57, 19,117, 19, 15,182, /* 0x 220 */
|
||||||
255,141,101,244, 91, 94, 95,201,195,133,210,137,209,116, 6,198, /* 0x 230 */
|
192, 80, 15,182, 69,238, 80, 82,255,115, 4,255, 85, 8,131,196, /* 0x 230 */
|
||||||
0, 0, 64,226,250,195,133,192, 83,137,211,116, 29,168, 1,117, /* 0x 240 */
|
16,139, 69,232, 1, 70, 4, 41, 6,235, 10,139, 83, 4,137,240, /* 0x 240 */
|
||||||
25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7,137, 24, /* 0x 250 */
|
232,237,254,255,255,139, 69,228, 1, 67, 4, 41, 3,131, 59, 0, /* 0x 250 */
|
||||||
137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137,229, 87, /* 0x 260 */
|
15,133, 69,255,255,255,141,101,244, 91, 94, 95,201,195,133,210, /* 0x 260 */
|
||||||
86, 83,131,236, 72,137, 85,224,139, 77,224,137, 69,228,139, 93, /* 0x 270 */
|
137,209,116, 6,198, 0, 0, 64,226,250,195,133,192, 83,137,211, /* 0x 270 */
|
||||||
224,199, 69,208, 0, 0, 0, 0, 3, 73, 28,139, 69, 8,139, 85, /* 0x 280 */
|
116, 29,168, 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11,133, /* 0x 280 */
|
||||||
12,137, 69,220, 49,192,102,131,123, 16, 3,137, 85,216,137, 77, /* 0x 290 */
|
219,116, 7,137, 24,137, 72, 4,235, 5,131,192, 8,235,231, 91, /* 0x 290 */
|
||||||
212,137,202, 15,183, 75, 44, 15,149,192,131,206,255,193,224, 4, /* 0x 2a0 */
|
195, 85,137,229, 87, 86, 83,131,236, 80,137, 85,168,137, 69,172, /* 0x 2a0 */
|
||||||
137,207,131,192, 34, 49,219, 79,137, 69,188,120, 34,131, 58, 1, /* 0x 2b0 */
|
139, 69,168, 3, 82, 28,137, 77,164,102,131,120, 16, 2,199, 69, /* 0x 2b0 */
|
||||||
117, 24,139, 66, 8, 57,240,115, 8,139,122, 16,137,198,137,125, /* 0x 2c0 */
|
192, 0, 0, 0, 0,137, 85,180, 15,183, 80, 44, 15,148,192,139, /* 0x 2c0 */
|
||||||
208, 3, 66, 20, 57,195,115, 2,137,195,131,194, 32,226,222,137, /* 0x 2d0 */
|
77,180, 15,182,192,193,224, 4,141,114, 1,131,192, 34, 74,137, /* 0x 2d0 */
|
||||||
247,106, 0,129,231, 0,240,255,255,106, 0, 41,251,255,117,188, /* 0x 2e0 */
|
69,232, 49,219,131,200,255, 66,125, 39,190, 1, 0, 0, 0,235, /* 0x 2e0 */
|
||||||
129,195,255, 15, 0, 0,106, 7,129,227, 0,240,255,255,139, 85, /* 0x 2f0 */
|
32,131, 57, 1,117, 24,139, 81, 8, 57,194,115, 8,139, 65, 16, /* 0x 2f0 */
|
||||||
208, 83,137,240, 37,255, 15, 0, 0, 87,137, 93,172,141,180, 2, /* 0x 300 */
|
137, 69,192,137,208, 3, 81, 20, 57,211,115, 2,137,211,131,193, /* 0x 300 */
|
||||||
255, 15, 0, 0,232, 51,254,255,255,137,194,131,196, 24, 1,218, /* 0x 310 */
|
32, 78,117,221,137,194,106, 0,129,226, 0,240,255,255,106, 0, /* 0x 310 */
|
||||||
129,230, 0,240,255,255,137, 85,240,137,194, 41,243, 1,242,137, /* 0x 320 */
|
41,211,255,117,232,129,195,255, 15, 0, 0,106, 7,129,227, 0, /* 0x 320 */
|
||||||
217,137, 69,176,137,211,106, 91, 88,205,128,139,117,176,139, 69, /* 0x 330 */
|
240,255,255,139, 77,192, 83, 37,255, 15, 0, 0, 82,141,188, 1, /* 0x 330 */
|
||||||
224, 41,254, 49,255,102,131,120, 44, 0, 15,132,218, 1, 0, 0, /* 0x 340 */
|
255, 15, 0, 0,137, 85,228,232, 63,254,255,255,137,198,141, 4, /* 0x 340 */
|
||||||
139, 85,212,139, 2,131,248, 6,117, 23,139, 74, 8,186, 3, 0, /* 0x 350 */
|
24,129,231, 0,240,255,255,137, 69,184, 41,251,141, 4, 62,137, /* 0x 350 */
|
||||||
0, 0,139, 69,216, 1,241,232,218,254,255,255,233,165, 1, 0, /* 0x 360 */
|
218,232,208,253,255,255, 43,117,228,131,196, 24,199, 69,188, 0, /* 0x 360 */
|
||||||
0, 72, 15,133,158, 1, 0, 0,139, 93,212,199, 69,200, 64, 98, /* 0x 370 */
|
0, 0, 0,107,214, 52,137,117,176,139,117,180,137, 85,212,131, /* 0x 370 */
|
||||||
81,115,139, 75, 24,139, 67, 8,131,225, 7,139, 83, 16,193,225, /* 0x 380 */
|
198, 24,233,217, 1, 0, 0,139, 70,232,131,248, 6,117, 24,139, /* 0x 380 */
|
||||||
2,137, 69,236,211,109,200,137,193, 3, 75, 20,137,195,129,227, /* 0x 390 */
|
77,176,186, 3, 0, 0, 0, 3, 78,240,139, 69, 8,232,217,254, /* 0x 390 */
|
||||||
255, 15, 0, 0,137, 85,232, 1,218, 41,216,137, 85,196,139, 85, /* 0x 3a0 */
|
255,255,233,175, 1, 0, 0, 72, 15,133,168, 1, 0, 0,139, 14, /* 0x 3a0 */
|
||||||
212, 1,240, 1,241,137, 69,184,139, 66, 4,131,101,200, 7, 41, /* 0x 3b0 */
|
199, 69,196, 64, 98, 81,115,139, 69,176,131,225, 7, 3, 70,240, /* 0x 3b0 */
|
||||||
216,131,125,220, 1, 80,255,117,228, 25,192,137, 93,192,131,224, /* 0x 3c0 */
|
139, 93,180,193,225, 2,139, 86,248,211,109,196,139, 77,180,137, /* 0x 3c0 */
|
||||||
224,137, 77,180,131,192, 50,131,125,220, 0, 80,139, 69,196,106, /* 0x 3d0 */
|
199,131,195, 8,131,193, 16,137, 69,240,137, 77,216,139, 78,252, /* 0x 3d0 */
|
||||||
3,116, 3,131,192, 3, 80,255,117,184,232, 93,253,255,255,131, /* 0x 3e0 */
|
137, 93,220,139, 93,180, 1,193,137, 85,236,137, 77,204,137,193, /* 0x 3e0 */
|
||||||
196, 24, 57, 69,184, 15,133,193, 0, 0, 0,131,125,220, 0,116, /* 0x 3f0 */
|
139, 69,180,129,225,255, 15, 0, 0, 1,202,131,195, 20,131,192, /* 0x 3f0 */
|
||||||
34,139, 77,212, 49,192,246, 65, 24, 1,116, 6,139, 69,228,131, /* 0x 400 */
|
4, 41,207,137, 69,224,139, 70,236,131,101,196, 7, 41,200,131, /* 0x 400 */
|
||||||
192, 2, 80,139, 69,220,255,117,228,141, 85,232,232, 55,253,255, /* 0x 410 */
|
125,164, 0,137, 77,208,137, 85,200,116, 12,185, 3, 0, 0, 0, /* 0x 410 */
|
||||||
255, 88, 90,139, 85,192,139, 69,184,232, 11,254,255,255,139, 93, /* 0x 420 */
|
186, 50, 0, 0, 0,235, 7, 49,201,186, 18, 0, 0, 0, 80,139, /* 0x 420 */
|
||||||
196,139, 69,184,247,219, 3, 69,196,129,227,255, 15, 0, 0,137, /* 0x 430 */
|
69,200,255,117,172, 82, 1,200,106, 3, 80, 87,232, 74,253,255, /* 0x 430 */
|
||||||
218,137, 93,192,232,240,253,255,255,131,125,220, 0,116, 91,139, /* 0x 440 */
|
255,131,196, 24, 57,199, 15,133,180, 0, 0, 0,131,125,164, 0, /* 0x 440 */
|
||||||
69,212,131, 56, 1,117, 83,246, 64, 24, 1,116, 77,139, 93,212, /* 0x 450 */
|
116, 31,246, 6, 1,117, 4, 49,192,235, 6,139, 69,172,131,192, /* 0x 450 */
|
||||||
137,194,139, 64, 20, 59, 67, 16,139, 82, 8,141, 12, 16,117, 14, /* 0x 460 */
|
2, 80,139, 77,172,139, 69,164,141, 85,236,232, 39,253,255,255, /* 0x 460 */
|
||||||
137,200,247,216, 37,255, 15, 0, 0,131,248, 3,119, 12,139, 69, /* 0x 470 */
|
88,139, 85,208,137,248,232,243,253,255,255,139, 85,200,139, 77, /* 0x 470 */
|
||||||
212,141, 74, 12,131,120, 4, 0,117, 15,139, 1, 61,205,128, 97, /* 0x 480 */
|
200,247,218,141, 4, 15,129,226,255, 15, 0, 0,137, 85,208,232, /* 0x 480 */
|
||||||
195,116, 6,199, 1,205,128, 97,195,133,201,116, 13,139, 69,216, /* 0x 490 */
|
218,253,255,255,131,125,164, 0,116, 85,131,126,232, 1,117, 79, /* 0x 490 */
|
||||||
49,210,131,224,254,232,156,253,255,255,139, 93,184,139, 77,196, /* 0x 4a0 */
|
246, 6, 1,116, 74,139, 69,220,139, 19,139, 24,139, 69,216,141, /* 0x 4a0 */
|
||||||
139, 85,200,106,125, 88,205,128,133,192,116, 8,106,127, 91,106, /* 0x 4b0 */
|
12, 26, 3, 77,176, 59, 16, 15,133,237, 0, 0, 0,137,200,247, /* 0x 4b0 */
|
||||||
1, 88,205,128,139, 69,196, 3, 69,192, 1, 69,184,139, 69,180, /* 0x 4c0 */
|
216, 37,255, 15, 0, 0,131,248, 3, 15,134,219, 0, 0, 0,139, /* 0x 4c0 */
|
||||||
57, 69,184,115, 31,106, 0, 43, 69,184,106, 0,106, 50,255,117, /* 0x 4d0 */
|
1, 61,205,128, 97,195,116, 6,199, 1,205,128, 97,195,133,201, /* 0x 4d0 */
|
||||||
200, 80,255,117,184,232, 98,252,255,255,131,196, 24, 57, 69,184, /* 0x 4e0 */
|
116, 13,139, 69, 8, 49,210,131,224,254,232,140,253,255,255,137, /* 0x 4e0 */
|
||||||
116, 36,235,200,131,125,220, 0,116, 28,131, 69,196, 3,129,101, /* 0x 4f0 */
|
251,139, 77,200,139, 85,196,106,125, 88,205,128,133,192,116, 10, /* 0x 4f0 */
|
||||||
196,255, 15, 0, 0,131,125,196, 3,119, 11,139, 93,184,139, 77, /* 0x 500 */
|
184,127, 0, 0, 0,232, 34,252,255,255,139, 69,200, 3, 69,208, /* 0x 500 */
|
||||||
196,106, 91, 88,205,128,139, 85,224, 71,131, 69,212, 32, 15,183, /* 0x 510 */
|
1,199, 59,125,204,115, 30,106, 0,139, 69,204,106, 0,106, 50, /* 0x 510 */
|
||||||
66, 44, 57,199, 15,140, 38,254,255,255,131,125,220, 0,117, 17, /* 0x 520 */
|
41,248,255,117,196, 80, 87,232, 95,252,255,255,131,196, 24, 57, /* 0x 520 */
|
||||||
139, 93,228,106, 6, 88,205,128,133,192,116, 23,233,123,255,255, /* 0x 530 */
|
199,117,205,235, 33,131,125,164, 0,116, 27,131, 69,200, 3,129, /* 0x 530 */
|
||||||
255,139,125,224,102,131,127, 16, 3,116, 8,139, 93,240,106, 45, /* 0x 540 */
|
101,200,255, 15, 0, 0,131,125,200, 3,119, 10,139, 85,200,137, /* 0x 540 */
|
||||||
88,205,128,139, 69,224, 3,112, 24,141,101,244, 91,137,240, 94, /* 0x 550 */
|
248,232,224,251,255,255,131, 69,180, 32,255, 69,188,131,198, 32, /* 0x 550 */
|
||||||
95,201,195, 85,137,229, 87, 86, 83, 87, 87,139,125, 20,106, 0, /* 0x 560 */
|
139, 85,168, 15,183, 66, 44, 57, 69,188, 15,140, 23,254,255,255, /* 0x 560 */
|
||||||
139, 69, 16,141, 87, 52,139, 93, 8, 80,139,117, 32,137, 69,240, /* 0x 570 */
|
131,125,164, 0,117, 18,139, 93,172,106, 6, 88,205,128,133,192, /* 0x 570 */
|
||||||
137, 85,236,141, 69, 32,141, 85, 24,232,202,251,255,255,139, 69, /* 0x 580 */
|
15,133,122,255,255,255,235, 18,139, 69,168,102,131,120, 16, 3, /* 0x 580 */
|
||||||
12,186, 3, 0, 0, 0, 41,117, 36,137, 69, 32,139, 69,236,139, /* 0x 590 */
|
116, 8,139, 93,184,106, 45, 88,205,128,131,125, 12, 0,116, 34, /* 0x 590 */
|
||||||
72, 8,137,216,131,193, 52,232,154,252,255,255, 15,183, 79, 42, /* 0x 5a0 */
|
139, 85,176,139, 69, 12,137, 16,235, 24,139, 85,224,139, 69,212, /* 0x 5a0 */
|
||||||
137,216,186, 4, 0, 0, 0,232,138,252,255,255, 15,183, 79, 44, /* 0x 5b0 */
|
131, 58, 0,141, 76, 3, 12, 15,132, 18,255,255,255,233, 28,255, /* 0x 5b0 */
|
||||||
137,216,186, 5, 0, 0, 0,232,122,252,255,255,139, 79, 24,137, /* 0x 5c0 */
|
255,255,139, 77,168,139, 73, 24, 1, 77,176,139, 69,176,141,101, /* 0x 5c0 */
|
||||||
216,186, 9, 0, 0, 0,232,107,252,255,255,141, 69, 32, 83,137, /* 0x 5d0 */
|
244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83, 83, 83,139,125, /* 0x 5d0 */
|
||||||
250, 80,139, 69,240,232,130,252,255,255,102,139, 79, 44,131,196, /* 0x 5e0 */
|
28,106, 0,141, 85, 24,139, 77, 16,141, 71, 52,139, 93, 8,139, /* 0x 5e0 */
|
||||||
16, 49,210,102,133,201,137,195,116, 87,139, 69,236,131, 56, 3, /* 0x 5f0 */
|
117, 32,137, 69,236,141, 69, 32,232,154,251,255,255,139, 69, 12, /* 0x 5f0 */
|
||||||
117, 67, 49,201,139, 88, 8,137,202,106, 5, 88,205,128,133,192, /* 0x 600 */
|
186, 5, 0, 0, 0, 15,183, 79, 44,137, 69, 32,137,216, 41,117, /* 0x 600 */
|
||||||
137,198,120, 20,102,186, 0, 2,137,195,137,249,106, 3, 88,205, /* 0x 610 */
|
36,232,101,252,255,255, 15,183, 79, 42,137,216,186, 4, 0, 0, /* 0x 610 */
|
||||||
128, 61, 0, 2, 0, 0,116, 10,106,127, 91,106, 1, 88,205,128, /* 0x 620 */
|
0,232, 85,252,255,255,139, 85,236,137,216,139, 77, 40, 3, 74, /* 0x 620 */
|
||||||
235,246,106, 0,137,240,106, 0,137,250,232, 45,252,255,255, 89, /* 0x 630 */
|
8,186, 3, 0, 0, 0,131,193, 52,232, 61,252,255,255,141, 69, /* 0x 630 */
|
||||||
94,137,195,235, 12, 66, 15,183,193,131, 69,236, 32, 57,194,124, /* 0x 640 */
|
240,137,250,141, 77, 32, 80,139, 69, 16, 83,232, 81,252,255,255, /* 0x 640 */
|
||||||
169,141,101,244,137,216, 91, 94, 95,201,195 /* 0x 650 */
|
137,193,137,198,137,216,186, 9, 0, 0, 0,232, 27,252,255,255, /* 0x 650 */
|
||||||
|
15,183, 71, 44,131,196, 12,141, 72, 1,235, 84,139, 69,236,131, /* 0x 660 */
|
||||||
|
56, 3,117, 72,139, 93,240, 49,201, 3, 88, 8,137,202,106, 5, /* 0x 670 */
|
||||||
|
88,205,128,133,192,137,195,120, 18,102,186, 0, 2,137,249,106, /* 0x 680 */
|
||||||
|
3, 88,205,128, 61, 0, 2, 0, 0,116, 12,184,127, 0, 0, 0, /* 0x 690 */
|
||||||
|
232,135,250,255,255,235,244,106, 0, 49,201,106, 0,137,250,137, /* 0x 6a0 */
|
||||||
|
216,232,235,251,255,255, 90,137,198, 89,235, 7,131, 69,236, 32, /* 0x 6b0 */
|
||||||
|
73,117,169,141,101,244,137,240, 91, 94, 95,201,195 /* 0x 6c0 */
|
||||||
};
|
};
|
||||||
|
|
|
@ -83,7 +83,7 @@ xread(struct Extent *x, char *buf, size_t count)
|
||||||
#else //}{ save debugging time
|
#else //}{ save debugging time
|
||||||
#define ERR_LAB
|
#define ERR_LAB
|
||||||
static void
|
static void
|
||||||
err_exit(int a)
|
err_exit(int a) __attribute__ ((__noreturn__));
|
||||||
{
|
{
|
||||||
(void)a; // debugging convenience
|
(void)a; // debugging convenience
|
||||||
exit(127);
|
exit(127);
|
||||||
|
@ -156,8 +156,8 @@ ERR_LAB
|
||||||
|
|
||||||
if (h.sz_cpr < h.sz_unc) { // Decompress block
|
if (h.sz_cpr < h.sz_unc) { // Decompress block
|
||||||
nrv_uint out_len;
|
nrv_uint out_len;
|
||||||
int const j = (*f_decompress)(xi->buf, h.sz_cpr, xo->buf, &out_len,
|
int const j = (*f_decompress)((unsigned char *)xi->buf, h.sz_cpr,
|
||||||
h.b_method);
|
(unsigned char *)xo->buf, &out_len, h.b_method );
|
||||||
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
|
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
|
||||||
err_exit(7);
|
err_exit(7);
|
||||||
// Skip Ehdr+Phdrs: separate 1st block, not filtered
|
// Skip Ehdr+Phdrs: separate 1st block, not filtered
|
||||||
|
@ -165,7 +165,7 @@ ERR_LAB
|
||||||
&& ((512 < out_len) // this block is longer than Ehdr+Phdrs
|
&& ((512 < out_len) // this block is longer than Ehdr+Phdrs
|
||||||
|| (xo->size==(unsigned)h.sz_unc) ) // block is last in Extent
|
|| (xo->size==(unsigned)h.sz_unc) ) // block is last in Extent
|
||||||
) {
|
) {
|
||||||
(*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
|
(*f_unf)((unsigned char *)xo->buf, out_len, h.b_cto8, h.b_ftid);
|
||||||
}
|
}
|
||||||
xi->buf += h.sz_cpr;
|
xi->buf += h.sz_cpr;
|
||||||
xi->size -= h.sz_cpr;
|
xi->size -= h.sz_cpr;
|
||||||
|
@ -179,9 +179,9 @@ ERR_LAB
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create (or find) an escape hatch to use when munmapping ourselves the stub.
|
// Create (or find) an escape hatch to use when munmapping ourselves the stub.
|
||||||
// Called by do_xmap to create it, and by assembler code to find it.
|
// Called by do_xmap to create it; remembered in AT_NULL.d_val
|
||||||
static void *
|
static void *
|
||||||
make_hatch(Elf32_Phdr const *const phdr)
|
make_hatch(Elf32_Phdr const *const phdr, unsigned const reloc)
|
||||||
{
|
{
|
||||||
unsigned *hatch = 0;
|
unsigned *hatch = 0;
|
||||||
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
|
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
|
||||||
|
@ -194,11 +194,11 @@ make_hatch(Elf32_Phdr const *const phdr)
|
||||||
// and the action is the same when either test succeeds.
|
// and the action is the same when either test succeeds.
|
||||||
|
|
||||||
// Try page fragmentation just beyond .text .
|
// Try page fragmentation just beyond .text .
|
||||||
if ( ( (hatch = (void *)(phdr->p_memsz + phdr->p_vaddr)),
|
if ( ( (hatch = (void *)(phdr->p_memsz + phdr->p_vaddr + reloc)),
|
||||||
( phdr->p_memsz==phdr->p_filesz // don't pollute potential .bss
|
( phdr->p_memsz==phdr->p_filesz // don't pollute potential .bss
|
||||||
&& 4<=(~PAGE_MASK & -(int)hatch) ) ) // space left on page
|
&& 4<=(~PAGE_MASK & -(int)hatch) ) ) // space left on page
|
||||||
// Try Elf32_Ehdr.e_ident[12..15] . warning: 'const' cast away
|
// Try Elf32_Ehdr.e_ident[12..15] . warning: 'const' cast away
|
||||||
|| ( (hatch = (void *)(&((Elf32_Ehdr *)phdr->p_vaddr)->e_ident[12])),
|
|| ( (hatch = (void *)(&((Elf32_Ehdr *)phdr->p_vaddr + reloc)->e_ident[12])),
|
||||||
(phdr->p_offset==0) ) ) {
|
(phdr->p_offset==0) ) ) {
|
||||||
// Omitting 'const' saves repeated literal in gcc.
|
// Omitting 'const' saves repeated literal in gcc.
|
||||||
unsigned /*const*/ escape = 0xc36180cd; // "int $0x80; popa; ret"
|
unsigned /*const*/ escape = 0xc36180cd; // "int $0x80; popa; ret"
|
||||||
|
@ -274,7 +274,8 @@ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum,
|
||||||
lo -= ~PAGE_MASK & lo; // round down to page boundary
|
lo -= ~PAGE_MASK & lo; // round down to page boundary
|
||||||
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
|
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
|
||||||
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
|
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
|
||||||
addr = do_mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC, mflags, 0, 0);
|
addr = do_mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC,
|
||||||
|
mflags, 0, 0 );
|
||||||
*p_brk = hi + addr; // the logical value of brk(0)
|
*p_brk = hi + addr; // the logical value of brk(0)
|
||||||
munmap(szlo + addr, hi - szlo); // desirable if PT_LOAD non-contiguous
|
munmap(szlo + addr, hi - szlo); // desirable if PT_LOAD non-contiguous
|
||||||
return (unsigned long)addr - lo;
|
return (unsigned long)addr - lo;
|
||||||
|
@ -282,13 +283,13 @@ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum,
|
||||||
|
|
||||||
static Elf32_Addr // entry address
|
static Elf32_Addr // entry address
|
||||||
do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi,
|
do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi,
|
||||||
Elf32_auxv_t *const av)
|
Elf32_auxv_t *const av, unsigned *p_reloc)
|
||||||
{
|
{
|
||||||
Elf32_Phdr const *phdr = (Elf32_Phdr const *) (ehdr->e_phoff +
|
Elf32_Phdr const *phdr = (Elf32_Phdr const *) (ehdr->e_phoff +
|
||||||
(char const *)ehdr);
|
(char const *)ehdr);
|
||||||
char *v_brk;
|
char *v_brk;
|
||||||
unsigned long const reloc = xfind_pages(
|
unsigned const reloc = xfind_pages(
|
||||||
((ET_DYN!=ehdr->e_type) ? MAP_FIXED : 0), phdr, ehdr->e_phnum, &v_brk);
|
((ET_EXEC==ehdr->e_type) ? MAP_FIXED : 0), phdr, ehdr->e_phnum, &v_brk);
|
||||||
int j;
|
int j;
|
||||||
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
|
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
|
||||||
if (PT_PHDR==phdr->p_type) {
|
if (PT_PHDR==phdr->p_type) {
|
||||||
|
@ -298,13 +299,11 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi,
|
||||||
unsigned const prot = PF_TO_PROT(phdr->p_flags);
|
unsigned const prot = PF_TO_PROT(phdr->p_flags);
|
||||||
struct Extent xo;
|
struct Extent xo;
|
||||||
size_t mlen = xo.size = phdr->p_filesz;
|
size_t mlen = xo.size = phdr->p_filesz;
|
||||||
char *addr = xo.buf = (char *)phdr->p_vaddr;
|
char *addr = xo.buf = (char *)(phdr->p_vaddr + reloc);
|
||||||
char *haddr = phdr->p_memsz + addr;
|
char *haddr = phdr->p_memsz + addr;
|
||||||
size_t frag = (int)addr &~ PAGE_MASK;
|
size_t frag = (int)addr &~ PAGE_MASK;
|
||||||
mlen += frag;
|
mlen += frag;
|
||||||
addr -= frag;
|
addr -= frag;
|
||||||
addr += reloc;
|
|
||||||
haddr += reloc;
|
|
||||||
|
|
||||||
// Decompressor can overrun the destination by 3 bytes.
|
// Decompressor can overrun the destination by 3 bytes.
|
||||||
if (addr != do_mmap(addr, mlen + (xi ? 3 : 0), PROT_READ | PROT_WRITE,
|
if (addr != do_mmap(addr, mlen + (xi ? 3 : 0), PROT_READ | PROT_WRITE,
|
||||||
|
@ -320,7 +319,7 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi,
|
||||||
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
|
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
|
||||||
bzero(mlen+addr, frag); // fragment at hi end
|
bzero(mlen+addr, frag); // fragment at hi end
|
||||||
if (xi) {
|
if (xi) {
|
||||||
void *const hatch = make_hatch(phdr);
|
void *const hatch = make_hatch(phdr, reloc);
|
||||||
if (0!=hatch) {
|
if (0!=hatch) {
|
||||||
/* always update AT_NULL, especially for compressed PT_INTERP */
|
/* always update AT_NULL, especially for compressed PT_INTERP */
|
||||||
auxv_up((Elf32_auxv_t *)(~1 & (int)av), AT_NULL, (unsigned)hatch);
|
auxv_up((Elf32_auxv_t *)(~1 & (int)av), AT_NULL, (unsigned)hatch);
|
||||||
|
@ -355,6 +354,9 @@ ERR_LAB
|
||||||
do_brk(v_brk);
|
do_brk(v_brk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (0!=p_reloc) {
|
||||||
|
*p_reloc = reloc;
|
||||||
|
}
|
||||||
return ehdr->e_entry + reloc;
|
return ehdr->e_entry + reloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,23 +371,29 @@ void *upx_main(
|
||||||
Elf32_auxv_t *const av,
|
Elf32_auxv_t *const av,
|
||||||
unsigned const sz_compressed,
|
unsigned const sz_compressed,
|
||||||
f_expand *const f_decompress,
|
f_expand *const f_decompress,
|
||||||
Elf32_Ehdr *const ehdr,
|
int junk, // %esp from 'pusha'
|
||||||
struct Extent xo,
|
struct Extent xo,
|
||||||
struct Extent xi
|
struct Extent xi,
|
||||||
|
unsigned const volatile dynbase
|
||||||
) __asm__("upx_main");
|
) __asm__("upx_main");
|
||||||
|
|
||||||
void *upx_main(
|
void *upx_main(
|
||||||
Elf32_auxv_t *const av,
|
Elf32_auxv_t *const av,
|
||||||
unsigned const sz_compressed,
|
unsigned const sz_compressed,
|
||||||
f_expand *const f_decompress,
|
f_expand *const f_decompress,
|
||||||
Elf32_Ehdr *const ehdr, // temp char[MAX_ELF_HDR+OVERHEAD]
|
int junk, // %esp from 'pusha'
|
||||||
struct Extent xo, // {sz_unc, ehdr} for ELF headers
|
struct Extent xo, // {sz_unc, ehdr} for ELF headers
|
||||||
struct Extent xi // {sz_cpr, &b_info} 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 *)xo.buf; // temp char[MAX_ELF_HDR+OVERHEAD]
|
||||||
Elf32_Phdr const *phdr = (Elf32_Phdr const *)(1+ ehdr);
|
Elf32_Phdr const *phdr = (Elf32_Phdr const *)(1+ ehdr);
|
||||||
|
Elf32_Addr reloc;
|
||||||
Elf32_Addr entry;
|
Elf32_Addr entry;
|
||||||
|
|
||||||
|
(void)junk;
|
||||||
|
|
||||||
// sizeof(Ehdr+Phdrs), compressed; including b_info header
|
// sizeof(Ehdr+Phdrs), compressed; including b_info header
|
||||||
size_t const sz_pckhdrs = xi.size;
|
size_t const sz_pckhdrs = xi.size;
|
||||||
|
|
||||||
|
@ -396,19 +404,22 @@ void *upx_main(
|
||||||
xi.buf -= sz_pckhdrs;
|
xi.buf -= sz_pckhdrs;
|
||||||
xi.size = sz_compressed;
|
xi.size = sz_compressed;
|
||||||
|
|
||||||
// AT_PHDR.a_un.a_val is set again by do_xmap if PT_PHDR is present.
|
// Some kernels omit AT_PHNUM,AT_PHENT,AT_PHDR because this stub has no PT_INTERP.
|
||||||
auxv_up(av, AT_PHDR , (unsigned)(1+(Elf32_Ehdr *)phdr->p_vaddr));
|
// That is "too much" optimization. Linux 2.6.x seems to give all AT_*.
|
||||||
auxv_up(av, AT_PHENT , ehdr->e_phentsize);
|
|
||||||
auxv_up(av, AT_PHNUM , ehdr->e_phnum);
|
|
||||||
//auxv_up(av, AT_PAGESZ, PAGE_SIZE); /* ld-linux.so.2 does not need this */
|
//auxv_up(av, AT_PAGESZ, PAGE_SIZE); /* ld-linux.so.2 does not need this */
|
||||||
auxv_up(av, AT_ENTRY , (unsigned)ehdr->e_entry);
|
auxv_up(av, AT_PHNUM , ehdr->e_phnum);
|
||||||
entry = do_xmap((int)f_decompress, ehdr, &xi, av);
|
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);
|
||||||
|
auxv_up(av, AT_ENTRY , entry); // might not be necessary?
|
||||||
|
|
||||||
{ // Map PT_INTERP program interpreter
|
{ // Map PT_INTERP program interpreter
|
||||||
int j;
|
int j;
|
||||||
for (j=0; j < ehdr->e_phnum; ++phdr, ++j) if (PT_INTERP==phdr->p_type) {
|
for (j=0; j < ehdr->e_phnum; ++phdr, ++j) if (PT_INTERP==phdr->p_type) {
|
||||||
char const *const iname = (char const *)phdr->p_vaddr;
|
int const fdi = open(reloc + (char const *)phdr->p_vaddr, O_RDONLY, 0);
|
||||||
int const fdi = open(iname, O_RDONLY, 0);
|
|
||||||
if (0 > fdi) {
|
if (0 > fdi) {
|
||||||
err_exit(18);
|
err_exit(18);
|
||||||
}
|
}
|
||||||
|
@ -416,7 +427,7 @@ void *upx_main(
|
||||||
ERR_LAB
|
ERR_LAB
|
||||||
err_exit(19);
|
err_exit(19);
|
||||||
}
|
}
|
||||||
entry = do_xmap(fdi, ehdr, 0, 0);
|
entry = do_xmap(fdi, ehdr, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
GLOBAL _start
|
GLOBAL _start
|
||||||
;__LEXEC000__
|
;__LEXEC000__
|
||||||
_start:
|
_start:
|
||||||
;;;; int3
|
int3
|
||||||
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
|
||||||
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
|
||||||
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
|
||||||
|
@ -133,41 +133,47 @@ decompress:
|
||||||
%define PROT_WRITE 2
|
%define PROT_WRITE 2
|
||||||
%define PROT_EXEC 4
|
%define PROT_EXEC 4
|
||||||
%define __NR_mmap 90
|
%define __NR_mmap 90
|
||||||
|
%define szElf32_Ehdr 0x34
|
||||||
|
%define p_memsz 5*4
|
||||||
|
|
||||||
; Decompress the rest of this loader, and jump to it
|
; Decompress the rest of this loader, and jump to it
|
||||||
unfold:
|
unfold:
|
||||||
pop esi ; &{ sz_uncompressed, sz_compressed, compressed_data...}
|
pop esi ; &{ b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_data...}
|
||||||
cld
|
|
||||||
lodsd
|
|
||||||
push eax ; sz_uncompressed (junk, actually)
|
|
||||||
push esp ; &sz_uncompressed
|
|
||||||
mov eax, 0x1000000
|
|
||||||
push eax ; &destination
|
|
||||||
|
|
||||||
; mmap a page to hold the decompressed program
|
lea eax, [ebp - (4+ decompress - _start)] ; 4: sizeof(int)
|
||||||
xor ecx, ecx
|
sub eax, [eax] ; %eax= &Elf32_Ehdr of this program
|
||||||
push ecx
|
mov edx, eax ; %edx= &Elf32_Ehdr of this program
|
||||||
push ecx
|
add eax, [p_memsz + szElf32_Ehdr + eax] ; page after .text
|
||||||
mov ch, PAGE_SIZE >> 8
|
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 ; offset
|
||||||
|
push ecx ; fd must be in valid range, but then ignored
|
||||||
push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||||
|
mov ch, PAGE_SIZE >> 8 ; %ecx= PAGE_SIZE
|
||||||
push byte PROT_READ | PROT_WRITE | PROT_EXEC
|
push byte PROT_READ | PROT_WRITE | PROT_EXEC
|
||||||
push ecx ; length
|
push ecx ; length
|
||||||
push eax ; destination
|
push eax ; destination
|
||||||
mov ebx, esp ; address of parameter vector for __NR_mmap
|
mov ebx, esp ; address of parameter vector for __NR_mmap
|
||||||
push byte __NR_mmap
|
push byte __NR_mmap
|
||||||
pop eax
|
pop eax
|
||||||
int 0x80
|
int 0x80 ; changes only %eax; %edx is live
|
||||||
xchg eax, ebx
|
xchg eax, edx ; %edx= page after .text; %eax= &Elf32_Ehdr of this program
|
||||||
mov bh, PAGE_SIZE>>8 ; ebx= 0x1001000
|
xchg eax, ebx ; %ebx= &Elf32_Ehdr of this program
|
||||||
add esp, byte 6*4 ; discard args to mmap
|
|
||||||
|
|
||||||
|
cld
|
||||||
|
lodsd
|
||||||
|
push eax ; sz_uncompressed (junk, actually)
|
||||||
|
push esp ; &dstlen
|
||||||
|
push edx ; &dst
|
||||||
lodsd
|
lodsd
|
||||||
push eax ; sz_compressed
|
push eax ; sz_compressed
|
||||||
lodsd ; junk cto8, algo, unused[2]
|
lodsd ; last 4 bytes of b_info
|
||||||
push esi ; &compressed_data
|
push esi ; &compressed_data
|
||||||
call ebp ; decompress(&src, srclen, &dst, &dstlen)
|
call ebp ; decompress(&src, srclen, &dst, &dstlen)
|
||||||
pop eax ; discard &compressed_data
|
add esp, byte (4+1 + 6-1)*4 ; (4+1) args to decompress, (6-1) args to mmap
|
||||||
pop eax ; discard sz_compressed
|
|
||||||
ret ; &destination
|
ret ; &destination
|
||||||
main:
|
main:
|
||||||
pop ebp ; &decompress
|
pop ebp ; &decompress
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5285 (0x14a5) bytes
|
/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5289 (0x14a9) bytes
|
||||||
|
|
||||||
This file is part of the UPX executable compressor.
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
|
@ -26,339 +26,339 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LINUX_I386ELF_LOADER_ADLER32 0x009eb666
|
#define LINUX_I386ELF_LOADER_ADLER32 0x4022ba71
|
||||||
#define LINUX_I386ELF_LOADER_CRC32 0xfb1e2136
|
#define LINUX_I386ELF_LOADER_CRC32 0x20395854
|
||||||
|
|
||||||
unsigned char linux_i386elf_loader[5285] = {
|
unsigned char linux_i386elf_loader[5289] = {
|
||||||
232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, 48, /* 0x 0 */
|
204,232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, /* 0x 0 */
|
||||||
131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 10 */
|
48,131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1, /* 0x 10 */
|
||||||
117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 20 */
|
219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, /* 0x 20 */
|
||||||
114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 30 */
|
7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238, /* 0x 30 */
|
||||||
17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,115, /* 0x 40 */
|
252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 40 */
|
||||||
0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, /* 0x 50 */
|
115, 0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, /* 0x 50 */
|
||||||
49,201,131,232, 3,114, 13,193,224, 8,138, 6, 70,131,240,255, /* 0x 60 */
|
0, 49,201,131,232, 3,114, 13,193,224, 8,138, 6, 70,131,240, /* 0x 60 */
|
||||||
116, 0,137,197, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 70 */
|
255,116, 0,137,197, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 70 */
|
||||||
201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, 0, /* 0x 80 */
|
17,201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, /* 0x 80 */
|
||||||
65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219, /* 0x 90 */
|
0, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1, /* 0x 90 */
|
||||||
117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0,117, /* 0x a0 */
|
219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0, /* 0x a0 */
|
||||||
9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2,129, /* 0x b0 */
|
117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2, /* 0x b0 */
|
||||||
253, 0,243,255,255,131,209, 1, 86,141, 52, 47,243,164, 94,233, /* 0x c0 */
|
129,253, 0,243,255,255,131,209, 1, 86,141, 52, 47,243,164, 94, /* 0x c0 */
|
||||||
0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0,138, /* 0x d0 */
|
233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0, /* 0x d0 */
|
||||||
2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2,131, /* 0x e0 */
|
138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2, /* 0x e0 */
|
||||||
194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, 0, /* 0x f0 */
|
131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, /* 0x f0 */
|
||||||
0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 100 */
|
0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1, /* 0x 100 */
|
||||||
117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 110 */
|
219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, /* 0x 110 */
|
||||||
114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 120 */
|
7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238, /* 0x 120 */
|
||||||
17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,114, /* 0x 130 */
|
252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 130 */
|
||||||
0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, 0, /* 0x 140 */
|
114, 0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, /* 0x 140 */
|
||||||
72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, 0, /* 0x 150 */
|
0, 72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, /* 0x 150 */
|
||||||
49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240,255, /* 0x 160 */
|
0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240, /* 0x 160 */
|
||||||
116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131,238, /* 0x 170 */
|
255,116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131, /* 0x 170 */
|
||||||
252, 17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 180 */
|
238,252, 17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 180 */
|
||||||
17,201,117, 0, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 190 */
|
219, 17,201,117, 0, 65, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 190 */
|
||||||
17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1, /* 0x 1a0 */
|
219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, /* 0x 1a0 */
|
||||||
219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65, /* 0x 1b0 */
|
1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, /* 0x 1b0 */
|
||||||
131,193, 2,129,253, 0,251,255,255,131,209, 1, 86,141, 52, 47, /* 0x 1c0 */
|
65,131,193, 2,129,253, 0,251,255,255,131,209, 1, 86,141, 52, /* 0x 1c0 */
|
||||||
243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, /* 0x 1d0 */
|
47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, /* 0x 1d0 */
|
||||||
15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, /* 0x 1e0 */
|
4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, /* 0x 1e0 */
|
||||||
0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, /* 0x 1f0 */
|
0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119, /* 0x 1f0 */
|
||||||
1,207,233, 0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, /* 0x 200 */
|
241, 1,207,233, 0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70, /* 0x 200 */
|
||||||
7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49, /* 0x 210 */
|
136, 7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, /* 0x 210 */
|
||||||
192, 64,138, 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, /* 0x 220 */
|
49,192, 64,138, 7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7, /* 0x 220 */
|
||||||
30,131,238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238, /* 0x 230 */
|
139, 30,131,238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131, /* 0x 230 */
|
||||||
252, 17,219,114, 0, 1,219,115, 11,117, 0,139, 30,131,238,252, /* 0x 240 */
|
238,252, 17,219,114, 0, 1,219,115, 11,117, 0,139, 30,131,238, /* 0x 240 */
|
||||||
17,219,114, 0, 72, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 250 */
|
252, 17,219,114, 0, 72, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 250 */
|
||||||
17,192,235, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 260 */
|
219, 17,192,235, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 260 */
|
||||||
201,235, 0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70, /* 0x 270 */
|
17,201,235, 0, 49,201,131,232, 3,114, 17,193,224, 8,138, 6, /* 0x 270 */
|
||||||
131,240,255,116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, /* 0x 280 */
|
70,131,240,255,116, 0,209,248,137,197,235, 11, 1,219,117, 7, /* 0x 280 */
|
||||||
30,131,238,252, 17,219,114,204, 65, 1,219,117, 7,139, 30,131, /* 0x 290 */
|
139, 30,131,238,252, 17,219,114,204, 65, 1,219,117, 7,139, 30, /* 0x 290 */
|
||||||
238,252, 17,219,114,190, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 2a0 */
|
131,238,252, 17,219,114,190, 1,219,117, 7,139, 30,131,238,252, /* 0x 2a0 */
|
||||||
219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, /* 0x 2b0 */
|
17,219, 17,201, 1,219,117, 7,139, 30,131,238,252, 17,219,115, /* 0x 2b0 */
|
||||||
1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, /* 0x 2c0 */
|
0, 1,219,115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, /* 0x 2c0 */
|
||||||
65,131,193, 2,129,253, 0,251,255,255,131,209, 2, 86,141, 52, /* 0x 2d0 */
|
65, 65,131,193, 2,129,253, 0,251,255,255,131,209, 2, 86,141, /* 0x 2d0 */
|
||||||
47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, /* 0x 2e0 */
|
52, 47,243,164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252, /* 0x 2e0 */
|
||||||
4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, /* 0x 2f0 */
|
138, 4, 15,118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, /* 0x 2f0 */
|
||||||
0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119, /* 0x 300 */
|
0, 0, 0,139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4, /* 0x 300 */
|
||||||
241, 1,207,233, 0, 0, 0, 0,185, 84, 69, 88, 76,138, 7, 71, /* 0x 310 */
|
119,241, 1,207,233, 0, 0, 0, 0,185, 84, 69, 88, 76,138, 7, /* 0x 310 */
|
||||||
44,232, 60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, 4, /* 0x 320 */
|
71, 44,232, 60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, /* 0x 320 */
|
||||||
102,193,232, 8,134,196,193,192, 16,134,196, 41,248,128,235,232, /* 0x 330 */
|
4,102,193,232, 8,134,196,193,192, 16,134,196, 41,248,128,235, /* 0x 330 */
|
||||||
137, 7,131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176,232, /* 0x 340 */
|
232,137, 7,131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176, /* 0x 340 */
|
||||||
176,233,242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193,232, /* 0x 350 */
|
232,176,233,242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193, /* 0x 350 */
|
||||||
8,134,196,193,192, 16,134,196, 41,248,171,235, 0,139, 84, 36, /* 0x 360 */
|
232, 8,134,196,193,192, 16,134,196, 41,248,171,235, 0,139, 84, /* 0x 360 */
|
||||||
40, 3, 84, 36, 44, 57,214,116, 1, 72, 43,124, 36, 48,139, 84, /* 0x 370 */
|
36, 40, 3, 84, 36, 44, 57,214,116, 1, 72, 43,124, 36, 48,139, /* 0x 370 */
|
||||||
36, 52,137, 58, 90,137, 68, 36, 28, 97,195,235, 0, 90, 88, 89, /* 0x 380 */
|
84, 36, 52,137, 58, 90,137, 68, 36, 28, 97,195,235, 0, 90, 88, /* 0x 380 */
|
||||||
151, 96, 49,219,187, 78, 77, 82, 85,106, 15, 88,138,100, 36, 32, /* 0x 390 */
|
89,151, 96, 49,219,187, 78, 77, 82, 85,106, 15, 88,138,100, 36, /* 0x 390 */
|
||||||
106, 15, 91,138,124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, 0, /* 0x 3a0 */
|
32,106, 15, 91,138,124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, /* 0x 3a0 */
|
||||||
15,183, 47, 43,110, 12, 41,221,117, 0,131,237, 1,115, 0,136, /* 0x 3b0 */
|
0, 15,183, 47, 43,110, 12, 41,221,117, 0,131,237, 1,115, 0, /* 0x 3b0 */
|
||||||
95,255, 73,136, 7, 71,139, 7,156,102,193,232, 8,193,192, 16, /* 0x 3c0 */
|
136, 95,255, 73,136, 7, 71,139, 7,156,102,193,232, 8,193,192, /* 0x 3c0 */
|
||||||
134,196,157,115, 0,176, 0, 15,200,115, 0,209,232,115, 0,254, /* 0x 3d0 */
|
16,134,196,157,115, 0,176, 0, 15,200,115, 0,209,232,115, 0, /* 0x 3d0 */
|
||||||
203, 75, 35, 30,125, 2, 3, 30,137, 4,156,235, 0,141, 20, 24, /* 0x 3e0 */
|
254,203, 75, 35, 30,125, 2, 3, 30,137, 4,156,235, 0,141, 20, /* 0x 3e0 */
|
||||||
15,182,210, 35, 22, 59, 22,114, 2, 43, 22,139, 4,148,254,203, /* 0x 3f0 */
|
24, 15,182,210, 35, 22, 59, 22,114, 2, 43, 22,139, 4,148,254, /* 0x 3f0 */
|
||||||
75, 35, 30,125, 2, 3, 30,139, 44,156,133,237,117, 0, 80,139, /* 0x 400 */
|
203, 75, 35, 30,125, 2, 3, 30,139, 44,156,133,237,117, 0, 80, /* 0x 400 */
|
||||||
70, 4,254,200, 72, 35, 6,125, 2, 3, 6, 49,237,137, 70, 4, /* 0x 410 */
|
139, 70, 4,254,200, 72, 35, 6,125, 2, 3, 6, 49,237,137, 70, /* 0x 410 */
|
||||||
135,108,132, 4, 88,137, 44,148,137, 4,156, 41,248,131,233, 4, /* 0x 420 */
|
4,135,108,132, 4, 88,137, 44,148,137, 4,156, 41,248,131,233, /* 0x 420 */
|
||||||
3, 70, 16, 1,240,137, 7,131,199, 4,235, 0,235, 0, 80,176, /* 0x 430 */
|
4, 3, 70, 16, 1,240,137, 7,131,199, 4,235, 0,235, 0, 80, /* 0x 430 */
|
||||||
233,176,232, 80,106, 0, 83,137,230, 94,137,218,178,233,178,232, /* 0x 440 */
|
176,233,176,232, 80,106, 0, 83,137,230, 94,137,218,178,233,178, /* 0x 440 */
|
||||||
67,106, 0,254,203, 75,117, 0, 15,183, 7,131,199, 1, 60,128, /* 0x 450 */
|
232, 67,106, 0,254,203, 75,117, 0, 15,183, 7,131,199, 1, 60, /* 0x 450 */
|
||||||
114, 4, 60,143,118, 0, 41,208, 43, 70, 8,131,232, 2,116, 0, /* 0x 460 */
|
128,114, 4, 60,143,118, 0, 41,208, 43, 70, 8,131,232, 2,116, /* 0x 460 */
|
||||||
131,232, 1,114, 0,115, 0,122, 0,123, 0,248,235, 0,131,233, /* 0x 470 */
|
0,131,232, 1,114, 0,115, 0,122, 0,123, 0,248,235, 0,131, /* 0x 470 */
|
||||||
1,127, 0,137,231,185, 4, 1, 0, 0,139, 14,131,193, 5,139, /* 0x 480 */
|
233, 1,127, 0,137,231,185, 4, 1, 0, 0,139, 14,131,193, 5, /* 0x 480 */
|
||||||
14,131,193, 4, 49,192,243,171,137,252, 86, 97,151, 81, 80, 82, /* 0x 490 */
|
139, 14,131,193, 4, 49,192,243,171,137,252, 86, 97,151, 81, 80, /* 0x 490 */
|
||||||
195,137,254,235, 0,138, 7,131,199, 1, 60,128,114, 10, 60,143, /* 0x 4a0 */
|
82,195,137,254,235, 0,138, 7,131,199, 1, 60,128,114, 10, 60, /* 0x 4a0 */
|
||||||
119, 6,128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23, /* 0x 4b0 */
|
143,119, 6,128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, /* 0x 4b0 */
|
||||||
117, 0,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1, /* 0x 4c0 */
|
23,117, 0,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, /* 0x 4c0 */
|
||||||
240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0, /* 0x 4d0 */
|
1,240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, /* 0x 4d0 */
|
||||||
131,233, 1,127, 0, 97,195, 94,252,173, 80, 84,184, 0, 0, 0, /* 0x 4e0 */
|
0,131,233, 1,127, 0, 97,195, 94,141, 69,246, 43, 0,137,194, /* 0x 4e0 */
|
||||||
1, 80, 49,201, 81, 81,181, 16,106, 50,106, 7, 81, 80,137,227, /* 0x 4f0 */
|
3, 64, 72, 80, 49,201, 81,106, 50,181, 16,106, 7, 81, 80,137, /* 0x 4f0 */
|
||||||
106, 90, 88,205,128,147,183, 16,131,196, 24,173, 80,173, 86,255, /* 0x 500 */
|
227,106, 90, 88,205,128,146,147,252,173, 80, 84, 82,173, 80,173, /* 0x 500 */
|
||||||
213, 88, 88,195, 93,232,205,255,255,255, 0, 0, 76, 69, 88, 69, /* 0x 510 */
|
86,255,213,131,196, 40,195, 93,232,203,255,255,255, 0, 0, 0, /* 0x 510 */
|
||||||
67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, /* 0x 520 */
|
76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 520 */
|
||||||
0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 45, 0, 0, 0, 76, 69, /* 0x 530 */
|
0, 6, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 47, 0, /* 0x 530 */
|
||||||
88, 69, 67, 48, 48, 57, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, /* 0x 540 */
|
0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 6, 0, 0, 0, 76, /* 0x 540 */
|
||||||
48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, /* 0x 550 */
|
69, 88, 69, 67, 48, 49, 48, 0, 6, 0, 0, 0, 78, 50, 66, 83, /* 0x 550 */
|
||||||
0, 19, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 78, 50, 66, /* 0x 560 */
|
77, 65, 49, 48, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, /* 0x 560 */
|
||||||
68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 570 */
|
0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 570 */
|
||||||
49, 48, 0, 22, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 78, /* 0x 580 */
|
66, 70, 65, 83, 49, 48, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25, /* 0x 580 */
|
||||||
50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, /* 0x 590 */
|
0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 590 */
|
||||||
65, 83, 49, 49, 0, 24, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 5a0 */
|
78, 50, 66, 70, 65, 83, 49, 49, 0, 25, 0, 0, 0, 78, 50, 66, /* 0x 5a0 */
|
||||||
48, 0, 30, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 41, /* 0x 5b0 */
|
68, 69, 67, 49, 48, 0, 31, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 5b0 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 5c0 */
|
50, 48, 0, 42, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 78, /* 0x 5c0 */
|
||||||
65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, /* 0x 5d0 */
|
50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, /* 0x 5d0 */
|
||||||
0, 46, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 78, 50, 66, /* 0x 5e0 */
|
65, 83, 50, 48, 0, 47, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, /* 0x 5e0 */
|
||||||
70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 5f0 */
|
0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 5f0 */
|
||||||
50, 48, 0, 55, 0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, /* 0x 600 */
|
66, 68, 69, 67, 50, 48, 0, 56, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 600 */
|
||||||
68, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 78, 50, 66, 68, /* 0x 610 */
|
65, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, /* 0x 610 */
|
||||||
69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, /* 0x 620 */
|
78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 620 */
|
||||||
48, 0, 81, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 78, 50, /* 0x 630 */
|
70, 65, 83, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0, 86, 0, /* 0x 630 */
|
||||||
66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, /* 0x 640 */
|
0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 640 */
|
||||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, /* 0x 650 */
|
0, 0, 0, 97, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, /* 0x 650 */
|
||||||
78, 50, 66, 68, 69, 67, 51, 48, 0, 96, 0, 0, 0, 0, 0, 0, /* 0x 660 */
|
0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 97, 0, 0, /* 0x 660 */
|
||||||
0,114, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, /* 0x 670 */
|
0, 0, 0, 0, 0,115, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, /* 0x 670 */
|
||||||
0, 0, 0, 0, 0, 0,144, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 680 */
|
48, 0, 0, 0, 0, 0, 0, 0, 0, 0,145, 0, 0, 0, 78, 50, /* 0x 680 */
|
||||||
53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0, /* 0x 690 */
|
66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 690 */
|
||||||
158, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 78, 50, 66, 68, /* 0x 6a0 */
|
65, 52, 48, 0,159, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, /* 0x 6a0 */
|
||||||
69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, /* 0x 6b0 */
|
78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, /* 0x 6b0 */
|
||||||
48, 0,171, 0, 0, 0, 0, 0, 0, 0,175, 0, 0, 0, 78, 50, /* 0x 6c0 */
|
70, 65, 83, 52, 48, 0,172, 0, 0, 0, 0, 0, 0, 0,176, 0, /* 0x 6c0 */
|
||||||
66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,186, /* 0x 6d0 */
|
0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, /* 0x 6d0 */
|
||||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, /* 0x 6e0 */
|
0, 0, 0,187, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, /* 0x 6e0 */
|
||||||
78, 50, 66, 68, 85, 77, 77, 49, 0,186, 0, 0, 0, 78, 50, 66, /* 0x 6f0 */
|
49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0,187, 0, 0, /* 0x 6f0 */
|
||||||
83, 77, 65, 53, 48, 0,186, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 700 */
|
0, 78, 50, 66, 83, 77, 65, 53, 48, 0,187, 0, 0, 0, 78, 50, /* 0x 700 */
|
||||||
53, 48, 0,188, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, /* 0x 710 */
|
66, 70, 65, 83, 53, 48, 0,189, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 710 */
|
||||||
191, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0,200, 0, 0, /* 0x 720 */
|
67, 53, 48, 0,192, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, /* 0x 720 */
|
||||||
0, 0, 0, 0, 0,212, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 730 */
|
0,201, 0, 0, 0, 0, 0, 0, 0,213, 0, 0, 0, 78, 50, 66, /* 0x 730 */
|
||||||
48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,212, /* 0x 740 */
|
68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 740 */
|
||||||
0, 0, 0, 0, 0, 0, 0,223, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 750 */
|
54, 48, 0,213, 0, 0, 0, 0, 0, 0, 0,224, 0, 0, 0, 78, /* 0x 750 */
|
||||||
83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,237, 0, 0, 0, /* 0x 760 */
|
50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 760 */
|
||||||
78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 770 */
|
238, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x 770 */
|
||||||
70, 65, 83, 54, 49, 0,237, 0, 0, 0, 0, 0, 0, 0, 3, 1, /* 0x 780 */
|
0, 78, 50, 66, 70, 65, 83, 54, 49, 0,238, 0, 0, 0, 0, 0, /* 0x 780 */
|
||||||
0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 790 */
|
0, 0, 4, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, /* 0x 790 */
|
||||||
50, 66, 68, 69, 67, 54, 48, 0, 3, 1, 0, 0, 78, 82, 86, 50, /* 0x 7a0 */
|
0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 4, 1, 0, 0, /* 0x 7a0 */
|
||||||
66, 69, 78, 68, 0, 3, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, /* 0x 7b0 */
|
78, 82, 86, 50, 66, 69, 78, 68, 0, 4, 1, 0, 0, 78, 50, 68, /* 0x 7b0 */
|
||||||
48, 0, 3, 1, 0, 0, 0, 0, 0, 0, 5, 1, 0, 0, 78, 50, /* 0x 7c0 */
|
83, 77, 65, 49, 48, 0, 4, 1, 0, 0, 0, 0, 0, 0, 6, 1, /* 0x 7c0 */
|
||||||
68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 7d0 */
|
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 7d0 */
|
||||||
83, 49, 48, 0, 6, 1, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, /* 0x 7e0 */
|
50, 68, 70, 65, 83, 49, 48, 0, 7, 1, 0, 0, 0, 0, 0, 0, /* 0x 7e0 */
|
||||||
78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, /* 0x 7f0 */
|
9, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x 7f0 */
|
||||||
70, 65, 83, 49, 49, 0, 8, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 800 */
|
0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 9, 1, 0, 0, 78, 50, /* 0x 800 */
|
||||||
49, 48, 0, 14, 1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, /* 0x 810 */
|
68, 68, 69, 67, 49, 48, 0, 15, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 810 */
|
||||||
25, 1, 0, 0, 0, 0, 0, 0, 27, 1, 0, 0, 78, 50, 68, 83, /* 0x 820 */
|
65, 50, 48, 0, 26, 1, 0, 0, 0, 0, 0, 0, 28, 1, 0, 0, /* 0x 820 */
|
||||||
77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, /* 0x 830 */
|
78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, /* 0x 830 */
|
||||||
48, 0, 30, 1, 0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 78, 50, /* 0x 840 */
|
70, 65, 83, 50, 48, 0, 31, 1, 0, 0, 0, 0, 0, 0, 35, 1, /* 0x 840 */
|
||||||
68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, /* 0x 850 */
|
0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, /* 0x 850 */
|
||||||
67, 50, 48, 0, 39, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, /* 0x 860 */
|
50, 68, 68, 69, 67, 50, 48, 0, 40, 1, 0, 0, 78, 50, 68, 83, /* 0x 860 */
|
||||||
0, 52, 1, 0, 0, 0, 0, 0, 0, 65, 1, 0, 0, 78, 50, 68, /* 0x 870 */
|
77, 65, 51, 48, 0, 53, 1, 0, 0, 0, 0, 0, 0, 66, 1, 0, /* 0x 870 */
|
||||||
68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 880 */
|
0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, /* 0x 880 */
|
||||||
51, 48, 0, 65, 1, 0, 0, 0, 0, 0, 0, 71, 1, 0, 0, 78, /* 0x 890 */
|
68, 70, 65, 83, 51, 48, 0, 66, 1, 0, 0, 0, 0, 0, 0, 72, /* 0x 890 */
|
||||||
50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, /* 0x 8a0 */
|
1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, /* 0x 8a0 */
|
||||||
80, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, /* 0x 8b0 */
|
0, 0, 0, 0, 81, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 8b0 */
|
||||||
0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 80, 1, 0, 0, 0, 0, /* 0x 8c0 */
|
0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 81, 1, /* 0x 8c0 */
|
||||||
0, 0, 96, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, /* 0x 8d0 */
|
0, 0, 0, 0, 0, 0, 97, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 8d0 */
|
||||||
0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 8e0 */
|
50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 1, 0, 0, 78, /* 0x 8e0 */
|
||||||
67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 1, 0, 0, /* 0x 8f0 */
|
50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 8f0 */
|
||||||
78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x 900 */
|
149, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x 900 */
|
||||||
83, 77, 65, 52, 48, 0,162, 1, 0, 0, 0, 0, 0, 0,175, 1, /* 0x 910 */
|
0, 78, 50, 68, 83, 77, 65, 52, 48, 0,163, 1, 0, 0, 0, 0, /* 0x 910 */
|
||||||
0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, /* 0x 920 */
|
0, 0,176, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, /* 0x 920 */
|
||||||
50, 68, 70, 65, 83, 52, 48, 0,175, 1, 0, 0, 0, 0, 0, 0, /* 0x 930 */
|
0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,176, 1, 0, 0, /* 0x 930 */
|
||||||
179, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, /* 0x 940 */
|
0, 0, 0, 0,180, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 940 */
|
||||||
0, 0, 0, 0, 0,190, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 950 */
|
0, 69, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 78, 50, 68, /* 0x 950 */
|
||||||
48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,190, /* 0x 960 */
|
68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, /* 0x 960 */
|
||||||
1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0,190, 1, 0, 0, /* 0x 970 */
|
77, 49, 0,191, 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0, /* 0x 970 */
|
||||||
78, 50, 68, 70, 65, 83, 53, 48, 0,192, 1, 0, 0, 78, 50, 68, /* 0x 980 */
|
191, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0,193, 1, 0, /* 0x 980 */
|
||||||
68, 69, 67, 53, 48, 0,195, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 990 */
|
0, 78, 50, 68, 68, 69, 67, 53, 48, 0,196, 1, 0, 0, 78, 50, /* 0x 990 */
|
||||||
54, 48, 0,204, 1, 0, 0, 0, 0, 0, 0,216, 1, 0, 0, 78, /* 0x 9a0 */
|
68, 83, 77, 65, 54, 48, 0,205, 1, 0, 0, 0, 0, 0, 0,217, /* 0x 9a0 */
|
||||||
50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, /* 0x 9b0 */
|
1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 9b0 */
|
||||||
65, 83, 54, 48, 0,216, 1, 0, 0, 0, 0, 0, 0,227, 1, 0, /* 0x 9c0 */
|
78, 50, 68, 70, 65, 83, 54, 48, 0,217, 1, 0, 0, 0, 0, 0, /* 0x 9c0 */
|
||||||
0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, /* 0x 9d0 */
|
0,228, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, /* 0x 9d0 */
|
||||||
0, 0,241, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, /* 0x 9e0 */
|
0, 0, 0, 0, 0, 0,242, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 9e0 */
|
||||||
0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0,241, 1, 0, 0, /* 0x 9f0 */
|
49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, /* 0x 9f0 */
|
||||||
0, 0, 0, 0, 7, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x a00 */
|
242, 1, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 78, 50, 68, 68, /* 0x a00 */
|
||||||
0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 7, 2, /* 0x a10 */
|
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, /* 0x a10 */
|
||||||
0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 7, 2, 0, 0, 78, /* 0x a20 */
|
48, 0, 8, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 8, /* 0x a20 */
|
||||||
50, 69, 83, 77, 65, 49, 48, 0, 7, 2, 0, 0, 0, 0, 0, 0, /* 0x a30 */
|
2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 8, 2, 0, 0, /* 0x a30 */
|
||||||
9, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x a40 */
|
0, 0, 0, 0, 10, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x a40 */
|
||||||
0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 10, 2, 0, 0, 0, 0, /* 0x a50 */
|
0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 11, 2, /* 0x a50 */
|
||||||
0, 0, 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, /* 0x a60 */
|
0, 0, 0, 0, 0, 0, 13, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x a60 */
|
||||||
0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 12, 2, 0, 0, /* 0x a70 */
|
49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x a70 */
|
||||||
78, 50, 69, 68, 69, 67, 49, 48, 0, 18, 2, 0, 0, 78, 50, 69, /* 0x a80 */
|
13, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 19, 2, 0, /* 0x a80 */
|
||||||
83, 77, 65, 50, 48, 0, 29, 2, 0, 0, 0, 0, 0, 0, 31, 2, /* 0x a90 */
|
0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 30, 2, 0, 0, 0, 0, /* 0x a90 */
|
||||||
0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, /* 0x aa0 */
|
0, 0, 32, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, /* 0x aa0 */
|
||||||
50, 69, 70, 65, 83, 50, 48, 0, 34, 2, 0, 0, 0, 0, 0, 0, /* 0x ab0 */
|
0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, 35, 2, 0, 0, /* 0x ab0 */
|
||||||
38, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, /* 0x ac0 */
|
0, 0, 0, 0, 39, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, /* 0x ac0 */
|
||||||
0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 43, 2, 0, 0, 78, 50, /* 0x ad0 */
|
0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 44, 2, /* 0x ad0 */
|
||||||
69, 83, 77, 65, 51, 48, 0, 56, 2, 0, 0, 0, 0, 0, 0, 69, /* 0x ae0 */
|
0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 57, 2, 0, 0, 0, /* 0x ae0 */
|
||||||
2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, /* 0x af0 */
|
0, 0, 0, 70, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x af0 */
|
||||||
78, 50, 69, 70, 65, 83, 51, 48, 0, 69, 2, 0, 0, 0, 0, 0, /* 0x b00 */
|
31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0, 70, 2, 0, /* 0x b00 */
|
||||||
0, 75, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, /* 0x b10 */
|
0, 0, 0, 0, 0, 76, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, /* 0x b10 */
|
||||||
0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b20 */
|
48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 85, 2, 0, 0, 78, 50, /* 0x b20 */
|
||||||
51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b30 */
|
69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x b30 */
|
||||||
84, 2, 0, 0, 0, 0, 0, 0,100, 2, 0, 0, 78, 50, 69, 68, /* 0x b40 */
|
67, 51, 48, 0, 85, 2, 0, 0, 0, 0, 0, 0,101, 2, 0, 0, /* 0x b40 */
|
||||||
69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 2, 0, /* 0x b50 */
|
78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x b50 */
|
||||||
0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x b60 */
|
0,116, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, /* 0x b60 */
|
||||||
0, 0,133, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, /* 0x b70 */
|
0, 0, 0, 0, 0, 0,134, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b70 */
|
||||||
0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,179, 2, 0, 0, /* 0x b80 */
|
54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0, /* 0x b80 */
|
||||||
0, 0, 0, 0,192, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x b90 */
|
180, 2, 0, 0, 0, 0, 0, 0,193, 2, 0, 0, 78, 50, 69, 68, /* 0x b90 */
|
||||||
0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, 0,192, 2, /* 0x ba0 */
|
69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, /* 0x ba0 */
|
||||||
0, 0, 0, 0, 0, 0,196, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x bb0 */
|
48, 0,193, 2, 0, 0, 0, 0, 0, 0,197, 2, 0, 0, 78, 50, /* 0x bb0 */
|
||||||
51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, 78, /* 0x bc0 */
|
69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,208, /* 0x bc0 */
|
||||||
50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, /* 0x bd0 */
|
2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, /* 0x bd0 */
|
||||||
85, 77, 77, 49, 0,207, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, /* 0x be0 */
|
78, 50, 69, 68, 85, 77, 77, 49, 0,208, 2, 0, 0, 78, 50, 69, /* 0x be0 */
|
||||||
48, 0,207, 2, 0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,209, /* 0x bf0 */
|
83, 77, 65, 53, 48, 0,208, 2, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x bf0 */
|
||||||
2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0,212, 2, 0, 0, /* 0x c00 */
|
53, 48, 0,210, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, /* 0x c00 */
|
||||||
78, 50, 69, 83, 77, 65, 54, 48, 0,221, 2, 0, 0, 0, 0, 0, /* 0x c10 */
|
213, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0,222, 2, 0, /* 0x c10 */
|
||||||
0,233, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x c20 */
|
0, 0, 0, 0, 0,234, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x c20 */
|
||||||
0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,233, 2, 0, 0, 0, /* 0x c30 */
|
48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,234, /* 0x c30 */
|
||||||
0, 0, 0,244, 2, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, /* 0x c40 */
|
2, 0, 0, 0, 0, 0, 0,245, 2, 0, 0, 78, 50, 69, 70, 65, /* 0x c40 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 78, 50, 69, 68, /* 0x c50 */
|
83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, /* 0x c50 */
|
||||||
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, /* 0x c60 */
|
78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x c60 */
|
||||||
49, 0, 2, 3, 0, 0, 0, 0, 0, 0, 24, 3, 0, 0, 78, 50, /* 0x c70 */
|
70, 65, 83, 54, 49, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 3, /* 0x c70 */
|
||||||
69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x c80 */
|
0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x c80 */
|
||||||
67, 54, 48, 0, 24, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, /* 0x c90 */
|
50, 69, 68, 69, 67, 54, 48, 0, 25, 3, 0, 0, 78, 82, 86, 50, /* 0x c90 */
|
||||||
0, 24, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 24, 3, /* 0x ca0 */
|
69, 69, 78, 68, 0, 25, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x ca0 */
|
||||||
0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 38, 3, 0, 0, 0, /* 0x cb0 */
|
48, 0, 25, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 39, /* 0x cb0 */
|
||||||
0, 0, 0, 43, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, /* 0x cc0 */
|
3, 0, 0, 0, 0, 0, 0, 44, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x cc0 */
|
||||||
5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, 43, 3, 0, /* 0x cd0 */
|
82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, /* 0x cd0 */
|
||||||
0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 48, 3, 0, 0, 67, 84, /* 0x ce0 */
|
0, 44, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 49, 3, /* 0x ce0 */
|
||||||
66, 83, 72, 82, 48, 49, 0, 48, 3, 0, 0, 67, 84, 66, 82, 79, /* 0x cf0 */
|
0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 49, 3, 0, 0, 67, /* 0x cf0 */
|
||||||
82, 48, 49, 0, 52, 3, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, /* 0x d00 */
|
84, 66, 82, 79, 82, 48, 49, 0, 53, 3, 0, 0, 67, 84, 66, 83, /* 0x d00 */
|
||||||
0, 54, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, 0, 59, 3, /* 0x d10 */
|
87, 65, 48, 49, 0, 55, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x d10 */
|
||||||
0, 0, 0, 0, 0, 0, 73, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d20 */
|
50, 0, 60, 3, 0, 0, 0, 0, 0, 0, 74, 3, 0, 0, 67, 65, /* 0x d20 */
|
||||||
48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, /* 0x d30 */
|
76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, /* 0x d30 */
|
||||||
73, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0, 78, 3, 0, /* 0x d40 */
|
82, 49, 48, 0, 74, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, /* 0x d40 */
|
||||||
0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 80, 3, 0, 0, 67, 65, /* 0x d50 */
|
0, 79, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 81, 3, /* 0x d50 */
|
||||||
76, 76, 84, 82, 49, 49, 0, 82, 3, 0, 0, 0, 0, 0, 0, 86, /* 0x d60 */
|
0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 83, 3, 0, 0, 0, /* 0x d60 */
|
||||||
3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 5, 0, 0, 0, /* 0x d70 */
|
0, 0, 0, 87, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x d70 */
|
||||||
67, 84, 67, 76, 69, 86, 69, 50, 0, 86, 3, 0, 0, 0, 0, 0, /* 0x d80 */
|
5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, 87, 3, 0, /* 0x d80 */
|
||||||
0, 91, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, /* 0x d90 */
|
0, 0, 0, 0, 0, 92, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, /* 0x d90 */
|
||||||
0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 91, 3, 0, 0, 67, /* 0x da0 */
|
49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 92, /* 0x da0 */
|
||||||
84, 68, 85, 77, 77, 89, 50, 0, 93, 3, 0, 0, 67, 84, 66, 83, /* 0x db0 */
|
3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, 94, 3, 0, 0, /* 0x db0 */
|
||||||
72, 82, 49, 49, 0, 93, 3, 0, 0, 67, 84, 66, 82, 79, 82, 49, /* 0x dc0 */
|
67, 84, 66, 83, 72, 82, 49, 49, 0, 94, 3, 0, 0, 67, 84, 66, /* 0x dc0 */
|
||||||
49, 0, 97, 3, 0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0, 99, /* 0x dd0 */
|
82, 79, 82, 49, 49, 0, 98, 3, 0, 0, 67, 84, 66, 83, 87, 65, /* 0x dd0 */
|
||||||
3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,104, 3, 0, 0, /* 0x de0 */
|
49, 49, 0,100, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x de0 */
|
||||||
0, 0, 0, 0,109, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, /* 0x df0 */
|
105, 3, 0, 0, 0, 0, 0, 0,110, 3, 0, 0, 67, 65, 76, 76, /* 0x df0 */
|
||||||
0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, 0,109, 3, /* 0x e00 */
|
84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, /* 0x e00 */
|
||||||
0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,109, 3, 0, 0, 76, /* 0x e10 */
|
68, 0,110, 3, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,110, /* 0x e10 */
|
||||||
88, 85, 78, 70, 48, 48, 48, 0,139, 3, 0, 0, 0, 0, 0, 0, /* 0x e20 */
|
3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,140, 3, 0, 0, /* 0x e20 */
|
||||||
141, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0, 5, 0, 0, /* 0x e30 */
|
0, 0, 0, 0,142, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, /* 0x e30 */
|
||||||
0, 76, 88, 85, 78, 70, 48, 48, 50, 0,141, 3, 0, 0, 77, 82, /* 0x e40 */
|
0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0,142, 3, /* 0x e40 */
|
||||||
85, 66, 89, 84, 69, 48, 0,146, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x e50 */
|
0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,147, 3, 0, 0, 76, /* 0x e50 */
|
||||||
48, 48, 53, 0,148, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 54, /* 0x e60 */
|
88, 77, 82, 85, 48, 48, 53, 0,149, 3, 0, 0, 76, 88, 77, 82, /* 0x e60 */
|
||||||
0,153, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 55, 0,160, 3, /* 0x e70 */
|
85, 48, 48, 54, 0,154, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, /* 0x e70 */
|
||||||
0, 0, 76, 88, 85, 78, 70, 48, 48, 56, 0,167, 3, 0, 0, 76, /* 0x e80 */
|
55, 0,161, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, 0,168, /* 0x e80 */
|
||||||
88, 85, 78, 70, 48, 49, 48, 0,171, 3, 0, 0, 0, 0, 0, 0, /* 0x e90 */
|
3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,172, 3, 0, 0, /* 0x e90 */
|
||||||
176, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, /* 0x ea0 */
|
0, 0, 0, 0,177, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, /* 0x ea0 */
|
||||||
0, 76, 88, 74, 67, 67, 48, 49, 48, 0,176, 3, 0, 0, 76, 88, /* 0x eb0 */
|
0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0,177, 3, /* 0x eb0 */
|
||||||
77, 82, 85, 48, 52, 53, 0,179, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x ec0 */
|
0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,180, 3, 0, 0, 76, /* 0x ec0 */
|
||||||
48, 52, 54, 0,182, 3, 0, 0, 76, 88, 74, 67, 67, 48, 50, 48, /* 0x ed0 */
|
88, 77, 82, 85, 48, 52, 54, 0,183, 3, 0, 0, 76, 88, 74, 67, /* 0x ed0 */
|
||||||
0,184, 3, 0, 0, 0, 0, 0, 0,186, 3, 0, 0, 76, 88, 85, /* 0x ee0 */
|
67, 48, 50, 48, 0,185, 3, 0, 0, 0, 0, 0, 0,187, 3, 0, /* 0x ee0 */
|
||||||
78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, /* 0x ef0 */
|
0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x ef0 */
|
||||||
50, 49, 0,186, 3, 0, 0, 0, 0, 0, 0,191, 3, 0, 0, 76, /* 0x f00 */
|
74, 67, 67, 48, 50, 49, 0,187, 3, 0, 0, 0, 0, 0, 0,192, /* 0x f00 */
|
||||||
88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 74, 67, /* 0x f10 */
|
3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x f10 */
|
||||||
67, 48, 50, 51, 0,191, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x f20 */
|
76, 88, 74, 67, 67, 48, 50, 51, 0,192, 3, 0, 0, 76, 88, 85, /* 0x f20 */
|
||||||
55, 0,198, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 54, 0,200, /* 0x f30 */
|
78, 70, 48, 51, 55, 0,199, 3, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x f30 */
|
||||||
3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 55, 0,201, 3, 0, 0, /* 0x f40 */
|
56, 54, 0,201, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 55, 0, /* 0x f40 */
|
||||||
76, 88, 85, 78, 70, 51, 56, 56, 0,210, 3, 0, 0, 0, 0, 0, /* 0x f50 */
|
202, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0,211, 3, 0, /* 0x f50 */
|
||||||
0,213, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, /* 0x f60 */
|
0, 0, 0, 0, 0,214, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, /* 0x f60 */
|
||||||
0, 0, 76, 88, 85, 78, 70, 52, 56, 54, 0,213, 3, 0, 0, 76, /* 0x f70 */
|
48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, 0,214, /* 0x f70 */
|
||||||
88, 85, 78, 70, 52, 56, 55, 0,217, 3, 0, 0, 0, 0, 0, 0, /* 0x f80 */
|
3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,218, 3, 0, 0, /* 0x f80 */
|
||||||
219, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, /* 0x f90 */
|
0, 0, 0, 0,220, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x f90 */
|
||||||
0, 76, 88, 77, 82, 85, 48, 54, 53, 0,219, 3, 0, 0, 0, 0, /* 0x fa0 */
|
0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0,220, 3, /* 0x fa0 */
|
||||||
0, 0,223, 3, 0, 0, 76, 88, 77, 82, 85, 48, 55, 48, 0, 5, /* 0x fb0 */
|
0, 0, 0, 0, 0, 0,224, 3, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x fb0 */
|
||||||
0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 51, 0,223, 3, 0, 0, /* 0x fc0 */
|
55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 51, 0, /* 0x fc0 */
|
||||||
77, 82, 85, 65, 82, 66, 51, 48, 0,225, 3, 0, 0, 77, 82, 85, /* 0x fd0 */
|
224, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0,226, 3, 0, /* 0x fd0 */
|
||||||
66, 73, 84, 83, 51, 0,226, 3, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x fe0 */
|
0, 77, 82, 85, 66, 73, 84, 83, 51, 0,227, 3, 0, 0, 77, 82, /* 0x fe0 */
|
||||||
52, 48, 0,228, 3, 0, 0, 76, 88, 77, 82, 85, 48, 55, 48, 0, /* 0x ff0 */
|
85, 65, 82, 66, 52, 48, 0,229, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x ff0 */
|
||||||
232, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, 76, 88, 85, 78, /* 0x1000 */
|
48, 55, 48, 0,233, 3, 0, 0, 0, 0, 0, 0,238, 3, 0, 0, /* 0x1000 */
|
||||||
70, 48, 52, 48, 0, 0, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x1010 */
|
76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, 82, 85, /* 0x1010 */
|
||||||
52, 0,240, 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 52, 0,243, /* 0x1020 */
|
66, 89, 84, 69, 52, 0,241, 3, 0, 0, 77, 82, 85, 66, 73, 84, /* 0x1020 */
|
||||||
3, 0, 0, 77, 82, 85, 65, 82, 66, 53, 48, 0,245, 3, 0, 0, /* 0x1030 */
|
83, 52, 0,244, 3, 0, 0, 77, 82, 85, 65, 82, 66, 53, 48, 0, /* 0x1030 */
|
||||||
76, 88, 77, 82, 85, 48, 56, 48, 0,251, 3, 0, 0, 77, 82, 85, /* 0x1040 */
|
246, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0,252, 3, 0, /* 0x1040 */
|
||||||
66, 89, 84, 69, 53, 0,254, 3, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x1050 */
|
0, 77, 82, 85, 66, 89, 84, 69, 53, 0,255, 3, 0, 0, 77, 82, /* 0x1050 */
|
||||||
54, 48, 0, 0, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 53, 0, /* 0x1060 */
|
85, 65, 82, 66, 54, 48, 0, 1, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x1060 */
|
||||||
1, 4, 0, 0, 77, 82, 85, 65, 82, 66, 55, 48, 0, 3, 4, 0, /* 0x1070 */
|
84, 83, 53, 0, 2, 4, 0, 0, 77, 82, 85, 65, 82, 66, 55, 48, /* 0x1070 */
|
||||||
0, 76, 88, 77, 82, 85, 48, 57, 48, 0, 7, 4, 0, 0, 0, 0, /* 0x1080 */
|
0, 4, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, 8, 4, /* 0x1080 */
|
||||||
0, 0, 14, 4, 0, 0, 76, 88, 77, 82, 85, 49, 48, 48, 0, 10, /* 0x1090 */
|
0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 76, 88, 77, 82, 85, 49, /* 0x1090 */
|
||||||
0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 54, 0, 18, 4, 0, 0, /* 0x10a0 */
|
48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 54, 0, /* 0x10a0 */
|
||||||
77, 82, 85, 65, 82, 66, 56, 48, 0, 20, 4, 0, 0, 77, 82, 85, /* 0x10b0 */
|
19, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 21, 4, 0, /* 0x10b0 */
|
||||||
66, 73, 84, 83, 54, 0, 21, 4, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x10c0 */
|
0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 22, 4, 0, 0, 77, 82, /* 0x10c0 */
|
||||||
57, 48, 0, 23, 4, 0, 0, 76, 88, 77, 82, 85, 49, 48, 48, 0, /* 0x10d0 */
|
85, 65, 82, 66, 57, 48, 0, 24, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x10d0 */
|
||||||
27, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 43, 4, 0, /* 0x10e0 */
|
49, 48, 48, 0, 28, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x10e0 */
|
||||||
0, 76, 88, 77, 82, 85, 49, 49, 48, 0, 48, 4, 0, 0, 76, 88, /* 0x10f0 */
|
0, 44, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, 49, 4, /* 0x10f0 */
|
||||||
77, 82, 85, 49, 49, 49, 0, 51, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x1100 */
|
0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 52, 4, 0, 0, 76, /* 0x1100 */
|
||||||
48, 52, 49, 0, 53, 4, 0, 0, 0, 0, 0, 0, 60, 4, 0, 0, /* 0x1110 */
|
88, 85, 78, 70, 48, 52, 49, 0, 54, 4, 0, 0, 0, 0, 0, 0, /* 0x1110 */
|
||||||
76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 85, /* 0x1120 */
|
61, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, /* 0x1120 */
|
||||||
78, 70, 48, 52, 50, 0, 60, 4, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x1130 */
|
0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 61, 4, 0, 0, 76, 69, /* 0x1130 */
|
||||||
49, 54, 0, 60, 4, 0, 0, 0, 0, 0, 0, 62, 4, 0, 0, 76, /* 0x1140 */
|
88, 69, 67, 48, 49, 54, 0, 61, 4, 0, 0, 0, 0, 0, 0, 63, /* 0x1140 */
|
||||||
88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 77, 82, /* 0x1150 */
|
4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, /* 0x1150 */
|
||||||
85, 48, 49, 48, 0, 62, 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, /* 0x1160 */
|
76, 88, 77, 82, 85, 48, 49, 48, 0, 63, 4, 0, 0, 76, 88, 74, /* 0x1160 */
|
||||||
48, 0, 63, 4, 0, 0, 76, 88, 67, 65, 76, 76, 66, 48, 0, 65, /* 0x1170 */
|
77, 80, 65, 48, 48, 0, 64, 4, 0, 0, 76, 88, 67, 65, 76, 76, /* 0x1170 */
|
||||||
4, 0, 0, 76, 88, 85, 78, 70, 48, 50, 49, 0, 67, 4, 0, 0, /* 0x1180 */
|
66, 48, 0, 66, 4, 0, 0, 76, 88, 85, 78, 70, 48, 50, 49, 0, /* 0x1180 */
|
||||||
76, 88, 77, 82, 85, 48, 50, 50, 0, 73, 4, 0, 0, 76, 88, 74, /* 0x1190 */
|
68, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, 74, 4, 0, /* 0x1190 */
|
||||||
77, 80, 65, 48, 49, 0, 76, 4, 0, 0, 76, 88, 67, 65, 76, 76, /* 0x11a0 */
|
0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 77, 4, 0, 0, 76, 88, /* 0x11a0 */
|
||||||
66, 49, 0, 78, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 49, 0, /* 0x11b0 */
|
67, 65, 76, 76, 66, 49, 0, 79, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x11b0 */
|
||||||
80, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 81, 4, 0, /* 0x11c0 */
|
84, 83, 49, 0, 81, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x11c0 */
|
||||||
0, 77, 82, 85, 66, 89, 84, 69, 49, 0, 83, 4, 0, 0, 77, 82, /* 0x11d0 */
|
0, 82, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, 84, 4, /* 0x11d0 */
|
||||||
85, 65, 82, 66, 49, 48, 0, 85, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x11e0 */
|
0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 86, 4, 0, 0, 76, /* 0x11e0 */
|
||||||
48, 52, 48, 0, 86, 4, 0, 0, 0, 0, 0, 0, 88, 4, 0, 0, /* 0x11f0 */
|
88, 77, 82, 85, 48, 52, 48, 0, 87, 4, 0, 0, 0, 0, 0, 0, /* 0x11f0 */
|
||||||
76, 88, 77, 82, 85, 48, 51, 48, 0, 0, 0, 0, 0, 76, 88, 85, /* 0x1200 */
|
89, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, 0, 0, /* 0x1200 */
|
||||||
78, 70, 48, 51, 48, 0, 88, 4, 0, 0, 76, 88, 74, 67, 67, 48, /* 0x1210 */
|
0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 89, 4, 0, 0, 76, 88, /* 0x1210 */
|
||||||
48, 48, 0, 94, 4, 0, 0, 0, 0, 0, 0,102, 4, 0, 0, 76, /* 0x1220 */
|
74, 67, 67, 48, 48, 48, 0, 95, 4, 0, 0, 0, 0, 0, 0,103, /* 0x1220 */
|
||||||
88, 74, 67, 67, 48, 49, 48, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x1230 */
|
4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, 0, 0, /* 0x1230 */
|
||||||
48, 77, 82, 85, 0,102, 4, 0, 0, 76, 88, 67, 74, 49, 77, 82, /* 0x1240 */
|
76, 88, 67, 74, 48, 77, 82, 85, 0,103, 4, 0, 0, 76, 88, 67, /* 0x1240 */
|
||||||
85, 0,104, 4, 0, 0, 76, 88, 67, 65, 76, 74, 77, 80, 0,107, /* 0x1250 */
|
74, 49, 77, 82, 85, 0,105, 4, 0, 0, 76, 88, 67, 65, 76, 74, /* 0x1250 */
|
||||||
4, 0, 0, 76, 88, 67, 65, 76, 76, 48, 48, 0,110, 4, 0, 0, /* 0x1260 */
|
77, 80, 0,108, 4, 0, 0, 76, 88, 67, 65, 76, 76, 48, 48, 0, /* 0x1260 */
|
||||||
0, 0, 0, 0,112, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, /* 0x1270 */
|
111, 4, 0, 0, 0, 0, 0, 0,113, 4, 0, 0, 76, 88, 85, 78, /* 0x1270 */
|
||||||
0, 0, 0, 0, 0, 76, 88, 67, 65, 76, 76, 48, 49, 0,112, 4, /* 0x1280 */
|
70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x1280 */
|
||||||
0, 0, 76, 88, 67, 74, 50, 77, 82, 85, 0,115, 4, 0, 0, 0, /* 0x1290 */
|
49, 0,113, 4, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, 0,116, /* 0x1290 */
|
||||||
0, 0, 0,117, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, /* 0x12a0 */
|
4, 0, 0, 0, 0, 0, 0,118, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x12a0 */
|
||||||
0, 0, 0, 0, 76, 88, 67, 74, 52, 77, 82, 85, 0,117, 4, 0, /* 0x12b0 */
|
48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, 82, 85, /* 0x12b0 */
|
||||||
0, 0, 0, 0, 0,119, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x12c0 */
|
0,118, 4, 0, 0, 0, 0, 0, 0,120, 4, 0, 0, 76, 88, 85, /* 0x12c0 */
|
||||||
52, 0, 0, 0, 0, 0, 76, 88, 67, 74, 54, 77, 82, 85, 0,119, /* 0x12d0 */
|
78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, 54, 77, /* 0x12d0 */
|
||||||
4, 0, 0, 0, 0, 0, 0,121, 4, 0, 0, 76, 88, 67, 74, 56, /* 0x12e0 */
|
82, 85, 0,120, 4, 0, 0, 0, 0, 0, 0,122, 4, 0, 0, 76, /* 0x12e0 */
|
||||||
77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, 55, 77, 82, 85, /* 0x12f0 */
|
88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, /* 0x12f0 */
|
||||||
0,121, 4, 0, 0, 0, 0, 0, 0,123, 4, 0, 0, 76, 88, 67, /* 0x1300 */
|
55, 77, 82, 85, 0,122, 4, 0, 0, 0, 0, 0, 0,124, 4, 0, /* 0x1300 */
|
||||||
74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, 56, 77, /* 0x1310 */
|
0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x1310 */
|
||||||
82, 85, 0,123, 4, 0, 0, 0, 0, 0, 0,126, 4, 0, 0, 76, /* 0x1320 */
|
67, 74, 56, 77, 82, 85, 0,124, 4, 0, 0, 0, 0, 0, 0,127, /* 0x1320 */
|
||||||
88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 85, 78, /* 0x1330 */
|
4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, /* 0x1330 */
|
||||||
70, 48, 51, 52, 0,126, 4, 0, 0, 0, 0, 0, 0,131, 4, 0, /* 0x1340 */
|
76, 88, 85, 78, 70, 48, 51, 52, 0,127, 4, 0, 0, 0, 0, 0, /* 0x1340 */
|
||||||
0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 0, 0, 0, 0, 76, 88, /* 0x1350 */
|
0,132, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 0, 0, /* 0x1350 */
|
||||||
77, 82, 85, 48, 53, 53, 0,131, 4, 0, 0, 77, 82, 85, 66, 89, /* 0x1360 */
|
0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,132, 4, 0, 0, 77, /* 0x1360 */
|
||||||
84, 69, 50, 0,133, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 50, /* 0x1370 */
|
82, 85, 66, 89, 84, 69, 50, 0,134, 4, 0, 0, 77, 82, 85, 66, /* 0x1370 */
|
||||||
0,138, 4, 0, 0, 77, 82, 85, 65, 82, 66, 50, 48, 0,143, 4, /* 0x1380 */
|
73, 84, 83, 50, 0,139, 4, 0, 0, 77, 82, 85, 65, 82, 66, 50, /* 0x1380 */
|
||||||
0, 0, 76, 88, 77, 82, 85, 48, 53, 55, 0,148, 4, 0, 0, 76, /* 0x1390 */
|
48, 0,144, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, 0,149, /* 0x1390 */
|
||||||
88, 77, 82, 85, 48, 53, 56, 0,154, 4, 0, 0, 76, 88, 85, 78, /* 0x13a0 */
|
4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,155, 4, 0, 0, /* 0x13a0 */
|
||||||
70, 48, 51, 53, 0,155, 4, 0, 0, 67, 75, 76, 76, 84, 82, 48, /* 0x13b0 */
|
76, 88, 85, 78, 70, 48, 51, 53, 0,156, 4, 0, 0, 67, 75, 76, /* 0x13b0 */
|
||||||
48, 0,161, 4, 0, 0, 0, 0, 0, 0,165, 4, 0, 0, 67, 75, /* 0x13c0 */
|
76, 84, 82, 48, 48, 0,162, 4, 0, 0, 0, 0, 0, 0,166, 4, /* 0x13c0 */
|
||||||
76, 76, 84, 82, 50, 48, 0, 30, 0, 0, 0, 67, 75, 76, 76, 84, /* 0x13d0 */
|
0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, 0, 0, 67, /* 0x13d0 */
|
||||||
82, 49, 48, 0,170, 4, 0, 0, 0, 0, 0, 0,184, 4, 0, 0, /* 0x13e0 */
|
75, 76, 76, 84, 82, 49, 48, 0,171, 4, 0, 0, 0, 0, 0, 0, /* 0x13e0 */
|
||||||
67, 75, 76, 76, 84, 82, 50, 48, 0, 6, 0, 0, 0, 67, 75, 76, /* 0x13f0 */
|
185, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 6, 0, 0, /* 0x13f0 */
|
||||||
76, 84, 82, 50, 48, 0,184, 4, 0, 0, 0, 0, 0, 0,190, 4, /* 0x1400 */
|
0, 67, 75, 76, 76, 84, 82, 50, 48, 0,185, 4, 0, 0, 0, 0, /* 0x1400 */
|
||||||
0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 0, /* 0x1410 */
|
0, 0,191, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, /* 0x1410 */
|
||||||
0, 0, 0,194, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, /* 0x1420 */
|
0, 0, 0, 0, 0, 0, 0,195, 4, 0, 0, 67, 75, 76, 76, 84, /* 0x1420 */
|
||||||
0, 0, 0, 0, 67, 75, 76, 76, 84, 82, 51, 48, 0,217, 4, 0, /* 0x1430 */
|
82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, 82, 51, 48, /* 0x1430 */
|
||||||
0, 0, 0, 0, 0,224, 4, 0, 0, 67, 75, 76, 76, 84, 82, 49, /* 0x1440 */
|
0,218, 4, 0, 0, 0, 0, 0, 0,225, 4, 0, 0, 67, 75, 76, /* 0x1440 */
|
||||||
48, 0, 14, 0, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0,224, /* 0x1450 */
|
76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1450 */
|
||||||
4, 0, 0, 0, 0, 0, 0,229, 4, 0, 0, 67, 75, 76, 76, 84, /* 0x1460 */
|
52, 48, 0,225, 4, 0, 0, 0, 0, 0, 0,230, 4, 0, 0, 67, /* 0x1460 */
|
||||||
82, 48, 48, 0, 4, 0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 55, /* 0x1470 */
|
75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, 69, 88, 69, /* 0x1470 */
|
||||||
0,229, 4, 0, 0, 76, 69, 88, 69, 67, 48, 50, 48, 0,231, 4, /* 0x1480 */
|
67, 48, 49, 55, 0,230, 4, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x1480 */
|
||||||
0, 0, 88, 84, 72, 69, 69, 78, 68, 88, 0, 26, 5, 0, 0,255, /* 0x1490 */
|
48, 0,232, 4, 0, 0, 88, 84, 72, 69, 69, 78, 68, 88, 0, 29, /* 0x1490 */
|
||||||
255,255,255, 26, 5 /* 0x14a0 */
|
5, 0, 0,255,255,255,255, 29, 5 /* 0x14a0 */
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,8 +38,8 @@ PHDRS
|
||||||
}
|
}
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* 0x01001000: l_lx_elf86.asm assumes 1 page up from 64KB boundary */
|
/* 0x00c00000: 12MB */
|
||||||
. = 0x01001000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
|
. = 0x00c00000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
|
||||||
.text : {
|
.text : {
|
||||||
*(.text)
|
*(.text)
|
||||||
*(.data)
|
*(.data)
|
||||||
|
|
|
@ -418,6 +418,7 @@ typedef struct
|
||||||
#define AT_PAGESZ 6
|
#define AT_PAGESZ 6
|
||||||
#define AT_ENTRY 9
|
#define AT_ENTRY 9
|
||||||
|
|
||||||
|
#define ET_EXEC 2
|
||||||
#define ET_DYN 3
|
#define ET_DYN 3
|
||||||
|
|
||||||
#define PF_X 1
|
#define PF_X 1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user