Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 89cfa22c3f | |||
| e7522f4bdf | |||
| 504deeff42 | |||
| b7785b64cf | |||
| f914cb6858 | |||
| 91051d2521 | |||
| 51536a7acd | |||
| 263ccab6e3 | |||
| 9f87755dcb | |||
| 60b4cca5e5 | |||
| d2718e99a4 | |||
| 69a00c0ab3 | |||
| 3272d23917 | |||
| 7f0545cae7 | |||
| 68f35deb86 | |||
| c4f4035072 | |||
| a7d8845952 | |||
| a3378393b0 | |||
| 3dfe0ad478 | |||
| 9a3b7a4f3f | |||
| 78579b1103 | |||
| 7d50344512 | |||
| 7a00c12065 | |||
| af71e67681 | |||
| b3e20fc324 | |||
| bd1014abb6 | |||
| 7f76664a5d | |||
| 0a5a80b05d | |||
| 2d63da0660 | |||
| 8387527d2e | |||
| 5d03ba7d63 | |||
| 0ece50c122 | |||
| f2ac297252 | |||
| 0ca8ae17d4 | |||
| 88ca87cf9e | |||
| 0d69d228e4 | |||
| a3afe95306 | |||
| 9fb4af8658 | |||
| 9bb6ba9311 | |||
| faa42ba341 | |||
| 596827a912 | |||
| 89b4292445 | |||
| dd88737414 | |||
| 5456cfc304 | |||
| 1e66096ea7 | |||
| 2b6ae3908c | |||
| 1924612479 | |||
| 2af5bdeaab | |||
| b28565b38d | |||
| fec602362b | |||
| 6753c5f45a | |||
| 2f3c108d42 |
-13
@@ -1,13 +0,0 @@
|
||||
.bzr*
|
||||
.darcs*
|
||||
.git*
|
||||
.hg*
|
||||
_darcs
|
||||
B
|
||||
build*
|
||||
doxygen
|
||||
maint
|
||||
ChangeLog.cvs*
|
||||
GNUmakefile
|
||||
MMakefile
|
||||
TODO.*
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
.bzr*
|
||||
.darcs*
|
||||
.git*
|
||||
.hg*
|
||||
_darcs
|
||||
B
|
||||
build*
|
||||
doxygen
|
||||
maint
|
||||
ChangeLog.cvs*
|
||||
GNUmakefile
|
||||
MMakefile
|
||||
TODO.*
|
||||
@@ -0,0 +1,43 @@
|
||||
syntax: regexp
|
||||
|
||||
^ChangeLog
|
||||
^build
|
||||
^maint
|
||||
|
||||
syntax: glob
|
||||
|
||||
*.a
|
||||
*.d
|
||||
*.dll
|
||||
*.exe
|
||||
*.lib
|
||||
*.map
|
||||
*.o
|
||||
*.out
|
||||
*.py[cdo]
|
||||
*.so
|
||||
*.res
|
||||
*.ttp
|
||||
|
||||
doc/*.1
|
||||
doc/*.doc
|
||||
doc/*.html
|
||||
|
||||
src/MMakefile
|
||||
src/compress_nrv*
|
||||
src/*.rc
|
||||
|
||||
stub/MMakefile
|
||||
stub/l_t_*.i
|
||||
stub/stamp-h
|
||||
stub/*.ash
|
||||
stub/*.asx
|
||||
stub/*.asy
|
||||
stub/*.bin
|
||||
stub/*.lst
|
||||
|
||||
stub/util/armpe/armpe_tester
|
||||
|
||||
stub/util/sstrip/amd64-linux-sstrip
|
||||
stub/util/sstrip/i386-linux-sstrip
|
||||
stub/util/sstrip/sstrip
|
||||
@@ -0,0 +1,10 @@
|
||||
140415ffbcef86a42b4d672249927364430d3d38 RELEASE_111
|
||||
223ac5b23f9731ceac9ff8d65167df4900776e36 RELEASE_190
|
||||
2c753c5bf38e7322715e2a5c6c5381111bd7a61a RELEASE_194
|
||||
2ee65b77f9117651e2e5517b2edede23698d73ca RELEASE_196
|
||||
70402aeee6e0e4fc2889658ed8cee44461c0b0a8 RELEASE_200
|
||||
a935d577fc7dd9c2c87761c9c702805da6ce1e51 RELEASE_193
|
||||
b0353253b0b3d062eb5adb50d4b665a96620da45 RELEASE_195
|
||||
c2e0cd4d621b047f254f2def42132a03683ff52c RELEASE_192
|
||||
eb1ce56dce7dd1835964362470610925963b9043 RELEASE_110
|
||||
ed96891ef795bceec6b7ff3ca1ca7764431bfb39 RELEASE_191
|
||||
@@ -12,32 +12,22 @@ default:
|
||||
@echo "UPX info: please choose a target for 'make'"
|
||||
|
||||
all mostlyclean clean distclean maintainer-clean:
|
||||
ifneq ($(wildcard $(HOME)/local/bin/bin-upx),)
|
||||
# these need special build tools
|
||||
$(MAKE) -C src/stub/util/sstrip $@
|
||||
$(MAKE) -C src/stub $@
|
||||
endif
|
||||
$(MAKE) -C src $@
|
||||
$(MAKE) -C doc $@
|
||||
|
||||
dist: distclean
|
||||
false
|
||||
|
||||
|
||||
ifneq ($(wildcard CVS/R*),)
|
||||
CVS_ROOT := $(shell cat CVS/Root)
|
||||
CVS_REPO := $(shell cat CVS/Repository)
|
||||
endif
|
||||
|
||||
cvs-info:
|
||||
@echo 'CVS info: $(CVS_ROOT) $(CVS_REPO)'
|
||||
|
||||
cvs-admin-ko:
|
||||
cvs admin -ko .
|
||||
cvs -q -z6 update -P -d
|
||||
|
||||
# automatically generate ChangeLog from CVS
|
||||
ChangeLog ChangeLog.cvs:
|
||||
perl $(srcdir)/scripts/cvs2cl.pl --utc -f ChangeLog.cvs
|
||||
# automatically generate ChangeLog from hg
|
||||
ChangeLog:
|
||||
hg log --style=changelog > $@
|
||||
|
||||
|
||||
.PHONY: all mostlyclean clean distclean maintainer-clean
|
||||
.PHONY: dist cvs-info cvs-admin-ko ChangeLog ChangeLog.cvs
|
||||
.PHONY: default all mostlyclean clean distclean maintainer-clean
|
||||
.PHONY: dist ChangeLog
|
||||
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
User visible changes for UPX
|
||||
==================================================================
|
||||
|
||||
Changes in 2.01 (06 Jun 2006):
|
||||
* arm/pe: better DLL support
|
||||
* dos/exe: device driver support added
|
||||
* linux/386: Fix --force-execve for PaX, grSecurity, and strict SELinux.
|
||||
/tmp must support execve(); therefore /tmp cannot be mounted 'noexec'.
|
||||
* win32/pe & arm/pe: added new option '--keep-resource=' for
|
||||
excluding selected resources from compression
|
||||
|
||||
Changes in 2.00 (27 Apr 2006):
|
||||
* linux/386: the stub now prints an error message if some strict
|
||||
SELinux mode does prevent runtime decompression and execution
|
||||
|
||||
@@ -56,8 +56,6 @@ Existing formats:
|
||||
|
||||
- dos/exe: implement filter support
|
||||
|
||||
- dos/sys: add support for sys/exe combos
|
||||
|
||||
- linux/i386:
|
||||
- use the new assembly preprocessor stuff (ie. process the file
|
||||
headers internally)
|
||||
@@ -68,8 +66,7 @@ Existing formats:
|
||||
|
||||
- win32/pe: display a nice dialog box in the stub in case
|
||||
of problems (like importing a DLL or function fails)
|
||||
- win32/pe: finer control over resource compression, per section
|
||||
compression
|
||||
- win32/pe: per section compression
|
||||
|
||||
|
||||
Compression ratio:
|
||||
|
||||
@@ -43,6 +43,8 @@ John S. Fine <johnfine@erols.com>
|
||||
for the new version of the dos/exe decompressor
|
||||
Lukundoo <Lukundoo@softhome.net>
|
||||
for beta testing
|
||||
Michael Devore
|
||||
for initial dos/exe device driver support
|
||||
Oleg V. Volkov <rover@lglobus.ru>
|
||||
for various FreeBSD specific informations
|
||||
The Owl & G-RoM
|
||||
|
||||
@@ -105,9 +105,6 @@ FORMAT WIN32/PE
|
||||
|
||||
- decrease runtime memory overhead
|
||||
|
||||
2 - easy - mfx + ml) new switch(es) : do not compress resource types x,y,z
|
||||
or resource names a,b,c
|
||||
|
||||
3 - difficult) don't compress the BSS section and other holes.
|
||||
|
||||
4 - medium - ml) fix when objectalign < 0x1000
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
upx.1
|
||||
upx.doc
|
||||
upx.html
|
||||
upx.man
|
||||
upx.ps
|
||||
upx.tex
|
||||
@@ -1,6 +0,0 @@
|
||||
upx.1
|
||||
upx.doc
|
||||
upx.html
|
||||
upx.man
|
||||
upx.ps
|
||||
upx.tex
|
||||
+16
-3
@@ -340,9 +340,6 @@ Extra options available for this executable format:
|
||||
|
||||
=head2 NOTES FOR DOS/SYS
|
||||
|
||||
You can only compress plain sys files, sys/exe (two in one)
|
||||
combos are not supported.
|
||||
|
||||
Compressed programs only work on a 286+.
|
||||
|
||||
Packed programs will be byte-identical to the original after uncompression.
|
||||
@@ -873,6 +870,22 @@ Extra options available for this executable format:
|
||||
|
||||
--compress-resources=0 Don't compress any resources at all.
|
||||
|
||||
--keep-resource=list Don't compress resources specified by the list.
|
||||
The members of the list are separated by commas.
|
||||
A list member has the following format: I<type[/name]>.
|
||||
I<Type> is the type of the resource. Standard types
|
||||
must be specified as decimal numbers, user types can be
|
||||
specified by decimal IDs or strings. I<Name> is the
|
||||
identifier of the resource. It can be a decimal number
|
||||
or a string. For example:
|
||||
|
||||
--keep-resource=2/MYBITMAP,5,6/12345
|
||||
|
||||
UPX won't compress the named bitmap resource "MYBITMAP",
|
||||
it leaves every dialog (5) resource uncompressed, and
|
||||
it won't touch the string table resource with identifier
|
||||
12345.
|
||||
|
||||
--force Force compression even when there is an
|
||||
unexpected value in a header field.
|
||||
Use with care.
|
||||
|
||||
-3220
File diff suppressed because it is too large
Load Diff
@@ -1,20 +0,0 @@
|
||||
*.0??
|
||||
*.d
|
||||
*.dat
|
||||
*.idb
|
||||
*.img
|
||||
*.map
|
||||
*.raw
|
||||
*.rc
|
||||
*.rel
|
||||
*.res
|
||||
*.pdb
|
||||
*.out
|
||||
*.upx
|
||||
.gdbinit
|
||||
GNUmakefile
|
||||
MMakefile
|
||||
compress_nrv.*
|
||||
upx
|
||||
version1*.h
|
||||
version2*.h
|
||||
@@ -1,20 +0,0 @@
|
||||
*.0??
|
||||
*.d
|
||||
*.dat
|
||||
*.idb
|
||||
*.img
|
||||
*.map
|
||||
*.raw
|
||||
*.rc
|
||||
*.rel
|
||||
*.res
|
||||
*.pdb
|
||||
*.out
|
||||
*.upx
|
||||
.gdbinit
|
||||
GNUmakefile
|
||||
MMakefile
|
||||
compress_nrv.*
|
||||
upx
|
||||
version1*.h
|
||||
version2*.h
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -229,6 +229,7 @@ void show_help(int x)
|
||||
" --compress-icons=1 compress all but the first icon\n"
|
||||
" --compress-icons=2 compress all but the first icon directory [default]\n"
|
||||
" --compress-resources=0 do not compress any resources at all\n"
|
||||
" --keep-resource=list do not compress resources specified by list\n"
|
||||
" --strip-relocs=0 do not strip relocations\n"
|
||||
" --strip-relocs=1 strip relocations [default]\n"
|
||||
" --all-methods try all available compression methods\n"
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ void init_options(struct options_t *o)
|
||||
o->win32_pe.compress_rt[i] = -1;
|
||||
o->win32_pe.compress_rt[24] = false; // 24 == RT_MANIFEST
|
||||
o->win32_pe.strip_relocs = -1;
|
||||
o->win32_pe.keep_resource = "";
|
||||
}
|
||||
|
||||
static struct options_t global_options;
|
||||
@@ -702,6 +703,11 @@ static int do_option(int optc, const char *arg)
|
||||
opt->win32_pe.strip_relocs = 0;
|
||||
//printf("strip_relocs: %d\n", opt->win32_pe.strip_relocs);
|
||||
break;
|
||||
case 635:
|
||||
if (!mfx_optarg || !mfx_optarg[0])
|
||||
e_optarg(arg);
|
||||
opt->win32_pe.keep_resource = mfx_optarg;
|
||||
break;
|
||||
case 650:
|
||||
opt->atari_tos.split_segments = true;
|
||||
break;
|
||||
@@ -859,6 +865,7 @@ static const struct mfx_option longopts[] =
|
||||
{"compress-resources", 2, 0, 632},
|
||||
{"strip-loadconf", 0x12, 0, 633}, // OBSOLETE - IGNORED
|
||||
{"strip-relocs", 0x12, 0, 634},
|
||||
{"keep-resource", 0x31, 0, 635},
|
||||
// ps1/exe
|
||||
{"boot-only", 0x10, 0, 670},
|
||||
{"no-align", 0x10, 0, 671},
|
||||
@@ -941,6 +948,7 @@ static const struct mfx_option longopts[] =
|
||||
{"compress-resources", 2, 0, 632},
|
||||
{"strip-loadconf", 0x12, 0, 633}, // OBSOLETE - IGNORED
|
||||
{"strip-relocs", 0x12, 0, 634},
|
||||
{"keep-resource", 0x31, 0, 635},
|
||||
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
@@ -139,6 +139,7 @@ struct options_t {
|
||||
int compress_resources;
|
||||
signed char compress_rt[25]; // 25 == RT_LAST
|
||||
int strip_relocs;
|
||||
const char *keep_resource;
|
||||
} win32_pe;
|
||||
};
|
||||
|
||||
|
||||
+200
-136
@@ -31,9 +31,12 @@
|
||||
#include "filter.h"
|
||||
#include "packer.h"
|
||||
#include "p_armpe.h"
|
||||
#include "linker.h"
|
||||
|
||||
static const
|
||||
#include "stub/l_armpe.h"
|
||||
#include "stub/l_armpea.h"
|
||||
static const
|
||||
#include "stub/l_armpet.h"
|
||||
|
||||
#define IDSIZE(x) ih.ddirs[x].size
|
||||
#define IDADDR(x) ih.ddirs[x].vaddr
|
||||
@@ -214,6 +217,36 @@ bool PackArmPe::testUnpackVersion(int version) const
|
||||
}
|
||||
|
||||
|
||||
void PackArmPe::createLinker(const void *pdata, int plen, int pinfo)
|
||||
{
|
||||
struct ArmLinker : public Linker
|
||||
{
|
||||
ArmLinker(const void *d, int l, int i) : Linker(d, l, i) {}
|
||||
|
||||
virtual void set32(void *b, unsigned v) const
|
||||
{
|
||||
set_le32(b, (v - 5) / 4);
|
||||
}
|
||||
};
|
||||
|
||||
struct ThumbLinker : public Linker
|
||||
{
|
||||
ThumbLinker(const void *d, int l, int i) : Linker(d, l, i) {}
|
||||
|
||||
virtual void set32(void *b, unsigned v) const
|
||||
{
|
||||
assert(v < 0x200);
|
||||
set_le32(b, 0xF000 + ((v - 1) / 2) * 0x10000);
|
||||
}
|
||||
};
|
||||
|
||||
if (use_thumb_stub)
|
||||
linker = new ThumbLinker(pdata, plen, pinfo);
|
||||
else
|
||||
linker = new ArmLinker(pdata, plen, pinfo);
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// util
|
||||
**************************************************************************/
|
||||
@@ -487,37 +520,42 @@ void PackArmPe::processRelocs() // pass1
|
||||
for (; ic; ic--)
|
||||
fix[ic] = new LE32 [counts[ic]];
|
||||
|
||||
unsigned xcounts[4];
|
||||
memset(xcounts, 0, sizeof(xcounts));
|
||||
|
||||
// prepare sorting
|
||||
unsigned pos,type;
|
||||
while (rel.next(pos,type))
|
||||
{
|
||||
if (pos >= ih.imagesize)
|
||||
continue; // skip out-of-bounds record
|
||||
if (type == 3)
|
||||
set_le32(ibuf + pos,get_le32(ibuf + pos) - ih.imagebase - rvamin);
|
||||
if (type < 4)
|
||||
*fix[type]++ = pos - rvamin;
|
||||
fix[type][xcounts[type]++] = pos - rvamin;
|
||||
}
|
||||
fix[3] -= counts[3];
|
||||
|
||||
ibuf.fill(IDADDR(PEDIR_RELOC), IDSIZE(PEDIR_RELOC), FILLVAL);
|
||||
orelocs = new upx_byte [rnum * 4 + 1024]; // 1024 - safety
|
||||
sorelocs = ptr_diff(optimizeReloc32((upx_byte*) fix[3],counts[3],orelocs,ibuf + rvamin,1,&big_relocs),orelocs);
|
||||
sorelocs = ptr_diff(optimizeReloc32((upx_byte*) fix[3], xcounts[3],
|
||||
orelocs, ibuf + rvamin,1, &big_relocs),
|
||||
orelocs);
|
||||
delete [] fix[3];
|
||||
|
||||
// append relocs type "LOW" then "HIGH"
|
||||
for (ic = 2; ic ; ic--)
|
||||
{
|
||||
fix[ic] -= counts[ic];
|
||||
memcpy(orelocs + sorelocs,fix[ic],4 * counts[ic]);
|
||||
sorelocs += 4 * counts[ic];
|
||||
memcpy(orelocs + sorelocs,fix[ic],4 * xcounts[ic]);
|
||||
sorelocs += 4 * xcounts[ic];
|
||||
delete [] fix[ic];
|
||||
|
||||
set_le32(orelocs + sorelocs,0);
|
||||
if (counts[ic])
|
||||
if (xcounts[ic])
|
||||
{
|
||||
sorelocs += 4;
|
||||
big_relocs |= 2 * ic;
|
||||
}
|
||||
}
|
||||
delete [] fix[3];
|
||||
info("Relocations: original size: %u bytes, preprocessed size: %u bytes",(unsigned) IDSIZE(PEDIR_RELOC),sorelocs);
|
||||
}
|
||||
|
||||
@@ -535,7 +573,7 @@ struct import_desc
|
||||
}
|
||||
__attribute_packed;
|
||||
|
||||
void PackArmPe::processImports(unsigned myimport) // pass 2
|
||||
void PackArmPe::processImports(unsigned myimport, unsigned iat_off) // pass 2
|
||||
{
|
||||
COMPILE_TIME_ASSERT(sizeof(import_desc) == 20);
|
||||
|
||||
@@ -551,6 +589,8 @@ void PackArmPe::processImports(unsigned myimport) // pass 2
|
||||
while (*p)
|
||||
if ((*p++ & 0x80000000) == 0) // import by name?
|
||||
p[-1] += myimport;
|
||||
|
||||
im->iat = im == (import_desc*) oimpdlls ? iat_off : iat_off + 12;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1180,11 +1220,10 @@ public:
|
||||
bool clear();
|
||||
|
||||
void dump() const { dump(root,0); }
|
||||
/*
|
||||
unsigned iname() const {return current->parent->id;}
|
||||
unsigned iname() const {return current->parent->id;}
|
||||
const upx_byte *nname() const {return current->parent->name;}
|
||||
|
||||
unsigned ilang() const {return current->id;}
|
||||
/*
|
||||
unsigned ilang() const {return current->id;}
|
||||
const upx_byte *nlang() const {return current->name;}
|
||||
*/
|
||||
};
|
||||
@@ -1206,10 +1245,7 @@ void Resource::check(const res_dir *node,unsigned level)
|
||||
{
|
||||
int ic = node->identr + node->namedentr;
|
||||
if (ic == 0)
|
||||
{
|
||||
//throwCantPack("unsupported resource structure");
|
||||
throwCantPack("empty resource sections are not supported");
|
||||
}
|
||||
return;
|
||||
for (const res_dir_entry *rde = node->entries; --ic >= 0; rde++)
|
||||
if (((rde->child & 0x80000000) == 0) ^ (level == 2))
|
||||
throwCantPack("unsupported resource structure");
|
||||
@@ -1235,10 +1271,14 @@ Resource::upx_rnode *Resource::convert(const void *rnode,upx_rnode *parent,unsig
|
||||
}
|
||||
|
||||
const res_dir *node = (const res_dir *) rnode;
|
||||
int ic = node->identr + node->namedentr;
|
||||
if (ic == 0)
|
||||
return NULL;
|
||||
|
||||
upx_rbranch *branch = new upx_rbranch;
|
||||
branch->name = NULL;
|
||||
branch->parent = parent;
|
||||
int ic = branch->nc = node->identr + node->namedentr;
|
||||
branch->nc = ic;
|
||||
branch->children = new upx_rnode*[ic];
|
||||
branch->data = *node;
|
||||
|
||||
@@ -1305,12 +1345,14 @@ upx_byte *Resource::build()
|
||||
void Resource::destroy(upx_rnode *node,unsigned level)
|
||||
{
|
||||
delete [] node->name; node->name = NULL;
|
||||
if (level == 3)
|
||||
return;
|
||||
upx_rbranch * const branch = (upx_rbranch *) node;
|
||||
for (int ic = branch->nc; --ic >= 0; )
|
||||
destroy(branch->children[ic],level + 1);
|
||||
delete [] branch->children; branch->children = NULL;
|
||||
if (level != 3)
|
||||
{
|
||||
upx_rbranch * const branch = (upx_rbranch *) node;
|
||||
for (int ic = branch->nc; --ic >= 0; )
|
||||
destroy(branch->children[ic],level + 1);
|
||||
delete [] branch->children; branch->children = NULL;
|
||||
}
|
||||
delete node;
|
||||
}
|
||||
|
||||
static void lame_print_unicode(const upx_byte *p)
|
||||
@@ -1380,6 +1422,52 @@ void PackArmPe::processResources(Resource *res,unsigned newaddr)
|
||||
delete [] p;
|
||||
}
|
||||
|
||||
static bool match(unsigned itype, const unsigned char *ntype,
|
||||
unsigned iname, const unsigned char *nname,
|
||||
const char *keep)
|
||||
{
|
||||
// format of string keep: type1[/name1],type2[/name2], ....
|
||||
// typex and namex can be string or number
|
||||
// hopefully resource names do not have '/' or ',' characters inside
|
||||
|
||||
struct helper
|
||||
{
|
||||
static bool match(unsigned num, const unsigned char *unistr,
|
||||
const char *keep)
|
||||
{
|
||||
if (!unistr)
|
||||
return (unsigned) atoi(keep) == num;
|
||||
|
||||
unsigned ic;
|
||||
for (ic = 0; ic < get_le16(unistr); ic++)
|
||||
if (unistr[2 + ic * 2] != (unsigned char) keep[ic])
|
||||
return false;
|
||||
return keep[ic] == 0 || keep[ic] == ',' || keep[ic] == '/';
|
||||
};
|
||||
};
|
||||
|
||||
// FIXME this comparison is not too exact
|
||||
while (1)
|
||||
{
|
||||
char *delim1 = strchr(keep, '/');
|
||||
char *delim2 = strchr(keep, ',');
|
||||
if (helper::match(itype, ntype, keep))
|
||||
{
|
||||
if (!delim1)
|
||||
return true;
|
||||
if (delim2 && delim2 < delim1)
|
||||
return true;
|
||||
if (helper::match(iname, nname, delim1 + 1))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (delim2 == NULL)
|
||||
break;
|
||||
keep = delim2 + 1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void PackArmPe::processResources(Resource *res)
|
||||
{
|
||||
const unsigned vaddr = IDADDR(PEDIR_RESOURCE);
|
||||
@@ -1448,6 +1536,10 @@ void PackArmPe::processResources(Resource *res)
|
||||
do_compress = false; // u"REGISTRY"
|
||||
}
|
||||
|
||||
if (do_compress && opt->win32_pe.keep_resource[0])
|
||||
do_compress ^= match(res->itype(), res->ntype(), res->iname(),
|
||||
res->nname(), opt->win32_pe.keep_resource);
|
||||
|
||||
if (do_compress)
|
||||
{
|
||||
csize += res->size();
|
||||
@@ -1550,27 +1642,69 @@ bool PackArmPe::canPack()
|
||||
if (!readFileHeader() || (ih.cpu != 0x1c0 && ih.cpu != 0x1c2))
|
||||
return false;
|
||||
use_thumb_stub |= ih.cpu == 0x1c2 || (ih.entry & 1) == 1;
|
||||
use_thumb_stub |= (opt->cpu == opt->CPU_8086); // FIXME
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int PackArmPe::buildLoader(const Filter *ft)
|
||||
{
|
||||
UNUSED(ft);
|
||||
const unsigned char *loader = use_thumb_stub ? nrv_loader_thumb : nrv_loader_arm;
|
||||
|
||||
// ignore possible garbage aligment data at the end of the loader
|
||||
unsigned size = use_thumb_stub ? sizeof(nrv_loader_thumb) : sizeof(nrv_loader_arm);
|
||||
while (loader[size - 1] == 0)
|
||||
size--;
|
||||
|
||||
// prepare loader
|
||||
initLoader(nrv_loader, sizeof(nrv_loader), -1, 2);
|
||||
initLoader(loader, size, -1, 2);
|
||||
|
||||
char stubname[20];
|
||||
strcpy(stubname, "ARMPE");
|
||||
strcat(stubname, use_thumb_stub ? "T" : "A");
|
||||
strcat(stubname, isdll ? "D" : "X");
|
||||
strcat(stubname, ph.method == M_NRV2E_8 ? "E" : "B");
|
||||
if (isdll)
|
||||
addLoader("DllStart", NULL);
|
||||
addLoader("ExeStart", NULL);
|
||||
|
||||
addLoader(stubname, "IDENTSTR,UPX1HEAD", NULL);
|
||||
if (ph.method == M_NRV2E_8)
|
||||
addLoader("Call2E", NULL);
|
||||
else if (ph.method == M_NRV2B_8)
|
||||
addLoader("Call2B", NULL);
|
||||
|
||||
|
||||
if (ft->id == 0x50)
|
||||
addLoader("Unfilter_0x50", NULL);
|
||||
|
||||
if (sorelocs)
|
||||
addLoader("Relocs", NULL);
|
||||
|
||||
addLoader("Imports", NULL);
|
||||
addLoader("ProcessEnd", NULL);
|
||||
|
||||
if (!use_thumb_stub)
|
||||
{
|
||||
if (ph.method == M_NRV2E_8)
|
||||
addLoader("ucl_nrv2e_decompress_8", NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ph.method == M_NRV2E_8)
|
||||
addLoader("thumb_nrv2e_d8", NULL);
|
||||
else if (ph.method == M_NRV2B_8)
|
||||
addLoader("go_thumb_n2b", NULL);
|
||||
}
|
||||
|
||||
addLoader("IDENTSTR,UPX1HEAD", NULL);
|
||||
return getLoaderSize();
|
||||
}
|
||||
|
||||
|
||||
int PackArmPe::rpatch_le32(void *b, int blen, const void *old, unsigned new_,
|
||||
Reloc &rel, unsigned off)
|
||||
{
|
||||
int o = patch_le32(b, blen, old, new_);
|
||||
rel.add(off + o, 3);
|
||||
return o;
|
||||
}
|
||||
|
||||
|
||||
void PackArmPe::pack(OutputFile *fo)
|
||||
{
|
||||
const unsigned objs = ih.objects;
|
||||
@@ -1817,89 +1951,25 @@ void PackArmPe::pack(OutputFile *fo)
|
||||
const unsigned ncsection = (s1addr + s1size + oam1) &~ oam1;
|
||||
const unsigned upxsection = s1addr + ic + clen;
|
||||
|
||||
// FIXME
|
||||
const unsigned assumed_soxrelocs = isdll ? 0x20 : 0;
|
||||
const unsigned myimport = ncsection + assumed_soxrelocs + soresources - rvamin;
|
||||
|
||||
const int src0_offset = find(loader, lsize, "SRC0", 4);
|
||||
|
||||
// patch loader
|
||||
patch_le32(loader, codesize, "CSYN", ih.imagebase + rvamin + myimport + get_le32(oimpdlls + 16) + 8);
|
||||
patch_le32(loader, codesize, "FIBE", ih.imagebase + ih.codebase + (ft.id ? ih.codesize : 0));
|
||||
patch_le32(loader, codesize, "FIBS", ih.imagebase + ih.codebase);
|
||||
patch_le32(loader, codesize, "BREL", crelocs + rvamin + ih.imagebase);
|
||||
patch_le32(loader, codesize, "ENTR", ih.entry + ih.imagebase);
|
||||
patch_le32(loader, codesize, "LOAD", ih.imagebase + rvamin + myimport + get_le32(oimpdlls + 16));
|
||||
patch_le32(loader, codesize, "GETP", ih.imagebase + rvamin + myimport + get_le32(oimpdlls + 16) + 4);
|
||||
patch_le32(loader, codesize, "ONAM", ih.imagebase + myimport + rvamin);
|
||||
patch_le32(loader, codesize, "BIMP", ih.imagebase + rvamin + cimports);
|
||||
patch_le32(loader, codesize, "DSTL", ph.u_len);
|
||||
patch_le32(loader, codesize, "DST0", ih.imagebase + rvamin);
|
||||
patch_le32(loader, codesize, "SRCL", ph.c_len);
|
||||
patch_le32(loader, codesize, "SRC0", ih.imagebase + s1addr + identsize - identsplit);
|
||||
|
||||
#if 0
|
||||
if (ih.entry)
|
||||
{
|
||||
unsigned jmp_pos = find_le32(loader,codesize + 4,get_le32("JMPO"));
|
||||
patch_le32(loader,codesize + 4,"JMPO",ih.entry - upxsection - jmp_pos - 4);
|
||||
}
|
||||
if (big_relocs & 6)
|
||||
patch_le32(loader,codesize,"DELT", 0u - (unsigned) ih.imagebase - rvamin);
|
||||
if (sorelocs && (soimport == 0 || soimport + cimports != crelocs))
|
||||
patch_le32(loader,codesize,"BREL",crelocs);
|
||||
if (soimport)
|
||||
{
|
||||
if (!isdll)
|
||||
patch_le32(loader,codesize,"EXIT",myimport + get_le32(oimpdlls + 16) + 8);
|
||||
patch_le32(loader,codesize,"GETP",myimport + get_le32(oimpdlls + 16) + 4);
|
||||
if (kernel32ordinal)
|
||||
patch_le32(loader,codesize,"K32O",myimport);
|
||||
patch_le32(loader,codesize,"LOAD",myimport + get_le32(oimpdlls + 16));
|
||||
patch_le32(loader,codesize,"IMPS",myimport);
|
||||
patch_le32(loader,codesize,"BIMP",cimports);
|
||||
}
|
||||
|
||||
if (patchFilter32(loader, codesize, &ft))
|
||||
{
|
||||
const unsigned texv = ih.codebase - rvamin;
|
||||
if (texv)
|
||||
patch_le32(loader, codesize, "TEXV", texv);
|
||||
}
|
||||
if (tlsindex)
|
||||
{
|
||||
// in case of overlapping decompression, this hack is needed,
|
||||
// because windoze zeroes the word pointed by tlsindex before
|
||||
// it starts programs
|
||||
if (tlsindex + 4 > s1addr)
|
||||
patch_le32(loader,codesize,"TLSV",get_le32(obuf + tlsindex - s1addr - ic));
|
||||
else
|
||||
patch_le32(loader,codesize,"TLSV",0); // bad guess
|
||||
patch_le32(loader,codesize,"TLSA",tlsindex - rvamin);
|
||||
}
|
||||
if (icondir_count > 1)
|
||||
{
|
||||
if (icondir_count > 2)
|
||||
patch_le16(loader,codesize,"DR",icondir_count - 1);
|
||||
patch_le32(loader,codesize,"ICON",ncsection + icondir_offset - rvamin);
|
||||
}
|
||||
|
||||
const unsigned esi0 = s1addr + ic;
|
||||
patch_le32(loader,codesize,"EDI0", 0u - esi0 + rvamin);
|
||||
patch_le32(loader,codesize,"ESI0", esi0 + ih.imagebase);
|
||||
#endif
|
||||
Reloc rel(1024); // new relocations are put here
|
||||
rel.add(upxsection + src0_offset, 3);
|
||||
rel.add(upxsection + src0_offset + 8, 3);
|
||||
rel.add(upxsection + src0_offset + 16, 3);
|
||||
rel.add(upxsection + src0_offset + 20, 3);
|
||||
rel.add(upxsection + src0_offset + 24, 3);
|
||||
rel.add(upxsection + src0_offset + 28, 3);
|
||||
rel.add(upxsection + src0_offset + 32, 3);
|
||||
rel.add(upxsection + src0_offset + 36, 3);
|
||||
rel.add(upxsection + src0_offset + 40, 3);
|
||||
rel.add(upxsection + src0_offset + 44, 3);
|
||||
rel.add(upxsection + src0_offset + 48, 3);
|
||||
// patch loader
|
||||
// the exact value of "ONAM" can not be computed here, so we set it later
|
||||
int onam_offset = rpatch_le32(loader, codesize, "ONAM", 0, rel, upxsection);
|
||||
rpatch_le32(loader, codesize, "BIMP", ih.imagebase + rvamin + cimports, rel, upxsection);
|
||||
|
||||
if (sorelocs)
|
||||
rpatch_le32(loader, codesize, "BREL", crelocs + rvamin + ih.imagebase, rel, upxsection);
|
||||
if (ft.id)
|
||||
{
|
||||
rpatch_le32(loader, codesize, "FIBE", ih.imagebase + ih.codebase + (ft.id ? ih.codesize : 0), rel, upxsection);
|
||||
rpatch_le32(loader, codesize, "FIBS", ih.imagebase + ih.codebase, rel, upxsection);
|
||||
}
|
||||
rpatch_le32(loader, codesize, "ENTR", ih.entry + ih.imagebase, rel, upxsection);
|
||||
unsigned iat_offset = patch_le32(loader, codesize, "IATT", 0);
|
||||
patch_le32(loader, codesize, "DSTL", ph.u_len);
|
||||
rpatch_le32(loader, codesize, "DST0", ih.imagebase + rvamin, rel, upxsection);
|
||||
patch_le32(loader, codesize, "SRCL", ph.c_len);
|
||||
rpatch_le32(loader, codesize, "SRC0", ih.imagebase + s1addr + identsize - identsplit, rel, upxsection);
|
||||
|
||||
// new PE header
|
||||
memcpy(&oh,&ih,sizeof(oh));
|
||||
@@ -1942,7 +2012,7 @@ void PackArmPe::pack(OutputFile *fo)
|
||||
ODSIZE(PEDIR_RESOURCE) = soresources;
|
||||
ic += soresources;
|
||||
|
||||
processImports(ic);
|
||||
processImports(ic, iat_offset + upxsection);
|
||||
ODADDR(PEDIR_IMPORT) = ic;
|
||||
ODSIZE(PEDIR_IMPORT) = soimpdlls;
|
||||
ic += soimpdlls;
|
||||
@@ -1957,17 +2027,12 @@ void PackArmPe::pack(OutputFile *fo)
|
||||
}
|
||||
ic += soexport;
|
||||
|
||||
if (isdll && soxrelocs != assumed_soxrelocs)
|
||||
throwInternalError("FIXME: soxrelocs != assumed_soxrelocs");
|
||||
const unsigned onam = ncsection + soxrelocs + soresources + ih.imagebase;
|
||||
set_le32(loader + onam_offset, onam);
|
||||
|
||||
// this is computed here, because soxrelocs changes some lines above
|
||||
const unsigned ncsize = soxrelocs + soresources + soimpdlls + soexport;
|
||||
ic = oh.filealign - 1;
|
||||
|
||||
// this one is tricky: it seems windoze touches 4 bytes after
|
||||
// the end of the relocation data - so we have to increase
|
||||
// the virtual size of this section
|
||||
const unsigned ncsize_virt_increase = (ncsize & oam1) == 0 ? 8 : 0;
|
||||
const unsigned fam1 = oh.filealign - 1;
|
||||
|
||||
// fill the sections
|
||||
strcpy(osection[0].name,"UPX0");
|
||||
@@ -1987,31 +2052,30 @@ void PackArmPe::pack(OutputFile *fo)
|
||||
osection[2].vaddr = ncsection;
|
||||
|
||||
osection[0].size = 0;
|
||||
osection[1].size = (s1size + ic) &~ ic;
|
||||
osection[2].size = (ncsize + ic) &~ ic;
|
||||
osection[1].size = (s1size + fam1) &~ fam1;
|
||||
osection[2].size = (ncsize + fam1) &~ fam1;
|
||||
|
||||
osection[0].vsize = osection[1].vaddr - osection[0].vaddr;
|
||||
//osection[1].vsize = (osection[1].size + oam1) &~ oam1;
|
||||
//osection[2].vsize = (osection[2].size + ncsize_virt_increase + oam1) &~ oam1;
|
||||
//osection[2].vsize = (osection[2].size + oam1) &~ oam1;
|
||||
osection[1].vsize = osection[1].size;
|
||||
osection[2].vsize = osection[2].size + ncsize_virt_increase;
|
||||
osection[2].vsize = osection[2].size;
|
||||
|
||||
osection[0].rawdataptr = (pe_offset + sizeof(oh) + sizeof(osection) + ic) &~ ic;
|
||||
osection[1].rawdataptr = osection[0].rawdataptr;
|
||||
osection[0].rawdataptr = 0;
|
||||
osection[1].rawdataptr = (pe_offset + sizeof(oh) + sizeof(osection) + fam1) &~ fam1;
|
||||
osection[2].rawdataptr = osection[1].rawdataptr + osection[1].size;
|
||||
|
||||
osection[0].flags = (unsigned) (PEFL_BSS|PEFL_EXEC|PEFL_WRITE|PEFL_READ);
|
||||
osection[1].flags = (unsigned) (PEFL_DATA|PEFL_EXEC|PEFL_WRITE|PEFL_READ);
|
||||
osection[2].flags = (unsigned) (PEFL_DATA|PEFL_WRITE|PEFL_READ);
|
||||
osection[2].flags = (unsigned) (PEFL_DATA|PEFL_READ);
|
||||
|
||||
oh.imagesize = osection[2].vaddr + osection[2].vsize;
|
||||
oh.imagesize = (osection[2].vaddr + osection[2].vsize + oam1) &~ oam1;
|
||||
oh.bsssize = osection[0].vsize;
|
||||
oh.datasize = osection[2].vsize;
|
||||
oh.database = osection[2].vaddr;
|
||||
oh.codesize = osection[1].vsize;
|
||||
oh.codebase = osection[1].vaddr;
|
||||
// oh.headersize = osection[0].rawdataptr;
|
||||
oh.headersize = rvamin;
|
||||
oh.headersize = osection[1].rawdataptr;
|
||||
|
||||
if (opt->win32_pe.strip_relocs && !isdll)
|
||||
oh.flags |= RELOCS_STRIPPED;
|
||||
@@ -2031,7 +2095,7 @@ void PackArmPe::pack(OutputFile *fo)
|
||||
// some alignment
|
||||
if (identsplit == identsize)
|
||||
{
|
||||
unsigned n = osection[0].rawdataptr - fo->getBytesWritten() - identsize;
|
||||
unsigned n = osection[1].rawdataptr - fo->getBytesWritten() - identsize;
|
||||
assert(n <= oh.filealign);
|
||||
fo->write(ibuf, n);
|
||||
}
|
||||
@@ -2339,7 +2403,7 @@ void PackArmPe::rebuildTls()
|
||||
|
||||
void PackArmPe::rebuildResources(upx_byte *& extrainfo)
|
||||
{
|
||||
if (ODSIZE(PEDIR_RESOURCE) == 0)
|
||||
if (ODSIZE(PEDIR_RESOURCE) == 0 || IDSIZE(PEDIR_RESOURCE) == 0)
|
||||
return;
|
||||
|
||||
icondir_count = get_le16(extrainfo);
|
||||
|
||||
+5
-1
@@ -72,7 +72,7 @@ protected:
|
||||
unsigned pe_offset;
|
||||
|
||||
unsigned processImports();
|
||||
void processImports(unsigned);
|
||||
void processImports(unsigned, unsigned);
|
||||
void rebuildImports(upx_byte *&);
|
||||
upx_byte *oimport;
|
||||
unsigned soimport;
|
||||
@@ -120,6 +120,10 @@ protected:
|
||||
|
||||
bool use_thumb_stub;
|
||||
|
||||
void createLinker(const void *pdata, int plen, int pinfo);
|
||||
int rpatch_le32(void *b, int blen, const void *old, unsigned new_,
|
||||
PackArmPe_Reloc &, unsigned);
|
||||
|
||||
struct pe_header_t
|
||||
{
|
||||
// 0x0
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+21
-2
@@ -80,7 +80,6 @@ int PackExe::fillExeHeader(struct exe_header_t *eh) const
|
||||
memset(&oh,0,sizeof(oh));
|
||||
oh.ident = 'M' + 'Z' * 256;
|
||||
oh.headsize16 = 2;
|
||||
oh.ip = 0;
|
||||
|
||||
oh.sp = ih.sp > 0x200 ? (unsigned) ih.sp : 0x200;
|
||||
|
||||
@@ -108,7 +107,11 @@ int PackExe::buildLoader(const Filter *)
|
||||
|
||||
// prepare loader
|
||||
initLoader(nrv_loader,sizeof(nrv_loader));
|
||||
if (device_driver)
|
||||
addLoader("DEVICEENTRY", NULL);
|
||||
addLoader("EXEENTRY",
|
||||
device_driver ? "DEVICESUB" : "EXESUB",
|
||||
"JNCDOCOPY",
|
||||
relocsize ? "EXERELPU" : "",
|
||||
"EXEMAIN4,+G5DXXXX,UPX1HEAD,EXECUTPO",
|
||||
NULL
|
||||
@@ -162,6 +165,7 @@ int PackExe::buildLoader(const Filter *)
|
||||
NULL
|
||||
);
|
||||
addLoader("EXEMAIN8",
|
||||
device_driver ? "DEVICEEND" : "",
|
||||
(flag & SS) ? "EXESTACK" : "",
|
||||
(flag & SP) ? "EXESTASP" : "",
|
||||
(flag & USEJUMP) ? "EXEJUMPF" : "",
|
||||
@@ -367,6 +371,8 @@ void PackExe::pack(OutputFile *fo)
|
||||
|
||||
checkAlreadyPacked(ibuf, UPX_MIN(ih_imagesize, 127u));
|
||||
|
||||
device_driver = get_le32(ibuf) == 0xffffffffu;
|
||||
|
||||
// relocations
|
||||
has_9a = false;
|
||||
upx_byte *w = ibuf + ih_imagesize;
|
||||
@@ -523,6 +529,19 @@ void PackExe::pack(OutputFile *fo)
|
||||
oh.m512 = outputlen & 511;
|
||||
oh.p512 = (outputlen + 511) >> 9;
|
||||
|
||||
oh.ip = 0;
|
||||
if (device_driver)
|
||||
{
|
||||
patch_le16(loader, e_len, "OP", oh.sp);
|
||||
patch_le16(loader, e_len, "OS", oh.ss);
|
||||
// copy .sys header
|
||||
memcpy(loader + 4, ibuf + 4, 2);
|
||||
memcpy(loader + 8, ibuf + 8, 2);
|
||||
// copy original strategy
|
||||
memcpy(loader + 10, ibuf + 6, 2);
|
||||
oh.ip = getLoaderSection("EXEENTRY") - 2;
|
||||
}
|
||||
|
||||
//fprintf(stderr,"\ne_len=%x d_len=%x clen=%x oo=%x ulen=%x destp=%x copys=%x images=%x",e_len,d_len,packedsize,ph.overlap_overhead,ph.u_len,destpara,copysize,ih_imagesize);
|
||||
|
||||
// write header + write loader + compressed file
|
||||
@@ -567,7 +586,7 @@ int PackExe::canUnpack()
|
||||
return false;
|
||||
const off_t off = ih.headsize16 * 16;
|
||||
fi->seek(off, SEEK_SET);
|
||||
bool b = readPackHeader(128);
|
||||
bool b = readPackHeader(256);
|
||||
return b && (off + (off_t) ph.c_len <= file_size);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ protected:
|
||||
unsigned relocsize;
|
||||
|
||||
bool has_9a;
|
||||
bool device_driver;
|
||||
|
||||
enum {
|
||||
NORELOC = 1,
|
||||
|
||||
+212
-32
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -267,6 +270,134 @@ umax(unsigned a, unsigned b)
|
||||
return a;
|
||||
}
|
||||
|
||||
int
|
||||
PackLinuxElf32x86::buildLinuxLoader(
|
||||
upx_byte const *const proto,
|
||||
unsigned const szproto,
|
||||
upx_byte const *const fold,
|
||||
unsigned const szfold,
|
||||
Filter const *ft
|
||||
)
|
||||
{
|
||||
initLoader(proto, szproto);
|
||||
|
||||
struct b_info h; memset(&h, 0, sizeof(h));
|
||||
unsigned fold_hdrlen = 0;
|
||||
if (0 < szfold) {
|
||||
cprElfHdr1 const *const hf = (cprElfHdr1 const *)fold;
|
||||
fold_hdrlen = sizeof(hf->ehdr) + hf->ehdr.e_phentsize * hf->ehdr.e_phnum +
|
||||
sizeof(l_info);
|
||||
if (0 == get_le32(fold_hdrlen + fold)) {
|
||||
// inconsistent SIZEOF_HEADERS in *.lds (ld, binutils)
|
||||
fold_hdrlen = umax(0x80, fold_hdrlen);
|
||||
}
|
||||
h.sz_unc = (szfold < fold_hdrlen) ? 0 : (szfold - fold_hdrlen);
|
||||
h.b_method = (unsigned char) ph.method;
|
||||
h.b_ftid = (unsigned char) ph.filter;
|
||||
h.b_cto8 = (unsigned char) ph.filter_cto;
|
||||
}
|
||||
unsigned char const *const uncLoader = fold_hdrlen + fold;
|
||||
|
||||
unsigned char *const cprLoader = new unsigned char[sizeof(h) + h.sz_unc];
|
||||
if (0 < szfold) {
|
||||
unsigned sz_cpr;
|
||||
int r = upx_compress(uncLoader, h.sz_unc, sizeof(h) + cprLoader, &sz_cpr,
|
||||
NULL, ph.method, 10, NULL, NULL );
|
||||
if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc)
|
||||
throwInternalError("loader compression failed");
|
||||
h.sz_cpr = sz_cpr;
|
||||
}
|
||||
memcpy(cprLoader, &h, sizeof(h));
|
||||
|
||||
// This adds the definition to the "library", to be used later.
|
||||
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + h.sz_cpr);
|
||||
delete [] cprLoader;
|
||||
|
||||
int const n_mru = ft->n_mru; // FIXME: belongs to filter? packerf?
|
||||
|
||||
// Here is a quick summary of the format of the output file:
|
||||
linker->setLoaderAlignOffset(
|
||||
// Elf32_Edhr
|
||||
sizeof(elfout.ehdr) +
|
||||
// Elf32_Phdr: 1 for exec86, 2 for sh86, 3 for elf86
|
||||
(elfout.ehdr.e_phentsize * elfout.ehdr.e_phnum) +
|
||||
// checksum UPX! lsize version format
|
||||
sizeof(l_info) +
|
||||
// PT_DYNAMIC with DT_NEEDED "forwarded" from original file
|
||||
((elfout.ehdr.e_phnum==3) ? (unsigned) elfout.phdr[2].p_memsz : 0) +
|
||||
// p_progid, p_filesize, p_blocksize
|
||||
sizeof(p_info) +
|
||||
// compressed data
|
||||
b_len + ph.c_len );
|
||||
// entry to stub
|
||||
addLoader("LEXEC000", NULL);
|
||||
|
||||
if (ft->id) {
|
||||
{ // decompr, unfilter are separate
|
||||
addLoader("LXUNF000", NULL);
|
||||
addLoader("LXUNF002", NULL);
|
||||
if (0x80==(ft->id & 0xF0)) {
|
||||
if (256==n_mru) {
|
||||
addLoader("MRUBYTE0", NULL);
|
||||
}
|
||||
else if (n_mru) {
|
||||
addLoader("LXMRU005", NULL);
|
||||
}
|
||||
if (n_mru) {
|
||||
addLoader("LXMRU006", NULL);
|
||||
}
|
||||
else {
|
||||
addLoader("LXMRU007", NULL);
|
||||
}
|
||||
}
|
||||
else if (0x40==(ft->id & 0xF0)) {
|
||||
addLoader("LXUNF008", NULL);
|
||||
}
|
||||
addLoader("LXUNF010", NULL);
|
||||
}
|
||||
if (n_mru) {
|
||||
addLoader("LEXEC009", NULL);
|
||||
}
|
||||
}
|
||||
addLoader("LEXEC010", NULL);
|
||||
addLoader(getDecompressor(), NULL);
|
||||
addLoader("LEXEC015", NULL);
|
||||
if (ft->id) {
|
||||
{ // decompr, unfilter are separate
|
||||
if (0x80!=(ft->id & 0xF0)) {
|
||||
addLoader("LXUNF042", NULL);
|
||||
}
|
||||
}
|
||||
addFilter32(ft->id);
|
||||
{ // decompr, unfilter are separate
|
||||
if (0x80==(ft->id & 0xF0)) {
|
||||
if (0==n_mru) {
|
||||
addLoader("LXMRU058", NULL);
|
||||
}
|
||||
}
|
||||
addLoader("LXUNF035", NULL);
|
||||
}
|
||||
}
|
||||
else {
|
||||
addLoader("LEXEC017", NULL);
|
||||
}
|
||||
|
||||
addLoader("IDENTSTR", NULL);
|
||||
addLoader("LEXEC020", NULL);
|
||||
addLoader("FOLDEXEC", NULL);
|
||||
|
||||
char *ptr_cto = (char *)const_cast<unsigned char *>(getLoader());
|
||||
int sz_cto = getLoaderSize();
|
||||
if (0x20==(ft->id & 0xF0) || 0x30==(ft->id & 0xF0)) { // push byte '?' ; cto8
|
||||
patch_le16(ptr_cto, sz_cto, "\x6a?", 0x6a + (ft->cto << 8));
|
||||
checkPatch(NULL, 0, 0, 0); // reset
|
||||
}
|
||||
// PackHeader and overlay_offset at the end of the output file,
|
||||
// after the compressed data.
|
||||
|
||||
return getLoaderSize();
|
||||
}
|
||||
|
||||
int
|
||||
PackLinuxElf32ppc::buildLinuxLoader(
|
||||
upx_byte const *const proto,
|
||||
@@ -277,7 +408,7 @@ PackLinuxElf32ppc::buildLinuxLoader(
|
||||
)
|
||||
{
|
||||
{
|
||||
int const MAX_LOADER_LEN = 4096;
|
||||
int const MAX_LOADER_LEN = 8000;
|
||||
int *const eof_empty = new int[MAX_LOADER_LEN/sizeof(int)];
|
||||
eof_empty[0] = -1;
|
||||
initLoader(eof_empty, MAX_LOADER_LEN, 0, 0);
|
||||
@@ -317,9 +448,9 @@ PackLinuxElf32ppc::buildLinuxLoader(
|
||||
//int const GAP = 128; // must match stub/l_mac_ppc.S
|
||||
//segcmdo.vmsize += sz_unc - sz_cpr + GAP + 64;
|
||||
|
||||
linker->addSection("ELFPPC32", proto, szproto);
|
||||
linker->addSection("ELF32PPC", proto, szproto);
|
||||
|
||||
addLoader("ELFPPC32", NULL);
|
||||
addLoader("ELF32PPC", NULL);
|
||||
addLoader("FOLDEXEC", NULL);
|
||||
return getLoaderSize();
|
||||
}
|
||||
@@ -536,6 +667,22 @@ PackLinuxElf32::getbrk(const Elf32_Phdr *phdr, int e_phnum) const
|
||||
return brka;
|
||||
}
|
||||
|
||||
off_t
|
||||
PackLinuxElf32::getbase(const Elf32_Phdr *phdr, int e_phnum) const
|
||||
{
|
||||
off_t base = ~0u;
|
||||
for (int j = 0; j < e_phnum; ++phdr, ++j) {
|
||||
if (phdr->PT_LOAD == phdr->p_type) {
|
||||
if (phdr->p_vaddr < (unsigned) base)
|
||||
base = phdr->p_vaddr;
|
||||
}
|
||||
}
|
||||
if (0!=base) {
|
||||
return base;
|
||||
}
|
||||
return 0x12000;
|
||||
}
|
||||
|
||||
off_t
|
||||
PackLinuxElf64::getbrk(const Elf64_Phdr *phdr, int e_phnum) const
|
||||
{
|
||||
@@ -634,6 +781,27 @@ PackLinuxElf64::generateElfHdr(
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
PackLinuxElf32x86::generateElfHdr(
|
||||
OutputFile *fo,
|
||||
void const *proto,
|
||||
unsigned const brka
|
||||
)
|
||||
{
|
||||
super::generateElfHdr(fo, proto, brka);
|
||||
|
||||
if (ph.format==UPX_F_LINUX_ELF_i386) {
|
||||
cprElfHdr2 *const h2 = (cprElfHdr2 *)&elfout;
|
||||
assert(2==get_native16(&h2->ehdr.e_phnum));
|
||||
set_native32(&h2->phdr[0].p_flags, ~Elf32_Phdr::PF_W & get_native32(&h2->phdr[0].p_flags));
|
||||
memset(&h2->linfo, 0, sizeof(h2->linfo));
|
||||
fo->write(h2, sizeof(*h2));
|
||||
}
|
||||
else {
|
||||
assert(false); // unknown ph.format, PackLinuxElf32x86::generateElfHdr
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
PackLinuxElf32ppc::generateElfHdr(
|
||||
OutputFile *fo,
|
||||
@@ -1013,10 +1181,17 @@ void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft)
|
||||
set_native32(&elfout.phdr[0].p_filesz, len);
|
||||
super::pack4(fo, ft); // write PackHeader and overlay_offset
|
||||
|
||||
// Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel
|
||||
// tries to make .bss, which requires PF_W.
|
||||
// But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X.
|
||||
#if 0 /*{*/
|
||||
#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
|
||||
#else /*}{*/
|
||||
set_native32(&elfout.phdr[0].p_memsz, len);
|
||||
#endif /*}*/
|
||||
|
||||
// rewrite Elf header
|
||||
if (Elf32_Ehdr::ET_DYN==ehdri.e_type) {
|
||||
@@ -1043,10 +1218,17 @@ void PackLinuxElf64::pack4(OutputFile *fo, Filter &ft)
|
||||
set_native64(&elfout.phdr[0].p_filesz, len);
|
||||
super::pack4(fo, ft); // write PackHeader and overlay_offset
|
||||
|
||||
// Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel
|
||||
// tries to make .bss, which requires PF_W.
|
||||
// But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X.
|
||||
#if 0 /*{*/
|
||||
#define PAGE_MASK (~0u<<12)
|
||||
// pre-calculate for benefit of runtime disappearing act via munmap()
|
||||
set_native64(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len));
|
||||
#undef PAGE_MASK
|
||||
#else /*}{*/
|
||||
set_native64(&elfout.phdr[0].p_memsz, len);
|
||||
#endif /*}*/
|
||||
|
||||
// rewrite Elf header
|
||||
fo->seek(0, SEEK_SET);
|
||||
@@ -1268,20 +1450,20 @@ void PackLinuxElf64::unpack(OutputFile *fo)
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
PackLinuxI386elf::PackLinuxI386elf(InputFile *f) :
|
||||
PackLinuxElf32x86::PackLinuxElf32x86(InputFile *f) :
|
||||
super(f), phdri(NULL),
|
||||
file_image(NULL), dynseg(NULL), hashtab(NULL), dynstr(NULL), dynsym(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
PackLinuxI386elf::~PackLinuxI386elf()
|
||||
PackLinuxElf32x86::~PackLinuxElf32x86()
|
||||
{
|
||||
delete[] file_image;
|
||||
delete[] phdri;
|
||||
}
|
||||
|
||||
int const *
|
||||
PackLinuxI386elf::getFilters() const
|
||||
PackLinuxElf32x86::getFilters() const
|
||||
{
|
||||
static const int filters[] = {
|
||||
0x49, 0x46,
|
||||
@@ -1304,7 +1486,7 @@ PackLinuxI386elf::getFilters() const
|
||||
}
|
||||
|
||||
int
|
||||
PackLinuxI386elf::buildLoader(const Filter *ft)
|
||||
PackLinuxElf32x86::buildLoader(const Filter *ft)
|
||||
{
|
||||
unsigned char tmp[sizeof(linux_i386elf_fold)];
|
||||
memcpy(tmp, linux_i386elf_fold, sizeof(linux_i386elf_fold));
|
||||
@@ -1327,10 +1509,10 @@ PackLinuxI386elf::buildLoader(const Filter *ft)
|
||||
}
|
||||
|
||||
|
||||
void PackLinuxI386elf::patchLoader() { }
|
||||
void PackLinuxElf32x86::patchLoader() { }
|
||||
|
||||
|
||||
bool PackLinuxI386elf::canPack()
|
||||
bool PackLinuxElf32x86::canPack()
|
||||
{
|
||||
unsigned char buf[sizeof(Elf32_Ehdr) + 14*sizeof(Elf32_Phdr)];
|
||||
COMPILE_TIME_ASSERT(sizeof(buf) <= 512);
|
||||
@@ -1342,7 +1524,8 @@ bool PackLinuxI386elf::canPack()
|
||||
Elf32_Ehdr const *const ehdr = (Elf32_Ehdr const *)buf;
|
||||
|
||||
// now check the ELF header
|
||||
if (checkEhdr(ehdr) != 0)
|
||||
if (checkEhdr(ehdr, Elf32_Ehdr::EM_386,
|
||||
Elf32_Ehdr::ELFCLASS32, Elf32_Ehdr::ELFDATA2LSB) != 0)
|
||||
return false;
|
||||
|
||||
// additional requirements for linux/elf386
|
||||
@@ -1438,7 +1621,7 @@ bool PackLinuxI386elf::canPack()
|
||||
}
|
||||
|
||||
unsigned
|
||||
PackLinuxI386elf::elf_get_offset_from_address(unsigned const addr) const
|
||||
PackLinuxElf32x86::elf_get_offset_from_address(unsigned const addr) const
|
||||
{
|
||||
Elf32_Phdr const *phdr = phdri;
|
||||
int j = ehdri.e_phnum;
|
||||
@@ -1452,7 +1635,7 @@ PackLinuxI386elf::elf_get_offset_from_address(unsigned const addr) const
|
||||
}
|
||||
|
||||
void const *
|
||||
PackLinuxI386elf::elf_find_dynamic(unsigned int const key) const
|
||||
PackLinuxElf32x86::elf_find_dynamic(unsigned int const key) const
|
||||
{
|
||||
Elf32_Dyn const *dynp= dynseg;
|
||||
if (dynp)
|
||||
@@ -1466,7 +1649,7 @@ PackLinuxI386elf::elf_find_dynamic(unsigned int const key) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned PackLinuxI386elf::elf_hash(char const *p)
|
||||
unsigned PackLinuxElf32x86::elf_hash(char const *p)
|
||||
{
|
||||
unsigned h;
|
||||
for (h= 0; 0!=*p; ++p) {
|
||||
@@ -1480,7 +1663,7 @@ unsigned PackLinuxI386elf::elf_hash(char const *p)
|
||||
return h;
|
||||
}
|
||||
|
||||
Elf32_Sym const *PackLinuxI386elf::elf_lookup(char const *name) const
|
||||
Elf32_Sym const *PackLinuxElf32x86::elf_lookup(char const *name) const
|
||||
{
|
||||
if (hashtab && dynsym && dynstr) {
|
||||
unsigned const nbucket = hashtab[0];
|
||||
@@ -1499,7 +1682,7 @@ Elf32_Sym const *PackLinuxI386elf::elf_lookup(char const *name) const
|
||||
|
||||
}
|
||||
|
||||
void PackLinuxI386elf::pack1(OutputFile *fo, Filter &)
|
||||
void PackLinuxElf32x86::pack1(OutputFile *fo, Filter &)
|
||||
{
|
||||
fi->seek(0, SEEK_SET);
|
||||
fi->readx(&ehdri, sizeof(ehdri));
|
||||
@@ -1514,7 +1697,7 @@ void PackLinuxI386elf::pack1(OutputFile *fo, Filter &)
|
||||
generateElfHdr(fo, linux_i386elf_fold, getbrk(phdri, ehdri.e_phnum) );
|
||||
}
|
||||
|
||||
unsigned PackLinuxI386elf::find_LOAD_gap(
|
||||
unsigned PackLinuxElf32x86::find_LOAD_gap(
|
||||
Elf32_Phdr const *const phdri,
|
||||
unsigned const k,
|
||||
unsigned const e_phnum
|
||||
@@ -1548,7 +1731,7 @@ unsigned PackLinuxI386elf::find_LOAD_gap(
|
||||
return lo - hi;
|
||||
}
|
||||
|
||||
void PackLinuxI386elf::pack2(OutputFile *fo, Filter &ft)
|
||||
void PackLinuxElf32x86::pack2(OutputFile *fo, Filter &ft)
|
||||
{
|
||||
Extent x;
|
||||
unsigned k;
|
||||
@@ -1609,7 +1792,7 @@ void PackLinuxI386elf::pack2(OutputFile *fo, Filter &ft)
|
||||
set_native32(&elfout.phdr[0].p_filesz, fo->getBytesWritten());
|
||||
}
|
||||
|
||||
void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft)
|
||||
void PackLinuxElf32x86::pack3(OutputFile *fo, Filter &ft)
|
||||
{
|
||||
unsigned disp;
|
||||
unsigned len = fo->getBytesWritten();
|
||||
@@ -1619,7 +1802,7 @@ void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft)
|
||||
set_native32(&disp, len);
|
||||
fo->write(&disp, sizeof(disp));
|
||||
|
||||
// We have packed multiple blocks, so PackLinuxI386::buildLinuxLoader
|
||||
// We have packed multiple blocks, so PackLinuxElfxx::buildLinuxLoader
|
||||
// needs an adjusted ph.c_len in order to get alignment correct.
|
||||
unsigned const save_c_len = ph.c_len;
|
||||
ph.c_len = sizeof(disp) + len - (
|
||||
@@ -1641,17 +1824,10 @@ void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft)
|
||||
super::pack3(fo, ft);
|
||||
}
|
||||
|
||||
void PackLinuxI386elf::pack4(OutputFile *fo, Filter &ft)
|
||||
void PackLinuxElf32x86::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.
|
||||
@@ -1662,14 +1838,15 @@ void PackLinuxI386elf::pack4(OutputFile *fo, Filter &ft)
|
||||
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;
|
||||
// Strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X
|
||||
//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 PackLinuxElf32x86::unpack(OutputFile *fo)
|
||||
{
|
||||
#define MAX_ELF_HDR 512
|
||||
char bufehdr[MAX_ELF_HDR];
|
||||
@@ -1681,7 +1858,10 @@ void PackLinuxI386elf::unpack(OutputFile *fo)
|
||||
fi->seek(0, SEEK_SET);
|
||||
fi->readx(bufehdr, MAX_ELF_HDR);
|
||||
unsigned const e_entry = get_native32(&ehdr->e_entry);
|
||||
if (e_entry < 0x401180) { /* old style, 8-byte b_info */
|
||||
unsigned const e_type = get_native16(&ehdr->e_type);
|
||||
if (e_entry < 0x401180 && Elf32_Ehdr::ET_EXEC==e_type) {
|
||||
// beware ET_DYN.e_entry==0x10f0 or so
|
||||
/* old style, 8-byte b_info */
|
||||
szb_info = 2*sizeof(unsigned);
|
||||
}
|
||||
}
|
||||
|
||||
+39
-16
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -56,13 +59,6 @@ protected:
|
||||
void const *proto,
|
||||
unsigned const brka
|
||||
) = 0;
|
||||
virtual int buildLinuxLoader(
|
||||
upx_byte const *const proto, // assembly-only sections
|
||||
unsigned const szproto,
|
||||
upx_byte const *const fold, // linked assembly + C section
|
||||
unsigned const szfold,
|
||||
Filter const *ft
|
||||
) = 0;
|
||||
virtual void unpack(OutputFile *fo) = 0;
|
||||
|
||||
protected:
|
||||
@@ -99,6 +95,7 @@ protected:
|
||||
virtual void updateLoader(OutputFile *fo);
|
||||
virtual unsigned find_LOAD_gap(Elf32_Phdr const *const phdri, unsigned const k,
|
||||
unsigned const e_phnum);
|
||||
virtual off_t getbase(const Elf32_Phdr *phdr, int e_phnum) const;
|
||||
|
||||
protected:
|
||||
Elf32_Ehdr ehdri; // from input file
|
||||
@@ -203,6 +200,20 @@ protected:
|
||||
virtual void set_native16(void *b, unsigned v) const { set_be16(b, v); }
|
||||
};
|
||||
|
||||
class PackLinuxElf32Le : public PackLinuxElf32
|
||||
{
|
||||
typedef PackLinuxElf32 super;
|
||||
protected:
|
||||
PackLinuxElf32Le(InputFile *f) : super(f) { }
|
||||
|
||||
virtual acc_uint64l_t get_native64(const void *b) const { return get_le64(b); }
|
||||
virtual unsigned get_native32(const void *b) const { return get_le32(b); }
|
||||
virtual unsigned get_native16(const void *b) const { return get_le16(b); }
|
||||
virtual void set_native64(void *b, acc_uint64l_t v) const { set_le64(b, v); }
|
||||
virtual void set_native32(void *b, unsigned v) const { set_le32(b, v); }
|
||||
virtual void set_native16(void *b, unsigned v) const { set_le16(b, v); }
|
||||
};
|
||||
|
||||
class PackLinuxElf64Le : public PackLinuxElf64
|
||||
{
|
||||
typedef PackLinuxElf64 super;
|
||||
@@ -234,6 +245,7 @@ public:
|
||||
protected:
|
||||
virtual void pack3(OutputFile *, Filter &); // append loader
|
||||
virtual const int *getCompressionMethods(int method, int level) const;
|
||||
virtual int buildLoader(const Filter *);
|
||||
virtual int buildLinuxLoader(
|
||||
upx_byte const *const proto, // assembly-only sections
|
||||
unsigned const szproto,
|
||||
@@ -241,7 +253,6 @@ protected:
|
||||
unsigned const szfold,
|
||||
Filter const *ft
|
||||
);
|
||||
virtual int buildLoader(const Filter *);
|
||||
virtual void generateElfHdr(
|
||||
OutputFile *,
|
||||
void const *proto,
|
||||
@@ -266,6 +277,7 @@ public:
|
||||
protected:
|
||||
virtual void pack3(OutputFile *, Filter &); // append loader
|
||||
virtual const int *getCompressionMethods(int method, int level) const;
|
||||
virtual int buildLoader(const Filter *);
|
||||
virtual int buildLinuxLoader(
|
||||
upx_byte const *const proto, // assembly-only sections
|
||||
unsigned const szproto,
|
||||
@@ -273,7 +285,6 @@ protected:
|
||||
unsigned const szfold,
|
||||
Filter const *ft
|
||||
);
|
||||
virtual int buildLoader(const Filter *);
|
||||
virtual void generateElfHdr(
|
||||
OutputFile *,
|
||||
void const *proto,
|
||||
@@ -285,17 +296,16 @@ protected:
|
||||
// linux/elf386
|
||||
**************************************************************************/
|
||||
|
||||
class PackLinuxI386elf : public PackLinuxI386
|
||||
class PackLinuxElf32x86 : public PackLinuxElf32Le
|
||||
{
|
||||
typedef PackLinuxI386 super;
|
||||
typedef PackLinuxElf32Le super;
|
||||
public:
|
||||
PackLinuxI386elf(InputFile *f);
|
||||
virtual ~PackLinuxI386elf();
|
||||
PackLinuxElf32x86(InputFile *f);
|
||||
virtual ~PackLinuxElf32x86();
|
||||
virtual int getVersion() const { return 13; }
|
||||
virtual int getFormat() const { return UPX_F_LINUX_ELF_i386; }
|
||||
virtual const char *getName() const { return "linux/elf386"; }
|
||||
virtual const int *getFilters() const;
|
||||
virtual int buildLoader(const Filter *);
|
||||
|
||||
virtual void unpack(OutputFile *fo);
|
||||
|
||||
@@ -310,6 +320,19 @@ protected:
|
||||
virtual void pack4(OutputFile *, Filter &); // append pack header
|
||||
|
||||
virtual void patchLoader();
|
||||
virtual int buildLoader(const Filter *);
|
||||
virtual int buildLinuxLoader(
|
||||
upx_byte const *const proto, // assembly-only sections
|
||||
unsigned const szproto,
|
||||
upx_byte const *const fold, // linked assembly + C section
|
||||
unsigned const szfold,
|
||||
Filter const *ft
|
||||
);
|
||||
virtual void generateElfHdr(
|
||||
OutputFile *,
|
||||
void const *proto,
|
||||
unsigned const brka
|
||||
);
|
||||
|
||||
Elf32_Ehdr ehdri; // from input file
|
||||
Elf32_Phdr *phdri; // for input file
|
||||
|
||||
+19
-99
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -131,11 +134,6 @@ PackLinuxI386::generateElfHdr(
|
||||
memset(&h1->linfo, 0, sizeof(h1->linfo));
|
||||
fo->write(h1, sizeof(*h1));
|
||||
}
|
||||
else if (ph.format==UPX_F_LINUX_ELF_i386) {
|
||||
assert(h2->ehdr.e_phnum==2);
|
||||
memset(&h2->linfo, 0, sizeof(h2->linfo));
|
||||
fo->write(h2, sizeof(*h2));
|
||||
}
|
||||
else if (ph.format==UPX_F_LINUX_SH_i386) {
|
||||
assert(h2->ehdr.e_phnum==1);
|
||||
h2->ehdr.e_phnum = 1;
|
||||
@@ -225,11 +223,19 @@ PackLinuxI386::pack4(OutputFile *fo, Filter &ft)
|
||||
fo->write(shstrtab, sizeof(shstrtab));
|
||||
#endif // }
|
||||
|
||||
|
||||
// Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel
|
||||
// tries to make .bss, which requires PF_W.
|
||||
// But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X.
|
||||
#if 0 /*{*/
|
||||
#undef PAGE_MASK
|
||||
#define PAGE_MASK (~0u<<12)
|
||||
// pre-calculate for benefit of runtime disappearing act via munmap()
|
||||
elfout.phdr[0].p_memsz = PAGE_MASK & (~PAGE_MASK + elfout.phdr[0].p_filesz);
|
||||
#undef PAGE_MASK
|
||||
#else /*}{*/
|
||||
elfout.phdr[0].p_memsz = elfout.phdr[0].p_filesz;
|
||||
#endif /*}*/
|
||||
|
||||
// rewrite Elf header
|
||||
fo->seek(0, SEEK_SET);
|
||||
@@ -273,19 +279,14 @@ PackLinuxI386::buildLinuxLoader(
|
||||
}
|
||||
unsigned char const *const uncLoader = fold_hdrlen + fold;
|
||||
|
||||
unsigned char *const cprLoader = new unsigned char[sizeof(h) + h.sz_unc];
|
||||
unsigned char *const cprLoader = new unsigned char[h.sz_unc];
|
||||
if (0 < szfold) {
|
||||
unsigned sz_cpr;
|
||||
int r = upx_compress(uncLoader, h.sz_unc, sizeof(h) + cprLoader, &sz_cpr,
|
||||
NULL, ph.method, 10, NULL, NULL );
|
||||
unsigned sz_cpr = h.sz_unc;
|
||||
memcpy(cprLoader, uncLoader, sz_cpr);
|
||||
h.sz_cpr = sz_cpr;
|
||||
if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc)
|
||||
throwInternalError("loader compression failed");
|
||||
}
|
||||
memcpy(cprLoader, &h, sizeof(h));
|
||||
|
||||
// This adds the definition to the "library", to be used later.
|
||||
linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + h.sz_cpr);
|
||||
linker->addSection("FOLDEXEC", cprLoader, h.sz_cpr);
|
||||
delete [] cprLoader;
|
||||
|
||||
n_mru = ft->n_mru;
|
||||
@@ -308,28 +309,6 @@ PackLinuxI386::buildLinuxLoader(
|
||||
addLoader("LEXEC000", NULL);
|
||||
|
||||
if (ft->id) {
|
||||
if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate
|
||||
addLoader("LXUNF000", NULL);
|
||||
addLoader("LXUNF002", NULL);
|
||||
if (0x80==(ft->id & 0xF0)) {
|
||||
if (256==n_mru) {
|
||||
addLoader("MRUBYTE0", NULL);
|
||||
}
|
||||
else if (n_mru) {
|
||||
addLoader("LXMRU005", NULL);
|
||||
}
|
||||
if (n_mru) {
|
||||
addLoader("LXMRU006", NULL);
|
||||
}
|
||||
else {
|
||||
addLoader("LXMRU007", NULL);
|
||||
}
|
||||
}
|
||||
else if (0x40==(ft->id & 0xF0)) {
|
||||
addLoader("LXUNF008", NULL);
|
||||
}
|
||||
addLoader("LXUNF010", NULL);
|
||||
}
|
||||
if (n_mru) {
|
||||
addLoader("LEXEC009", NULL);
|
||||
}
|
||||
@@ -338,12 +317,7 @@ PackLinuxI386::buildLinuxLoader(
|
||||
addLoader(getDecompressor(), NULL);
|
||||
addLoader("LEXEC015", NULL);
|
||||
if (ft->id) {
|
||||
if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate
|
||||
if (0x80!=(ft->id & 0xF0)) {
|
||||
addLoader("LXUNF042", NULL);
|
||||
}
|
||||
}
|
||||
else { // decompr, unfilter not separate
|
||||
{ // decompr, unfilter not separate
|
||||
if (0x80==(ft->id & 0xF0)) {
|
||||
addLoader("LEXEC110", NULL);
|
||||
if (n_mru) {
|
||||
@@ -354,15 +328,7 @@ PackLinuxI386::buildLinuxLoader(
|
||||
}
|
||||
}
|
||||
addFilter32(ft->id);
|
||||
if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate
|
||||
if (0x80==(ft->id & 0xF0)) {
|
||||
if (0==n_mru) {
|
||||
addLoader("LXMRU058", NULL);
|
||||
}
|
||||
}
|
||||
addLoader("LXUNF035", NULL);
|
||||
}
|
||||
else { // decompr always unfilters
|
||||
{ // decompr always unfilters
|
||||
addLoader("LEXEC017", NULL);
|
||||
}
|
||||
}
|
||||
@@ -401,24 +367,6 @@ PackLinuxI386::buildLoader(Filter const *ft)
|
||||
patch_le32(buf,sz_fold,"UPX3",progid);
|
||||
patch_le32(buf,sz_fold,"UPX2",exetype > 0 ? 0 : 0x7fffffff);
|
||||
|
||||
// get fresh filter
|
||||
Filter fold_ft = *ft;
|
||||
fold_ft.init(ft->id, ft->addvalue);
|
||||
int preferred_ctos[2] = {ft->cto, -1};
|
||||
fold_ft.preferred_ctos = preferred_ctos;
|
||||
|
||||
// filter
|
||||
optimizeFilter(&fold_ft, buf, sz_fold);
|
||||
|
||||
unsigned fold_hdrlen = sizeof(l_info) + sizeof(Elf32_Ehdr) +
|
||||
sizeof(Elf32_Phdr) * get_native32(&((Elf32_Ehdr const *)(void *)buf)->e_phnum);
|
||||
if (0 == get_le32(fold_hdrlen + buf)) {
|
||||
// inconsistent SIZEOF_HEADERS in *.lds (ld, binutils)
|
||||
fold_hdrlen = umax(0x80, fold_hdrlen);
|
||||
}
|
||||
bool success = fold_ft.filter(buf + fold_hdrlen, sz_fold - fold_hdrlen);
|
||||
(void)success;
|
||||
|
||||
return buildLinuxLoader(
|
||||
linux_i386exec_loader, sizeof(linux_i386exec_loader),
|
||||
buf, sz_fold, ft );
|
||||
@@ -476,34 +424,6 @@ int PackLinuxI386::checkEhdr(const Elf32_Ehdr *ehdr) const
|
||||
}
|
||||
|
||||
|
||||
off_t PackLinuxI386::getbrk(const Elf32_Phdr *phdr, int e_phnum) const
|
||||
{
|
||||
off_t brka = 0;
|
||||
for (int j = 0; j < e_phnum; ++phdr, ++j) {
|
||||
if (phdr->PT_LOAD == phdr->p_type) {
|
||||
off_t b = phdr->p_vaddr + phdr->p_memsz;
|
||||
if (b > brka)
|
||||
brka = b;
|
||||
}
|
||||
}
|
||||
return brka;
|
||||
}
|
||||
|
||||
off_t PackLinuxI386::getbase(const Elf32_Phdr *phdr, int e_phnum) const
|
||||
{
|
||||
off_t base = ~0u;
|
||||
for (int j = 0; j < e_phnum; ++phdr, ++j) {
|
||||
if (phdr->PT_LOAD == phdr->p_type) {
|
||||
if (phdr->p_vaddr < (unsigned) base)
|
||||
base = phdr->p_vaddr;
|
||||
}
|
||||
}
|
||||
if (0!=base) {
|
||||
return base;
|
||||
}
|
||||
return 0x12000;
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
//
|
||||
|
||||
+5
-4
@@ -21,8 +21,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -75,8 +78,6 @@ protected:
|
||||
|
||||
// ELF util
|
||||
virtual int checkEhdr(const Elf32_Ehdr *ehdr) const;
|
||||
virtual off_t getbrk(const Elf32_Phdr *phdr, int e_phnum) const;
|
||||
virtual off_t getbase(const Elf32_Phdr *phdr, int e_phnum) const;
|
||||
|
||||
enum {
|
||||
UPX_ELF_MAGIC = 0x5850557f // "\x7fUPX"
|
||||
|
||||
+12
-9
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -52,16 +55,16 @@ static const
|
||||
static const
|
||||
#include "stub/fold_pti86.h"
|
||||
|
||||
PackLinuxI386interp::PackLinuxI386interp(InputFile *f) :
|
||||
PackLinuxElf32x86interp::PackLinuxElf32x86interp(InputFile *f) :
|
||||
super(f)
|
||||
{
|
||||
}
|
||||
|
||||
PackLinuxI386interp::~PackLinuxI386interp()
|
||||
PackLinuxElf32x86interp::~PackLinuxElf32x86interp()
|
||||
{
|
||||
}
|
||||
|
||||
bool PackLinuxI386interp::canPack()
|
||||
bool PackLinuxElf32x86interp::canPack()
|
||||
{
|
||||
if (opt->o_unix.make_ptinterp) {
|
||||
return true;
|
||||
@@ -72,7 +75,7 @@ bool PackLinuxI386interp::canPack()
|
||||
return super::canPack();
|
||||
}
|
||||
|
||||
void PackLinuxI386interp::pack1(OutputFile *fo, Filter &)
|
||||
void PackLinuxElf32x86interp::pack1(OutputFile *fo, Filter &)
|
||||
{
|
||||
fi->seek(0, SEEK_SET);
|
||||
fi->readx(&ehdri, sizeof(ehdri));
|
||||
@@ -121,7 +124,7 @@ void PackLinuxI386interp::pack1(OutputFile *fo, Filter &)
|
||||
#undef E
|
||||
}
|
||||
|
||||
void PackLinuxI386interp::pack2(OutputFile *fo, Filter &ft)
|
||||
void PackLinuxElf32x86interp::pack2(OutputFile *fo, Filter &ft)
|
||||
{
|
||||
if (opt->o_unix.make_ptinterp) {
|
||||
return; // ignore current input file!
|
||||
@@ -132,7 +135,7 @@ void PackLinuxI386interp::pack2(OutputFile *fo, Filter &ft)
|
||||
#undef PAGE_MASK
|
||||
#define PAGE_MASK (~0u<<12)
|
||||
|
||||
void PackLinuxI386interp::pack3(OutputFile *fo, Filter &/*ft*/)
|
||||
void PackLinuxElf32x86interp::pack3(OutputFile *fo, Filter &/*ft*/)
|
||||
{
|
||||
unsigned base = getbase(phdri, ehdri.e_phnum);
|
||||
unsigned sz = PAGE_MASK & (~PAGE_MASK + elfout.phdr[0].p_filesz);
|
||||
@@ -191,7 +194,7 @@ void PackLinuxI386interp::pack3(OutputFile *fo, Filter &/*ft*/)
|
||||
}
|
||||
|
||||
|
||||
void PackLinuxI386interp::unpack(OutputFile *fo)
|
||||
void PackLinuxElf32x86interp::unpack(OutputFile *fo)
|
||||
{
|
||||
#define MAX_INTERP_HDR 512
|
||||
char bufehdr[MAX_INTERP_HDR];
|
||||
|
||||
+9
-6
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -35,12 +38,12 @@
|
||||
// linux/interp386
|
||||
**************************************************************************/
|
||||
|
||||
class PackLinuxI386interp : public PackLinuxI386elf
|
||||
class PackLinuxElf32x86interp : public PackLinuxElf32x86
|
||||
{
|
||||
typedef PackLinuxI386elf super;
|
||||
typedef PackLinuxElf32x86 super;
|
||||
public:
|
||||
PackLinuxI386interp(InputFile *f);
|
||||
virtual ~PackLinuxI386interp();
|
||||
PackLinuxElf32x86interp(InputFile *f);
|
||||
virtual ~PackLinuxElf32x86interp();
|
||||
virtual int getVersion() const { return 13; }
|
||||
virtual int getFormat() const { return UPX_F_LINUX_ELFI_i386; }
|
||||
virtual const char *getName() const { return "linux/elfi386"; }
|
||||
|
||||
+5
-2
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+7
-4
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
@@ -35,9 +38,9 @@
|
||||
// linux/sep386
|
||||
**************************************************************************/
|
||||
|
||||
class PackLinuxI386sep : public PackLinuxI386elf
|
||||
class PackLinuxI386sep : public PackLinuxI386
|
||||
{
|
||||
typedef PackLinuxI386elf super;
|
||||
typedef PackLinuxI386 super;
|
||||
public:
|
||||
PackLinuxI386sep(InputFile *f) : super(f) { }
|
||||
virtual int getFormat() const { return UPX_F_LINUX_SEP_i386; }
|
||||
|
||||
+5
-2
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+5
-2
@@ -22,8 +22,11 @@
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar John F. Reiser
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu jreiser@BitWagon.com
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+81
-24
@@ -482,37 +482,42 @@ void PackW32Pe::processRelocs() // pass1
|
||||
for (; ic; ic--)
|
||||
fix[ic] = new LE32 [counts[ic]];
|
||||
|
||||
unsigned xcounts[4];
|
||||
memset(xcounts, 0, sizeof(xcounts));
|
||||
|
||||
// prepare sorting
|
||||
unsigned pos,type;
|
||||
while (rel.next(pos,type))
|
||||
{
|
||||
if (pos >= ih.imagesize)
|
||||
continue; // skip out-of-bounds record
|
||||
if (type == 3)
|
||||
set_le32(ibuf + pos,get_le32(ibuf + pos) - ih.imagebase - rvamin);
|
||||
if (type < 4)
|
||||
*fix[type]++ = pos - rvamin;
|
||||
fix[type][xcounts[type]++] = pos - rvamin;
|
||||
}
|
||||
fix[3] -= counts[3];
|
||||
|
||||
ibuf.fill(IDADDR(PEDIR_RELOC), IDSIZE(PEDIR_RELOC), FILLVAL);
|
||||
orelocs = new upx_byte [rnum * 4 + 1024]; // 1024 - safety
|
||||
sorelocs = ptr_diff(optimizeReloc32((upx_byte*) fix[3],counts[3],orelocs,ibuf + rvamin,1,&big_relocs),orelocs);
|
||||
sorelocs = ptr_diff(optimizeReloc32((upx_byte*) fix[3], xcounts[3],
|
||||
orelocs, ibuf + rvamin,1, &big_relocs),
|
||||
orelocs);
|
||||
delete [] fix[3];
|
||||
|
||||
// append relocs type "LOW" then "HIGH"
|
||||
for (ic = 2; ic ; ic--)
|
||||
{
|
||||
fix[ic] -= counts[ic];
|
||||
memcpy(orelocs + sorelocs,fix[ic],4 * counts[ic]);
|
||||
sorelocs += 4 * counts[ic];
|
||||
memcpy(orelocs + sorelocs,fix[ic],4 * xcounts[ic]);
|
||||
sorelocs += 4 * xcounts[ic];
|
||||
delete [] fix[ic];
|
||||
|
||||
set_le32(orelocs + sorelocs,0);
|
||||
if (counts[ic])
|
||||
if (xcounts[ic])
|
||||
{
|
||||
sorelocs += 4;
|
||||
big_relocs |= 2 * ic;
|
||||
}
|
||||
}
|
||||
delete [] fix[3];
|
||||
info("Relocations: original size: %u bytes, preprocessed size: %u bytes",(unsigned) IDSIZE(PEDIR_RELOC),sorelocs);
|
||||
}
|
||||
|
||||
@@ -1173,11 +1178,10 @@ public:
|
||||
bool clear();
|
||||
|
||||
void dump() const { dump(root,0); }
|
||||
/*
|
||||
unsigned iname() const {return current->parent->id;}
|
||||
unsigned iname() const {return current->parent->id;}
|
||||
const upx_byte *nname() const {return current->parent->name;}
|
||||
|
||||
unsigned ilang() const {return current->id;}
|
||||
/*
|
||||
unsigned ilang() const {return current->id;}
|
||||
const upx_byte *nlang() const {return current->name;}
|
||||
*/
|
||||
};
|
||||
@@ -1199,10 +1203,7 @@ void Resource::check(const res_dir *node,unsigned level)
|
||||
{
|
||||
int ic = node->identr + node->namedentr;
|
||||
if (ic == 0)
|
||||
{
|
||||
//throwCantPack("unsupported resource structure");
|
||||
throwCantPack("empty resource sections are not supported");
|
||||
}
|
||||
return;
|
||||
for (const res_dir_entry *rde = node->entries; --ic >= 0; rde++)
|
||||
if (((rde->child & 0x80000000) == 0) ^ (level == 2))
|
||||
throwCantPack("unsupported resource structure");
|
||||
@@ -1228,10 +1229,14 @@ Resource::upx_rnode *Resource::convert(const void *rnode,upx_rnode *parent,unsig
|
||||
}
|
||||
|
||||
const res_dir *node = (const res_dir *) rnode;
|
||||
int ic = node->identr + node->namedentr;
|
||||
if (ic == 0)
|
||||
return NULL;
|
||||
|
||||
upx_rbranch *branch = new upx_rbranch;
|
||||
branch->name = NULL;
|
||||
branch->parent = parent;
|
||||
int ic = branch->nc = node->identr + node->namedentr;
|
||||
branch->nc = ic;
|
||||
branch->children = new upx_rnode*[ic];
|
||||
branch->data = *node;
|
||||
|
||||
@@ -1298,12 +1303,14 @@ upx_byte *Resource::build()
|
||||
void Resource::destroy(upx_rnode *node,unsigned level)
|
||||
{
|
||||
delete [] node->name; node->name = NULL;
|
||||
if (level == 3)
|
||||
return;
|
||||
upx_rbranch * const branch = (upx_rbranch *) node;
|
||||
for (int ic = branch->nc; --ic >= 0; )
|
||||
destroy(branch->children[ic],level + 1);
|
||||
delete [] branch->children; branch->children = NULL;
|
||||
if (level != 3)
|
||||
{
|
||||
upx_rbranch * const branch = (upx_rbranch *) node;
|
||||
for (int ic = branch->nc; --ic >= 0; )
|
||||
destroy(branch->children[ic],level + 1);
|
||||
delete [] branch->children; branch->children = NULL;
|
||||
}
|
||||
delete node;
|
||||
}
|
||||
|
||||
static void lame_print_unicode(const upx_byte *p)
|
||||
@@ -1373,6 +1380,52 @@ void PackW32Pe::processResources(Resource *res,unsigned newaddr)
|
||||
delete [] p;
|
||||
}
|
||||
|
||||
static bool match(unsigned itype, const unsigned char *ntype,
|
||||
unsigned iname, const unsigned char *nname,
|
||||
const char *keep)
|
||||
{
|
||||
// format of string keep: type1[/name1],type2[/name2], ....
|
||||
// typex and namex can be string or number
|
||||
// hopefully resource names do not have '/' or ',' characters inside
|
||||
|
||||
struct helper
|
||||
{
|
||||
static bool match(unsigned num, const unsigned char *unistr,
|
||||
const char *keep)
|
||||
{
|
||||
if (!unistr)
|
||||
return (unsigned) atoi(keep) == num;
|
||||
|
||||
unsigned ic;
|
||||
for (ic = 0; ic < get_le16(unistr); ic++)
|
||||
if (unistr[2 + ic * 2] != (unsigned char) keep[ic])
|
||||
return false;
|
||||
return keep[ic] == 0 || keep[ic] == ',' || keep[ic] == '/';
|
||||
};
|
||||
};
|
||||
|
||||
// FIXME this comparison is not too exact
|
||||
while (1)
|
||||
{
|
||||
char *delim1 = strchr(keep, '/');
|
||||
char *delim2 = strchr(keep, ',');
|
||||
if (helper::match(itype, ntype, keep))
|
||||
{
|
||||
if (!delim1)
|
||||
return true;
|
||||
if (delim2 && delim2 < delim1)
|
||||
return true;
|
||||
if (helper::match(iname, nname, delim1 + 1))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (delim2 == NULL)
|
||||
break;
|
||||
keep = delim2 + 1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void PackW32Pe::processResources(Resource *res)
|
||||
{
|
||||
const unsigned vaddr = IDADDR(PEDIR_RESOURCE);
|
||||
@@ -1441,6 +1494,10 @@ void PackW32Pe::processResources(Resource *res)
|
||||
do_compress = false; // u"REGISTRY"
|
||||
}
|
||||
|
||||
if (do_compress && opt->win32_pe.keep_resource[0])
|
||||
do_compress ^= match(res->itype(), res->ntype(), res->iname(),
|
||||
res->nname(), opt->win32_pe.keep_resource);
|
||||
|
||||
if (do_compress)
|
||||
{
|
||||
csize += res->size();
|
||||
@@ -2438,7 +2495,7 @@ void PackW32Pe::rebuildTls()
|
||||
|
||||
void PackW32Pe::rebuildResources(upx_byte *& extrainfo)
|
||||
{
|
||||
if (ODSIZE(PEDIR_RESOURCE) == 0)
|
||||
if (ODSIZE(PEDIR_RESOURCE) == 0 || IDSIZE(PEDIR_RESOURCE) == 0)
|
||||
return;
|
||||
|
||||
icondir_count = get_le16(extrainfo);
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+29
-17
@@ -1055,6 +1055,14 @@ char const *Packer::getIdentstr(unsigned *size, int small)
|
||||
}
|
||||
}
|
||||
|
||||
void Packer::createLinker(const void *pdata, int plen, int pinfo)
|
||||
{
|
||||
if (getFormat() < 128)
|
||||
linker = new Linker(pdata, plen, pinfo); // little endian
|
||||
else
|
||||
linker = new BeLinker(pdata, plen, pinfo); // big endian
|
||||
}
|
||||
|
||||
void Packer::initLoader(const void *pdata, int plen, int pinfo, int small)
|
||||
{
|
||||
if (pinfo < 0)
|
||||
@@ -1064,10 +1072,7 @@ void Packer::initLoader(const void *pdata, int plen, int pinfo, int small)
|
||||
}
|
||||
|
||||
delete linker; linker = NULL;
|
||||
if (getFormat() < 128)
|
||||
linker = new Linker(pdata, plen, pinfo); // little endian
|
||||
else
|
||||
linker = new BeLinker(pdata, plen, pinfo); // big endian
|
||||
createLinker(pdata, plen, pinfo);
|
||||
|
||||
unsigned size;
|
||||
char const * const ident = getIdentstr(&size, small);
|
||||
@@ -1302,7 +1307,7 @@ void Packer::compressWithFilters(Filter *parm_ft,
|
||||
best_ph.c_len = orig_ph.u_len;
|
||||
best_ph.overlap_overhead = 0;
|
||||
unsigned best_ph_lsize = 0;
|
||||
unsigned best_hdr_clen = 0;
|
||||
unsigned best_hdr_c_len = 0;
|
||||
|
||||
// preconditions
|
||||
assert(orig_ph.filter == 0);
|
||||
@@ -1396,8 +1401,9 @@ void Packer::compressWithFilters(Filter *parm_ft,
|
||||
int nfilters_success = 0;
|
||||
for (int m = 0; m < nmethods; m++) // for all methods
|
||||
{
|
||||
unsigned hdr_clen = 0;
|
||||
if (hdr_buf && hdr_u_len) {
|
||||
unsigned hdr_c_len = 0;
|
||||
if (hdr_buf && hdr_u_len)
|
||||
{
|
||||
unsigned result[16];
|
||||
upx_compress_config_t conf;
|
||||
memset(&conf, 0xff, sizeof(conf));
|
||||
@@ -1405,9 +1411,12 @@ void Packer::compressWithFilters(Filter *parm_ft,
|
||||
otemp_buf.allocForCompression(compress_buf_len);
|
||||
otemp = &otemp_buf;
|
||||
}
|
||||
int r = upx_compress(hdr_buf, hdr_u_len, *otemp, &hdr_clen,
|
||||
int r = upx_compress(hdr_buf, hdr_u_len, *otemp, &hdr_c_len,
|
||||
0, methods[m], 10, &conf, result);
|
||||
(void)r;
|
||||
if (r != UPX_E_OK)
|
||||
throwInternalError("header compression failed");
|
||||
if (hdr_c_len >= hdr_u_len)
|
||||
throwInternalError("header compression size increase");
|
||||
}
|
||||
for (int i = 0; i < nfilters; i++) // for all filters
|
||||
{
|
||||
@@ -1417,6 +1426,7 @@ void Packer::compressWithFilters(Filter *parm_ft,
|
||||
ph = orig_ph;
|
||||
ph.method = methods[m];
|
||||
ph.filter = filters[i];
|
||||
ph.overlap_overhead = 0;
|
||||
// get fresh filter
|
||||
Filter ft = orig_ft;
|
||||
ft.init(ph.filter, orig_ft.addvalue);
|
||||
@@ -1457,26 +1467,27 @@ void Packer::compressWithFilters(Filter *parm_ft,
|
||||
if (compress(ibuf + compress_buf_off, *otemp, max_offset, max_match))
|
||||
{
|
||||
unsigned lsize = 0;
|
||||
if (ph.c_len + lsize < best_ph.c_len + best_ph_lsize)
|
||||
if (ph.c_len + lsize + hdr_c_len <= best_ph.c_len + best_ph_lsize + best_hdr_c_len)
|
||||
{
|
||||
// get results
|
||||
ph.overlap_overhead = findOverlapOverhead(*otemp, overlap_range);
|
||||
lsize = buildLoader(&ft);
|
||||
assert(lsize > 0);
|
||||
}
|
||||
#if 0
|
||||
printf("\n%2d %02x: %d +%4d +%3d = %d (best: %d +%4d +%3d = %d)\n", ph.method, ph.filter,
|
||||
ph.c_len, lsize, hdr_clen, ph.c_len + lsize + hdr_clen,
|
||||
best_ph.c_len, best_ph_lsize, best_hdr_clen, best_ph.c_len + best_ph_lsize + best_hdr_clen);
|
||||
ph.c_len, lsize, hdr_c_len, ph.c_len + lsize + hdr_c_len,
|
||||
best_ph.c_len, best_ph_lsize, best_hdr_c_len, best_ph.c_len + best_ph_lsize + best_hdr_c_len);
|
||||
#endif
|
||||
bool update = false;
|
||||
if (ph.c_len + lsize + hdr_clen < best_ph.c_len + best_ph_lsize + best_hdr_clen)
|
||||
if (ph.c_len + lsize + hdr_c_len < best_ph.c_len + best_ph_lsize + best_hdr_c_len)
|
||||
update = true;
|
||||
else if (ph.c_len + lsize + hdr_clen == best_ph.c_len + best_ph_lsize + best_hdr_clen)
|
||||
else if (ph.c_len + lsize + hdr_c_len == best_ph.c_len + best_ph_lsize + best_hdr_c_len)
|
||||
{
|
||||
// prefer smaller loaders
|
||||
if (lsize + hdr_clen < best_ph_lsize + best_hdr_clen)
|
||||
if (lsize + hdr_c_len < best_ph_lsize + best_hdr_c_len)
|
||||
update = true;
|
||||
else if (lsize + hdr_clen == best_ph_lsize + best_hdr_clen)
|
||||
else if (lsize + hdr_c_len == best_ph_lsize + best_hdr_c_len)
|
||||
{
|
||||
// prefer less overlap_overhead
|
||||
if (ph.overlap_overhead < best_ph.overlap_overhead)
|
||||
@@ -1485,13 +1496,14 @@ void Packer::compressWithFilters(Filter *parm_ft,
|
||||
}
|
||||
if (update)
|
||||
{
|
||||
assert((int)ph.overlap_overhead > 0);
|
||||
// update obuf[] with best version
|
||||
if (otemp != &obuf)
|
||||
memcpy(obuf, *otemp, ph.c_len);
|
||||
// save compression results
|
||||
best_ph = ph;
|
||||
best_ph_lsize = lsize;
|
||||
best_hdr_clen = hdr_clen;
|
||||
best_hdr_c_len = hdr_c_len;
|
||||
best_ft = ft;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
@@ -271,6 +271,7 @@ protected:
|
||||
protected:
|
||||
// linker
|
||||
Linker *linker;
|
||||
virtual void createLinker(const void *pdata, int plen, int pinfo);
|
||||
|
||||
private:
|
||||
// private to checkPatch()
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
@@ -212,14 +212,14 @@ static Packer* try_packers(InputFile *f, try_function func)
|
||||
}
|
||||
#endif
|
||||
if (opt->o_unix.use_ptinterp) {
|
||||
if ((p = func(new PackLinuxI386interp(f),f)) != NULL)
|
||||
if ((p = func(new PackLinuxElf32x86interp(f),f)) != NULL)
|
||||
return p;
|
||||
}
|
||||
if ((p = func(new PackLinuxElf64amd(f),f)) != NULL)
|
||||
return p;
|
||||
if ((p = func(new PackLinuxElf32ppc(f),f)) != NULL)
|
||||
return p;
|
||||
if ((p = func(new PackLinuxI386elf(f),f)) != NULL)
|
||||
if ((p = func(new PackLinuxElf32x86(f),f)) != NULL)
|
||||
return p;
|
||||
if ((p = func(new PackLinuxI386sh(f),f)) != NULL)
|
||||
return p;
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
markus@oberhumer.com ml1050@cdata.tvnet.hu
|
||||
markus@oberhumer.com ml1050@users.sourceforge.net
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
.*-stamp
|
||||
*.ah
|
||||
*.asx
|
||||
*.asy
|
||||
*.bin
|
||||
*.d
|
||||
*.i
|
||||
*.lst
|
||||
*.map
|
||||
*.o
|
||||
*.out
|
||||
*.tmp
|
||||
GNUmakefile
|
||||
MMakefile
|
||||
stamp-h
|
||||
stubify.exe
|
||||
upxb
|
||||
upxd
|
||||
@@ -1,18 +0,0 @@
|
||||
.*-stamp
|
||||
*.ah
|
||||
*.asx
|
||||
*.asy
|
||||
*.bin
|
||||
*.d
|
||||
*.i
|
||||
*.lst
|
||||
*.map
|
||||
*.o
|
||||
*.out
|
||||
*.tmp
|
||||
GNUmakefile
|
||||
MMakefile
|
||||
stamp-h
|
||||
stubify.exe
|
||||
upxb
|
||||
upxd
|
||||
+11
-35
@@ -32,7 +32,7 @@ top_srcdir = ../..
|
||||
|
||||
# These are the files we want to create.
|
||||
STUBS = \
|
||||
l_armpe.h \
|
||||
l_armpea.h l_armpet.h \
|
||||
l_com.h \
|
||||
l_djgpp2.h stubify.h \
|
||||
l_exe.h \
|
||||
@@ -226,10 +226,8 @@ GCC_AMD64 += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror
|
||||
|
||||
GCC_ARM := arm-9tdmi-linux-gnu-gcc -march=armv4 -nostdinc -MMD
|
||||
GCC_ARM += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror
|
||||
GCC_ARM_T := $(GCC_ARM) -march=armv4t -mthumb-interwork -mthumb
|
||||
LD_ARM := arm-9tdmi-linux-gnu-ld
|
||||
GCC_ARM_T := $(GCC_ARM) -march=armv4t
|
||||
OBJCOPY_ARM := arm-9tdmi-linux-gnu-objcopy
|
||||
BIN2H_WINCE := perl -ne 'print "db\t", join(",", map { sprintf "%\#02x", $$_ } unpack("C*", $$_)), "\n"'
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
@@ -555,37 +553,15 @@ upxd: l_lx_sep.o l_lx_sep86.asm
|
||||
$(STRIPELF_LINUX_I386) $@
|
||||
$(BRANDELF) $@
|
||||
|
||||
l_armpe.h: l_armpe.asx l_armpe_s.S l_armpe_c.c arm_nrv2e_d8.S arm_nrv2b_d8.S armv4_n2e_d8.S $(MAKEFILE_LIST)
|
||||
$(GCC_ARM_T) -c l_armpe_s.S arm_nrv2e_d8.S arm_nrv2b_d8.S
|
||||
$(GCC_ARM_T) -Os -c l_armpe_c.c -DUCL_DECOMPRESS=thumb_nrv2e_d8
|
||||
$(LD_ARM) -o l_armpe_txe.out l_armpe_s.o l_armpe_c.o arm_nrv2e_d8.o
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary l_armpe_txe.out l_armpe_txe.bin
|
||||
$(BIN2H_WINCE) <l_armpe_txe.bin >l_armpe_txe.ah
|
||||
$(GCC_ARM_T) -Os -c l_armpe_c.c -DUCL_DECOMPRESS=go_thumb_n2b
|
||||
$(LD_ARM) -o l_armpe_txb.out l_armpe_s.o l_armpe_c.o arm_nrv2b_d8.o
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary l_armpe_txb.out l_armpe_txb.bin
|
||||
$(BIN2H_WINCE) <l_armpe_txb.bin >l_armpe_txb.ah
|
||||
$(GCC_ARM_T) -DSTUB_FOR_DLL -c l_armpe_s.S
|
||||
$(GCC_ARM_T) -DSTUB_FOR_DLL -Os -c l_armpe_c.c -DUCL_DECOMPRESS=thumb_nrv2e_d8
|
||||
$(LD_ARM) -o l_armpe_tde.out l_armpe_s.o l_armpe_c.o arm_nrv2e_d8.o
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary l_armpe_tde.out l_armpe_tde.bin
|
||||
$(BIN2H_WINCE) <l_armpe_tde.bin >l_armpe_tde.ah
|
||||
$(GCC_ARM_T) -DSTUB_FOR_DLL -Os -c l_armpe_c.c -DUCL_DECOMPRESS=go_thumb_n2b
|
||||
$(LD_ARM) -o l_armpe_tdb.out l_armpe_s.o l_armpe_c.o arm_nrv2b_d8.o
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary l_armpe_tdb.out l_armpe_tdb.bin
|
||||
$(BIN2H_WINCE) <l_armpe_tdb.bin >l_armpe_tdb.ah
|
||||
$(GCC_ARM) -Os -c l_armpe_c.c -DUCL_DECOMPRESS=ucl_nrv2e_decompress_8
|
||||
$(GCC_ARM) -c armv4_n2e_d8.S l_armpe_s.S
|
||||
$(LD_ARM) -o l_armpe_axe.out l_armpe_s.o l_armpe_c.o armv4_n2e_d8.o
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary l_armpe_axe.out l_armpe_axe.bin
|
||||
$(BIN2H_WINCE) <l_armpe_axe.bin >l_armpe_axe.ah
|
||||
$(GCC_ARM) -DSTUB_FOR_DLL -Os -c l_armpe_c.c -DUCL_DECOMPRESS=ucl_nrv2e_decompress_8
|
||||
$(GCC_ARM) -DSTUB_FOR_DLL -c l_armpe_s.S
|
||||
$(LD_ARM) -o l_armpe_ade.out l_armpe_s.o l_armpe_c.o armv4_n2e_d8.o
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary l_armpe_ade.out l_armpe_ade.bin
|
||||
$(BIN2H_WINCE) <l_armpe_ade.bin >l_armpe_ade.ah
|
||||
$(NASM) -f bin -o $T.bin $<
|
||||
$(BIN2H) $T.bin nrv_loader $@
|
||||
l_armpea.h: l_armpea.S armv4_n2e_d8.S $(MAKEFILE_LIST)
|
||||
$(GCC_ARM) $T.S -o $T.out -nostdlib
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary $T.out $T.bin
|
||||
$(BIN2H) $T.bin nrv_loader_arm $@
|
||||
|
||||
l_armpet.h: l_armpet.S arm_nrv2e_d8.S arm_nrv2b_d8.S $(MAKEFILE_LIST)
|
||||
$(GCC_ARM_T) $T.S -o $T.out -nostdlib
|
||||
$(OBJCOPY_ARM) --only-section .text -O binary $T.out $T.bin
|
||||
$(BIN2H) $T.bin nrv_loader_thumb $@
|
||||
|
||||
# /***********************************************************************
|
||||
# // dependencies
|
||||
|
||||
@@ -98,8 +98,13 @@ L50:
|
||||
|
||||
sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca
|
||||
push ebx ; start of unmap region (&Elf32_Ehdr of this stub)
|
||||
mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz, pre-rounded up
|
||||
lea edx, [PAGE_SIZE + edx + ebx] ; 1 page in l_lx_elf86asm for unfold
|
||||
|
||||
; Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss,
|
||||
; but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X.
|
||||
mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz
|
||||
lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] ; 1 page for round, 1 for unfold
|
||||
and edx, -PAGE_SIZE
|
||||
|
||||
push edx ; end of unmap region
|
||||
sub eax, eax ; 0
|
||||
cmp word [e_type + ebx], byte ET_DYN
|
||||
|
||||
+100
-100
@@ -1,4 +1,4 @@
|
||||
/* fold_elf86.h -- created from fold_elf86.bin, 1603 (0x643) bytes
|
||||
/* fold_elf86.h -- created from fold_elf86.bin, 1607 (0x647) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,110 +27,110 @@
|
||||
*/
|
||||
|
||||
|
||||
#define LINUX_I386ELF_FOLD_SIZE 1603
|
||||
#define LINUX_I386ELF_FOLD_ADLER32 0x34baaf28
|
||||
#define LINUX_I386ELF_FOLD_CRC32 0xd41e0330
|
||||
#define LINUX_I386ELF_FOLD_SIZE 1607
|
||||
#define LINUX_I386ELF_FOLD_ADLER32 0xdf50b4ab
|
||||
#define LINUX_I386ELF_FOLD_CRC32 0x537b9a31
|
||||
|
||||
unsigned char linux_i386elf_fold[1603] = {
|
||||
unsigned char linux_i386elf_fold[1607] = {
|
||||
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,192, 0, 52, 0, 0, 0, /* 0x 10 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0, /* 0x 30 */
|
||||
0, 16,192, 0, 67, 6, 0, 0, 68, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
||||
0, 16, 0, 0, 1, 0, 0, 0, 67, 6, 0, 0, 68, 22,192, 0, /* 0x 50 */
|
||||
68, 22,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */
|
||||
0, 16,192, 0, 71, 6, 0, 0, 72, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
||||
0, 16, 0, 0, 1, 0, 0, 0, 71, 6, 0, 0, 72, 22,192, 0, /* 0x 50 */
|
||||
72, 22,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 */
|
||||
41,201,186,120, 2, 0, 0,137,230,137,231,232,115, 0, 0, 0, /* 0x 80 */
|
||||
41,201,186,120, 2, 0, 0,137,230,137,231,232,121, 0, 0, 0, /* 0x 80 */
|
||||
137,230,209,234, 25,192, 41,193,141, 36,196,133,210,117,243,137, /* 0x 90 */
|
||||
231,232, 93, 0, 0, 0,129,236, 0, 10, 0, 0, 83,139, 83, 72, /* 0x a0 */
|
||||
141,148, 26, 0, 16, 0, 0, 82, 41,192,102,131,123, 16, 3,117, /* 0x b0 */
|
||||
1,146, 80,139,115, 24,141,131,140, 0, 0, 0, 41,198,139, 24, /* 0x c0 */
|
||||
139, 72, 4,131,193, 12,141, 84, 36, 12, 96, 71,232, 92, 4, 0, /* 0x d0 */
|
||||
0,131,196, 36, 89, 91,129,196, 0, 10, 0, 0, 80, 79, 41,192, /* 0x e0 */
|
||||
60,175,175,117,252, 80, 80, 80, 80, 80, 80, 80, 80, 41,217,176, /* 0x f0 */
|
||||
91,255, 39,173,171,133,192,117,250,173,171,133,192,117,250, 87, /* 0x 100 */
|
||||
173,171,131,248, 32,115, 3, 15,179,194,133,192,173,171,117,240, /* 0x 110 */
|
||||
131,239, 8, 1,201, 64,243,171, 72,171,171, 95,195, 83,141, 92, /* 0x 120 */
|
||||
36, 8,106, 90, 88,205,128, 91,195, 0, 0, 0, 87, 86,137,206, /* 0x 130 */
|
||||
83,137,195, 57, 8,139,120, 4,115, 10,106,127, 91,106, 1, 88, /* 0x 140 */
|
||||
205,128,235,254,133,201,116, 8,138, 7, 71,136, 2, 66,226,248, /* 0x 150 */
|
||||
1,115, 4, 41, 51, 91, 94, 95,195, 85,137,229, 87, 86,137,198, /* 0x 160 */
|
||||
83,137,211,131,236, 24,139, 69, 8,139,125, 12,137, 69,220,131, /* 0x 170 */
|
||||
58, 0, 15,132,184, 0, 0, 0,141, 85,228,185, 12, 0, 0, 0, /* 0x 180 */
|
||||
137,240,232,165,255,255,255,139, 69,228,139, 77,232,133,192,117, /* 0x 190 */
|
||||
19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, 15,132,142, 0, /* 0x 1a0 */
|
||||
0, 0,235, 4,133,201,117, 10,106,127, 91,106, 1, 88,205,128, /* 0x 1b0 */
|
||||
235,254, 57,193,119,242, 59, 3,119,238, 57,193,115, 85, 15,182, /* 0x 1c0 */
|
||||
69,236, 80,141, 69,224, 80,255,115, 4, 81,255,118, 4,255, 85, /* 0x 1d0 */
|
||||
220,131,196, 20,133,192,117,208,139, 85,224, 59, 85,228,117,200, /* 0x 1e0 */
|
||||
138, 69,237,132,192,116, 34,133,255,116, 30,129,250, 0, 2, 0, /* 0x 1f0 */
|
||||
0,119, 4, 57, 19,117, 18, 15,182,192, 80, 15,182, 69,238, 80, /* 0x 200 */
|
||||
82,255,115, 4,255,215,131,196, 16,139, 69,232, 1, 70, 4, 41, /* 0x 210 */
|
||||
6,235, 10,139, 83, 4,137,240,232, 15,255,255,255,139, 85,228, /* 0x 220 */
|
||||
139, 3, 1, 83, 4, 41,208,133,192,137, 3,233, 66,255,255,255, /* 0x 230 */
|
||||
141,101,244, 91, 94, 95,201,195,133,192, 83,137,211,116, 29,168, /* 0x 240 */
|
||||
1,117, 25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7, /* 0x 250 */
|
||||
137, 24,137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137, /* 0x 260 */
|
||||
229, 87, 86, 83,131,236, 64,137, 85,224,139, 77,224,137, 69,228, /* 0x 270 */
|
||||
139, 85, 12, 3, 73, 28,139, 69, 8,137, 85,216,139, 93,224,139, /* 0x 280 */
|
||||
85,224,137, 69,220, 49,192,102,131,123, 16, 2,137, 77,212,137, /* 0x 290 */
|
||||
203, 15,183, 74, 44, 15,148,192,131,207,255,193,224, 4,137,202, /* 0x 2a0 */
|
||||
49,246,131,192, 34, 74,120, 28,131, 59, 1,117, 18,139, 83, 8, /* 0x 2b0 */
|
||||
57,250,115, 2,137,215, 3, 83, 20, 57,214,115, 2,137,214,131, /* 0x 2c0 */
|
||||
195, 32,226,228,137,251,106, 0,129,227, 0,240,255,255,106,255, /* 0x 2d0 */
|
||||
41,222, 80,129,198,255, 15, 0, 0,106, 0,129,230, 0,240,255, /* 0x 2e0 */
|
||||
255, 86, 83,232, 53,254,255,255,139, 77,224,141, 52, 48,131,196, /* 0x 2f0 */
|
||||
24, 41,216,102,131,121, 44, 0,137,117,240,137, 69,208,199, 69, /* 0x 300 */
|
||||
204, 0, 0, 0, 0, 15,132,218, 1, 0, 0,139, 93,212,139, 3, /* 0x 310 */
|
||||
131,248, 6,117, 24,139, 77,208,186, 3, 0, 0, 0, 3, 75, 8, /* 0x 320 */
|
||||
139, 69,216,232, 16,255,255,255,233,161, 1, 0, 0, 72, 15,133, /* 0x 330 */
|
||||
154, 1, 0, 0,139, 69,212,199, 69,200, 64, 98, 81,115,139, 85, /* 0x 340 */
|
||||
212,139, 72, 24,139, 90, 20,131,225, 7,193,225, 2,211,109,200, /* 0x 350 */
|
||||
139, 72, 16,139, 69,208, 3, 66, 8,137, 77,232,131,101,200, 7, /* 0x 360 */
|
||||
137,194, 1,195,129,226,255, 15, 0, 0,137,199,141, 52, 17,139, /* 0x 370 */
|
||||
77,212,137, 69,236, 41,215,139, 65, 4,137, 93,196, 41,208,131, /* 0x 380 */
|
||||
125,220, 0, 80,139, 69,228,116, 3,131,200,255,131,125,220, 1, /* 0x 390 */
|
||||
80, 25,192,131,224,224,131,192, 50,131,125,220, 0, 80,139, 69, /* 0x 3a0 */
|
||||
200,116, 3,131,200, 2,131,125,220, 0, 80,137,240,116, 3,141, /* 0x 3b0 */
|
||||
70, 3, 80, 87,232,100,253,255,255,131,196, 24, 57,199, 15,133, /* 0x 3c0 */
|
||||
187, 0, 0, 0,131,125,220, 0,116, 31, 49,192,246, 69,200, 4, /* 0x 3d0 */
|
||||
116, 6,139, 69,228,131,192, 2, 80,139, 69,220,255,117,228,141, /* 0x 3e0 */
|
||||
85,232,232,114,253,255,255, 88, 90,137,243,247,219,129,227,255, /* 0x 3f0 */
|
||||
15, 0, 0,246, 69,200, 2,137, 93,192,116, 15,133,219,141, 4, /* 0x 400 */
|
||||
55,116, 8,137,217,198, 0, 0, 64,226,250,131,125,220, 0,116, /* 0x 410 */
|
||||
120,139, 69,212,131, 56, 1,117, 86,246, 64, 24, 1,116, 80,139, /* 0x 420 */
|
||||
80, 20,139, 88, 8,141, 12, 26, 3, 77,208, 59, 80, 16,117, 14, /* 0x 430 */
|
||||
137,200,247,216, 37,255, 15, 0, 0,131,248, 3,119, 17,139, 85, /* 0x 440 */
|
||||
212,107, 69,208, 52,131,122, 4, 0,141, 76, 3, 12,117, 15,139, /* 0x 450 */
|
||||
1, 61,205,128, 97,195,116, 6,199, 1,205,128, 97,195,133,201, /* 0x 460 */
|
||||
116, 13,139, 69,216, 49,210,131,224,254,232,201,253,255,255,137, /* 0x 470 */
|
||||
251,137,241,139, 85,200,106,125, 88,205,128,133,192,116, 10,106, /* 0x 480 */
|
||||
127, 91,106, 1, 88,205,128,235,254,139, 85,192,141, 4, 22,141, /* 0x 490 */
|
||||
28, 7, 59, 93,196,115, 30,106, 0,106,255,106, 50,255,117,200, /* 0x 4a0 */
|
||||
41, 93,196,255,117,196, 83,232,113,252,255,255,131,196, 24, 57, /* 0x 4b0 */
|
||||
195,116, 27,235,202,131,125,220, 0,116, 19,141, 78, 3,129,225, /* 0x 4c0 */
|
||||
255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88,205,128,139, 77, /* 0x 4d0 */
|
||||
224,255, 69,204, 15,183, 65, 44,131, 69,212, 32, 57, 69,204, 15, /* 0x 4e0 */
|
||||
140, 38,254,255,255,131,125,220, 0,117, 14,139, 93,228,106, 6, /* 0x 4f0 */
|
||||
88,205,128,133,192,116, 20,235,134,139, 69,224,102,131,120, 16, /* 0x 500 */
|
||||
3,116, 8,139, 93,240,106, 45, 88,205,128,131,125, 16, 0,116, /* 0x 510 */
|
||||
8,139, 77,208,139, 85, 16,137, 10,139, 93,224,139, 91, 24, 1, /* 0x 520 */
|
||||
93,208,139, 69,208,141,101,244, 91, 94, 95,201,195, 85,137,229, /* 0x 530 */
|
||||
87, 86, 83,131,236, 24,139,125, 28,106, 0,139, 69, 16,141, 87, /* 0x 540 */
|
||||
52,139,117, 8, 80,139, 93, 32,137, 69,236,137, 85,232,141, 69, /* 0x 550 */
|
||||
32,141, 85, 24,232, 0,252,255,255,139, 69, 12, 15,183, 79, 44, /* 0x 560 */
|
||||
186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, 36,232,198,252, /* 0x 570 */
|
||||
255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137,240,232,182,252, /* 0x 580 */
|
||||
255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, 0, 3, 75, 8, /* 0x 590 */
|
||||
137,240,131,193, 52,232,158,252,255,255,141, 69,240,137,250, 80, /* 0x 5a0 */
|
||||
141, 69, 32, 86, 80,139, 69,236,232,177,252,255,255,186, 9, 0, /* 0x 5b0 */
|
||||
0, 0,137,193,137,195,137,240,232,123,252,255,255,102,139, 79, /* 0x 5c0 */
|
||||
44,131,196, 20, 49,210,102,133,201,116, 94,139, 69,232,131, 56, /* 0x 5d0 */
|
||||
3,117, 74,139, 93,240, 49,201, 3, 88, 8,137,202,106, 5, 88, /* 0x 5e0 */
|
||||
205,128,133,192,137,198,120, 21,186, 0, 2, 0, 0,137,195,137, /* 0x 5f0 */
|
||||
249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, 91, /* 0x 600 */
|
||||
106, 1, 88,205,128,235,254,106, 0,137,250,106, 0,137,240,106, /* 0x 610 */
|
||||
0,232, 72,252,255,255,131,196, 12,137,195,235, 12, 66, 15,183, /* 0x 620 */
|
||||
193,131, 69,232, 32, 57,194,124,162,141,101,244,137,216, 91, 94, /* 0x 630 */
|
||||
95,201,195 /* 0x 640 */
|
||||
231,232, 99, 0, 0, 0,129,236, 0, 10, 0, 0, 83,139, 83, 72, /* 0x a0 */
|
||||
141,148, 26,255, 31, 0, 0,129,226, 0,240,255,255, 82, 41,192, /* 0x b0 */
|
||||
102,131,123, 16, 3,117, 1,146, 80,139,115, 24,141,131,140, 0, /* 0x c0 */
|
||||
0, 0, 41,198,139, 24,139, 72, 4,131,193, 12,141, 84, 36, 12, /* 0x d0 */
|
||||
96, 71,232, 90, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, /* 0x e0 */
|
||||
0, 0, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, /* 0x f0 */
|
||||
80, 80, 80, 41,217,176, 91,255, 39,173,171,133,192,117,250,173, /* 0x 100 */
|
||||
171,133,192,117,250, 87,173,171,131,248, 32,115, 3, 15,179,194, /* 0x 110 */
|
||||
133,192,173,171,117,240,131,239, 8, 1,201, 64,243,171, 72,171, /* 0x 120 */
|
||||
171, 95,195, 83,141, 92, 36, 8,106, 90, 88,205,128, 91,195, 0, /* 0x 130 */
|
||||
87, 86,137,206, 83,137,195, 57, 8,139,120, 4,115, 10,106,127, /* 0x 140 */
|
||||
91,106, 1, 88,205,128,235,254,133,201,116, 8,138, 7, 71,136, /* 0x 150 */
|
||||
2, 66,226,248, 1,115, 4, 41, 51, 91, 94, 95,195, 85,137,229, /* 0x 160 */
|
||||
87, 86,137,198, 83,137,211,131,236, 24,139, 69, 8,139,125, 12, /* 0x 170 */
|
||||
137, 69,220,131, 58, 0, 15,132,184, 0, 0, 0,141, 85,228,185, /* 0x 180 */
|
||||
12, 0, 0, 0,137,240,232,165,255,255,255,139, 69,228,139, 77, /* 0x 190 */
|
||||
232,133,192,117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, /* 0x 1a0 */
|
||||
15,132,142, 0, 0, 0,235, 4,133,201,117, 10,106,127, 91,106, /* 0x 1b0 */
|
||||
1, 88,205,128,235,254, 57,193,119,242, 59, 3,119,238, 57,193, /* 0x 1c0 */
|
||||
115, 85, 15,182, 69,236, 80,141, 69,224, 80,255,115, 4, 81,255, /* 0x 1d0 */
|
||||
118, 4,255, 85,220,131,196, 20,133,192,117,208,139, 85,224, 59, /* 0x 1e0 */
|
||||
85,228,117,200,138, 69,237,132,192,116, 34,133,255,116, 30,129, /* 0x 1f0 */
|
||||
250, 0, 2, 0, 0,119, 4, 57, 19,117, 18, 15,182,192, 80, 15, /* 0x 200 */
|
||||
182, 69,238, 80, 82,255,115, 4,255,215,131,196, 16,139, 69,232, /* 0x 210 */
|
||||
1, 70, 4, 41, 6,235, 10,139, 83, 4,137,240,232, 15,255,255, /* 0x 220 */
|
||||
255,139, 85,228,139, 3, 1, 83, 4, 41,208,133,192,137, 3,233, /* 0x 230 */
|
||||
66,255,255,255,141,101,244, 91, 94, 95,201,195,133,192, 83,137, /* 0x 240 */
|
||||
211,116, 29,168, 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11, /* 0x 250 */
|
||||
133,219,116, 7,137, 24,137, 72, 4,235, 5,131,192, 8,235,231, /* 0x 260 */
|
||||
91,195, 85,137,229, 87, 86, 83,131,236, 64,137, 85,224,139, 77, /* 0x 270 */
|
||||
224,137, 69,228,139, 85, 12, 3, 73, 28,139, 69, 8,137, 85,216, /* 0x 280 */
|
||||
139, 93,224,139, 85,224,137, 69,220, 49,192,102,131,123, 16, 2, /* 0x 290 */
|
||||
137, 77,212,137,203, 15,183, 74, 44, 15,148,192,131,207,255,193, /* 0x 2a0 */
|
||||
224, 4,137,202, 49,246,131,192, 34, 74,120, 28,131, 59, 1,117, /* 0x 2b0 */
|
||||
18,139, 83, 8, 57,250,115, 2,137,215, 3, 83, 20, 57,214,115, /* 0x 2c0 */
|
||||
2,137,214,131,195, 32,226,228,137,251,106, 0,129,227, 0,240, /* 0x 2d0 */
|
||||
255,255,106,255, 41,222, 80,129,198,255, 15, 0, 0,106, 0,129, /* 0x 2e0 */
|
||||
230, 0,240,255,255, 86, 83,232, 55,254,255,255,139, 77,224,141, /* 0x 2f0 */
|
||||
52, 48,131,196, 24, 41,216,102,131,121, 44, 0,137,117,240,137, /* 0x 300 */
|
||||
69,208,199, 69,204, 0, 0, 0, 0, 15,132,218, 1, 0, 0,139, /* 0x 310 */
|
||||
93,212,139, 3,131,248, 6,117, 24,139, 77,208,186, 3, 0, 0, /* 0x 320 */
|
||||
0, 3, 75, 8,139, 69,216,232, 16,255,255,255,233,161, 1, 0, /* 0x 330 */
|
||||
0, 72, 15,133,154, 1, 0, 0,139, 69,212,199, 69,200, 64, 98, /* 0x 340 */
|
||||
81,115,139, 85,212,139, 72, 24,139, 90, 20,131,225, 7,193,225, /* 0x 350 */
|
||||
2,211,109,200,139, 72, 16,139, 69,208, 3, 66, 8,137, 77,232, /* 0x 360 */
|
||||
131,101,200, 7,137,194, 1,195,129,226,255, 15, 0, 0,137,199, /* 0x 370 */
|
||||
141, 52, 17,139, 77,212,137, 69,236, 41,215,139, 65, 4,137, 93, /* 0x 380 */
|
||||
196, 41,208,131,125,220, 0, 80,139, 69,228,116, 3,131,200,255, /* 0x 390 */
|
||||
131,125,220, 1, 80, 25,192,131,224,224,131,192, 50,131,125,220, /* 0x 3a0 */
|
||||
0, 80,139, 69,200,116, 3,131,200, 2,131,125,220, 0, 80,137, /* 0x 3b0 */
|
||||
240,116, 3,141, 70, 3, 80, 87,232,102,253,255,255,131,196, 24, /* 0x 3c0 */
|
||||
57,199, 15,133,187, 0, 0, 0,131,125,220, 0,116, 31, 49,192, /* 0x 3d0 */
|
||||
246, 69,200, 4,116, 6,139, 69,228,131,192, 2, 80,139, 69,220, /* 0x 3e0 */
|
||||
255,117,228,141, 85,232,232,114,253,255,255, 88, 90,137,243,247, /* 0x 3f0 */
|
||||
219,129,227,255, 15, 0, 0,246, 69,200, 2,137, 93,192,116, 15, /* 0x 400 */
|
||||
133,219,141, 4, 55,116, 8,137,217,198, 0, 0, 64,226,250,131, /* 0x 410 */
|
||||
125,220, 0,116,120,139, 69,212,131, 56, 1,117, 86,246, 64, 24, /* 0x 420 */
|
||||
1,116, 80,139, 80, 20,139, 88, 8,141, 12, 26, 3, 77,208, 59, /* 0x 430 */
|
||||
80, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131,248, 3, /* 0x 440 */
|
||||
119, 17,139, 85,212,107, 69,208, 52,131,122, 4, 0,141, 76, 3, /* 0x 450 */
|
||||
12,117, 15,139, 1, 61,205,128, 97,195,116, 6,199, 1,205,128, /* 0x 460 */
|
||||
97,195,133,201,116, 13,139, 69,216, 49,210,131,224,254,232,201, /* 0x 470 */
|
||||
253,255,255,137,251,137,241,139, 85,200,106,125, 88,205,128,133, /* 0x 480 */
|
||||
192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, 85,192, /* 0x 490 */
|
||||
141, 4, 22,141, 28, 7, 59, 93,196,115, 30,106, 0,106,255,106, /* 0x 4a0 */
|
||||
50,255,117,200, 41, 93,196,255,117,196, 83,232,115,252,255,255, /* 0x 4b0 */
|
||||
131,196, 24, 57,195,116, 27,235,202,131,125,220, 0,116, 19,141, /* 0x 4c0 */
|
||||
78, 3,129,225,255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88, /* 0x 4d0 */
|
||||
205,128,139, 77,224,255, 69,204, 15,183, 65, 44,131, 69,212, 32, /* 0x 4e0 */
|
||||
57, 69,204, 15,140, 38,254,255,255,131,125,220, 0,117, 14,139, /* 0x 4f0 */
|
||||
93,228,106, 6, 88,205,128,133,192,116, 20,235,134,139, 69,224, /* 0x 500 */
|
||||
102,131,120, 16, 3,116, 8,139, 93,240,106, 45, 88,205,128,131, /* 0x 510 */
|
||||
125, 16, 0,116, 8,139, 77,208,139, 85, 16,137, 10,139, 93,224, /* 0x 520 */
|
||||
139, 91, 24, 1, 93,208,139, 69,208,141,101,244, 91, 94, 95,201, /* 0x 530 */
|
||||
195, 85,137,229, 87, 86, 83,131,236, 24,139,125, 28,106, 0,139, /* 0x 540 */
|
||||
69, 16,141, 87, 52,139,117, 8, 80,139, 93, 32,137, 69,236,137, /* 0x 550 */
|
||||
85,232,141, 69, 32,141, 85, 24,232, 0,252,255,255,139, 69, 12, /* 0x 560 */
|
||||
15,183, 79, 44,186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, /* 0x 570 */
|
||||
36,232,198,252,255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137, /* 0x 580 */
|
||||
240,232,182,252,255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, /* 0x 590 */
|
||||
0, 3, 75, 8,137,240,131,193, 52,232,158,252,255,255,141, 69, /* 0x 5a0 */
|
||||
240,137,250, 80,141, 69, 32, 86, 80,139, 69,236,232,177,252,255, /* 0x 5b0 */
|
||||
255,186, 9, 0, 0, 0,137,193,137,195,137,240,232,123,252,255, /* 0x 5c0 */
|
||||
255,102,139, 79, 44,131,196, 20, 49,210,102,133,201,116, 94,139, /* 0x 5d0 */
|
||||
69,232,131, 56, 3,117, 74,139, 93,240, 49,201, 3, 88, 8,137, /* 0x 5e0 */
|
||||
202,106, 5, 88,205,128,133,192,137,198,120, 21,186, 0, 2, 0, /* 0x 5f0 */
|
||||
0,137,195,137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, /* 0x 600 */
|
||||
10,106,127, 91,106, 1, 88,205,128,235,254,106, 0,137,250,106, /* 0x 610 */
|
||||
0,137,240,106, 0,232, 72,252,255,255,131,196, 12,137,195,235, /* 0x 620 */
|
||||
12, 66, 15,183,193,131, 69,232, 32, 57,194,124,162,141,101,244, /* 0x 630 */
|
||||
137,216, 91, 94, 95,201,195 /* 0x 640 */
|
||||
};
|
||||
|
||||
@@ -44,8 +44,6 @@
|
||||
%define szp_info 12
|
||||
|
||||
fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program
|
||||
pop eax ; discard &dstlen
|
||||
pop eax ; discard dstlen
|
||||
|
||||
pop eax ; Pop the argument count
|
||||
mov ecx, esp ; argv starts just at the current stack top
|
||||
|
||||
@@ -28,19 +28,19 @@
|
||||
|
||||
|
||||
#define LINUX_I386EXEC_FOLD_SIZE 899
|
||||
#define LINUX_I386EXEC_FOLD_ADLER32 0xcf9c7496
|
||||
#define LINUX_I386EXEC_FOLD_CRC32 0xab6154cb
|
||||
#define LINUX_I386EXEC_FOLD_ADLER32 0x1a1874e1
|
||||
#define LINUX_I386EXEC_FOLD_CRC32 0x6ce5306c
|
||||
|
||||
unsigned char linux_i386exec_fold[899] = {
|
||||
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, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x 10 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 1, 0, 0, 0, /* 0x 20 */
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 64, 0, /* 0x 30 */
|
||||
0, 16, 64, 0,131, 3, 0, 0,132, 3, 0, 0, 7, 0, 0, 0, /* 0x 40 */
|
||||
0, 16, 64, 0,131, 3, 0, 0,132, 3, 0, 0, 5, 0, 0, 0, /* 0x 40 */
|
||||
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 50 */
|
||||
88, 88, 88,137,225,141, 84,132, 4,139,123, 24,141,115, 96, 41, /* 0x 60 */
|
||||
247,141, 93, 2, 96,232,197, 0, 0, 0,244, 83,141, 92, 36, 8, /* 0x 70 */
|
||||
106, 90, 88,205,128, 91,195, 0, 83,137,195,139, 76, 36, 8,136, /* 0x 80 */
|
||||
88,137,225,141, 84,132, 4,139,123, 24,141,115, 96, 41,247,141, /* 0x 60 */
|
||||
93, 2, 96,232,199, 0, 0, 0,244, 83,141, 92, 36, 8,106, 90, /* 0x 70 */
|
||||
88,205,128, 91,195, 0, 0, 0, 83,137,195,139, 76, 36, 8,136, /* 0x 80 */
|
||||
208,131,224, 31, 60, 25,118, 3,131,232, 43,131,192, 65, 75,136, /* 0x 90 */
|
||||
3,137,208,193,232, 5,137,194,226,229, 91,195, 85, 49,201,137, /* 0x a0 */
|
||||
229, 87, 86,137,202, 83,131,236, 44,139, 93, 8,106, 5, 88,205, /* 0x b0 */
|
||||
@@ -64,11 +64,11 @@ unsigned char linux_i386exec_fold[899] = {
|
||||
133,192, 15,133, 2, 1, 0, 0,185,194, 0, 0, 0,186,192, 1, /* 0x 1d0 */
|
||||
0, 0,141, 93,196,106, 5, 88,205,128,139, 85,232,137, 69,148, /* 0x 1e0 */
|
||||
137,195,137,209,106, 93, 88,205,128,133,192, 15,133,209, 0, 0, /* 0x 1f0 */
|
||||
0,106, 0,255,117,148,106, 1,106, 3, 82,106, 0,232,105,254, /* 0x 200 */
|
||||
0,106, 0,255,117,148,106, 1,106, 3, 82,106, 0,232,103,254, /* 0x 200 */
|
||||
255,255,131,196, 24, 61, 0,240,255,255,137, 69,136, 15,135,175, /* 0x 210 */
|
||||
0, 0, 0,139, 69,232,106, 0,106, 0, 5,255, 15, 0, 0,106, /* 0x 220 */
|
||||
0, 0, 0,139, 69,232,106, 0,106,255, 5,255, 15, 0, 0,106, /* 0x 220 */
|
||||
50, 37, 0,240,255,255,106, 3, 3, 69,136,104, 0, 16, 0, 0, /* 0x 230 */
|
||||
80,232, 53,254,255,255,131,196, 24,141,125,180,139,117, 12,165, /* 0x 240 */
|
||||
80,232, 51,254,255,255,131,196, 24,141,125,180,139,117, 12,165, /* 0x 240 */
|
||||
165,165,139, 77,180,131,109, 8, 12,133,201,137,117, 12,139, 85, /* 0x 250 */
|
||||
184,117, 16,129,250, 85, 80, 88, 33,117,103,131,125,232, 0,116, /* 0x 260 */
|
||||
115,235, 95, 57,202,119, 91, 59, 85,236,119, 86, 57,202,115, 36, /* 0x 270 */
|
||||
|
||||
@@ -96,6 +96,7 @@ SYS_write =4
|
||||
SYS_open =5
|
||||
SYS_close =6
|
||||
|
||||
SYS_pread =153
|
||||
SYS_mmap =197
|
||||
SYS_mprotect= 74
|
||||
|
||||
@@ -103,6 +104,9 @@ SYS_mprotect= 74
|
||||
in wrong registers. So change C interface to use size_t (32-bits) instead
|
||||
of off_t (64 bits), and convert here.
|
||||
*/
|
||||
pread: .globl pread
|
||||
movr a4,a3; li a3,0 # zero extend 4th arg size_t to off_t
|
||||
li 0,SYS_pread; b sysgo
|
||||
mmap: .globl mmap
|
||||
movr a6,a5; li a5,0 # zero extend 6th arg size_t to off_t
|
||||
li 0,SYS_mmap
|
||||
|
||||
+95
-88
@@ -1,4 +1,4 @@
|
||||
/* fold_machppc32.h -- created from fold_machppc32.bin, 1528 (0x5f8) bytes
|
||||
/* fold_machppc32.h -- created from fold_machppc32.bin, 1648 (0x670) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
*/
|
||||
|
||||
|
||||
#define FOLD_MACHPPC32_SIZE 1528
|
||||
#define FOLD_MACHPPC32_ADLER32 0xb665fdb7
|
||||
#define FOLD_MACHPPC32_CRC32 0x0feee296
|
||||
#define FOLD_MACHPPC32_SIZE 1648
|
||||
#define FOLD_MACHPPC32_ADLER32 0x16162538
|
||||
#define FOLD_MACHPPC32_CRC32 0x67f187d4
|
||||
|
||||
unsigned char fold_machppc32[1528] = {
|
||||
unsigned char fold_machppc32[1648] = {
|
||||
72, 0, 0,105, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 0 */
|
||||
77,130, 0, 32, 60, 0, 0, 16,124, 4, 0, 64, 65,128, 0, 8, /* 0x 10 */
|
||||
124, 4, 3,120, 56,165, 1, 32,124,103, 27,120, 56, 99,255,252, /* 0x 20 */
|
||||
@@ -42,90 +42,97 @@ unsigned char fold_machppc32[1528] = {
|
||||
124, 41, 11,120,125, 8, 2,166,128,159,255,248,124,100,248, 80, /* 0x 70 */
|
||||
128,195, 0, 24, 40, 6, 8, 0, 65,129, 0, 8, 56,192, 8, 0, /* 0x 80 */
|
||||
124, 61, 11,120,124, 38, 8, 80,124, 37, 11,120, 56, 33,255,232, /* 0x 90 */
|
||||
127,231,251,120, 72, 0, 4, 33,127,161,235,120,128, 67, 0, 0, /* 0x a0 */
|
||||
127,231,251,120, 72, 0, 4, 57,127,161,235,120,128, 67, 0, 0, /* 0x a0 */
|
||||
124, 73, 3,166,128, 67, 0,136,124, 79,241, 32,128, 67, 0,140, /* 0x b0 */
|
||||
124, 65, 3,166,128, 67, 0,144,124, 72, 3,166,184,131, 0, 24, /* 0x c0 */
|
||||
128, 3, 0, 8,128, 67, 0, 16,128, 99, 0, 20, 78,128, 4, 32, /* 0x d0 */
|
||||
125, 9, 67,120, 57, 0, 0, 0, 56, 0, 0,197, 68, 0, 0, 2, /* 0x e0 */
|
||||
56, 96,255,255, 78,128, 0, 32, 56, 0, 0, 1, 75,255,255,240, /* 0x f0 */
|
||||
56, 0, 0, 3, 75,255,255,232, 56, 0, 0, 5, 75,255,255,224, /* 0x 100 */
|
||||
56, 0, 0, 6, 75,255,255,216, 56, 0, 0, 74, 75,255,255,208, /* 0x 110 */
|
||||
124, 8, 2,166,148, 33,255,240,144, 1, 0, 20,128, 3, 0, 0, /* 0x 120 */
|
||||
129, 35, 0, 4,127,128, 40, 64, 64,188, 0, 12, 56, 96, 0,127, /* 0x 130 */
|
||||
75,255,255,185, 47,133, 0, 0, 65,158, 0, 28,124,169, 3,166, /* 0x 140 */
|
||||
136, 9, 0, 0, 57, 41, 0, 1,152, 4, 0, 0, 56,132, 0, 1, /* 0x 150 */
|
||||
66, 0,255,240,128, 3, 0, 0,129, 35, 0, 4,124, 5, 0, 80, /* 0x 160 */
|
||||
144, 3, 0, 0,125, 41, 42, 20,128, 1, 0, 20, 56, 33, 0, 16, /* 0x 170 */
|
||||
145, 35, 0, 4,124, 8, 3,166, 78,128, 0, 32,124, 8, 2,166, /* 0x 180 */
|
||||
148, 33,255,192,191,129, 0, 48,124,159, 35,120,124,126, 27,120, /* 0x 190 */
|
||||
124,188, 43,120,144, 1, 0, 68,124,221, 51,120,128, 4, 0, 0, /* 0x 1a0 */
|
||||
47,128, 0, 0, 65,158, 1, 32, 56,160, 0, 12,127,195,243,120, /* 0x 1b0 */
|
||||
56,129, 0, 16, 75,255,255, 93,129, 33, 0, 16,128,161, 0, 20, /* 0x 1c0 */
|
||||
47,137, 0, 0, 64,190, 0, 36, 60, 0, 33, 88, 96, 0, 80, 85, /* 0x 1d0 */
|
||||
127,133, 0, 0, 64,190, 0, 28,128, 30, 0, 0, 47,128, 0, 0, /* 0x 1e0 */
|
||||
65,190, 0,228, 72, 0, 0, 12, 47,133, 0, 0, 64,190, 0, 12, /* 0x 1f0 */
|
||||
56, 96, 0,127, 75,255,254,245,127, 5, 72, 64, 65,185,255,244, /* 0x 200 */
|
||||
128, 31, 0, 0,127,137, 0, 64, 65,189,255,232,128, 31, 0, 4, /* 0x 210 */
|
||||
64,152, 0,132,124,164, 43,120,128,126, 0, 4,124, 5, 3,120, /* 0x 220 */
|
||||
56,193, 0, 32,136,225, 0, 24,127,136, 3,166, 78,128, 0, 33, /* 0x 230 */
|
||||
47,131, 0, 0, 64,190,255,188,128,129, 0, 32,128, 1, 0, 16, /* 0x 240 */
|
||||
127,132, 0, 0, 64,190,255,172,136,193, 0, 25, 49, 61,255,255, /* 0x 250 */
|
||||
124, 9,233, 16,125, 38, 0,208, 85, 41, 15,254,125, 43, 0, 57, /* 0x 260 */
|
||||
65,162, 0, 20,128,127, 0, 4,127,168, 3,166,136,161, 0, 26, /* 0x 270 */
|
||||
78,128, 0, 33,128, 30, 0, 4,129, 97, 0, 20,129, 62, 0, 0, /* 0x 280 */
|
||||
124, 0, 90, 20,125, 43, 72, 80,144, 30, 0, 4,145, 62, 0, 0, /* 0x 290 */
|
||||
72, 0, 0, 16,124, 4, 3,120,127,195,243,120, 75,255,254,117, /* 0x 2a0 */
|
||||
129, 97, 0, 16,129, 63, 0, 0,128, 31, 0, 4,125, 43, 72, 80, /* 0x 2b0 */
|
||||
47,137, 0, 0,124, 0, 90, 20,144, 31, 0, 4,145, 63, 0, 0, /* 0x 2c0 */
|
||||
75,255,254,228,128, 1, 0, 68,187,129, 0, 48, 56, 33, 0, 64, /* 0x 2d0 */
|
||||
124, 8, 3,166, 78,128, 0, 32,124, 8, 2,166,148, 33,255,176, /* 0x 2e0 */
|
||||
190, 97, 0, 28,125,128, 0, 38, 58,224, 0, 0,124,122, 27,120, /* 0x 2f0 */
|
||||
144, 1, 0, 84,124,155, 35,120,128, 3, 0, 16,124,179, 43,120, /* 0x 300 */
|
||||
145,129, 0, 24,124,212, 51,120,127,151, 0, 64,124,245, 59,120, /* 0x 310 */
|
||||
125, 22, 67,120, 59,195, 0, 28, 59, 0, 0, 0, 64,156, 1,120, /* 0x 320 */
|
||||
129, 62, 0, 0, 47,137, 0, 1, 64,190, 1, 44,129, 62, 0, 24, /* 0x 330 */
|
||||
129,126, 0, 36, 85, 61, 5, 62,128, 30, 0, 28,127,139,234, 20, /* 0x 340 */
|
||||
145, 97, 0, 8, 46, 28, 0, 0,127, 41, 2, 20,145, 33, 0, 12, /* 0x 350 */
|
||||
127,253, 72, 80, 65,146, 0, 72, 47,155, 0, 0, 64,190, 0, 16, /* 0x 360 */
|
||||
47,139, 0, 0, 56,192, 0, 18, 64,158, 0, 8, 56,192, 16, 18, /* 0x 370 */
|
||||
47,139, 0, 0,126,103,155,120, 64,158, 0, 8, 56,224,255,255, /* 0x 380 */
|
||||
129, 30, 0, 32,127,227,251,120,127,132,227,120, 56,160, 0, 3, /* 0x 390 */
|
||||
75,255,253, 65,127,159, 24, 0, 64,158, 0,124, 47,155, 0, 0, /* 0x 3a0 */
|
||||
65,158, 0, 52,128, 30, 0, 36, 47,128, 0, 0, 65,158, 0, 40, /* 0x 3b0 */
|
||||
128, 30, 0, 32, 47,128, 0, 0, 64,158, 0, 8,147,244, 0, 0, /* 0x 3c0 */
|
||||
127, 99,219,120, 56,129, 0, 8,126,165,171,120,126,198,179,120, /* 0x 3d0 */
|
||||
75,255,253,173,124, 28, 0,208,125, 63,226, 20,112, 29, 15,255, /* 0x 3e0 */
|
||||
65,130, 0, 24,127,169, 3,166, 56, 0, 0, 0,152, 9, 0, 0, /* 0x 3f0 */
|
||||
57, 41, 0, 1, 66, 0,255,248, 65,178, 0, 36,128,190, 0, 44, /* 0x 400 */
|
||||
127,227,251,120,127,132,227,120, 75,255,253, 1, 47,131, 0, 0, /* 0x 410 */
|
||||
65,190, 0, 12, 56, 96, 0,127, 75,255,252,209,124, 28,234, 20, /* 0x 420 */
|
||||
127,255, 2, 20,127,159,200, 64, 64,188, 0, 84,128,190, 0, 44, /* 0x 430 */
|
||||
124,159,200, 80,127,227,251,120, 56,192, 16, 18, 56,224,255,255, /* 0x 440 */
|
||||
57, 0, 0, 0, 75,255,252,141,127,159, 24, 0, 65,190, 0, 48, /* 0x 450 */
|
||||
75,255,255,196, 56, 9,255,252, 43,128, 0, 1, 65,157, 0, 32, /* 0x 460 */
|
||||
128, 30, 0, 8, 47,128, 0, 1, 64,190, 0, 20,128, 30, 0, 12, /* 0x 470 */
|
||||
47,128, 0, 40, 64,190, 0, 8, 58,254, 0, 16,128, 26, 0, 16, /* 0x 480 */
|
||||
59, 24, 0, 1,127,152, 0, 64,128, 30, 0, 4,127,222, 2, 20, /* 0x 490 */
|
||||
75,255,254,140,128, 1, 0, 84,126,227,187,120,129,129, 0, 24, /* 0x 4a0 */
|
||||
186, 97, 0, 28,124, 8, 3,166, 56, 33, 0, 80,125,128,129, 32, /* 0x 4b0 */
|
||||
78,128, 0, 32,148, 33,255,192,124, 8, 2,166,144,129, 0, 8, /* 0x 4c0 */
|
||||
191, 65, 0, 40,129, 97, 0, 8,124,191, 43,120,144, 1, 0, 68, /* 0x 4d0 */
|
||||
56, 3, 0, 24, 57,107,255,232,144, 1, 0, 20,145, 97, 0, 16, /* 0x 4e0 */
|
||||
124,253, 59,120,128, 3, 0, 24,125, 60, 75,120,200, 1, 0, 16, /* 0x 4f0 */
|
||||
125, 27, 67,120,124,229, 59,120, 56, 97, 0, 16, 56,129, 0, 24, /* 0x 500 */
|
||||
124,218, 51,120, 56,192, 0, 0,144, 1, 0, 24,216, 1, 0, 32, /* 0x 510 */
|
||||
59,192, 0, 0,147,225, 0, 28, 75,255,252,101,127,167,235,120, /* 0x 520 */
|
||||
127,104,219,120,127,227,251,120,127,134,227,120, 56,129, 0, 32, /* 0x 530 */
|
||||
56,160,255,255, 75,255,253,165,128, 31, 0, 16,124,123, 27,120, /* 0x 540 */
|
||||
59,191, 0, 28,127,158, 0, 64, 64,156, 0,136,128, 29, 0, 0, /* 0x 550 */
|
||||
59,222, 0, 1, 56,128, 0, 0, 56,160, 0, 0, 47,128, 0, 14, /* 0x 560 */
|
||||
64,190, 0, 92,128,125, 0, 8,124,125, 26, 20, 75,255,251,141, /* 0x 570 */
|
||||
127,228,251,120,124,124, 27,121,127, 69,211,120, 65,128, 0, 40, /* 0x 580 */
|
||||
75,255,251,113, 56,128, 0, 0,127,154, 24, 0,127,133,227,120, /* 0x 590 */
|
||||
127,227,251,120, 56,192, 0, 0, 56,224, 0, 0, 57, 0, 0, 0, /* 0x 5a0 */
|
||||
65,190, 0, 12, 56, 96, 0,127, 75,255,251, 65, 75,255,253, 45, /* 0x 5b0 */
|
||||
124,123, 27,120,127,131,227,120, 75,255,251, 73,128, 31, 0, 16, /* 0x 5c0 */
|
||||
129, 61, 0, 4,127,158, 0, 64,127,189, 74, 20, 75,255,255,124, /* 0x 5d0 */
|
||||
128, 1, 0, 68,127, 99,219,120,187, 65, 0, 40, 56, 33, 0, 64, /* 0x 5e0 */
|
||||
124, 8, 3,166, 78,128, 0, 32 /* 0x 5f0 */
|
||||
124,199, 51,120, 56,192, 0, 0, 56, 0, 0,153, 72, 0, 0, 16, /* 0x e0 */
|
||||
125, 9, 67,120, 57, 0, 0, 0, 56, 0, 0,197, 68, 0, 0, 2, /* 0x f0 */
|
||||
56, 96,255,255, 78,128, 0, 32, 56, 0, 0, 1, 75,255,255,240, /* 0x 100 */
|
||||
56, 0, 0, 3, 75,255,255,232, 56, 0, 0, 5, 75,255,255,224, /* 0x 110 */
|
||||
56, 0, 0, 6, 75,255,255,216, 56, 0, 0, 74, 75,255,255,208, /* 0x 120 */
|
||||
124, 8, 2,166,148, 33,255,240,144, 1, 0, 20,128, 3, 0, 0, /* 0x 130 */
|
||||
129, 35, 0, 4,127,128, 40, 64, 64,188, 0, 12, 56, 96, 0,127, /* 0x 140 */
|
||||
75,255,255,185, 47,133, 0, 0, 65,158, 0, 28,124,169, 3,166, /* 0x 150 */
|
||||
136, 9, 0, 0, 57, 41, 0, 1,152, 4, 0, 0, 56,132, 0, 1, /* 0x 160 */
|
||||
66, 0,255,240,128, 3, 0, 0,129, 35, 0, 4,124, 5, 0, 80, /* 0x 170 */
|
||||
144, 3, 0, 0,125, 41, 42, 20,128, 1, 0, 20, 56, 33, 0, 16, /* 0x 180 */
|
||||
145, 35, 0, 4,124, 8, 3,166, 78,128, 0, 32,124, 8, 2,166, /* 0x 190 */
|
||||
148, 33,255,192,191,129, 0, 48,124,159, 35,120,124,126, 27,120, /* 0x 1a0 */
|
||||
124,188, 43,120,144, 1, 0, 68,124,221, 51,120,128, 4, 0, 0, /* 0x 1b0 */
|
||||
47,128, 0, 0, 65,158, 1, 32, 56,160, 0, 12,127,195,243,120, /* 0x 1c0 */
|
||||
56,129, 0, 16, 75,255,255, 93,129, 33, 0, 16,128,161, 0, 20, /* 0x 1d0 */
|
||||
47,137, 0, 0, 64,190, 0, 36, 60, 0, 33, 88, 96, 0, 80, 85, /* 0x 1e0 */
|
||||
127,133, 0, 0, 64,190, 0, 28,128, 30, 0, 0, 47,128, 0, 0, /* 0x 1f0 */
|
||||
65,190, 0,228, 72, 0, 0, 12, 47,133, 0, 0, 64,190, 0, 12, /* 0x 200 */
|
||||
56, 96, 0,127, 75,255,254,245,127, 5, 72, 64, 65,185,255,244, /* 0x 210 */
|
||||
128, 31, 0, 0,127,137, 0, 64, 65,189,255,232,128, 31, 0, 4, /* 0x 220 */
|
||||
64,152, 0,132,124,164, 43,120,128,126, 0, 4,124, 5, 3,120, /* 0x 230 */
|
||||
56,193, 0, 32,136,225, 0, 24,127,136, 3,166, 78,128, 0, 33, /* 0x 240 */
|
||||
47,131, 0, 0, 64,190,255,188,128,129, 0, 32,128, 1, 0, 16, /* 0x 250 */
|
||||
127,132, 0, 0, 64,190,255,172,136,193, 0, 25, 49, 61,255,255, /* 0x 260 */
|
||||
124, 9,233, 16,125, 38, 0,208, 85, 41, 15,254,125, 43, 0, 57, /* 0x 270 */
|
||||
65,162, 0, 20,128,127, 0, 4,127,168, 3,166,136,161, 0, 26, /* 0x 280 */
|
||||
78,128, 0, 33,128, 30, 0, 4,129, 97, 0, 20,129, 62, 0, 0, /* 0x 290 */
|
||||
124, 0, 90, 20,125, 43, 72, 80,144, 30, 0, 4,145, 62, 0, 0, /* 0x 2a0 */
|
||||
72, 0, 0, 16,124, 4, 3,120,127,195,243,120, 75,255,254,117, /* 0x 2b0 */
|
||||
129, 97, 0, 16,129, 63, 0, 0,128, 31, 0, 4,125, 43, 72, 80, /* 0x 2c0 */
|
||||
47,137, 0, 0,124, 0, 90, 20,144, 31, 0, 4,145, 63, 0, 0, /* 0x 2d0 */
|
||||
75,255,254,228,128, 1, 0, 68,187,129, 0, 48, 56, 33, 0, 64, /* 0x 2e0 */
|
||||
124, 8, 3,166, 78,128, 0, 32,124, 8, 2,166,148, 33,255,176, /* 0x 2f0 */
|
||||
190, 65, 0, 24,125,128, 0, 38, 58,224, 0, 0,124,122, 27,120, /* 0x 300 */
|
||||
144, 1, 0, 84,124,146, 35,120,128, 3, 0, 16,124,187, 43,120, /* 0x 310 */
|
||||
145,129, 0, 20,124,211, 51,120,127,151, 0, 64,124,244, 59,120, /* 0x 320 */
|
||||
125, 21, 67,120,125, 54, 75,120, 59,195, 0, 28, 59, 0, 0, 0, /* 0x 330 */
|
||||
64,156, 1,124,129, 62, 0, 0, 47,137, 0, 1, 64,190, 1, 48, /* 0x 340 */
|
||||
129, 62, 0, 24,129,126, 0, 36, 85, 61, 5, 62,128, 30, 0, 28, /* 0x 350 */
|
||||
127,139,234, 20,145, 97, 0, 8, 46, 28, 0, 0,127, 41, 2, 20, /* 0x 360 */
|
||||
145, 33, 0, 12,127,253, 72, 80, 65,146, 0, 76, 47,155, 0, 0, /* 0x 370 */
|
||||
64,190, 0, 16, 47,139, 0, 0, 56,192, 0, 18, 64,158, 0, 8, /* 0x 380 */
|
||||
56,192, 16, 18, 47,139, 0, 0,126,103,155,120, 64,158, 0, 8, /* 0x 390 */
|
||||
56,224,255,255,129, 30, 0, 32,127,227,251,120,127,132,227,120, /* 0x 3a0 */
|
||||
56,160, 0, 3,125, 8,146, 20, 75,255,253, 57,127,159, 24, 0, /* 0x 3b0 */
|
||||
64,158, 0,124, 47,155, 0, 0, 65,158, 0, 52,128, 30, 0, 36, /* 0x 3c0 */
|
||||
47,128, 0, 0, 65,158, 0, 40,128, 30, 0, 32, 47,128, 0, 0, /* 0x 3d0 */
|
||||
64,158, 0, 8,147,244, 0, 0,127, 99,219,120, 56,129, 0, 8, /* 0x 3e0 */
|
||||
126,165,171,120,126,198,179,120, 75,255,253,165,124, 28, 0,208, /* 0x 3f0 */
|
||||
125, 63,226, 20,112, 29, 15,255, 65,130, 0, 24,127,169, 3,166, /* 0x 400 */
|
||||
56, 0, 0, 0,152, 9, 0, 0, 57, 41, 0, 1, 66, 0,255,248, /* 0x 410 */
|
||||
65,178, 0, 36,128,190, 0, 44,127,227,251,120,127,132,227,120, /* 0x 420 */
|
||||
75,255,252,249, 47,131, 0, 0, 65,190, 0, 12, 56, 96, 0,127, /* 0x 430 */
|
||||
75,255,252,201,124, 28,234, 20,127,255, 2, 20,127,159,200, 64, /* 0x 440 */
|
||||
64,188, 0, 84,128,190, 0, 44,124,159,200, 80,127,227,251,120, /* 0x 450 */
|
||||
56,192, 16, 18, 56,224,255,255, 57, 0, 0, 0, 75,255,252,133, /* 0x 460 */
|
||||
127,159, 24, 0, 65,190, 0, 48, 75,255,255,196, 56, 9,255,252, /* 0x 470 */
|
||||
43,128, 0, 1, 65,157, 0, 32,128, 30, 0, 8, 47,128, 0, 1, /* 0x 480 */
|
||||
64,190, 0, 20,128, 30, 0, 12, 47,128, 0, 40, 64,190, 0, 8, /* 0x 490 */
|
||||
58,254, 0, 16,128, 26, 0, 16, 59, 24, 0, 1,127,152, 0, 64, /* 0x 4a0 */
|
||||
128, 30, 0, 4,127,222, 2, 20, 75,255,254,136,128, 1, 0, 84, /* 0x 4b0 */
|
||||
126,227,187,120,129,129, 0, 20,186, 65, 0, 24,124, 8, 3,166, /* 0x 4c0 */
|
||||
56, 33, 0, 80,125,128,129, 32, 78,128, 0, 32,148, 33,255,192, /* 0x 4d0 */
|
||||
124, 8, 2,166,144,129, 0, 8,191, 97, 0, 44,129, 97, 0, 8, /* 0x 4e0 */
|
||||
124,191, 43,120,144, 1, 0, 68, 56, 3, 0, 24, 57,107,255,232, /* 0x 4f0 */
|
||||
144, 1, 0, 20,145, 97, 0, 16,125, 27, 67,120,128, 3, 0, 24, /* 0x 500 */
|
||||
125, 60, 75,120,200, 1, 0, 16,124,253, 59,120,124,229, 59,120, /* 0x 510 */
|
||||
56, 97, 0, 16, 56,129, 0, 24,124,222, 51,120, 56,192, 0, 0, /* 0x 520 */
|
||||
144, 1, 0, 24,216, 1, 0, 32,147,225, 0, 28, 75,255,252, 97, /* 0x 530 */
|
||||
127,105,219,120,127,135,227,120,127,227,251,120,127,168,235,120, /* 0x 540 */
|
||||
56,128, 0, 0, 56,161, 0, 32, 56,192,255,255, 59, 96, 0, 0, /* 0x 550 */
|
||||
75,255,253,153,129, 95, 0, 16, 57, 96, 0, 0,124,124, 27,120, /* 0x 560 */
|
||||
127,139, 80, 64, 57, 63, 0, 28, 64,156, 0,224,128, 9, 0, 0, /* 0x 570 */
|
||||
57,107, 0, 1,127, 11, 80, 64, 47,128, 0, 14, 64,190, 0,192, /* 0x 580 */
|
||||
128,105, 0, 8, 56,128, 0, 0, 56,160, 0, 0,124,105, 26, 20, /* 0x 590 */
|
||||
75,255,251,121,124,125, 27,121, 65,128, 0, 32,127,163,235,120, /* 0x 5a0 */
|
||||
127,228,251,120,127,197,243,120,127,102,219,120, 75,255,251, 37, /* 0x 5b0 */
|
||||
127,158, 24, 0, 65,190, 0, 20, 56, 96, 0,127, 75,255,251, 61, /* 0x 5c0 */
|
||||
131,105, 0, 8, 75,255,255,216,128, 31, 0, 0, 61, 32,202,254, /* 0x 5d0 */
|
||||
97, 41,186,190,127,128, 72, 0, 64,158, 0, 52,129, 95, 0, 4, /* 0x 5e0 */
|
||||
57, 96, 0, 0, 57, 63, 0, 8,127,139, 80, 64, 64,156, 0, 32, /* 0x 5f0 */
|
||||
128, 9, 0, 0, 57,107, 0, 1,127, 11, 80, 64, 47,128, 0, 18, /* 0x 600 */
|
||||
65,190,255,192, 57, 41, 0, 20, 65,152,255,232,127,227,251,120, /* 0x 610 */
|
||||
127,100,219,120, 56,160, 0, 0,127,166,235,120, 56,224, 0, 0, /* 0x 620 */
|
||||
57, 0, 0, 0, 57, 32, 0, 0, 75,255,252,193,124,124, 27,120, /* 0x 630 */
|
||||
127,163,235,120, 75,255,250,221, 72, 0, 0, 16,128, 9, 0, 4, /* 0x 640 */
|
||||
125, 41, 2, 20, 65,152,255, 40,128, 1, 0, 68,127,131,227,120, /* 0x 650 */
|
||||
187, 97, 0, 44, 56, 33, 0, 64,124, 8, 3,166, 78,128, 0, 32 /* 0x 660 */
|
||||
};
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
%define szElf32_Ehdr 0x34
|
||||
%define szElf32_Phdr 8*4
|
||||
%define e_entry (16 + 2*2 + 4)
|
||||
%define p_memsz 5*4
|
||||
%define szl_info 12
|
||||
%define szp_info 12
|
||||
%define a_type 0
|
||||
@@ -60,8 +59,9 @@ fold_begin: ; enter: %ebx= uncDst
|
||||
%define AT_NULL 0
|
||||
%define AT_IGNORE 1
|
||||
%define AT_PHDR 3
|
||||
%define AT_NUMBER (5+ 23)
|
||||
%define AT_NUMBER (5+ 37)
|
||||
; 2002-11-09 glibc-2.2.90 AT_IGNOREPPC==22 plus 5 for future growth
|
||||
; 2006-05-15 glibc-2.4-4 AT_L3_CACHESHAPE==37
|
||||
|
||||
mov esi, esp
|
||||
sub esp, sz_auxv * AT_NUMBER ; more than 128 bytes
|
||||
@@ -98,6 +98,8 @@ L30: ; distribute existing Elf32_auxv into new table
|
||||
xchg eax,ecx ; edx is busy, do not use
|
||||
lodsd
|
||||
je L40
|
||||
cmp ecx, byte AT_NUMBER
|
||||
jae L30
|
||||
mov [a_type + sz_auxv*(ecx -1) + edi], ecx
|
||||
mov [a_val + sz_auxv*(ecx -1) + edi], eax
|
||||
jmp L30
|
||||
|
||||
+74
-73
@@ -1,4 +1,4 @@
|
||||
/* fold_sh86.h -- created from fold_sh86.bin, 1193 (0x4a9) bytes
|
||||
/* fold_sh86.h -- created from fold_sh86.bin, 1201 (0x4b1) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,84 +27,85 @@
|
||||
*/
|
||||
|
||||
|
||||
#define LINUX_I386SH_FOLD_SIZE 1193
|
||||
#define LINUX_I386SH_FOLD_ADLER32 0xef79f39d
|
||||
#define LINUX_I386SH_FOLD_CRC32 0xde5583f6
|
||||
#define LINUX_I386SH_FOLD_SIZE 1201
|
||||
#define LINUX_I386SH_FOLD_ADLER32 0x5788f83f
|
||||
#define LINUX_I386SH_FOLD_CRC32 0xf1ddde7a
|
||||
|
||||
unsigned char linux_i386sh_fold[1193] = {
|
||||
unsigned char linux_i386sh_fold[1201] = {
|
||||
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, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x 10 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 1, 0, 0, 0, /* 0x 20 */
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, /* 0x 30 */
|
||||
0, 0, 64, 1,169, 4, 0, 0,172, 4, 0, 0, 7, 0, 0, 0, /* 0x 40 */
|
||||
0, 0, 64, 1,177, 4, 0, 0,180, 4, 0, 0, 7, 0, 0, 0, /* 0x 40 */
|
||||
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 50 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
||||
88, 88,137,230,129,236,224, 0, 0, 0,137,231,173,171,133,192, /* 0x 80 */
|
||||
117,250,173,171,133,192,117,250, 87, 64,106, 54, 89,243,171, 72, /* 0x 90 */
|
||||
171,171, 95,173,133,192,145,173,116, 10,137, 76,207,248,137, 68, /* 0x a0 */
|
||||
207,252,235,239,129,236, 0, 10, 0, 0,147,141, 82, 24,139, 10, /* 0x b0 */
|
||||
139, 90, 4,137,198, 96,232,123, 2, 0, 0, 89, 80, 97,129,196, /* 0x c0 */
|
||||
0, 10, 0, 0, 89, 90, 82, 65, 86,131,238, 3,102,199, 6, 45, /* 0x d0 */
|
||||
99, 65, 86, 65, 82, 81, 87,141,188, 36, 0,245,255,255, 96,137, /* 0x e0 */
|
||||
227,137,252,185,192, 2, 0, 0, 49,192,243,171,137,220, 97,195, /* 0x f0 */
|
||||
83,141, 92, 36, 8,106, 90, 88,205,128, 91,195, 87, 86, 83,137, /* 0x 100 */
|
||||
195,139,124, 36, 16, 57, 56,139,112, 4,115, 10,106,127, 91,106, /* 0x 110 */
|
||||
1, 88,205,128,235,254,133,255,116, 10,137,249,138, 6, 70,136, /* 0x 120 */
|
||||
2, 66,226,248, 1,123, 4, 41, 59, 91, 94, 95,195,133,210,137, /* 0x 130 */
|
||||
209,116, 6,198, 0, 0, 64,226,250,195, 85, 49,201,137,229, 87, /* 0x 140 */
|
||||
86, 83,137,195,131,236, 52,137, 85,240,139, 69, 8,137,202,137, /* 0x 150 */
|
||||
69,236,106, 5, 88,205,128,133,192,137, 69,232,121, 10,106,127, /* 0x 160 */
|
||||
91,106, 1, 88,205,128,235,254,186, 0, 2, 0, 0,139, 93,232, /* 0x 170 */
|
||||
139, 77,240,106, 3, 88,205,128, 61, 0, 2, 0, 0,117,223,139, /* 0x 180 */
|
||||
69,240,139, 85,240, 3, 64, 28, 15,183, 90, 44,137, 69,228, 49, /* 0x 190 */
|
||||
192,102,131,122, 16, 3,139, 77,228, 15,149,192,131,207,255,193, /* 0x 1a0 */
|
||||
224, 4,131,192, 34, 49,210,137, 69,212,137,216, 72,120, 33,137, /* 0x 1b0 */
|
||||
222,131, 57, 1,117, 20,139, 65, 8, 57,248,115, 2,137,199,139, /* 0x 1c0 */
|
||||
89, 20, 1,195, 57,218,115, 2,137,218,131,193, 32, 78,117,225, /* 0x 1d0 */
|
||||
246, 69,212, 16,116, 7,137,211,106, 45, 88,205,128,137,251,106, /* 0x 1e0 */
|
||||
0,129,227, 0,240,255,255,106, 0, 41,218,255,117,212,141,130, /* 0x 1f0 */
|
||||
255, 15, 0, 0,106, 7, 37, 0,240,255,255, 80, 83,232,238,254, /* 0x 200 */
|
||||
255,255,131,196, 24, 41,216,199, 69,220, 0, 0, 0, 0,137, 69, /* 0x 210 */
|
||||
224,139, 69,240,102,131,120, 44, 0, 15,132,247, 0, 0, 0,139, /* 0x 220 */
|
||||
85,228,139, 2,131,248, 6,117, 14,139, 66, 8,139, 77,236,137, /* 0x 230 */
|
||||
65, 20,233,200, 0, 0, 0, 72, 15,133,193, 0, 0, 0,139, 93, /* 0x 240 */
|
||||
228,199, 69,216, 64, 98, 81,115,139, 75, 24,139, 67, 8,131,225, /* 0x 250 */
|
||||
7,193,225, 2,137,194,211,109,216,139, 77,228, 3, 83, 20,137, /* 0x 260 */
|
||||
195,139,121, 16,129,227,255, 15, 0, 0,139, 77,224, 41,216, 1, /* 0x 270 */
|
||||
223,131,101,216, 7, 1,202,141, 52, 8,137, 85,204,139, 85,228, /* 0x 280 */
|
||||
139, 66, 4, 41,216, 80,255,117,232,106, 18,106, 3, 87, 86,232, /* 0x 290 */
|
||||
92,254,255,255,131,196, 24, 57,198,117, 48,137,218,137,240,232, /* 0x 2a0 */
|
||||
137,254,255,255,137,249,247,217,141, 4, 62,129,225,255, 15, 0, /* 0x 2b0 */
|
||||
0,137,243,137,202,137, 77,208,232,112,254,255,255,137,249,139, /* 0x 2c0 */
|
||||
85,216,106,125, 88,205,128,133,192,116, 10,106,127, 91,106, 1, /* 0x 2d0 */
|
||||
88,205,128,235,254,139, 85,208,141, 4, 23,141, 28, 6, 59, 93, /* 0x 2e0 */
|
||||
204,115, 28,106, 0,106, 0,106, 50,255,117,216, 41, 93,204,255, /* 0x 2f0 */
|
||||
117,204, 83,232,248,253,255,255,131,196, 24, 57,195,117,204,139, /* 0x 300 */
|
||||
77,240,255, 69,220, 15,183, 65, 44,131, 69,228, 32, 57, 69,220, /* 0x 310 */
|
||||
15,140, 9,255,255,255,139, 93,232,106, 6, 88,205,128,133,192, /* 0x 320 */
|
||||
117,169,139, 69,240,139, 64, 24, 1, 69,224,139, 69,224,141,101, /* 0x 330 */
|
||||
244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83,131,236, 36,141, /* 0x 340 */
|
||||
117, 32,139, 69, 16,141, 93, 24,139, 85, 20,137, 69,212,139, 69, /* 0x 350 */
|
||||
36,139,125, 8,137, 85,208, 5, 85, 80, 88, 50,137, 69,240,139, /* 0x 360 */
|
||||
69,240, 5, 85, 80, 88, 51,131,125, 32, 0,137, 69,236, 15,132, /* 0x 370 */
|
||||
139, 0, 0, 0,141, 85,220,137,216,106, 12,232,124,253,255,255, /* 0x 380 */
|
||||
88,139, 69,220,139, 77,224,133,192,117, 15,129,249, 85, 80, 88, /* 0x 390 */
|
||||
33,117, 11,131, 59, 0,116,103,235, 4,133,201,117, 10,106,127, /* 0x 3a0 */
|
||||
91,106, 1, 88,205,128,235,254, 57,193,119,242, 59, 6,119,238, /* 0x 3b0 */
|
||||
57,193,115, 44, 15,182, 69,228, 80,141, 69,216, 80,255,118, 4, /* 0x 3c0 */
|
||||
81,255,115, 4,255, 85,212,131,196, 20,133,192,117,208,139, 69, /* 0x 3d0 */
|
||||
220, 57, 69,216,117,200,139, 69,224, 1, 67, 4, 41, 3,235, 12, /* 0x 3e0 */
|
||||
139, 86, 4,137,216, 81,232, 17,253,255,255, 88,139, 85,220,139, /* 0x 3f0 */
|
||||
6, 1, 86, 4, 41,208,133,192,137, 6,233,111,255,255,255,139, /* 0x 400 */
|
||||
69,236,139, 85,208,138, 24,139, 69,236,198, 0, 0,139, 69,240, /* 0x 410 */
|
||||
87,232, 36,253,255,255,139, 85,208,137,198,139, 69,236,136, 24, /* 0x 420 */
|
||||
15,183, 66, 42,199, 71, 16, 3, 0, 0, 0,199, 71, 24, 4, 0, /* 0x 430 */
|
||||
0, 0,199, 71, 32, 5, 0, 0, 0,137, 71, 28, 15,183, 66, 44, /* 0x 440 */
|
||||
199, 71, 44, 0, 16, 0, 0,137,119, 68,131,194, 52,199, 71, 40, /* 0x 450 */
|
||||
6, 0, 0, 0,137, 71, 36,139, 69,208,199, 71, 64, 9, 0, 0, /* 0x 460 */
|
||||
0,102,139, 88, 44, 89, 49,201,102,133,219,116, 34,131, 58, 3, /* 0x 470 */
|
||||
117, 18,139, 66, 8,106, 0,139, 85,208,232,187,252,255,255,137, /* 0x 480 */
|
||||
198, 88,235, 11, 65, 15,183,195,131,194, 32, 57,193,124,222,141, /* 0x 490 */
|
||||
101,244,137,240, 91, 94, 95,201,195 /* 0x 4a0 */
|
||||
88, 88,137,230,129,236, 80, 1, 0, 0,137,231,173,171,133,192, /* 0x 80 */
|
||||
117,250,173,171,133,192,117,250, 87, 64,106, 82, 89,243,171, 72, /* 0x 90 */
|
||||
171,171, 95,173,133,192,145,173,116, 15,131,249, 42,115,244,137, /* 0x a0 */
|
||||
76,207,248,137, 68,207,252,235,234,129,236, 0, 10, 0, 0,147, /* 0x b0 */
|
||||
141, 82, 24,139, 10,139, 90, 4,137,198, 96,232,126, 2, 0, 0, /* 0x c0 */
|
||||
89, 80, 97,129,196, 0, 10, 0, 0, 89, 90, 82, 65, 86,131,238, /* 0x d0 */
|
||||
3,102,199, 6, 45, 99, 65, 86, 65, 82, 81, 87,141,188, 36, 0, /* 0x e0 */
|
||||
245,255,255, 96,137,227,137,252,185,192, 2, 0, 0, 49,192,243, /* 0x f0 */
|
||||
171,137,220, 97,195, 83,141, 92, 36, 8,106, 90, 88,205,128, 91, /* 0x 100 */
|
||||
195, 0, 0, 0, 87, 86, 83,137,195,139,124, 36, 16, 57, 56,139, /* 0x 110 */
|
||||
112, 4,115, 10,106,127, 91,106, 1, 88,205,128,235,254,133,255, /* 0x 120 */
|
||||
116, 10,137,249,138, 6, 70,136, 2, 66,226,248, 1,123, 4, 41, /* 0x 130 */
|
||||
59, 91, 94, 95,195,133,210,137,209,116, 6,198, 0, 0, 64,226, /* 0x 140 */
|
||||
250,195, 85, 49,201,137,229, 87, 86, 83,137,195,131,236, 52,137, /* 0x 150 */
|
||||
85,240,139, 69, 8,137,202,137, 69,236,106, 5, 88,205,128,133, /* 0x 160 */
|
||||
192,137, 69,232,121, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x 170 */
|
||||
186, 0, 2, 0, 0,139, 93,232,139, 77,240,106, 3, 88,205,128, /* 0x 180 */
|
||||
61, 0, 2, 0, 0,117,223,139, 69,240,139, 85,240, 3, 64, 28, /* 0x 190 */
|
||||
15,183, 90, 44,137, 69,228, 49,192,102,131,122, 16, 3,139, 77, /* 0x 1a0 */
|
||||
228, 15,149,192,131,207,255,193,224, 4,131,192, 34, 49,210,137, /* 0x 1b0 */
|
||||
69,212,137,216, 72,120, 33,137,222,131, 57, 1,117, 20,139, 65, /* 0x 1c0 */
|
||||
8, 57,248,115, 2,137,199,139, 89, 20, 1,195, 57,218,115, 2, /* 0x 1d0 */
|
||||
137,218,131,193, 32, 78,117,225,246, 69,212, 16,116, 7,137,211, /* 0x 1e0 */
|
||||
106, 45, 88,205,128,137,251,106, 0,129,227, 0,240,255,255,106, /* 0x 1f0 */
|
||||
255, 41,218,255,117,212,141,130,255, 15, 0, 0,106, 7, 37, 0, /* 0x 200 */
|
||||
240,255,255, 80, 83,232,235,254,255,255,131,196, 24, 41,216,199, /* 0x 210 */
|
||||
69,220, 0, 0, 0, 0,137, 69,224,139, 69,240,102,131,120, 44, /* 0x 220 */
|
||||
0, 15,132,247, 0, 0, 0,139, 85,228,139, 2,131,248, 6,117, /* 0x 230 */
|
||||
14,139, 66, 8,139, 77,236,137, 65, 20,233,200, 0, 0, 0, 72, /* 0x 240 */
|
||||
15,133,193, 0, 0, 0,139, 93,228,199, 69,216, 64, 98, 81,115, /* 0x 250 */
|
||||
139, 75, 24,139, 67, 8,131,225, 7,193,225, 2,137,194,211,109, /* 0x 260 */
|
||||
216,139, 77,228, 3, 83, 20,137,195,139,121, 16,129,227,255, 15, /* 0x 270 */
|
||||
0, 0,139, 77,224, 41,216, 1,223,131,101,216, 7, 1,202,141, /* 0x 280 */
|
||||
52, 8,137, 85,204,139, 85,228,139, 66, 4, 41,216, 80,255,117, /* 0x 290 */
|
||||
232,106, 18,106, 3, 87, 86,232, 89,254,255,255,131,196, 24, 57, /* 0x 2a0 */
|
||||
198,117, 48,137,218,137,240,232,137,254,255,255,137,249,247,217, /* 0x 2b0 */
|
||||
141, 4, 62,129,225,255, 15, 0, 0,137,243,137,202,137, 77,208, /* 0x 2c0 */
|
||||
232,112,254,255,255,137,249,139, 85,216,106,125, 88,205,128,133, /* 0x 2d0 */
|
||||
192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, 85,208, /* 0x 2e0 */
|
||||
141, 4, 23,141, 28, 6, 59, 93,204,115, 28,106, 0,106,255,106, /* 0x 2f0 */
|
||||
50,255,117,216, 41, 93,204,255,117,204, 83,232,245,253,255,255, /* 0x 300 */
|
||||
131,196, 24, 57,195,117,204,139, 77,240,255, 69,220, 15,183, 65, /* 0x 310 */
|
||||
44,131, 69,228, 32, 57, 69,220, 15,140, 9,255,255,255,139, 93, /* 0x 320 */
|
||||
232,106, 6, 88,205,128,133,192,117,169,139, 69,240,139, 64, 24, /* 0x 330 */
|
||||
1, 69,224,139, 69,224,141,101,244, 91, 94, 95,201,195, 85,137, /* 0x 340 */
|
||||
229, 87, 86, 83,131,236, 36,141,117, 32,139, 69, 16,141, 93, 24, /* 0x 350 */
|
||||
139, 85, 20,137, 69,212,139, 69, 36,139,125, 8,137, 85,208, 5, /* 0x 360 */
|
||||
85, 80, 88, 50,137, 69,240,139, 69,240, 5, 85, 80, 88, 51,131, /* 0x 370 */
|
||||
125, 32, 0,137, 69,236, 15,132,139, 0, 0, 0,141, 85,220,137, /* 0x 380 */
|
||||
216,106, 12,232,124,253,255,255, 88,139, 69,220,139, 77,224,133, /* 0x 390 */
|
||||
192,117, 15,129,249, 85, 80, 88, 33,117, 11,131, 59, 0,116,103, /* 0x 3a0 */
|
||||
235, 4,133,201,117, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x 3b0 */
|
||||
57,193,119,242, 59, 6,119,238, 57,193,115, 44, 15,182, 69,228, /* 0x 3c0 */
|
||||
80,141, 69,216, 80,255,118, 4, 81,255,115, 4,255, 85,212,131, /* 0x 3d0 */
|
||||
196, 20,133,192,117,208,139, 69,220, 57, 69,216,117,200,139, 69, /* 0x 3e0 */
|
||||
224, 1, 67, 4, 41, 3,235, 12,139, 86, 4,137,216, 81,232, 17, /* 0x 3f0 */
|
||||
253,255,255, 88,139, 85,220,139, 6, 1, 86, 4, 41,208,133,192, /* 0x 400 */
|
||||
137, 6,233,111,255,255,255,139, 69,236,139, 85,208,138, 24,139, /* 0x 410 */
|
||||
69,236,198, 0, 0,139, 69,240, 87,232, 36,253,255,255,139, 85, /* 0x 420 */
|
||||
208,137,198,139, 69,236,136, 24, 15,183, 66, 42,199, 71, 16, 3, /* 0x 430 */
|
||||
0, 0, 0,199, 71, 24, 4, 0, 0, 0,199, 71, 32, 5, 0, 0, /* 0x 440 */
|
||||
0,137, 71, 28, 15,183, 66, 44,199, 71, 44, 0, 16, 0, 0,137, /* 0x 450 */
|
||||
119, 68,131,194, 52,199, 71, 40, 6, 0, 0, 0,137, 71, 36,139, /* 0x 460 */
|
||||
69,208,199, 71, 64, 9, 0, 0, 0,102,139, 88, 44, 89, 49,201, /* 0x 470 */
|
||||
102,133,219,116, 34,131, 58, 3,117, 18,139, 66, 8,106, 0,139, /* 0x 480 */
|
||||
85,208,232,187,252,255,255,137,198, 88,235, 11, 65, 15,183,195, /* 0x 490 */
|
||||
131,194, 32, 57,193,124,222,141,101,244,137,240, 91, 94, 95,201, /* 0x 4a0 */
|
||||
195 /* 0x 4b0 */
|
||||
};
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
; l_armwce.asm -- loader & decompressor for the arm/wince/pe format
|
||||
;
|
||||
; This file is part of the UPX executable compressor.
|
||||
;
|
||||
; Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
|
||||
; Copyright (C) 1996-2004 Laszlo Molnar
|
||||
; All Rights Reserved.
|
||||
;
|
||||
; UPX and the UCL library are free software; you can redistribute them
|
||||
; and/or modify them under the terms of the GNU General Public License as
|
||||
; published by the Free Software Foundation; either version 2 of
|
||||
; the License, or (at your option) any later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program; see the file COPYING.
|
||||
; If not, write to the Free Software Foundation, Inc.,
|
||||
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
;
|
||||
; Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
; <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
;
|
||||
|
||||
|
||||
%define jmps jmp short
|
||||
%define jmpn jmp near
|
||||
%include "macros.ash"
|
||||
|
||||
BITS 32
|
||||
SECTION .text
|
||||
ORG 0
|
||||
CPU 386
|
||||
|
||||
; =============
|
||||
; ============= ENTRY POINT
|
||||
; =============
|
||||
|
||||
; __ARMPEAXE__
|
||||
%include "l_armpe_axe.ah"
|
||||
; __ARMPEADE__
|
||||
%include "l_armpe_ade.ah"
|
||||
; __ARMPETXE__
|
||||
%include "l_armpe_txe.ah"
|
||||
; __ARMPETDE__
|
||||
%include "l_armpe_tde.ah"
|
||||
; __ARMPETXB__
|
||||
%include "l_armpe_txb.ah"
|
||||
; __ARMPETDB__
|
||||
%include "l_armpe_tdb.ah"
|
||||
; __ARMPEHEAD__
|
||||
%include "header.ash"
|
||||
eof:
|
||||
; __ARMPEEOF__
|
||||
section .data
|
||||
dd -1
|
||||
dw eof
|
||||
|
||||
|
||||
; vi:ts=8:et:nowrap
|
||||
@@ -1,292 +0,0 @@
|
||||
/* l_armpe.h -- created from l_armpe.bin, 4112 (0x1010) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#define NRV_LOADER_SIZE 4112
|
||||
#define NRV_LOADER_ADLER32 0x78258e9b
|
||||
#define NRV_LOADER_CRC32 0xa3de7215
|
||||
|
||||
unsigned char nrv_loader[4112] = {
|
||||
15, 64, 45,233,132, 0,143,226, 45, 0, 0,235, 15, 64,189,232, /* 0x 0 */
|
||||
152,240,159,229,144, 48,159,229, 0,240,147,229,132, 48,159,229, /* 0x 10 */
|
||||
0,240,147,229,148, 48,159,229, 0,240,147,229,132, 0,159,229, /* 0x 20 */
|
||||
0, 32,160,227,128,192,159,229, 12, 0, 80,225, 14,240,160, 1, /* 0x 30 */
|
||||
3, 48,208,229, 15, 48, 3,226, 11, 0, 83,227, 5, 0, 0, 26, /* 0x 40 */
|
||||
0, 48,144,229,255, 20, 3,226, 2, 48, 67,224,255, 52,195,227, /* 0x 50 */
|
||||
1, 48,131,225, 0, 48,128,229, 4, 0,128,226, 1, 32,130,226, /* 0x 60 */
|
||||
240,255,255,234, 3, 32,160,227, 2, 48,208,231, 1, 32, 82,226, /* 0x 70 */
|
||||
1, 20,131,224,251,255,255, 90, 1, 0,160,225, 14,240,160,225, /* 0x 80 */
|
||||
83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, 68, 83, 84, 76, /* 0x 90 */
|
||||
66, 73, 77, 80, 79, 78, 65, 77, 71, 69, 84, 80, 76, 79, 65, 68, /* 0x a0 */
|
||||
69, 78, 84, 82, 66, 82, 69, 76, 70, 73, 66, 83, 70, 73, 66, 69, /* 0x b0 */
|
||||
67, 83, 89, 78,240, 65, 45,233, 0,224,160,227,132,208, 77,226, /* 0x c0 */
|
||||
8,112,144,229, 0,192,160,225, 3, 0,144,232, 0,224,141,229, /* 0x d0 */
|
||||
7, 32,160,225, 13, 48,160,225, 16, 64,140,226, 16, 1,148,232, /* 0x e0 */
|
||||
55, 0, 0,235,204,255,255,235, 4, 0,160,225,220,255,255,235, /* 0x f0 */
|
||||
0, 80, 80,226, 46, 0, 0, 10, 4, 0,132,226,216,255,255,235, /* 0x 100 */
|
||||
8, 80,133,224, 0, 48,213,229, 4, 16,141,226, 0, 0, 83,227, /* 0x 110 */
|
||||
7, 96,128,224, 1, 32,160,225, 3, 0, 0, 10,178, 48,194,224, /* 0x 120 */
|
||||
1, 48,245,229, 0, 0, 83,227,250,255,255,234, 0, 48,160,227, /* 0x 130 */
|
||||
176, 48,194,225, 1, 0,160,225,177,255,255,235, 8, 48,244,229, /* 0x 140 */
|
||||
0, 80,160,225, 0, 0, 83,227, 23, 0, 0, 10,255, 48, 3,226, /* 0x 150 */
|
||||
1, 0, 83,227, 1, 64,132,226, 2, 0, 0, 10,255, 0, 83,227, /* 0x 160 */
|
||||
8, 0, 0, 10, 14, 0, 0,234, 5, 0,160,225, 4, 16,160,225, /* 0x 170 */
|
||||
165,255,255,235, 4, 0,134,228, 1, 48,212,228, 0, 0, 83,227, /* 0x 180 */
|
||||
252,255,255, 26, 6, 0, 0,234, 0, 48,212,229, 1, 16,212,229, /* 0x 190 */
|
||||
5, 0,160,225, 1, 20,131,224,155,255,255,235, 2, 64,132,226, /* 0x 1a0 */
|
||||
4, 0,134,228, 0, 48,212,229,229,255,255,234, 1, 64,132,226, /* 0x 1b0 */
|
||||
204,255,255,234, 4, 0,160,227,149,255,255,235,132,208,141,226, /* 0x 1c0 */
|
||||
240,129,189,232,252, 64, 45,233, 0,112,129,224, 0, 80,224,227, /* 0x 1d0 */
|
||||
2, 65,160,227, 10, 0, 0,234, 24, 0,189,232, 7, 0, 64,224, /* 0x 1e0 */
|
||||
3, 32, 66,224, 0, 32,132,229,240,128,189,232, 1, 64,208,228, /* 0x 1f0 */
|
||||
4, 64,164,224, 4, 76,176,225, 14,240,160,225, 1, 48,208,228, /* 0x 200 */
|
||||
1, 48,194,228, 4, 64,148,224,247,255,255, 11,250,255,255, 42, /* 0x 210 */
|
||||
1, 16,160,227, 3, 0, 0,234, 1, 16, 65,226, 4, 64,148,224, /* 0x 220 */
|
||||
241,255,255, 11, 1, 16,161,224, 4, 64,148,224,238,255,255, 11, /* 0x 230 */
|
||||
1, 16,161,224, 4, 64,148,224,235,255,255, 11,245,255,255, 58, /* 0x 240 */
|
||||
3, 48, 81,226, 0, 16,160,227, 6, 0, 0, 58, 1, 80,208,228, /* 0x 250 */
|
||||
3, 84,133,225, 5, 80,240,225,222,255,255, 10,197, 80,176,225, /* 0x 260 */
|
||||
15, 0, 0, 42, 2, 0, 0,234, 4, 64,148,224,222,255,255, 11, /* 0x 270 */
|
||||
11, 0, 0, 42, 1, 16,160,227, 4, 64,148,224,218,255,255, 11, /* 0x 280 */
|
||||
7, 0, 0, 42, 4, 64,148,224,215,255,255, 11, 1, 16,161,224, /* 0x 290 */
|
||||
4, 64,148,224,212,255,255, 11,249,255,255, 58, 4, 16,129,226, /* 0x 2a0 */
|
||||
3, 0, 0,234, 4, 64,148,224,207,255,255, 11, 1, 16,161,224, /* 0x 2b0 */
|
||||
2, 16,129,226, 5, 12,117,227, 0, 0, 0, 42, 1, 16,129,226, /* 0x 2c0 */
|
||||
0, 48,210,229, 5, 48,210,231, 1, 48,194,228, 1, 16, 81,226, /* 0x 2d0 */
|
||||
251,255,255, 26,202,255,255,234, 1, 0, 81,227, 3, 0, 0, 26, /* 0x 2e0 */
|
||||
15, 64, 45,233,228, 0,143,226, 69, 0, 0,235, 15, 64,189,232, /* 0x 2f0 */
|
||||
248,240,159,229,240, 48,159,229, 0,240,147,229,228, 48,159,229, /* 0x 300 */
|
||||
0,240,147,229,244, 48,159,229, 0,240,147,229,228, 0,159,229, /* 0x 310 */
|
||||
0, 32,160,227,224,192,159,229, 12, 0, 80,225, 14,240,160, 1, /* 0x 320 */
|
||||
3, 48,208,229, 15, 48, 3,226, 11, 0, 83,227, 5, 0, 0, 26, /* 0x 330 */
|
||||
0, 48,144,229,255, 20, 3,226, 2, 48, 67,224,255, 52,195,227, /* 0x 340 */
|
||||
1, 48,131,225, 0, 48,128,229, 4, 0,128,226, 1, 32,130,226, /* 0x 350 */
|
||||
240,255,255,234, 3, 32,160,227, 2, 48,208,231, 1, 32, 82,226, /* 0x 360 */
|
||||
1, 20,131,224,251,255,255, 90, 1, 0,160,225, 14,240,160,225, /* 0x 370 */
|
||||
124, 0,159,229, 92, 32,159,229, 4, 16, 66,226, 1, 48,208,228, /* 0x 380 */
|
||||
0, 0, 83,227, 14,240,160, 1,240, 0, 83,227,240,192,195, 35, /* 0x 390 */
|
||||
1, 48,208, 37, 12,196,131, 32, 2, 48,208, 36, 12, 52,131, 32, /* 0x 3a0 */
|
||||
3, 16,129,224, 0, 48,209,229, 12,196,131,224, 1, 48,209,229, /* 0x 3b0 */
|
||||
12,196,131,224, 2, 48,209,229, 12,196,131,224, 3, 48,209,229, /* 0x 3c0 */
|
||||
12,196,131,224, 2,192,140,224, 0,192,129,229,234,255,255,234, /* 0x 3d0 */
|
||||
83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, 68, 83, 84, 76, /* 0x 3e0 */
|
||||
66, 73, 77, 80, 79, 78, 65, 77, 71, 69, 84, 80, 76, 79, 65, 68, /* 0x 3f0 */
|
||||
69, 78, 84, 82, 66, 82, 69, 76, 70, 73, 66, 83, 70, 73, 66, 69, /* 0x 400 */
|
||||
67, 83, 89, 78,240, 65, 45,233, 0,224,160,227,132,208, 77,226, /* 0x 410 */
|
||||
8,112,144,229, 0,192,160,225, 3, 0,144,232, 0,224,141,229, /* 0x 420 */
|
||||
7, 32,160,225, 13, 48,160,225, 16, 64,140,226, 16, 1,148,232, /* 0x 430 */
|
||||
56, 0, 0,235,180,255,255,235, 4, 0,160,225,196,255,255,235, /* 0x 440 */
|
||||
0, 80, 80,226, 46, 0, 0, 10, 4, 0,132,226,192,255,255,235, /* 0x 450 */
|
||||
8, 80,133,224, 0, 48,213,229, 4, 16,141,226, 0, 0, 83,227, /* 0x 460 */
|
||||
7, 96,128,224, 1, 32,160,225, 3, 0, 0, 10,178, 48,194,224, /* 0x 470 */
|
||||
1, 48,245,229, 0, 0, 83,227,250,255,255,234, 0, 48,160,227, /* 0x 480 */
|
||||
176, 48,194,225, 1, 0,160,225,153,255,255,235, 8, 48,244,229, /* 0x 490 */
|
||||
0, 80,160,225, 0, 0, 83,227, 23, 0, 0, 10,255, 48, 3,226, /* 0x 4a0 */
|
||||
1, 0, 83,227, 1, 64,132,226, 2, 0, 0, 10,255, 0, 83,227, /* 0x 4b0 */
|
||||
8, 0, 0, 10, 14, 0, 0,234, 5, 0,160,225, 4, 16,160,225, /* 0x 4c0 */
|
||||
141,255,255,235, 4, 0,134,228, 1, 48,212,228, 0, 0, 83,227, /* 0x 4d0 */
|
||||
252,255,255, 26, 6, 0, 0,234, 0, 48,212,229, 1, 16,212,229, /* 0x 4e0 */
|
||||
5, 0,160,225, 1, 20,131,224,131,255,255,235, 2, 64,132,226, /* 0x 4f0 */
|
||||
4, 0,134,228, 0, 48,212,229,229,255,255,234, 1, 64,132,226, /* 0x 500 */
|
||||
204,255,255,234,153,255,255,235, 4, 0,160,227,124,255,255,235, /* 0x 510 */
|
||||
132,208,141,226,240,129,189,232,252, 64, 45,233, 0,112,129,224, /* 0x 520 */
|
||||
0, 80,224,227, 2, 65,160,227, 10, 0, 0,234, 24, 0,189,232, /* 0x 530 */
|
||||
7, 0, 64,224, 3, 32, 66,224, 0, 32,132,229,240,128,189,232, /* 0x 540 */
|
||||
1, 64,208,228, 4, 64,164,224, 4, 76,176,225, 14,240,160,225, /* 0x 550 */
|
||||
1, 48,208,228, 1, 48,194,228, 4, 64,148,224,247,255,255, 11, /* 0x 560 */
|
||||
250,255,255, 42, 1, 16,160,227, 3, 0, 0,234, 1, 16, 65,226, /* 0x 570 */
|
||||
4, 64,148,224,241,255,255, 11, 1, 16,161,224, 4, 64,148,224, /* 0x 580 */
|
||||
238,255,255, 11, 1, 16,161,224, 4, 64,148,224,235,255,255, 11, /* 0x 590 */
|
||||
245,255,255, 58, 3, 48, 81,226, 0, 16,160,227, 6, 0, 0, 58, /* 0x 5a0 */
|
||||
1, 80,208,228, 3, 84,133,225, 5, 80,240,225,222,255,255, 10, /* 0x 5b0 */
|
||||
197, 80,176,225, 15, 0, 0, 42, 2, 0, 0,234, 4, 64,148,224, /* 0x 5c0 */
|
||||
222,255,255, 11, 11, 0, 0, 42, 1, 16,160,227, 4, 64,148,224, /* 0x 5d0 */
|
||||
218,255,255, 11, 7, 0, 0, 42, 4, 64,148,224,215,255,255, 11, /* 0x 5e0 */
|
||||
1, 16,161,224, 4, 64,148,224,212,255,255, 11,249,255,255, 58, /* 0x 5f0 */
|
||||
4, 16,129,226, 3, 0, 0,234, 4, 64,148,224,207,255,255, 11, /* 0x 600 */
|
||||
1, 16,161,224, 2, 16,129,226, 5, 12,117,227, 0, 0, 0, 42, /* 0x 610 */
|
||||
1, 16,129,226, 0, 48,210,229, 5, 48,210,231, 1, 48,194,228, /* 0x 620 */
|
||||
1, 16, 81,226,251,255,255, 26,202,255,255,234, 15, 64, 45,233, /* 0x 630 */
|
||||
128, 0,143,226, 14, 0,144,232, 2, 16,129,224, 0, 32,147,229, /* 0x 640 */
|
||||
1, 58,131,226, 1, 0, 83,225,251,255,255,154, 31,192,143,226, /* 0x 650 */
|
||||
15,224,160,225, 28,255, 47,225, 15, 64,189,232,116,192,159,229, /* 0x 660 */
|
||||
28,255, 47,225, 26, 75, 27,104, 24, 71, 26, 75,251,231, 30, 75, /* 0x 670 */
|
||||
249,231, 59,224,240,181, 26, 72, 0, 34, 26, 76, 15, 37,255, 38, /* 0x 680 */
|
||||
54, 6,247, 67,160, 66, 13,208,195,120, 43, 64, 11, 43, 6,209, /* 0x 690 */
|
||||
3,104, 25, 28, 49, 64,155, 26, 59, 64, 11, 67, 3, 96, 4, 48, /* 0x 6a0 */
|
||||
1, 50,239,231,240,189, 3, 33, 67, 92, 18, 2,210, 24, 1, 57, /* 0x 6b0 */
|
||||
250,213, 16, 28,112, 71, 0, 0, 83, 82, 67, 48, 83, 82, 67, 76, /* 0x 6c0 */
|
||||
68, 83, 84, 48, 68, 83, 84, 76, 66, 73, 77, 80, 79, 78, 65, 77, /* 0x 6d0 */
|
||||
71, 69, 84, 80, 76, 79, 65, 68, 69, 78, 84, 82, 66, 82, 69, 76, /* 0x 6e0 */
|
||||
70, 73, 66, 83, 70, 73, 66, 69, 67, 83, 89, 78,240,181,163,176, /* 0x 6f0 */
|
||||
0, 34, 2,146,130,104, 1,146, 66,105, 3, 28, 4,105, 89,104, /* 0x 700 */
|
||||
0,146, 2,171, 1,154, 0,104, 0,240, 82,248,255,247,178,255, /* 0x 710 */
|
||||
37, 28, 40, 28,255,247,199,255, 4, 30, 61,208, 0,155, 40, 29, /* 0x 720 */
|
||||
228, 24,255,247,192,255, 1,154,134, 24, 3,168, 2, 28, 35,120, /* 0x 730 */
|
||||
27, 6, 0, 43, 4,208, 27, 14, 19,128, 1, 52, 2, 50,246,231, /* 0x 740 */
|
||||
0, 35, 19,128,255,247,145,255, 8, 53, 7, 28, 43,120, 27, 6, /* 0x 750 */
|
||||
0, 43, 31,208, 27, 14, 1, 53, 1, 43, 2,208,255, 43, 13,208, /* 0x 760 */
|
||||
244,231, 56, 28, 41, 28,255,247,125,255, 52, 28, 32, 96, 4, 54, /* 0x 770 */
|
||||
43,120, 27, 6, 1, 53, 0, 43,250,209,231,231,105,120, 43,120, /* 0x 780 */
|
||||
9, 2, 56, 28, 89, 24,255,247,109,255, 52, 28, 2, 53, 4, 54, /* 0x 790 */
|
||||
32, 96,219,231, 1, 53,188,231, 4, 32,255,247,104,255, 35,176, /* 0x 7a0 */
|
||||
240,188, 1,188, 0, 71,192, 70, 1,192,143,226, 28,255, 47,225, /* 0x 7b0 */
|
||||
252,181, 15, 24, 1, 36,101, 66,228, 7, 5, 38, 54, 2, 15,224, /* 0x 7c0 */
|
||||
24,188,192, 27,210, 26, 34, 96,240,188, 2,188, 8, 71, 4,120, /* 0x 7d0 */
|
||||
100, 65, 1, 48, 36, 6,247, 70, 3,120, 1, 48, 19,112, 1, 50, /* 0x 7e0 */
|
||||
36, 25,254, 70,243,208,247,210, 1, 33, 4,224, 1, 57, 36, 25, /* 0x 7f0 */
|
||||
254, 70,236,208, 73, 65, 36, 25,254, 70,232,208, 73, 65, 36, 25, /* 0x 800 */
|
||||
254, 70,228,208,242,211,203, 30, 0, 33, 8,211, 27, 2, 5,120, /* 0x 810 */
|
||||
1, 48, 29, 67,237, 67,211,208,109, 16, 19,210, 3,224, 36, 25, /* 0x 820 */
|
||||
254, 70,212,208, 14,210, 1, 33, 36, 25,254, 70,207,208, 9,210, /* 0x 830 */
|
||||
36, 25,254, 70,203,208, 73, 65, 36, 25,254, 70,199,208,247,211, /* 0x 840 */
|
||||
4, 49, 4,224, 36, 25,254, 70,193,208, 73, 65, 2, 49,238, 66, /* 0x 850 */
|
||||
0,210, 1, 49, 19,120, 83, 93, 19,112, 1, 50, 1, 57,250,209, /* 0x 860 */
|
||||
190,231, 0, 0, 1, 0, 81,227, 11, 0, 0, 26, 15, 64, 45,233, /* 0x 870 */
|
||||
188, 0,143,226, 14, 0,144,232, 2, 16,129,224, 0, 32,147,229, /* 0x 880 */
|
||||
1, 58,131,226, 1, 0, 83,225,251,255,255,154, 31,192,143,226, /* 0x 890 */
|
||||
15,224,160,225, 28,255, 47,225, 15, 64,189,232,176,192,159,229, /* 0x 8a0 */
|
||||
28,255, 47,225, 41, 75, 27,104, 24, 71, 41, 75,251,231, 45, 75, /* 0x 8b0 */
|
||||
249,231, 89,224,240,181, 41, 72, 0, 34, 41, 76, 15, 37,255, 38, /* 0x 8c0 */
|
||||
54, 6,247, 67,160, 66, 13,208,195,120, 43, 64, 11, 43, 6,209, /* 0x 8d0 */
|
||||
3,104, 25, 28, 49, 64,155, 26, 59, 64, 11, 67, 3, 96, 4, 48, /* 0x 8e0 */
|
||||
1, 50,239,231,240,189, 3, 33, 67, 92, 18, 2,210, 24, 1, 57, /* 0x 8f0 */
|
||||
250,213, 16, 28,112, 71, 48,181, 23, 72, 16, 74, 17, 31, 3,120, /* 0x 900 */
|
||||
1, 48, 0, 43, 21,208,240, 43, 8,211, 15, 36, 28, 64, 67,120, /* 0x 910 */
|
||||
36, 2,228, 24, 3,120, 2, 48, 36, 2, 27, 25,201, 24, 0, 37, /* 0x 920 */
|
||||
75, 93, 36, 2,228, 24, 1, 53, 4, 45,249,209,164, 24, 12, 96, /* 0x 930 */
|
||||
229,231, 48,189, 83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, /* 0x 940 */
|
||||
68, 83, 84, 76, 66, 73, 77, 80, 79, 78, 65, 77, 71, 69, 84, 80, /* 0x 950 */
|
||||
76, 79, 65, 68, 69, 78, 84, 82, 66, 82, 69, 76, 70, 73, 66, 83, /* 0x 960 */
|
||||
70, 73, 66, 69, 67, 83, 89, 78,240,181,163,176, 0, 34, 2,146, /* 0x 970 */
|
||||
130,104, 1,146, 66,105, 3, 28, 4,105, 89,104, 0,146, 2,171, /* 0x 980 */
|
||||
1,154, 0,104, 0,240, 84,248,255,247,148,255, 37, 28, 40, 28, /* 0x 990 */
|
||||
255,247,169,255, 4, 30, 61,208, 0,155, 40, 29,228, 24,255,247, /* 0x 9a0 */
|
||||
162,255, 1,154,134, 24, 3,168, 2, 28, 35,120, 27, 6, 0, 43, /* 0x 9b0 */
|
||||
4,208, 27, 14, 19,128, 1, 52, 2, 50,246,231, 0, 35, 19,128, /* 0x 9c0 */
|
||||
255,247,115,255, 8, 53, 7, 28, 43,120, 27, 6, 0, 43, 31,208, /* 0x 9d0 */
|
||||
27, 14, 1, 53, 1, 43, 2,208,255, 43, 13,208,244,231, 56, 28, /* 0x 9e0 */
|
||||
41, 28,255,247, 95,255, 52, 28, 32, 96, 4, 54, 43,120, 27, 6, /* 0x 9f0 */
|
||||
1, 53, 0, 43,250,209,231,231,105,120, 43,120, 9, 2, 56, 28, /* 0x a00 */
|
||||
89, 24,255,247, 79,255, 52, 28, 2, 53, 4, 54, 32, 96,219,231, /* 0x a10 */
|
||||
1, 53,188,231,255,247,111,255, 4, 32,255,247, 72,255, 35,176, /* 0x a20 */
|
||||
240,188, 1,188, 0, 71,192, 70, 1,192,143,226, 28,255, 47,225, /* 0x a30 */
|
||||
252,181, 15, 24, 1, 36,101, 66,228, 7, 5, 38, 54, 2, 15,224, /* 0x a40 */
|
||||
24,188,192, 27,210, 26, 34, 96,240,188, 2,188, 8, 71, 4,120, /* 0x a50 */
|
||||
100, 65, 1, 48, 36, 6,247, 70, 3,120, 1, 48, 19,112, 1, 50, /* 0x a60 */
|
||||
36, 25,254, 70,243,208,247,210, 1, 33, 4,224, 1, 57, 36, 25, /* 0x a70 */
|
||||
254, 70,236,208, 73, 65, 36, 25,254, 70,232,208, 73, 65, 36, 25, /* 0x a80 */
|
||||
254, 70,228,208,242,211,203, 30, 0, 33, 8,211, 27, 2, 5,120, /* 0x a90 */
|
||||
1, 48, 29, 67,237, 67,211,208,109, 16, 19,210, 3,224, 36, 25, /* 0x aa0 */
|
||||
254, 70,212,208, 14,210, 1, 33, 36, 25,254, 70,207,208, 9,210, /* 0x ab0 */
|
||||
36, 25,254, 70,203,208, 73, 65, 36, 25,254, 70,199,208,247,211, /* 0x ac0 */
|
||||
4, 49, 4,224, 36, 25,254, 70,193,208, 73, 65, 2, 49,238, 66, /* 0x ad0 */
|
||||
0,210, 1, 49, 19,120, 83, 93, 19,112, 1, 50, 1, 57,250,209, /* 0x ae0 */
|
||||
190,231, 0, 0, 15, 64, 45,233,128, 0,143,226, 14, 0,144,232, /* 0x af0 */
|
||||
2, 16,129,224, 0, 32,147,229, 1, 58,131,226, 1, 0, 83,225, /* 0x b00 */
|
||||
251,255,255,154, 31,192,143,226, 15,224,160,225, 28,255, 47,225, /* 0x b10 */
|
||||
15, 64,189,232,116,192,159,229, 28,255, 47,225, 26, 75, 27,104, /* 0x b20 */
|
||||
24, 71, 26, 75,251,231, 30, 75,249,231, 59,224,240,181, 26, 72, /* 0x b30 */
|
||||
0, 34, 26, 76, 15, 37,255, 38, 54, 6,247, 67,160, 66, 13,208, /* 0x b40 */
|
||||
195,120, 43, 64, 11, 43, 6,209, 3,104, 25, 28, 49, 64,155, 26, /* 0x b50 */
|
||||
59, 64, 11, 67, 3, 96, 4, 48, 1, 50,239,231,240,189, 3, 33, /* 0x b60 */
|
||||
67, 92, 18, 2,210, 24, 1, 57,250,213, 16, 28,112, 71, 0, 0, /* 0x b70 */
|
||||
83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, 68, 83, 84, 76, /* 0x b80 */
|
||||
66, 73, 77, 80, 79, 78, 65, 77, 71, 69, 84, 80, 76, 79, 65, 68, /* 0x b90 */
|
||||
69, 78, 84, 82, 66, 82, 69, 76, 70, 73, 66, 83, 70, 73, 66, 69, /* 0x ba0 */
|
||||
67, 83, 89, 78,240,181,163,176, 0, 34, 2,146,130,104, 1,146, /* 0x bb0 */
|
||||
66,105, 3, 28, 4,105, 89,104, 0,146, 2,171, 1,154, 0,104, /* 0x bc0 */
|
||||
0,240, 82,248,255,247,178,255, 37, 28, 40, 28,255,247,199,255, /* 0x bd0 */
|
||||
4, 30, 61,208, 0,155, 40, 29,228, 24,255,247,192,255, 1,154, /* 0x be0 */
|
||||
134, 24, 3,168, 2, 28, 35,120, 27, 6, 0, 43, 4,208, 27, 14, /* 0x bf0 */
|
||||
19,128, 1, 52, 2, 50,246,231, 0, 35, 19,128,255,247,145,255, /* 0x c00 */
|
||||
8, 53, 7, 28, 43,120, 27, 6, 0, 43, 31,208, 27, 14, 1, 53, /* 0x c10 */
|
||||
1, 43, 2,208,255, 43, 13,208,244,231, 56, 28, 41, 28,255,247, /* 0x c20 */
|
||||
125,255, 52, 28, 32, 96, 4, 54, 43,120, 27, 6, 1, 53, 0, 43, /* 0x c30 */
|
||||
250,209,231,231,105,120, 43,120, 9, 2, 56, 28, 89, 24,255,247, /* 0x c40 */
|
||||
109,255, 52, 28, 2, 53, 4, 54, 32, 96,219,231, 1, 53,188,231, /* 0x c50 */
|
||||
4, 32,255,247,104,255, 35,176,240,188, 1,188, 0, 71,192, 70, /* 0x c60 */
|
||||
1,192,143,226, 28,255, 47,225, 9, 24,254,181, 1, 36,101, 66, /* 0x c70 */
|
||||
228, 7, 13, 39, 63, 2, 15,224, 26,188, 64, 26,210, 26, 34, 96, /* 0x c80 */
|
||||
240,188, 2,188, 8, 71, 4,120,100, 65, 1, 48, 36, 6,247, 70, /* 0x c90 */
|
||||
3,120, 1, 48, 19,112, 1, 50, 36, 25,254, 70,243,208,247,210, /* 0x ca0 */
|
||||
1, 33, 36, 25,254, 70,238,208, 73, 65, 36, 25,254, 70,234,208, /* 0x cb0 */
|
||||
247,211,203, 30, 0, 33, 5,211, 27, 2, 5,120, 1, 48, 29, 67, /* 0x cc0 */
|
||||
237, 67,217,208, 36, 25,254, 70,221,208, 73, 65, 36, 25,254, 70, /* 0x cd0 */
|
||||
217,208, 73, 65, 9,209, 1, 33, 36, 25,254, 70,211,208, 73, 65, /* 0x ce0 */
|
||||
36, 25,254, 70,207,208,247,211, 2, 49, 1, 49,253, 66, 0,210, /* 0x cf0 */
|
||||
1, 49, 19,120, 83, 93, 19,112, 1, 50, 1, 57,250,209,203,231, /* 0x d00 */
|
||||
1, 0, 81,227, 11, 0, 0, 26, 15, 64, 45,233,188, 0,143,226, /* 0x d10 */
|
||||
14, 0,144,232, 2, 16,129,224, 0, 32,147,229, 1, 58,131,226, /* 0x d20 */
|
||||
1, 0, 83,225,251,255,255,154, 31,192,143,226, 15,224,160,225, /* 0x d30 */
|
||||
28,255, 47,225, 15, 64,189,232,176,192,159,229, 28,255, 47,225, /* 0x d40 */
|
||||
41, 75, 27,104, 24, 71, 41, 75,251,231, 45, 75,249,231, 89,224, /* 0x d50 */
|
||||
240,181, 41, 72, 0, 34, 41, 76, 15, 37,255, 38, 54, 6,247, 67, /* 0x d60 */
|
||||
160, 66, 13,208,195,120, 43, 64, 11, 43, 6,209, 3,104, 25, 28, /* 0x d70 */
|
||||
49, 64,155, 26, 59, 64, 11, 67, 3, 96, 4, 48, 1, 50,239,231, /* 0x d80 */
|
||||
240,189, 3, 33, 67, 92, 18, 2,210, 24, 1, 57,250,213, 16, 28, /* 0x d90 */
|
||||
112, 71, 48,181, 23, 72, 16, 74, 17, 31, 3,120, 1, 48, 0, 43, /* 0x da0 */
|
||||
21,208,240, 43, 8,211, 15, 36, 28, 64, 67,120, 36, 2,228, 24, /* 0x db0 */
|
||||
3,120, 2, 48, 36, 2, 27, 25,201, 24, 0, 37, 75, 93, 36, 2, /* 0x dc0 */
|
||||
228, 24, 1, 53, 4, 45,249,209,164, 24, 12, 96,229,231, 48,189, /* 0x dd0 */
|
||||
83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, 68, 83, 84, 76, /* 0x de0 */
|
||||
66, 73, 77, 80, 79, 78, 65, 77, 71, 69, 84, 80, 76, 79, 65, 68, /* 0x df0 */
|
||||
69, 78, 84, 82, 66, 82, 69, 76, 70, 73, 66, 83, 70, 73, 66, 69, /* 0x e00 */
|
||||
67, 83, 89, 78,240,181,163,176, 0, 34, 2,146,130,104, 1,146, /* 0x e10 */
|
||||
66,105, 3, 28, 4,105, 89,104, 0,146, 2,171, 1,154, 0,104, /* 0x e20 */
|
||||
0,240, 84,248,255,247,148,255, 37, 28, 40, 28,255,247,169,255, /* 0x e30 */
|
||||
4, 30, 61,208, 0,155, 40, 29,228, 24,255,247,162,255, 1,154, /* 0x e40 */
|
||||
134, 24, 3,168, 2, 28, 35,120, 27, 6, 0, 43, 4,208, 27, 14, /* 0x e50 */
|
||||
19,128, 1, 52, 2, 50,246,231, 0, 35, 19,128,255,247,115,255, /* 0x e60 */
|
||||
8, 53, 7, 28, 43,120, 27, 6, 0, 43, 31,208, 27, 14, 1, 53, /* 0x e70 */
|
||||
1, 43, 2,208,255, 43, 13,208,244,231, 56, 28, 41, 28,255,247, /* 0x e80 */
|
||||
95,255, 52, 28, 32, 96, 4, 54, 43,120, 27, 6, 1, 53, 0, 43, /* 0x e90 */
|
||||
250,209,231,231,105,120, 43,120, 9, 2, 56, 28, 89, 24,255,247, /* 0x ea0 */
|
||||
79,255, 52, 28, 2, 53, 4, 54, 32, 96,219,231, 1, 53,188,231, /* 0x eb0 */
|
||||
255,247,111,255, 4, 32,255,247, 72,255, 35,176,240,188, 1,188, /* 0x ec0 */
|
||||
0, 71,192, 70, 1,192,143,226, 28,255, 47,225, 9, 24,254,181, /* 0x ed0 */
|
||||
1, 36,101, 66,228, 7, 13, 39, 63, 2, 15,224, 26,188, 64, 26, /* 0x ee0 */
|
||||
210, 26, 34, 96,240,188, 2,188, 8, 71, 4,120,100, 65, 1, 48, /* 0x ef0 */
|
||||
36, 6,247, 70, 3,120, 1, 48, 19,112, 1, 50, 36, 25,254, 70, /* 0x f00 */
|
||||
243,208,247,210, 1, 33, 36, 25,254, 70,238,208, 73, 65, 36, 25, /* 0x f10 */
|
||||
254, 70,234,208,247,211,203, 30, 0, 33, 5,211, 27, 2, 5,120, /* 0x f20 */
|
||||
1, 48, 29, 67,237, 67,217,208, 36, 25,254, 70,221,208, 73, 65, /* 0x f30 */
|
||||
36, 25,254, 70,217,208, 73, 65, 9,209, 1, 33, 36, 25,254, 70, /* 0x f40 */
|
||||
211,208, 73, 65, 36, 25,254, 70,207,208,247,211, 2, 49, 1, 49, /* 0x f50 */
|
||||
253, 66, 0,210, 1, 49, 19,120, 83, 93, 19,112, 1, 50, 1, 57, /* 0x f60 */
|
||||
250,209,203,231, 85, 80, 88, 33,161,216,208,213, 0, 0, 0, 0, /* 0x f70 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x f80 */
|
||||
0, 0, 0, 45, 65, 82, 77, 80, 69, 65, 88, 69, 0, 0, 0, 0, /* 0x f90 */
|
||||
0, 65, 82, 77, 80, 69, 65, 68, 69, 0,232, 2, 0, 0, 65, 82, /* 0x fa0 */
|
||||
77, 80, 69, 84, 88, 69, 0, 60, 6, 0, 0, 65, 82, 77, 80, 69, /* 0x fb0 */
|
||||
84, 68, 69, 0,116, 8, 0, 0, 65, 82, 77, 80, 69, 84, 88, 66, /* 0x fc0 */
|
||||
0,244, 10, 0, 0, 65, 82, 77, 80, 69, 84, 68, 66, 0, 16, 13, /* 0x fd0 */
|
||||
0, 0, 65, 82, 77, 80, 69, 72, 69, 65, 68, 0,116, 15, 0, 0, /* 0x fe0 */
|
||||
85, 80, 88, 49, 72, 69, 65, 68, 0,116, 15, 0, 0, 65, 82, 77, /* 0x ff0 */
|
||||
80, 69, 69, 79, 70, 0,148, 15, 0, 0,255,255,255,255,148, 15 /* 0x1000 */
|
||||
};
|
||||
@@ -1,144 +0,0 @@
|
||||
/* l_armpe_c.c -- ARM/PE decompressor for NRV2E
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
#ifndef UCL_DECOMPRESS
|
||||
# error please define UCL_DECOMPRESS
|
||||
#endif
|
||||
|
||||
int UCL_DECOMPRESS(const unsigned char * src, unsigned src_len,
|
||||
unsigned char * dst, unsigned * dst_len);
|
||||
|
||||
void *LoadLibraryW(const unsigned short *);
|
||||
void *GetProcAddressA(const void *, const void *);
|
||||
void *get_le32(const void *);
|
||||
void reloc_main();
|
||||
void Unfilter_0x50();
|
||||
void CacheSync(unsigned);
|
||||
|
||||
static void handle_imports(const unsigned char *imp, unsigned name_offset,
|
||||
unsigned iat_offset)
|
||||
{
|
||||
unsigned short buf[64];
|
||||
while (1)
|
||||
{
|
||||
unsigned short *b;
|
||||
//printf("name=%p iat=%p\n", get_le32(imp), get_le32(imp + 4));
|
||||
unsigned char *name = get_le32(imp);
|
||||
if (name == 0)
|
||||
break;
|
||||
name += name_offset;
|
||||
unsigned *iat = get_le32(imp + 4) + iat_offset;
|
||||
//printf("name=%p iat=%p\n", name, iat);
|
||||
for (b = buf; *name; name++, b++)
|
||||
*b = *name;
|
||||
*b = 0;
|
||||
|
||||
void *dll = LoadLibraryW(buf);
|
||||
imp += 8;
|
||||
unsigned ord;
|
||||
|
||||
while (*imp)
|
||||
{
|
||||
switch (*imp++)
|
||||
{
|
||||
case 1:
|
||||
// by name
|
||||
*iat++ = (unsigned) GetProcAddressA(dll, imp);
|
||||
while (*imp++)
|
||||
;
|
||||
break;
|
||||
case 0xff:
|
||||
// by ordinal
|
||||
ord = ((unsigned) imp[0]) + imp[1] * 0x100;
|
||||
imp += 2;
|
||||
*iat++ = (unsigned) GetProcAddressA(dll, (void *) ord);
|
||||
break;
|
||||
default:
|
||||
// *(int*) 1 = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
imp++;
|
||||
}
|
||||
}
|
||||
|
||||
// debugging stuff
|
||||
int CFwrap(short *, int, int, int, int, int, int);
|
||||
void WFwrap(int, const void *, int, int *, int);
|
||||
void CHwrap(int);
|
||||
#define WRITEFILE2(name0, buf, len) \
|
||||
do { short b[3]; b[0] = '\\'; b[1] = name0; b[2] = 0; \
|
||||
int h = CFwrap(b, 0x40000000L, 3, 0, 2, 0x80, 0);\
|
||||
int l; WFwrap(h, buf, len, &l, 0); \
|
||||
CHwrap(h); \
|
||||
} while (0)
|
||||
|
||||
void upx_main(const unsigned *info)
|
||||
{
|
||||
unsigned dlen = 0;
|
||||
#if 0
|
||||
unsigned src0 = *info++;
|
||||
unsigned srcl = *info++;
|
||||
unsigned dst0 = *info++;
|
||||
unsigned dstl = *info++;
|
||||
unsigned bimp = *info++;
|
||||
unsigned onam = *info++;
|
||||
unsigned getp = *info++;
|
||||
unsigned load = *info++;
|
||||
unsigned entr = *info++;
|
||||
#else
|
||||
unsigned src0 = info[0];
|
||||
unsigned srcl = info[1];
|
||||
unsigned dst0 = info[2];
|
||||
// unsigned dstl = info[3];
|
||||
unsigned bimp = info[4];
|
||||
unsigned onam = info[5];
|
||||
// unsigned getp = info[6];
|
||||
// unsigned load = info[7];
|
||||
// unsigned entr = info[8];
|
||||
#endif
|
||||
|
||||
#ifdef SAFE
|
||||
dlen = info[3];
|
||||
#endif
|
||||
//WRITEFILE2('l', (void*) dst0, info[7] + 256 - dst0);
|
||||
UCL_DECOMPRESS((void *) src0, srcl, (void *) dst0, &dlen);
|
||||
// WRITEFILE2('c', (void*) dst0, info[7] + 256 - dst0);
|
||||
Unfilter_0x50();
|
||||
//WRITEFILE2('f', (void*) dst0, info[7] + 256 - dst0);
|
||||
handle_imports((void *) bimp, onam, dst0);
|
||||
//WRITEFILE2('i', (void*) dst0, info[7] + 256 - dst0);
|
||||
#ifdef STUB_FOR_DLL
|
||||
reloc_main();
|
||||
//WRITEFILE2('r', (void*) dst0, info[7] + 256 - dst0);
|
||||
#endif
|
||||
CacheSync(4); // CACHE_SYNC_WRITEBACK
|
||||
}
|
||||
@@ -1,463 +0,0 @@
|
||||
/* l_armpe_s.S -- ARM/PE decompressor assembly startup
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
#define DEBUG 0
|
||||
|
||||
#undef STUB_IN_THUMB_MODE
|
||||
#if defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5T__)
|
||||
# define STUB_IN_THUMB_MODE
|
||||
#endif
|
||||
|
||||
#ifdef STUB_FOR_DLL
|
||||
#define START _start: cmp r1, #1; bne .Lstart_orig
|
||||
#else
|
||||
#define START _start:
|
||||
#endif
|
||||
|
||||
|
||||
.text
|
||||
.balign 0
|
||||
.globl upx_main
|
||||
.globl _start
|
||||
|
||||
#ifdef STUB_IN_THUMB_MODE
|
||||
|
||||
START
|
||||
stmfd sp!, {r0 - r3, lr}
|
||||
|
||||
@ touch all pages in ARM mode - this seems to be required
|
||||
@ otherwise the THUMB mode stuff fails
|
||||
|
||||
adr r0, SRC0
|
||||
|
||||
ldmia r0, {r1, r2, r3} @ r1 - src, r2 - slen, r3 - dst
|
||||
add r1, r1, r2
|
||||
.L01:
|
||||
ldr r2, [r3]
|
||||
add r3, r3, #4096
|
||||
cmp r3, r1
|
||||
bls .L01
|
||||
|
||||
# ifdef __ARM_ARCH_4T__
|
||||
adr ip, call_upxmain + 1
|
||||
mov lr, pc
|
||||
bx ip
|
||||
ldmfd sp!, {r0 - r3, lr}
|
||||
.Lstart_orig:
|
||||
ldr ip, ENTR
|
||||
bx ip
|
||||
# else
|
||||
blx upx_main @ call thumb armv5t style
|
||||
ldmfd sp!, {r0 - r3, lr}
|
||||
.Lstart_orig:
|
||||
ldr pc, ENTR @ original entry
|
||||
# endif
|
||||
|
||||
|
||||
|
||||
.code 16
|
||||
.global GetProcAddressA
|
||||
.thumb_func
|
||||
|
||||
GetProcAddressA:
|
||||
ldr r3, GETP
|
||||
.Lcallr3:
|
||||
ldr r3, [r3]
|
||||
bx r3
|
||||
|
||||
.global LoadLibraryW
|
||||
.thumb_func
|
||||
|
||||
LoadLibraryW:
|
||||
ldr r3, LLIB
|
||||
b .Lcallr3
|
||||
|
||||
.global CacheSync
|
||||
.thumb_func
|
||||
CacheSync:
|
||||
ldr r3, CSYN
|
||||
b .Lcallr3
|
||||
|
||||
# ifdef __ARM_ARCH_4T__
|
||||
call_upxmain:
|
||||
b upx_main
|
||||
# endif
|
||||
|
||||
|
||||
|
||||
.global Unfilter_0x50
|
||||
.thumb_func
|
||||
|
||||
buffer .req r0
|
||||
addval .req r2
|
||||
bufend .req r4
|
||||
|
||||
Unfilter_0x50:
|
||||
push {r4 - r7, lr}
|
||||
ldr buffer, FIBS
|
||||
mov addval, #0
|
||||
ldr bufend, FIBE
|
||||
mov r5, #0x0f
|
||||
mov r6, #0xff
|
||||
lsl r6, #24
|
||||
mvn r7, r6
|
||||
.Luf50_0:
|
||||
cmp buffer, bufend
|
||||
beq .Luf50_ret
|
||||
|
||||
ldrb r3, [buffer, #3]
|
||||
and r3, r5
|
||||
cmp r3, #0x0b
|
||||
bne .Luf50_1
|
||||
ldr r3, [buffer]
|
||||
mov r1, r3
|
||||
and r1, r6
|
||||
sub r3, addval
|
||||
and r3, r7
|
||||
orr r3, r1
|
||||
str r3, [buffer]
|
||||
|
||||
.Luf50_1:
|
||||
add buffer, #4
|
||||
add addval, #1
|
||||
b .Luf50_0
|
||||
.Luf50_ret:
|
||||
pop {r4 - r7, pc}
|
||||
|
||||
.unreq buffer
|
||||
.unreq addval
|
||||
.unreq bufend
|
||||
|
||||
|
||||
|
||||
.global get_le32
|
||||
.thumb_func
|
||||
get_le32: @ optimized for size
|
||||
mov r1, #3
|
||||
.Lg0:
|
||||
ldrb r3, [r0, r1]
|
||||
lsl r2, r2, #8
|
||||
add r2, r2, r3
|
||||
sub r1, #1
|
||||
bpl .Lg0
|
||||
mov r0, r2
|
||||
bx lr
|
||||
|
||||
|
||||
|
||||
# ifdef STUB_FOR_DLL
|
||||
.global reloc_main
|
||||
.thumb_func
|
||||
buffer .req r0
|
||||
dest .req r1
|
||||
addval .req r2
|
||||
|
||||
reloc_main:
|
||||
push {r4, r5, lr}
|
||||
ldr buffer, BREL
|
||||
ldr addval, DST0
|
||||
sub dest, addval, #4
|
||||
|
||||
.Lreloc_loop:
|
||||
ldrb r3, [buffer]
|
||||
add buffer, #1
|
||||
cmp r3, #0
|
||||
beq .Lreloc_end
|
||||
cmp r3, #0xf0
|
||||
blo .Lreloc_add
|
||||
|
||||
mov r4, #0x0f
|
||||
and r4, r3
|
||||
ldrb r3, [buffer, #1] @ get_le16
|
||||
lsl r4, #8
|
||||
add r4, r3
|
||||
ldrb r3, [buffer]
|
||||
add buffer, #2
|
||||
lsl r4, #8
|
||||
add r3, r4
|
||||
|
||||
.Lreloc_add:
|
||||
add dest, r3
|
||||
mov r5, #0
|
||||
|
||||
.Lread_be32:
|
||||
ldrb r3, [dest, r5]
|
||||
lsl r4, #8
|
||||
add r4, r3
|
||||
add r5, #1
|
||||
cmp r5, #4
|
||||
bne .Lread_be32
|
||||
|
||||
add r4, addval
|
||||
str r4, [dest]
|
||||
b .Lreloc_loop
|
||||
|
||||
.Lreloc_end:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
# endif
|
||||
|
||||
# if DEBUG
|
||||
|
||||
// debugging stuff - helpers for dumping memory to a file or deleting a file
|
||||
|
||||
// !!!!! check the lines with "system dependent" below before calling
|
||||
|
||||
.global CFwrap
|
||||
.thumb_func
|
||||
CFwrap:
|
||||
push {r3}
|
||||
ldr r3, createfilew
|
||||
mov ip, r3
|
||||
pop {r3}
|
||||
bx ip
|
||||
|
||||
.global WFwrap
|
||||
.thumb_func
|
||||
WFwrap:
|
||||
push {r3}
|
||||
ldr r3, writefile
|
||||
mov ip, r3
|
||||
pop {r3}
|
||||
bx ip
|
||||
|
||||
.global CHwrap
|
||||
.thumb_func
|
||||
CHwrap:
|
||||
push {r3}
|
||||
ldr r3, closehandle
|
||||
mov ip, r3
|
||||
pop {r3}
|
||||
bx ip
|
||||
|
||||
.global DelFile
|
||||
.thumb_func
|
||||
DelFile:
|
||||
adr r1, filename
|
||||
strb r0, [r1, #2]
|
||||
mov r0, r1
|
||||
ldr r3, deleteffilew
|
||||
mov ip, r3
|
||||
bx ip
|
||||
|
||||
.code 32
|
||||
createfilew:
|
||||
.word 0x1f7927c @ system dependent
|
||||
closehandle:
|
||||
.word 0x1f71594 @ system dependent
|
||||
deleteffilew:
|
||||
.word 0x1f7b920 @ system dependent
|
||||
writefile:
|
||||
.word 0x1f79434 @ system dependent
|
||||
filename:
|
||||
.byte '\\', 0, 'r', 0, 0, 0
|
||||
|
||||
# endif
|
||||
|
||||
#else // stub in ARM mode
|
||||
|
||||
START
|
||||
|
||||
stmfd sp!, {r0 - r3, lr}
|
||||
adr r0, SRC0
|
||||
bl upx_main
|
||||
ldmfd sp!, {r0 - r3, lr}
|
||||
.Lstart_orig:
|
||||
ldr pc, ENTR
|
||||
|
||||
|
||||
|
||||
.global LoadLibraryW
|
||||
LoadLibraryW:
|
||||
ldr r3, LLIB
|
||||
ldr pc, [r3]
|
||||
|
||||
.global GetProcAddressA
|
||||
GetProcAddressA:
|
||||
ldr r3, GETP
|
||||
ldr pc, [r3]
|
||||
|
||||
.global CacheSync
|
||||
CacheSync:
|
||||
ldr r3, CSYN
|
||||
ldr pc, [r3]
|
||||
|
||||
|
||||
|
||||
.global Unfilter_0x50
|
||||
buffer .req r0
|
||||
addval .req r2
|
||||
bufend .req ip
|
||||
|
||||
Unfilter_0x50:
|
||||
ldr buffer, FIBS
|
||||
mov addval, #0
|
||||
ldr bufend, FIBE
|
||||
.Luf50_0:
|
||||
cmp buffer, bufend
|
||||
|
||||
moveq pc, lr
|
||||
|
||||
ldrb r3, [buffer, #3]
|
||||
and r3, r3, #0x0f
|
||||
cmp r3, #0x0b
|
||||
bne .Luf50_1
|
||||
ldr r3, [buffer]
|
||||
and r1, r3, #0xff000000
|
||||
sub r3, r3, addval
|
||||
and r3, r3, #0x00ffffff
|
||||
orr r3, r3, r1
|
||||
str r3, [buffer]
|
||||
|
||||
.Luf50_1:
|
||||
add buffer, buffer, #4
|
||||
add addval, addval, #1
|
||||
b .Luf50_0
|
||||
|
||||
.unreq buffer
|
||||
.unreq addval
|
||||
.unreq bufend
|
||||
|
||||
|
||||
|
||||
.global get_le32
|
||||
get_le32: @ optimized for size
|
||||
mov r2, #3
|
||||
.Lg0:
|
||||
ldrb r3, [r0, r2]
|
||||
subs r2, r2, #1
|
||||
add r1, r3, r1, asl #8
|
||||
bpl .Lg0
|
||||
mov r0, r1
|
||||
mov pc, lr
|
||||
|
||||
|
||||
|
||||
# ifdef STUB_FOR_DLL
|
||||
.global reloc_main
|
||||
buffer .req r0
|
||||
dest .req r1
|
||||
addval .req r2
|
||||
|
||||
reloc_main:
|
||||
ldr buffer, BREL
|
||||
ldr addval, DST0
|
||||
sub dest, addval, #4
|
||||
|
||||
.Lreloc_loop:
|
||||
ldrb r3, [buffer], #1
|
||||
cmp r3, #0
|
||||
moveq pc, lr
|
||||
cmp r3, #0xf0
|
||||
|
||||
bichs ip, r3, #0xf0
|
||||
ldrhsb r3, [buffer, #1] @ get_le16
|
||||
addhs ip, r3, ip, lsl #8
|
||||
ldrhsb r3, [buffer], #2
|
||||
addhs r3, r3, ip, lsl #8
|
||||
|
||||
add dest, dest, r3
|
||||
ldrb r3, [dest] @ get_be32
|
||||
add ip, r3, ip, lsl #8
|
||||
ldrb r3, [dest, #1]
|
||||
add ip, r3, ip, lsl #8
|
||||
ldrb r3, [dest, #2]
|
||||
add ip, r3, ip, lsl #8
|
||||
ldrb r3, [dest, #3]
|
||||
add ip, r3, ip, lsl #8
|
||||
add ip, ip, addval
|
||||
str ip, [dest]
|
||||
b .Lreloc_loop
|
||||
|
||||
.unreq buffer
|
||||
.unreq addval
|
||||
.unreq dest
|
||||
# endif
|
||||
|
||||
# if DEBUG
|
||||
|
||||
// debugging stuff - helpers for dumping memory to a file or deleting a file
|
||||
|
||||
// !!!!! check the lines with "system dependent" below before calling
|
||||
|
||||
.global CFwrap
|
||||
CFwrap:
|
||||
ldr pc, createfilew
|
||||
|
||||
.global WFwrap
|
||||
WFwrap:
|
||||
ldr pc, writefile
|
||||
|
||||
.global CHwrap
|
||||
CHwrap:
|
||||
ldr pc, closehandle
|
||||
|
||||
.global DelFile
|
||||
DelFile:
|
||||
adr r1, filename
|
||||
strb r0, [r1, #2]
|
||||
mov r0, r1
|
||||
ldr pc, deleteffilew
|
||||
|
||||
.code 32
|
||||
createfilew:
|
||||
.word 0x1f7927c @ system dependent
|
||||
closehandle:
|
||||
.word 0x1f71594 @ system dependent
|
||||
deleteffilew:
|
||||
.word 0x1f7b920 @ system dependent
|
||||
writefile:
|
||||
.word 0x1f79434 @ system dependent
|
||||
filename:
|
||||
.byte '\\', 0, 'r', 0, 0, 0
|
||||
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@@@@@@@@@@@@@@@ paramater area for UPX
|
||||
|
||||
.code 32
|
||||
.p2align 2
|
||||
SRC0: .ascii "SRC0" @ start of compressed data
|
||||
SRCL: .ascii "SRCL" @ compressed length
|
||||
DST0: .ascii "DST0" @ start of uncompressed data
|
||||
.ascii "DSTL" @ uncompressed length
|
||||
.ascii "BIMPONAM" @ start of import data & dll names
|
||||
GETP: .ascii "GETP" @ pointer to GetProcAddressA
|
||||
LLIB: .ascii "LOAD" @ pointer to LoadLibraryW
|
||||
ENTR: .ascii "ENTR" @ original entry point
|
||||
BREL: .ascii "BREL" @ start of reloc info
|
||||
FIBS: .ascii "FIBS" @ buffer start for filter
|
||||
FIBE: .ascii "FIBE" @ buffer end for filter
|
||||
CSYN: .ascii "CSYN" @ pointer to CacheSync
|
||||
|
||||
+109
-18
@@ -29,6 +29,32 @@
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
// DEBUG == 0 -> none
|
||||
// DEBUG == 1 -> for armpe_tester
|
||||
// DEBUG == 2 -> wince - dumps memory
|
||||
// DEBUG == 3 -> wince - removes files
|
||||
|
||||
#define DEBUG 0
|
||||
#if DEBUG == 0
|
||||
# define DINIT
|
||||
# define DDUMP(x)
|
||||
# define DDONE
|
||||
#else
|
||||
#define DDUMP(x) stmfd sp!, {r0 - r3}; mov r0, x; mov lr, pc; mov pc, r8; ldmia sp!, {r0 - r3}
|
||||
#if DEBUG == 1
|
||||
#define DINIT mov r8, r0
|
||||
#define DDONE mov pc, lr
|
||||
#elif DEBUG == 2
|
||||
#define DINIT adr r8, writefile
|
||||
#define DDONE
|
||||
#elif DEBUG == 3
|
||||
#define DINIT adr r8, DelFile
|
||||
#define DDONE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
// magic for the UPX linker
|
||||
#define SECT(n) .text 1; .asciz #n; .long n - _start; .text 0; n
|
||||
|
||||
@@ -36,7 +62,7 @@
|
||||
.text 1; .long 0, bl##t - _start; .asciz #t; .long 0; \
|
||||
.text 0; .byte 0, 0, 0; bl##t: .byte 0xeb
|
||||
|
||||
#define DEBUG 0
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
.text
|
||||
.balign 0
|
||||
@@ -51,28 +77,94 @@ SECT(DllStart):
|
||||
bne .Lstart_orig
|
||||
|
||||
SECT(ExeStart):
|
||||
stmfd sp!, {r0 - r9, lr}
|
||||
stmfd sp!, {r0 - r11, lr}
|
||||
DINIT
|
||||
adr r3, SRC0
|
||||
ldmia r3!, {r0, r1, r2} @ r0=src0, r1=slen, r2=dst0, r3=addr dstl
|
||||
ldmia r3, {r4, r10, r11} @ r10=LoadLibraryW, r11=GetProcAddressA
|
||||
mov dst0, r2
|
||||
|
||||
bl ProcessAll
|
||||
mov r0, #4
|
||||
bl CacheSync
|
||||
ldmia sp!, {r0 - r9, lr}
|
||||
bl CacheSync
|
||||
ldmia sp!, {r0 - r11, lr}
|
||||
DDONE
|
||||
.Lstart_orig:
|
||||
ldr pc, ENTR
|
||||
ldr pc, ENTR
|
||||
|
||||
CacheSync:
|
||||
ldr r3, CSYN
|
||||
ldr pc, [r3]
|
||||
ldr pc, IATT + 8
|
||||
|
||||
SRC0: .ascii "SRC0" @ start of compressed data
|
||||
SRCL: .ascii "SRCL" @ compressed length
|
||||
DST0: .ascii "DST0" @ start of uncompressed data
|
||||
DSTL: .ascii "DSTL" @ uncompressed length
|
||||
IATT: .ascii "IATT"; .long 0, 0, 0 @ import address table
|
||||
ENTR: .ascii "ENTR" @ original entry point
|
||||
CSYN: .ascii "CSYN" @ pointer to CacheSync
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
#if DEBUG == 2
|
||||
writefile:
|
||||
stmfd sp!, {r4, r5, r6, r7, lr}
|
||||
mov r1, dst0
|
||||
sub r2, r8, r1
|
||||
add r2, r2, #4096+2048
|
||||
mov r3, #2
|
||||
sub sp, sp, #24
|
||||
mov r4, #0
|
||||
strh r0, [sp, #18]
|
||||
str r3, [sp, #0]
|
||||
mov r0, #128
|
||||
mov r3, #92
|
||||
str r0, [sp, #4]
|
||||
mov r6, r1
|
||||
mov r7, r2
|
||||
strh r3, [sp, #16]
|
||||
strh r4, [sp, #20]
|
||||
mov r3, r4
|
||||
str r4, [sp, #8]
|
||||
mov r1, #1073741824
|
||||
mov r2, #3
|
||||
add r0, sp, #16
|
||||
ldr ip, .L3
|
||||
mov lr, pc
|
||||
mov pc, ip
|
||||
add r3, sp, #12
|
||||
mov r5, r0
|
||||
str r4, [sp, #0]
|
||||
mov r1, r6
|
||||
mov r2, r7
|
||||
ldr ip, .L3+4
|
||||
mov lr, pc
|
||||
mov pc, ip
|
||||
mov r0, r5
|
||||
ldr r3, .L3+8
|
||||
mov lr, pc
|
||||
mov pc, r3
|
||||
add sp, sp, #24
|
||||
ldmfd sp!, {r4, r5, r6, r7, pc}
|
||||
.L3:
|
||||
.word 33135704
|
||||
.word 33135968
|
||||
.word 33137392
|
||||
#endif
|
||||
|
||||
#if DEBUG == 3
|
||||
DelFile:
|
||||
adr r1, filename
|
||||
strb r0, [r1, #2]
|
||||
mov r0, r1
|
||||
ldr pc, deleteffilew
|
||||
|
||||
deleteffilew:
|
||||
.word 0x1f99bc8
|
||||
filename:
|
||||
.byte '\\', 0, 'r', 0, 0, 0
|
||||
.align 2
|
||||
#endif
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
ProcessAll:
|
||||
stmfd sp!, {lr}
|
||||
@@ -97,11 +189,10 @@ SECT(Unfilter_0x50):
|
||||
cmp buffer, bufend
|
||||
beq .Luf_end
|
||||
|
||||
ldrb r3, [buffer, #3]
|
||||
and r3, r3, #0x0f
|
||||
cmp r3, #0x0b
|
||||
bne .Luf50_1
|
||||
ldr r3, [buffer]
|
||||
and r1, r3, #0x0f000000
|
||||
cmp r1, #0x0b000000
|
||||
bne .Luf50_1
|
||||
and r1, r3, #0xff000000
|
||||
sub r3, r3, addval
|
||||
and r3, r3, #0x00ffffff
|
||||
@@ -121,6 +212,7 @@ FIBS: .ascii "FIBS" @ buffer start for filter
|
||||
FIBE: .ascii "FIBE" @ buffer end for filter
|
||||
|
||||
.Luf_end:
|
||||
DDUMP (#'F')
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
@@ -164,6 +256,7 @@ BREL: .ascii "BREL" @ start of reloc info
|
||||
.unreq dest
|
||||
|
||||
.Lreloc_end:
|
||||
DDUMP (#'R')
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
@@ -237,20 +330,17 @@ get_le32: @ optimized for size
|
||||
mov pc, lr
|
||||
|
||||
LoadLibraryW:
|
||||
ldr r3, LLIB
|
||||
ldr pc, [r3]
|
||||
mov pc, r10
|
||||
|
||||
GetProcAddressA:
|
||||
ldr r3, GETP
|
||||
ldr pc, [r3]
|
||||
mov pc, r11
|
||||
|
||||
BIMP: .ascii "BIMP" @ start of import data
|
||||
ONAM: .ascii "ONAM" @ start of dll names
|
||||
GETP: .ascii "GETP" @ pointer to GetProcAddressA
|
||||
LLIB: .ascii "LOAD" @ pointer to LoadLibraryW
|
||||
|
||||
.Lhi_end:
|
||||
add sp, sp, #bufsize
|
||||
DDUMP (#'I')
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
@@ -260,6 +350,7 @@ SECT(ucl_nrv2e_decompress_8):
|
||||
|
||||
SECT(Call2E):
|
||||
BL (ucl_nrv2e_decompress_8)
|
||||
DDUMP (#'C')
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/* l_armpea.h -- created from l_armpea.bin, 952 (0x3b8) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#define NRV_LOADER_ARM_SIZE 952
|
||||
#define NRV_LOADER_ARM_ADLER32 0xd6f275cf
|
||||
#define NRV_LOADER_ARM_CRC32 0x3a603f09
|
||||
|
||||
unsigned char nrv_loader_arm[952] = {
|
||||
1, 0, 81,227, 8, 0, 0, 26,255, 79, 45,233, 32, 48,143,226, /* 0x 0 */
|
||||
7, 0,179,232, 16, 12,147,232, 2,144,160,225, 13, 0, 0,235, /* 0x 10 */
|
||||
4, 0,160,227, 1, 0, 0,235,255, 79,189,232, 32,240,159,229, /* 0x 20 */
|
||||
20,240,159,229, 83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, /* 0x 30 */
|
||||
68, 83, 84, 76, 73, 65, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 40 */
|
||||
0, 0, 0, 0, 69, 78, 84, 82, 0, 64, 45,233, 0,128,189,232, /* 0x 50 */
|
||||
60, 0,159,229, 0, 32,160,227, 56,192,159,229, 12, 0, 80,225, /* 0x 60 */
|
||||
13, 0, 0, 10, 0, 48,144,229, 15, 20, 3,226, 11, 4, 81,227, /* 0x 70 */
|
||||
4, 0, 0, 26,255, 20, 3,226, 2, 48, 67,224,255, 52,195,227, /* 0x 80 */
|
||||
1, 48,131,225, 0, 48,128,229, 4, 0,128,226, 1, 32,130,226, /* 0x 90 */
|
||||
241,255,255,234, 70, 73, 66, 83, 70, 73, 66, 69, 84, 16,159,229, /* 0x a0 */
|
||||
4, 0, 73,226, 1, 48,209,228, 0, 0, 83,227, 18, 0, 0, 10, /* 0x b0 */
|
||||
240, 0, 83,227,240,192,195, 35, 1, 48,209, 37, 12,196,131, 32, /* 0x c0 */
|
||||
2, 48,209, 36, 12, 52,131, 32, 3, 0,128,224, 0, 48,208,229, /* 0x d0 */
|
||||
12,196,131,224, 1, 48,208,229, 12,196,131,224, 2, 48,208,229, /* 0x e0 */
|
||||
12,196,131,224, 3, 48,208,229, 12,196,131,224, 9,192,140,224, /* 0x f0 */
|
||||
0,192,128,229,234,255,255,234, 66, 82, 69, 76, 2,219, 77,226, /* 0x 100 */
|
||||
164, 64,159,229, 4, 0,160,225, 30, 0, 0,235, 40, 0, 0, 10, /* 0x 110 */
|
||||
152, 16,159,229, 1, 0,128,224, 13, 16,160,225, 1, 32,208,228, /* 0x 120 */
|
||||
178, 32,193,224, 0, 0, 82,227,251,255,255, 26, 13, 0,160,225, /* 0x 130 */
|
||||
27, 0, 0,235, 0, 96,160,225, 4, 0,132,226, 17, 0, 0,235, /* 0x 140 */
|
||||
0, 80,137,224, 8, 64,132,226, 1, 0,212,228, 1, 0, 80,227, /* 0x 150 */
|
||||
235,255,255, 74, 4, 0, 0, 26, 4, 16,160,225, 1, 0,212,228, /* 0x 160 */
|
||||
0, 0, 80,227,252,255,255, 26, 2, 0, 0,234, 1, 0,212,228, /* 0x 170 */
|
||||
1, 16,212,228, 1, 20,128,224, 6, 0,160,225, 9, 0, 0,235, /* 0x 180 */
|
||||
4, 0,133,228,239,255,255,234, 3, 32,160,227, 2, 48,208,231, /* 0x 190 */
|
||||
1, 32, 82,226, 1, 20,131,224,251,255,255, 90, 1, 0,176,225, /* 0x 1a0 */
|
||||
14,240,160,225, 10,240,160,225, 11,240,160,225, 66, 73, 77, 80, /* 0x 1b0 */
|
||||
79, 78, 65, 77, 2,219,141,226,252, 64, 45,233, 0,112,129,224, /* 0x 1c0 */
|
||||
0, 80,224,227, 2, 65,160,227, 10, 0, 0,234, 24, 0,189,232, /* 0x 1d0 */
|
||||
7, 0, 64,224, 3, 32, 66,224, 0, 32,132,229,240,128,189,232, /* 0x 1e0 */
|
||||
1, 64,208,228, 4, 64,164,224, 4, 76,176,225, 14,240,160,225, /* 0x 1f0 */
|
||||
1, 48,208,228, 1, 48,194,228, 4, 64,148,224,247,255,255, 11, /* 0x 200 */
|
||||
250,255,255, 42, 1, 16,160,227, 3, 0, 0,234, 1, 16, 65,226, /* 0x 210 */
|
||||
4, 64,148,224,241,255,255, 11, 1, 16,161,224, 4, 64,148,224, /* 0x 220 */
|
||||
238,255,255, 11, 1, 16,161,224, 4, 64,148,224,235,255,255, 11, /* 0x 230 */
|
||||
245,255,255, 58, 3, 48, 81,226, 0, 16,160,227, 6, 0, 0, 58, /* 0x 240 */
|
||||
1, 80,208,228, 3, 84,133,225, 5, 80,240,225,222,255,255, 10, /* 0x 250 */
|
||||
197, 80,176,225, 15, 0, 0, 42, 2, 0, 0,234, 4, 64,148,224, /* 0x 260 */
|
||||
222,255,255, 11, 11, 0, 0, 42, 1, 16,160,227, 4, 64,148,224, /* 0x 270 */
|
||||
218,255,255, 11, 7, 0, 0, 42, 4, 64,148,224,215,255,255, 11, /* 0x 280 */
|
||||
1, 16,161,224, 4, 64,148,224,212,255,255, 11,249,255,255, 58, /* 0x 290 */
|
||||
4, 16,129,226, 3, 0, 0,234, 4, 64,148,224,207,255,255, 11, /* 0x 2a0 */
|
||||
1, 16,161,224, 2, 16,129,226, 5, 12,117,227, 0, 0, 0, 42, /* 0x 2b0 */
|
||||
1, 16,129,226, 0, 48,210,229, 5, 48,210,231, 1, 48,194,228, /* 0x 2c0 */
|
||||
1, 16, 81,226,251,255,255, 26,202,255,255,234, 0, 0, 0,235, /* 0x 2d0 */
|
||||
85, 80, 88, 33,161,216,208,213, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 2e0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, /* 0x 2f0 */
|
||||
68,108,108, 83,116, 97,114,116, 0, 0, 0, 0, 0, 69,120,101, /* 0x 300 */
|
||||
83,116, 97,114,116, 0, 8, 0, 0, 0, 80,114,111, 99,101,115, /* 0x 310 */
|
||||
115, 69,110,100, 0, 92, 0, 0, 0, 85,110,102,105,108,116,101, /* 0x 320 */
|
||||
114, 95, 48,120, 53, 48, 0, 96, 0, 0, 0, 82,101,108,111, 99, /* 0x 330 */
|
||||
115, 0,172, 0, 0, 0, 73,109,112,111,114,116,115, 0, 12, 1, /* 0x 340 */
|
||||
0, 0,117, 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111, /* 0x 350 */
|
||||
109,112,114,101,115,115, 95, 56, 0,200, 1, 0, 0, 67, 97,108, /* 0x 360 */
|
||||
108, 50, 69, 0,220, 2, 0, 0, 0, 0, 0, 0,223, 2, 0, 0, /* 0x 370 */
|
||||
117, 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109,112, /* 0x 380 */
|
||||
114,101,115,115, 95, 56, 0, 0, 0, 0, 0, 85, 80, 88, 49, 72, /* 0x 390 */
|
||||
69, 65, 68, 0,224, 2, 0, 0,101,111,102, 0, 0, 3, 0, 0, /* 0x 3a0 */
|
||||
255,255,255,255, 0, 3, 0, 0 /* 0x 3b0 */
|
||||
};
|
||||
+27
-34
@@ -29,6 +29,8 @@
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
#define DEBUG 0
|
||||
|
||||
// magic for the UPX linker
|
||||
#define SECT(n) .text 1; .asciz #n; .long n - _start; .text 0; n
|
||||
|
||||
@@ -36,7 +38,7 @@
|
||||
.text 1; .long 0, bl##t - _start; .asciz #t; .long 0; \
|
||||
.text 0; .byte 0, 0, 0; bl##t: .byte 0xf8
|
||||
|
||||
#define DEBUG 0
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
.text
|
||||
.balign 0
|
||||
@@ -51,25 +53,25 @@ SECT(DllStart):
|
||||
bne .Lstart_orig
|
||||
|
||||
SECT(ExeStart):
|
||||
stmfd sp!, {r0 - r9, lr}
|
||||
stmfd sp!, {r0 - r11, lr}
|
||||
|
||||
@ touch all pages in ARM mode - this seems to be required
|
||||
@ access all pages in ARM mode - this seems to be required
|
||||
@ otherwise the THUMB mode stuff fails
|
||||
|
||||
adr r3, SRC0
|
||||
ldmia r3, {r5, r6, r7} @ r5=src0, r6=slen, r7=dst0, r3=addr src0
|
||||
add r5, r5, r6
|
||||
.L01:
|
||||
ldmia r3, {r5, r6, r7, r9, r10, r11, ip} @ r7=dst0
|
||||
add r5, pc, #4096 @ r3=addr src0, r10=LoadLibraryW
|
||||
.L01: @ r11=GetProcAddressA, ip=CacheSync
|
||||
ldr r6, [r7]
|
||||
add r7, r7, #4096
|
||||
cmp r7, r5
|
||||
bls .L01
|
||||
|
||||
adr ip, ProcessAll + 1
|
||||
adr r4, ProcessAll + 1
|
||||
mov lr, pc
|
||||
bx ip
|
||||
bx r4
|
||||
|
||||
ldmfd sp!, {r0 - r9, lr}
|
||||
ldmfd sp!, {r0 - r11, lr}
|
||||
.Lstart_orig:
|
||||
ldr ip, ENTR
|
||||
bx ip
|
||||
@@ -78,18 +80,16 @@ SRC0: .ascii "SRC0" @ start of compressed data
|
||||
SRCL: .ascii "SRCL" @ compressed length
|
||||
DST0: .ascii "DST0" @ start of uncompressed data
|
||||
DSTL: .ascii "DSTL" @ uncompressed length
|
||||
IATT: .ascii "IATT"; .long 0, 0, 0 @ import address table
|
||||
ENTR: .ascii "ENTR" @ original entry point
|
||||
CSYN: .ascii "CSYN" @ pointer to CacheSync
|
||||
|
||||
.thumb
|
||||
|
||||
ProcessAll:
|
||||
ldmia r3!, {r0, r1, r2, r5, r6, r7} @ r0=src0, r1=slen, r2=dst0, r7=csyn
|
||||
sub r3, #12
|
||||
ldmia r3!, {r0, r1, r2} @ r0=src0, r1=slen, r2=dst0, r3=addr dstl
|
||||
mov dst0, r2
|
||||
ldr r7, [r7]
|
||||
mov r6, #4 @ parameter of CacheSync
|
||||
push {r6, r7, lr}
|
||||
mov r4, ip @ CacheSync
|
||||
push {r4, lr}
|
||||
.align 2
|
||||
|
||||
@@ uncompress/unfilter/imports/relocs are copied here by the upx linker
|
||||
@@ -113,11 +113,11 @@ SECT(Unfilter_0x50):
|
||||
cmp buffer, bufend
|
||||
beq .Luf50_ret
|
||||
|
||||
ldrb r3, [buffer, #3]
|
||||
and r3, r5
|
||||
cmp r3, #0x0b
|
||||
bne .Luf50_1
|
||||
ldr r3, [buffer]
|
||||
lsr r1, r3, #24
|
||||
and r1, r5
|
||||
cmp r1, #0x0b
|
||||
bne .Luf50_1
|
||||
mov r1, r3
|
||||
and r1, r6
|
||||
sub r3, addval
|
||||
@@ -223,7 +223,6 @@ SECT(Imports):
|
||||
|
||||
mov r0, sp
|
||||
bl LoadLibraryW
|
||||
|
||||
mov dll, r0
|
||||
add r0, imp, #4
|
||||
bl get_le32
|
||||
@@ -256,8 +255,7 @@ SECT(Imports):
|
||||
.Lhi_call_gpa:
|
||||
mov r0, dll
|
||||
bl GetProcAddressA
|
||||
str r0, [iat]
|
||||
add iat, #4
|
||||
stmia iat!, {r0}
|
||||
b .Lhi_gpa_loop
|
||||
|
||||
.unreq iat
|
||||
@@ -275,21 +273,15 @@ get_le32: @ optimized for size
|
||||
mov r0, r2 @ sets the Z flag if zero
|
||||
bx lr
|
||||
|
||||
GetProcAddressA:
|
||||
ldr r3, GETP
|
||||
.Lcallr3:
|
||||
ldr r3, [r3]
|
||||
bx r3
|
||||
|
||||
LoadLibraryW:
|
||||
ldr r3, LLIB
|
||||
b .Lcallr3
|
||||
bx r10
|
||||
|
||||
GetProcAddressA:
|
||||
bx r11
|
||||
|
||||
.align 2
|
||||
BIMP: .ascii "BIMP" @ start of import data
|
||||
ONAM: .ascii "ONAM" @ start of dll names
|
||||
GETP: .ascii "GETP" @ pointer to GetProcAddressA
|
||||
LLIB: .ascii "LOAD" @ pointer to LoadLibraryW
|
||||
|
||||
.Lhi_end:
|
||||
mov sp, r7
|
||||
@@ -297,9 +289,10 @@ LLIB: .ascii "LOAD" @ pointer to LoadLibraryW
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
SECT(ProcessEnd):
|
||||
pop {r0, r1, r2} @ r0=4, r1=csyn, r2=lr
|
||||
pop {r1, r2} @ r1=CacheSync, r2=lr
|
||||
mov r0, #4 @ parameter of CacheSync
|
||||
mov lr, r2
|
||||
bx r1 @ jump to CacheSync
|
||||
bx r1
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
/* l_armpet.h -- created from l_armpet.bin, 1000 (0x3e8) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2006 Laszlo Molnar
|
||||
Copyright (C) 2000-2006 John F. Reiser
|
||||
All Rights Reserved.
|
||||
|
||||
UPX and the UCL library are free software; you can redistribute them
|
||||
and/or modify them under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING.
|
||||
If not, write to the Free Software Foundation, Inc.,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Markus F.X.J. Oberhumer Laszlo Molnar
|
||||
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#define NRV_LOADER_THUMB_SIZE 1000
|
||||
#define NRV_LOADER_THUMB_ADLER32 0x4f344c3e
|
||||
#define NRV_LOADER_THUMB_CRC32 0xe1803a67
|
||||
|
||||
unsigned char nrv_loader_thumb[1000] = {
|
||||
1, 0, 81,227, 11, 0, 0, 26,255, 79, 45,233, 44, 48,143,226, /* 0x 0 */
|
||||
224, 30,147,232, 1, 90,143,226, 0, 96,151,229, 1,122,135,226, /* 0x 10 */
|
||||
5, 0, 87,225,251,255,255,154, 53, 64,143,226, 15,224,160,225, /* 0x 20 */
|
||||
20,255, 47,225,255, 79,189,232, 32,192,159,229, 28,255, 47,225, /* 0x 30 */
|
||||
83, 82, 67, 48, 83, 82, 67, 76, 68, 83, 84, 48, 68, 83, 84, 76, /* 0x 40 */
|
||||
73, 65, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 50 */
|
||||
69, 78, 84, 82, 7,203,145, 70,100, 70, 16,181, 11, 72, 0, 34, /* 0x 60 */
|
||||
11, 76, 15, 37,255, 38, 54, 6,247, 67,160, 66, 18,208, 3,104, /* 0x 70 */
|
||||
25, 14, 41, 64, 11, 41, 5,209, 25, 28, 49, 64,155, 26, 59, 64, /* 0x 80 */
|
||||
11, 67, 3, 96, 4, 48, 1, 50,239,231, 0, 0, 70, 73, 66, 83, /* 0x 90 */
|
||||
70, 73, 66, 69, 14, 72, 74, 70, 17, 31, 3,120, 1, 48, 0, 43, /* 0x a0 */
|
||||
24,208,240, 43, 8,211, 15, 36, 28, 64, 67,120, 36, 2,228, 24, /* 0x b0 */
|
||||
3,120, 2, 48, 36, 2, 27, 25,201, 24, 0, 37, 75, 93, 36, 2, /* 0x c0 */
|
||||
228, 24, 1, 53, 4, 45,249,209,164, 24, 12, 96,229,231, 0, 0, /* 0x d0 */
|
||||
66, 82, 69, 76,111, 70,255,176,255,176,255,176,255,176, 27, 76, /* 0x e0 */
|
||||
32, 28, 0,240, 41,248, 53,208, 25, 73, 64, 24,105, 70, 2,120, /* 0x f0 */
|
||||
1, 48, 10,128, 2, 49, 0, 42,249,209,104, 70, 0,240, 36,248, /* 0x 100 */
|
||||
6, 28, 32, 29, 0,240, 24,248, 77, 70, 45, 24, 8, 52, 32,120, /* 0x 110 */
|
||||
1, 52, 1, 40,228,212, 5,209, 33, 28, 32,120, 1, 52, 0, 40, /* 0x 120 */
|
||||
251,209, 4,224, 32,120, 97,120, 2, 52, 9, 2, 9, 24, 48, 28, /* 0x 130 */
|
||||
0,240, 11,248, 1,197,234,231, 3, 33, 67, 92, 18, 2,210, 24, /* 0x 140 */
|
||||
1, 57,250,213, 16, 28,112, 71, 80, 71, 88, 71, 66, 73, 77, 80, /* 0x 150 */
|
||||
79, 78, 65, 77,189, 70, 6,188, 4, 32,150, 70, 8, 71, 0, 0, /* 0x 160 */
|
||||
1,192,143,226, 28,255, 47,225, 9, 24,254,181, 1, 36,101, 66, /* 0x 170 */
|
||||
228, 7, 13, 39, 63, 2, 15,224, 26,188, 64, 26,210, 26, 34, 96, /* 0x 180 */
|
||||
240,188, 2,188, 8, 71, 4,120,100, 65, 1, 48, 36, 6,247, 70, /* 0x 190 */
|
||||
3,120, 1, 48, 19,112, 1, 50, 36, 25,254, 70,243,208,247,210, /* 0x 1a0 */
|
||||
1, 33, 36, 25,254, 70,238,208, 73, 65, 36, 25,254, 70,234,208, /* 0x 1b0 */
|
||||
247,211,203, 30, 0, 33, 5,211, 27, 2, 5,120, 1, 48, 29, 67, /* 0x 1c0 */
|
||||
237, 67,217,208, 36, 25,254, 70,221,208, 73, 65, 36, 25,254, 70, /* 0x 1d0 */
|
||||
217,208, 73, 65, 9,209, 1, 33, 36, 25,254, 70,211,208, 73, 65, /* 0x 1e0 */
|
||||
36, 25,254, 70,207,208,247,211, 2, 49, 1, 49,253, 66, 0,210, /* 0x 1f0 */
|
||||
1, 49, 19,120, 83, 93, 19,112, 1, 50, 1, 57,250,209,203,231, /* 0x 200 */
|
||||
0, 0, 0,248, 1,192,143,226, 28,255, 47,225,252,181, 15, 24, /* 0x 210 */
|
||||
1, 36,101, 66,228, 7, 5, 38, 54, 2, 15,224, 24,188,192, 27, /* 0x 220 */
|
||||
210, 26, 34, 96,240,188, 2,188, 8, 71, 4,120,100, 65, 1, 48, /* 0x 230 */
|
||||
36, 6,247, 70, 3,120, 1, 48, 19,112, 1, 50, 36, 25,254, 70, /* 0x 240 */
|
||||
243,208,247,210, 1, 33, 4,224, 1, 57, 36, 25,254, 70,236,208, /* 0x 250 */
|
||||
73, 65, 36, 25,254, 70,232,208, 73, 65, 36, 25,254, 70,228,208, /* 0x 260 */
|
||||
242,211,203, 30, 0, 33, 8,211, 27, 2, 5,120, 1, 48, 29, 67, /* 0x 270 */
|
||||
237, 67,211,208,109, 16, 19,210, 3,224, 36, 25,254, 70,212,208, /* 0x 280 */
|
||||
14,210, 1, 33, 36, 25,254, 70,207,208, 9,210, 36, 25,254, 70, /* 0x 290 */
|
||||
203,208, 73, 65, 36, 25,254, 70,199,208,247,211, 4, 49, 4,224, /* 0x 2a0 */
|
||||
36, 25,254, 70,193,208, 73, 65, 2, 49,238, 66, 0,210, 1, 49, /* 0x 2b0 */
|
||||
19,120, 83, 93, 19,112, 1, 50, 1, 57,250,209,190,231, 0, 0, /* 0x 2c0 */
|
||||
0,248, 85, 80, 88, 33,161,216,208,213, 0, 0, 0, 0, 0, 0, /* 0x 2d0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 2e0 */
|
||||
0, 45, 0, 0, 68,108,108, 83,116, 97,114,116, 0, 0, 0, 0, /* 0x 2f0 */
|
||||
0, 69,120,101, 83,116, 97,114,116, 0, 8, 0, 0, 0, 85,110, /* 0x 300 */
|
||||
102,105,108,116,101,114, 95, 48,120, 53, 48, 0,108, 0, 0, 0, /* 0x 310 */
|
||||
82,101,108,111, 99,115, 0,164, 0, 0, 0, 73,109,112,111,114, /* 0x 320 */
|
||||
116,115, 0,228, 0, 0, 0, 80,114,111, 99,101,115,115, 69,110, /* 0x 330 */
|
||||
100, 0,102, 1, 0, 0,100,117,109,109,121, 48, 0,110, 1, 0, /* 0x 340 */
|
||||
0,103,111, 95,116,104,117,109, 98, 95,110, 50, 98, 0,120, 1, /* 0x 350 */
|
||||
0, 0, 67, 97,108,108, 50, 66, 0, 16, 2, 0, 0, 0, 0, 0, /* 0x 360 */
|
||||
0, 19, 2, 0, 0,103,111, 95,116,104,117,109, 98, 95,110, 50, /* 0x 370 */
|
||||
98, 0, 0, 0, 0, 0,100,117,109,109,121, 49, 0, 20, 2, 0, /* 0x 380 */
|
||||
0,116,104,117,109, 98, 95,110,114,118, 50,101, 95,100, 56, 0, /* 0x 390 */
|
||||
28, 2, 0, 0, 67, 97,108,108, 50, 69, 0,206, 2, 0, 0, 0, /* 0x 3a0 */
|
||||
0, 0, 0,209, 2, 0, 0,116,104,117,109, 98, 95,110,114,118, /* 0x 3b0 */
|
||||
50,101, 95,100, 56, 0, 0, 0, 0, 0, 85, 80, 88, 49, 72, 69, /* 0x 3c0 */
|
||||
65, 68, 0,210, 2, 0, 0,101,111,102, 0,244, 2, 0, 0,255, /* 0x 3d0 */
|
||||
255,255,255,244, 2, 0, 0, 0 /* 0x 3e0 */
|
||||
};
|
||||
+62
-3
@@ -35,10 +35,45 @@
|
||||
SECTION .text
|
||||
CPU 8086
|
||||
|
||||
; __DEVICEENTRY__
|
||||
|
||||
dd -1
|
||||
dw 0
|
||||
dw strategy ; .sys header
|
||||
dw 0 ; opendos wants this field untouched
|
||||
original_strategy:
|
||||
dw 'ST'
|
||||
strategy:
|
||||
push cs
|
||||
push word [cs:original_strategy]
|
||||
push ax
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
mov ax, cs
|
||||
add ax, 'OS' ; calculate normal EXE stack
|
||||
mov bx, 'OP'
|
||||
mov cx, ss
|
||||
mov dx, sp
|
||||
mov ss, ax ; switch to stack EXE normally has
|
||||
mov sp, bx
|
||||
push cx ; save device stack on EXE stack
|
||||
push dx
|
||||
push si
|
||||
push di
|
||||
push bp
|
||||
push ds
|
||||
push es
|
||||
db 0x72 ; "jc 0xf9" but flag C is 0 => nop
|
||||
exe_as_device_entry:
|
||||
stc ; flag C is 1
|
||||
pushf
|
||||
|
||||
; =============
|
||||
; ============= ENTRY POINT
|
||||
; =============
|
||||
; __EXEENTRY__
|
||||
exe_entry:
|
||||
mov cx, 'CX' ; first_copy_len/2
|
||||
mov si, 'SI' ; cx*2-2
|
||||
mov di, si
|
||||
@@ -47,7 +82,8 @@
|
||||
do_copy:
|
||||
mov ch, 0x80 ; 64 kbyte
|
||||
mov ax, cs
|
||||
add ax, 'DS'
|
||||
addaxds:
|
||||
add ax, 'DS' ; MSB is referenced by the "sub" below
|
||||
mov ds, ax
|
||||
add ax, 'ES'
|
||||
mov es, ax
|
||||
@@ -56,8 +92,11 @@ do_copy:
|
||||
rep
|
||||
movsw
|
||||
cld
|
||||
|
||||
sub [byte cs:si+do_copy+6+2], byte 0x10
|
||||
; __DEVICESUB__
|
||||
sub [byte cs:si + addaxds + 4], byte 0x10
|
||||
; __EXESUB__
|
||||
sub [byte cs:si + addaxds - exe_entry + 4], byte 0x10
|
||||
; __JNCDOCOPY__
|
||||
jnc do_copy
|
||||
xchg ax, dx
|
||||
scasw
|
||||
@@ -152,6 +191,26 @@ reloc_5:
|
||||
pop es
|
||||
push es
|
||||
pop ds
|
||||
|
||||
; __DEVICEEND__
|
||||
popf
|
||||
jc loaded_as_exe
|
||||
pop es
|
||||
pop ds
|
||||
pop bp
|
||||
pop di
|
||||
pop si
|
||||
pop bx ; get original device SS:SP
|
||||
pop ax
|
||||
mov ss, ax ; switch to device driver stack
|
||||
mov sp, bx
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
pop ax
|
||||
retf ; return to original strategy
|
||||
|
||||
loaded_as_exe:
|
||||
%ifdef __EXESTACK__
|
||||
lea ax, ['SS'+bp]
|
||||
mov ss, ax
|
||||
|
||||
+154
-144
@@ -1,4 +1,4 @@
|
||||
/* l_exe.h -- created from l_exe.bin, 2215 (0x8a7) bytes
|
||||
/* l_exe.h -- created from l_exe.bin, 2377 (0x949) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,148 +27,158 @@
|
||||
*/
|
||||
|
||||
|
||||
#define NRV_LOADER_SIZE 2215
|
||||
#define NRV_LOADER_ADLER32 0x4b5438fc
|
||||
#define NRV_LOADER_CRC32 0x250186be
|
||||
#define NRV_LOADER_SIZE 2377
|
||||
#define NRV_LOADER_ADLER32 0xe8176e1e
|
||||
#define NRV_LOADER_CRC32 0x723ae5c1
|
||||
|
||||
unsigned char nrv_loader[2215] = {
|
||||
185, 67, 88,190, 83, 73,137,247, 30,169,181,128,140,200, 5, 68, /* 0x 0 */
|
||||
83,142,216, 5, 69, 83,142,192,253,243,165,252, 46,128,108, 18, /* 0x 10 */
|
||||
16,115,231,146,175,173, 14, 14, 14, 6, 31, 7, 22,189, 66, 80, /* 0x 20 */
|
||||
187, 66, 88, 85,203, 85, 80, 88, 33,161,216,208,213, 0, 0, 0, /* 0x 30 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, /* 0x 40 */
|
||||
164, 0,255,117, 3,232, 0, 0,114,246, 65,140,192, 1,255,115, /* 0x 50 */
|
||||
5,128,196, 8,142,192,209,239,232, 0, 0,227, 0,115,249, 73, /* 0x 60 */
|
||||
73,116, 0, 1,201, 1,201, 1,201, 1,201,193,225, 4,137,205, /* 0x 70 */
|
||||
138, 28, 70,246,211, 49,201,232, 0, 0, 17,201,117, 8, 65,232, /* 0x 80 */
|
||||
0, 0,115,251, 65, 65,129,253,209, 0,131,217,254, 41,232,114, /* 0x 90 */
|
||||
14,142,216,141, 1, 40,252,150,243,164,150,142,218,235, 0,209, /* 0x a0 */
|
||||
224,209,224,209,224,209,224, 80, 49,192,142,216, 88,193,224, 4, /* 0x b0 */
|
||||
106, 0, 31, 1,216, 1,248,235, 0, 0,255,117, 3,232, 6, 0, /* 0x c0 */
|
||||
17,201, 0,255,117, 0,138, 60, 17,246,115, 5,128,198, 8,142, /* 0x d0 */
|
||||
218,209,238, 70, 16,255,195,164, 0,255,117, 3,232, 0, 0,114, /* 0x e0 */
|
||||
246, 65,140,192, 1,255,115, 5,128,196, 8,142,192,209,239,232, /* 0x f0 */
|
||||
0, 0,114, 10, 73,232, 0, 0, 17,201,121,243,235, 0, 73, 73, /* 0x 100 */
|
||||
116, 0, 1,201, 1,201, 1,201,193,225, 3,137,205,138, 28, 70, /* 0x 110 */
|
||||
246,211, 49,201,208,235,235, 3,232, 0, 0, 17,201,232, 0, 0, /* 0x 120 */
|
||||
17,201,117, 8, 65,232, 0, 0,115,251, 65, 65,131,253, 81,131, /* 0x 130 */
|
||||
217,254, 41,232,114, 14,142,216,141, 1, 40,252,150,243,164,150, /* 0x 140 */
|
||||
142,218,235, 0,209,224,209,224,209,224,209,224, 80, 49,192,142, /* 0x 150 */
|
||||
216, 88,193,224, 4,106, 0, 31, 1,216, 1,248,235, 0, 0,255, /* 0x 160 */
|
||||
117, 3,232, 6, 0, 17,201, 0,255,117, 0,138, 60, 17,246,115, /* 0x 170 */
|
||||
5,128,198, 8,142,218,209,238, 70, 16,255,195,164, 0,255,117, /* 0x 180 */
|
||||
3,232, 0, 0,114,246, 65,140,192, 1,255,115, 5,128,196, 8, /* 0x 190 */
|
||||
142,192,209,239,232, 0, 0,114, 10, 73,232, 0, 0, 17,201,121, /* 0x 1a0 */
|
||||
243,235, 0, 73, 73,116, 0, 1,201, 1,201, 1,201,193,225, 3, /* 0x 1b0 */
|
||||
137,205,138, 28, 70,246,211, 49,201,208,235,115, 12,232, 0, 0, /* 0x 1c0 */
|
||||
17,201,235, 18,232, 0, 0,114,244, 65,232, 0, 0,114,238,232, /* 0x 1d0 */
|
||||
0, 0,115,251, 65, 65,131,253, 81,131,217,253, 41,232,114, 14, /* 0x 1e0 */
|
||||
142,216,141, 1, 40,252,150,243,164,150,142,218,235, 0,209,224, /* 0x 1f0 */
|
||||
209,224,209,224,209,224, 80, 49,192,142,216, 88,193,224, 4,106, /* 0x 200 */
|
||||
0, 31, 1,216, 1,248,235, 0, 0,255,117, 3,232, 6, 0, 17, /* 0x 210 */
|
||||
201, 0,255,117, 0,138, 60, 17,246,115, 5,128,198, 8,142,218, /* 0x 220 */
|
||||
209,238, 70, 16,255,195, 93,140,192,128,236, 6,142,216, 6, 31, /* 0x 230 */
|
||||
141,181, 82, 83,173, 91,145,173,146,173,151,173, 1,195,142,195, /* 0x 240 */
|
||||
49,192, 1,199, 38, 1, 45,172, 72,116, 0, 64,117,244, 71, 71, /* 0x 250 */
|
||||
38,128, 61,154,117,249, 38, 57, 85, 3,119,243,176, 3,235, 0, /* 0x 260 */
|
||||
129,199,254, 0,114, 0,226, 0, 7, 6, 31,141,134, 83, 83,142, /* 0x 270 */
|
||||
208,188, 83, 80,234, 73, 80, 67, 83,129,197, 67, 83, 85,184, 73, /* 0x 280 */
|
||||
80, 80,203, 0, 69, 88, 69, 69, 78, 84, 82, 89, 0, 0, 0, 0, /* 0x 290 */
|
||||
0, 69, 88, 69, 82, 69, 76, 80, 85, 0, 38, 0, 0, 0, 69, 88, /* 0x 2a0 */
|
||||
69, 77, 65, 73, 78, 52, 0, 39, 0, 0, 0, 85, 80, 88, 49, 72, /* 0x 2b0 */
|
||||
69, 65, 68, 0, 53, 0, 0, 0, 69, 88, 69, 67, 85, 84, 80, 79, /* 0x 2c0 */
|
||||
0, 80, 0, 0, 0, 78, 82, 86, 50, 66, 49, 54, 83, 0, 80, 0, /* 0x 2d0 */
|
||||
0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 78, 82, 86, 50, 66, 69, /* 0x 2e0 */
|
||||
88, 51, 0, 19, 0, 0, 0, 78, 50, 66, 54, 52, 75, 48, 49, 0, /* 0x 2f0 */
|
||||
93, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 49, 0,104, 0, 0, /* 0x 300 */
|
||||
0, 0, 0, 0, 0,107, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, /* 0x 310 */
|
||||
51, 0, 6, 0, 0, 0, 0, 0, 0, 0,109, 0, 0, 0, 78, 82, /* 0x 320 */
|
||||
86, 50, 66, 69, 88, 57, 0, 4, 0, 0, 0, 0, 0, 0, 0,115, /* 0x 330 */
|
||||
0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 50, 0, 9, 0, 0, 0, /* 0x 340 */
|
||||
78, 50, 66, 88, 56, 54, 48, 49, 0,115, 0, 0, 0, 78, 50, 66, /* 0x 350 */
|
||||
50, 56, 54, 48, 49, 0,123, 0, 0, 0, 78, 82, 86, 50, 66, 69, /* 0x 360 */
|
||||
88, 50, 0,126, 0, 0, 0, 0, 0, 0, 0,138, 0, 0, 0, 78, /* 0x 370 */
|
||||
82, 86, 50, 66, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0, /* 0x 380 */
|
||||
146, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0, 6, 0, 0, /* 0x 390 */
|
||||
0, 0, 0, 0, 0,175, 0, 0, 0, 78, 82, 86, 50, 66, 49, 54, /* 0x 3a0 */
|
||||
83, 0, 1, 0, 0, 0, 78, 50, 66, 88, 56, 54, 48, 50, 0,175, /* 0x 3b0 */
|
||||
0, 0, 0, 78, 50, 66, 50, 56, 54, 48, 50, 0,189, 0, 0, 0, /* 0x 3c0 */
|
||||
78, 82, 86, 50, 66, 69, 88, 51, 0,195, 0, 0, 0, 0, 0, 0, /* 0x 3d0 */
|
||||
0,201, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 50, 0, 39, 0, /* 0x 3e0 */
|
||||
0, 0, 0, 0, 0, 0,214, 0, 0, 0, 78, 82, 86, 50, 66, 69, /* 0x 3f0 */
|
||||
88, 57, 0, 3, 0, 0, 0, 78, 50, 66, 54, 52, 75, 48, 50, 0, /* 0x 400 */
|
||||
216, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 57, 0,227, 0, 0, /* 0x 410 */
|
||||
0, 78, 82, 86, 50, 66, 49, 54, 69, 0,231, 0, 0, 0, 78, 82, /* 0x 420 */
|
||||
86, 50, 68, 49, 54, 83, 0,231, 0, 0, 0, 0, 0, 0, 0,239, /* 0x 430 */
|
||||
0, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 19, 0, 0, 0, /* 0x 440 */
|
||||
78, 50, 68, 54, 52, 75, 48, 49, 0,244, 0, 0, 0, 78, 82, 86, /* 0x 450 */
|
||||
50, 68, 69, 88, 49, 0,255, 0, 0, 0, 0, 0, 0, 0, 2, 1, /* 0x 460 */
|
||||
0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 6, 0, 0, 0, 0, /* 0x 470 */
|
||||
0, 0, 0, 8, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, /* 0x 480 */
|
||||
15, 0, 0, 0, 0, 0, 0, 0, 14, 1, 0, 0, 78, 82, 86, 50, /* 0x 490 */
|
||||
68, 69, 88, 57, 0, 4, 0, 0, 0, 0, 0, 0, 0, 18, 1, 0, /* 0x 4a0 */
|
||||
0, 78, 82, 86, 50, 68, 69, 88, 50, 0, 13, 0, 0, 0, 78, 50, /* 0x 4b0 */
|
||||
68, 88, 56, 54, 48, 49, 0, 18, 1, 0, 0, 78, 50, 68, 50, 56, /* 0x 4c0 */
|
||||
54, 48, 49, 0, 24, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 50, /* 0x 4d0 */
|
||||
0, 27, 1, 0, 0, 0, 0, 0, 0, 43, 1, 0, 0, 78, 82, 86, /* 0x 4e0 */
|
||||
50, 68, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 48, 1, /* 0x 4f0 */
|
||||
0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 15, 0, 0, 0, 0, /* 0x 500 */
|
||||
0, 0, 0, 56, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, /* 0x 510 */
|
||||
6, 0, 0, 0, 0, 0, 0, 0, 84, 1, 0, 0, 78, 82, 86, 50, /* 0x 520 */
|
||||
68, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, 68, 88, 56, 54, 48, /* 0x 530 */
|
||||
50, 0, 84, 1, 0, 0, 78, 50, 68, 50, 56, 54, 48, 50, 0, 98, /* 0x 540 */
|
||||
1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0,104, 1, 0, 0, /* 0x 550 */
|
||||
0, 0, 0, 0,110, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 50, /* 0x 560 */
|
||||
0, 47, 0, 0, 0, 0, 0, 0, 0,123, 1, 0, 0, 78, 82, 86, /* 0x 570 */
|
||||
50, 68, 69, 88, 57, 0, 3, 0, 0, 0, 78, 50, 68, 54, 52, 75, /* 0x 580 */
|
||||
48, 50, 0,125, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 57, 0, /* 0x 590 */
|
||||
136, 1, 0, 0, 78, 82, 86, 50, 68, 49, 54, 69, 0,140, 1, 0, /* 0x 5a0 */
|
||||
0, 78, 82, 86, 50, 69, 49, 54, 83, 0,140, 1, 0, 0, 0, 0, /* 0x 5b0 */
|
||||
0, 0,148, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 19, /* 0x 5c0 */
|
||||
0, 0, 0, 78, 50, 69, 54, 52, 75, 48, 49, 0,153, 1, 0, 0, /* 0x 5d0 */
|
||||
78, 82, 86, 50, 69, 69, 88, 49, 0,164, 1, 0, 0, 0, 0, 0, /* 0x 5e0 */
|
||||
0,167, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 6, 0, /* 0x 5f0 */
|
||||
0, 0, 0, 0, 0, 0,173, 1, 0, 0, 78, 82, 86, 50, 69, 69, /* 0x 600 */
|
||||
88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 78, /* 0x 610 */
|
||||
82, 86, 50, 69, 69, 88, 57, 0, 4, 0, 0, 0, 0, 0, 0, 0, /* 0x 620 */
|
||||
183, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, 0, 20, 0, 0, /* 0x 630 */
|
||||
0, 78, 50, 69, 88, 56, 54, 48, 49, 0,183, 1, 0, 0, 78, 50, /* 0x 640 */
|
||||
69, 50, 56, 54, 48, 49, 0,189, 1, 0, 0, 78, 82, 86, 50, 69, /* 0x 650 */
|
||||
69, 88, 50, 0,192, 1, 0, 0, 0, 0, 0, 0,208, 1, 0, 0, /* 0x 660 */
|
||||
78, 82, 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, /* 0x 670 */
|
||||
0,215, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 15, 0, /* 0x 680 */
|
||||
0, 0, 0, 0, 0, 0,221, 1, 0, 0, 78, 82, 86, 50, 69, 69, /* 0x 690 */
|
||||
88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0,226, 1, 0, 0, 78, /* 0x 6a0 */
|
||||
82, 86, 50, 69, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0, /* 0x 6b0 */
|
||||
254, 1, 0, 0, 78, 82, 86, 50, 69, 49, 54, 83, 0, 1, 0, 0, /* 0x 6c0 */
|
||||
0, 78, 50, 69, 88, 56, 54, 48, 50, 0,254, 1, 0, 0, 78, 50, /* 0x 6d0 */
|
||||
69, 50, 56, 54, 48, 50, 0, 12, 2, 0, 0, 78, 82, 86, 50, 69, /* 0x 6e0 */
|
||||
69, 88, 51, 0, 18, 2, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0, /* 0x 6f0 */
|
||||
78, 82, 86, 50, 69, 69, 88, 50, 0, 52, 0, 0, 0, 0, 0, 0, /* 0x 700 */
|
||||
0, 37, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0, 3, 0, /* 0x 710 */
|
||||
0, 0, 78, 50, 69, 54, 52, 75, 48, 50, 0, 39, 2, 0, 0, 78, /* 0x 720 */
|
||||
82, 86, 50, 69, 69, 88, 57, 0, 50, 2, 0, 0, 78, 82, 86, 50, /* 0x 730 */
|
||||
69, 49, 54, 69, 0, 54, 2, 0, 0, 69, 88, 69, 77, 65, 73, 78, /* 0x 740 */
|
||||
53, 0, 54, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 67, 0, 55, /* 0x 750 */
|
||||
2, 0, 0, 69, 88, 69, 65, 68, 74, 85, 83, 0, 55, 2, 0, 0, /* 0x 760 */
|
||||
69, 88, 69, 78, 79, 65, 68, 74, 0, 62, 2, 0, 0, 69, 88, 69, /* 0x 770 */
|
||||
82, 69, 76, 79, 49, 0, 64, 2, 0, 0, 0, 0, 0, 0, 91, 2, /* 0x 780 */
|
||||
0, 0, 69, 88, 69, 82, 69, 76, 79, 50, 0, 0, 0, 0, 0, 69, /* 0x 790 */
|
||||
88, 69, 82, 69, 76, 57, 65, 0, 94, 2, 0, 0, 0, 0, 0, 0, /* 0x 7a0 */
|
||||
112, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, 0, 18, 0, 0, /* 0x 7b0 */
|
||||
0, 69, 88, 69, 82, 69, 76, 79, 50, 0,112, 2, 0, 0, 69, 88, /* 0x 7c0 */
|
||||
69, 82, 69, 66, 73, 71, 0,116, 2, 0, 0, 0, 0, 0, 0,118, /* 0x 7d0 */
|
||||
2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, 0, 9, 0, 0, 0, /* 0x 7e0 */
|
||||
69, 88, 69, 82, 69, 76, 79, 51, 0,118, 2, 0, 0, 0, 0, 0, /* 0x 7f0 */
|
||||
0,120, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, 0, 23, 0, /* 0x 800 */
|
||||
0, 0, 69, 88, 69, 77, 65, 73, 78, 56, 0,120, 2, 0, 0, 69, /* 0x 810 */
|
||||
88, 69, 83, 84, 65, 67, 75, 0,123, 2, 0, 0, 69, 88, 69, 68, /* 0x 820 */
|
||||
85, 77, 77, 83, 0,129, 2, 0, 0, 69, 88, 69, 83, 84, 65, 83, /* 0x 830 */
|
||||
80, 0,129, 2, 0, 0, 69, 88, 69, 68, 85, 77, 77, 80, 0,132, /* 0x 840 */
|
||||
2, 0, 0, 69, 88, 69, 74, 85, 77, 80, 70, 0,132, 2, 0, 0, /* 0x 850 */
|
||||
69, 88, 69, 82, 69, 84, 85, 82, 0,137, 2, 0, 0, 69, 88, 69, /* 0x 860 */
|
||||
82, 67, 83, 80, 79, 0,137, 2, 0, 0, 69, 88, 69, 82, 69, 84, /* 0x 870 */
|
||||
73, 80, 0,141, 2, 0, 0, 69, 88, 69, 68, 85, 77, 77, 90, 0, /* 0x 880 */
|
||||
147, 2, 0, 0, 69, 88, 69, 84, 72, 69, 78, 68, 0,147, 2, 0, /* 0x 890 */
|
||||
0,255,255,255,255,147, 2 /* 0x 8a0 */
|
||||
unsigned char nrv_loader[2377] = {
|
||||
255,255,255,255, 0, 0, 12, 0, 0, 0, 83, 84, 14, 46,255, 54, /* 0x 0 */
|
||||
10, 0, 80, 83, 81, 82,140,200, 5, 79, 83,187, 79, 80,140,209, /* 0x 10 */
|
||||
137,226,142,208,137,220, 81, 82, 86, 87, 85, 30, 6,114,249,156, /* 0x 20 */
|
||||
185, 67, 88,190, 83, 73,137,247, 30,169,181,128,140,200, 5, 68, /* 0x 30 */
|
||||
83,142,216, 5, 69, 83,142,192,253,243,165,252, 46,128,108, 66, /* 0x 40 */
|
||||
16, 46,128,108, 18, 16,115, 0,146,175,173, 14, 14, 14, 6, 31, /* 0x 50 */
|
||||
7, 22,189, 66, 80,187, 66, 88, 85,203, 85, 80, 88, 33,161,216, /* 0x 60 */
|
||||
208,213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
|
||||
0, 0, 0, 0, 45,164, 0,255,117, 3,232, 0, 0,114,246, 65, /* 0x 80 */
|
||||
140,192, 1,255,115, 5,128,196, 8,142,192,209,239,232, 0, 0, /* 0x 90 */
|
||||
227, 0,115,249, 73, 73,116, 0, 1,201, 1,201, 1,201, 1,201, /* 0x a0 */
|
||||
193,225, 4,137,205,138, 28, 70,246,211, 49,201,232, 0, 0, 17, /* 0x b0 */
|
||||
201,117, 8, 65,232, 0, 0,115,251, 65, 65,129,253,209, 0,131, /* 0x c0 */
|
||||
217,254, 41,232,114, 14,142,216,141, 1, 40,252,150,243,164,150, /* 0x d0 */
|
||||
142,218,235, 0,209,224,209,224,209,224,209,224, 80, 49,192,142, /* 0x e0 */
|
||||
216, 88,193,224, 4,106, 0, 31, 1,216, 1,248,235, 0, 0,255, /* 0x f0 */
|
||||
117, 3,232, 6, 0, 17,201, 0,255,117, 0,138, 60, 17,246,115, /* 0x 100 */
|
||||
5,128,198, 8,142,218,209,238, 70, 16,255,195,164, 0,255,117, /* 0x 110 */
|
||||
3,232, 0, 0,114,246, 65,140,192, 1,255,115, 5,128,196, 8, /* 0x 120 */
|
||||
142,192,209,239,232, 0, 0,114, 10, 73,232, 0, 0, 17,201,121, /* 0x 130 */
|
||||
243,235, 0, 73, 73,116, 0, 1,201, 1,201, 1,201,193,225, 3, /* 0x 140 */
|
||||
137,205,138, 28, 70,246,211, 49,201,208,235,235, 3,232, 0, 0, /* 0x 150 */
|
||||
17,201,232, 0, 0, 17,201,117, 8, 65,232, 0, 0,115,251, 65, /* 0x 160 */
|
||||
65,131,253, 81,131,217,254, 41,232,114, 14,142,216,141, 1, 40, /* 0x 170 */
|
||||
252,150,243,164,150,142,218,235, 0,209,224,209,224,209,224,209, /* 0x 180 */
|
||||
224, 80, 49,192,142,216, 88,193,224, 4,106, 0, 31, 1,216, 1, /* 0x 190 */
|
||||
248,235, 0, 0,255,117, 3,232, 6, 0, 17,201, 0,255,117, 0, /* 0x 1a0 */
|
||||
138, 60, 17,246,115, 5,128,198, 8,142,218,209,238, 70, 16,255, /* 0x 1b0 */
|
||||
195,164, 0,255,117, 3,232, 0, 0,114,246, 65,140,192, 1,255, /* 0x 1c0 */
|
||||
115, 5,128,196, 8,142,192,209,239,232, 0, 0,114, 10, 73,232, /* 0x 1d0 */
|
||||
0, 0, 17,201,121,243,235, 0, 73, 73,116, 0, 1,201, 1,201, /* 0x 1e0 */
|
||||
1,201,193,225, 3,137,205,138, 28, 70,246,211, 49,201,208,235, /* 0x 1f0 */
|
||||
115, 12,232, 0, 0, 17,201,235, 18,232, 0, 0,114,244, 65,232, /* 0x 200 */
|
||||
0, 0,114,238,232, 0, 0,115,251, 65, 65,131,253, 81,131,217, /* 0x 210 */
|
||||
253, 41,232,114, 14,142,216,141, 1, 40,252,150,243,164,150,142, /* 0x 220 */
|
||||
218,235, 0,209,224,209,224,209,224,209,224, 80, 49,192,142,216, /* 0x 230 */
|
||||
88,193,224, 4,106, 0, 31, 1,216, 1,248,235, 0, 0,255,117, /* 0x 240 */
|
||||
3,232, 6, 0, 17,201, 0,255,117, 0,138, 60, 17,246,115, 5, /* 0x 250 */
|
||||
128,198, 8,142,218,209,238, 70, 16,255,195, 93,140,192,128,236, /* 0x 260 */
|
||||
6,142,216, 6, 31,141,181, 82, 83,173, 91,145,173,146,173,151, /* 0x 270 */
|
||||
173, 1,195,142,195, 49,192, 1,199, 38, 1, 45,172, 72,116, 0, /* 0x 280 */
|
||||
64,117,244, 71, 71, 38,128, 61,154,117,249, 38, 57, 85, 3,119, /* 0x 290 */
|
||||
243,176, 3,235, 0,129,199,254, 0,114, 0,226, 0, 7, 6, 31, /* 0x 2a0 */
|
||||
157,114, 16, 7, 31, 93, 95, 94, 91, 88,142,208,137,220, 90, 89, /* 0x 2b0 */
|
||||
91, 88,203,141,134, 83, 83,142,208,188, 83, 80,234, 73, 80, 67, /* 0x 2c0 */
|
||||
83,129,197, 67, 83, 85,184, 73, 80, 80,203, 0, 68, 69, 86, 73, /* 0x 2d0 */
|
||||
67, 69, 69, 78, 84, 82, 89, 0, 0, 0, 0, 0, 69, 88, 69, 69, /* 0x 2e0 */
|
||||
78, 84, 82, 89, 0, 48, 0, 0, 0, 68, 69, 86, 73, 67, 69, 83, /* 0x 2f0 */
|
||||
85, 66, 0, 76, 0, 0, 0, 69, 88, 69, 83, 85, 66, 0, 81, 0, /* 0x 300 */
|
||||
0, 0, 74, 78, 67, 68, 79, 67, 79, 80, 89, 0, 86, 0, 0, 0, /* 0x 310 */
|
||||
0, 0, 0, 0, 88, 0, 0, 0, 69, 88, 69, 69, 78, 84, 82, 89, /* 0x 320 */
|
||||
0, 10, 0, 0, 0, 69, 88, 69, 82, 69, 76, 80, 85, 0, 91, 0, /* 0x 330 */
|
||||
0, 0, 69, 88, 69, 77, 65, 73, 78, 52, 0, 92, 0, 0, 0, 85, /* 0x 340 */
|
||||
80, 88, 49, 72, 69, 65, 68, 0,106, 0, 0, 0, 69, 88, 69, 67, /* 0x 350 */
|
||||
85, 84, 80, 79, 0,133, 0, 0, 0, 78, 82, 86, 50, 66, 49, 54, /* 0x 360 */
|
||||
83, 0,133, 0, 0, 0, 0, 0, 0, 0,141, 0, 0, 0, 78, 82, /* 0x 370 */
|
||||
86, 50, 66, 69, 88, 51, 0, 19, 0, 0, 0, 78, 50, 66, 54, 52, /* 0x 380 */
|
||||
75, 48, 49, 0,146, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 49, /* 0x 390 */
|
||||
0,157, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 78, 82, 86, /* 0x 3a0 */
|
||||
50, 66, 69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,162, 0, /* 0x 3b0 */
|
||||
0, 0, 78, 82, 86, 50, 66, 69, 88, 57, 0, 4, 0, 0, 0, 0, /* 0x 3c0 */
|
||||
0, 0, 0,168, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 50, 0, /* 0x 3d0 */
|
||||
9, 0, 0, 0, 78, 50, 66, 88, 56, 54, 48, 49, 0,168, 0, 0, /* 0x 3e0 */
|
||||
0, 78, 50, 66, 50, 56, 54, 48, 49, 0,176, 0, 0, 0, 78, 82, /* 0x 3f0 */
|
||||
86, 50, 66, 69, 88, 50, 0,179, 0, 0, 0, 0, 0, 0, 0,191, /* 0x 400 */
|
||||
0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0, 6, 0, 0, 0, /* 0x 410 */
|
||||
0, 0, 0, 0,199, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, /* 0x 420 */
|
||||
0, 6, 0, 0, 0, 0, 0, 0, 0,228, 0, 0, 0, 78, 82, 86, /* 0x 430 */
|
||||
50, 66, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, 66, 88, 56, 54, /* 0x 440 */
|
||||
48, 50, 0,228, 0, 0, 0, 78, 50, 66, 50, 56, 54, 48, 50, 0, /* 0x 450 */
|
||||
242, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, 51, 0,248, 0, 0, /* 0x 460 */
|
||||
0, 0, 0, 0, 0,254, 0, 0, 0, 78, 82, 86, 50, 66, 69, 88, /* 0x 470 */
|
||||
50, 0, 39, 0, 0, 0, 0, 0, 0, 0, 11, 1, 0, 0, 78, 82, /* 0x 480 */
|
||||
86, 50, 66, 69, 88, 57, 0, 3, 0, 0, 0, 78, 50, 66, 54, 52, /* 0x 490 */
|
||||
75, 48, 50, 0, 13, 1, 0, 0, 78, 82, 86, 50, 66, 69, 88, 57, /* 0x 4a0 */
|
||||
0, 24, 1, 0, 0, 78, 82, 86, 50, 66, 49, 54, 69, 0, 28, 1, /* 0x 4b0 */
|
||||
0, 0, 78, 82, 86, 50, 68, 49, 54, 83, 0, 28, 1, 0, 0, 0, /* 0x 4c0 */
|
||||
0, 0, 0, 36, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, /* 0x 4d0 */
|
||||
19, 0, 0, 0, 78, 50, 68, 54, 52, 75, 48, 49, 0, 41, 1, 0, /* 0x 4e0 */
|
||||
0, 78, 82, 86, 50, 68, 69, 88, 49, 0, 52, 1, 0, 0, 0, 0, /* 0x 4f0 */
|
||||
0, 0, 55, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 6, /* 0x 500 */
|
||||
0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 510 */
|
||||
69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, /* 0x 520 */
|
||||
78, 82, 86, 50, 68, 69, 88, 57, 0, 4, 0, 0, 0, 0, 0, 0, /* 0x 530 */
|
||||
0, 71, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 50, 0, 13, 0, /* 0x 540 */
|
||||
0, 0, 78, 50, 68, 88, 56, 54, 48, 49, 0, 71, 1, 0, 0, 78, /* 0x 550 */
|
||||
50, 68, 50, 56, 54, 48, 49, 0, 77, 1, 0, 0, 78, 82, 86, 50, /* 0x 560 */
|
||||
68, 69, 88, 50, 0, 80, 1, 0, 0, 0, 0, 0, 0, 96, 1, 0, /* 0x 570 */
|
||||
0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, /* 0x 580 */
|
||||
0, 0,101, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, 15, /* 0x 590 */
|
||||
0, 0, 0, 0, 0, 0, 0,109, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 5a0 */
|
||||
69, 88, 51, 0, 6, 0, 0, 0, 0, 0, 0, 0,137, 1, 0, 0, /* 0x 5b0 */
|
||||
78, 82, 86, 50, 68, 49, 54, 83, 0, 1, 0, 0, 0, 78, 50, 68, /* 0x 5c0 */
|
||||
88, 56, 54, 48, 50, 0,137, 1, 0, 0, 78, 50, 68, 50, 56, 54, /* 0x 5d0 */
|
||||
48, 50, 0,151, 1, 0, 0, 78, 82, 86, 50, 68, 69, 88, 51, 0, /* 0x 5e0 */
|
||||
157, 1, 0, 0, 0, 0, 0, 0,163, 1, 0, 0, 78, 82, 86, 50, /* 0x 5f0 */
|
||||
68, 69, 88, 50, 0, 47, 0, 0, 0, 0, 0, 0, 0,176, 1, 0, /* 0x 600 */
|
||||
0, 78, 82, 86, 50, 68, 69, 88, 57, 0, 3, 0, 0, 0, 78, 50, /* 0x 610 */
|
||||
68, 54, 52, 75, 48, 50, 0,178, 1, 0, 0, 78, 82, 86, 50, 68, /* 0x 620 */
|
||||
69, 88, 57, 0,189, 1, 0, 0, 78, 82, 86, 50, 68, 49, 54, 69, /* 0x 630 */
|
||||
0,193, 1, 0, 0, 78, 82, 86, 50, 69, 49, 54, 83, 0,193, 1, /* 0x 640 */
|
||||
0, 0, 0, 0, 0, 0,201, 1, 0, 0, 78, 82, 86, 50, 69, 69, /* 0x 650 */
|
||||
88, 51, 0, 19, 0, 0, 0, 78, 50, 69, 54, 52, 75, 48, 49, 0, /* 0x 660 */
|
||||
206, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 49, 0,217, 1, 0, /* 0x 670 */
|
||||
0, 0, 0, 0, 0,220, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, /* 0x 680 */
|
||||
51, 0, 6, 0, 0, 0, 0, 0, 0, 0,226, 1, 0, 0, 78, 82, /* 0x 690 */
|
||||
86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0,232, /* 0x 6a0 */
|
||||
1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0, 4, 0, 0, 0, /* 0x 6b0 */
|
||||
0, 0, 0, 0,236, 1, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, /* 0x 6c0 */
|
||||
0, 20, 0, 0, 0, 78, 50, 69, 88, 56, 54, 48, 49, 0,236, 1, /* 0x 6d0 */
|
||||
0, 0, 78, 50, 69, 50, 56, 54, 48, 49, 0,242, 1, 0, 0, 78, /* 0x 6e0 */
|
||||
82, 86, 50, 69, 69, 88, 50, 0,245, 1, 0, 0, 0, 0, 0, 0, /* 0x 6f0 */
|
||||
5, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 15, 0, 0, /* 0x 700 */
|
||||
0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, /* 0x 710 */
|
||||
51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 2, 0, 0, 78, 82, /* 0x 720 */
|
||||
86, 50, 69, 69, 88, 51, 0, 15, 0, 0, 0, 0, 0, 0, 0, 23, /* 0x 730 */
|
||||
2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 51, 0, 6, 0, 0, 0, /* 0x 740 */
|
||||
0, 0, 0, 0, 51, 2, 0, 0, 78, 82, 86, 50, 69, 49, 54, 83, /* 0x 750 */
|
||||
0, 1, 0, 0, 0, 78, 50, 69, 88, 56, 54, 48, 50, 0, 51, 2, /* 0x 760 */
|
||||
0, 0, 78, 50, 69, 50, 56, 54, 48, 50, 0, 65, 2, 0, 0, 78, /* 0x 770 */
|
||||
82, 86, 50, 69, 69, 88, 51, 0, 71, 2, 0, 0, 0, 0, 0, 0, /* 0x 780 */
|
||||
77, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 50, 0, 52, 0, 0, /* 0x 790 */
|
||||
0, 0, 0, 0, 0, 90, 2, 0, 0, 78, 82, 86, 50, 69, 69, 88, /* 0x 7a0 */
|
||||
57, 0, 3, 0, 0, 0, 78, 50, 69, 54, 52, 75, 48, 50, 0, 92, /* 0x 7b0 */
|
||||
2, 0, 0, 78, 82, 86, 50, 69, 69, 88, 57, 0,103, 2, 0, 0, /* 0x 7c0 */
|
||||
78, 82, 86, 50, 69, 49, 54, 69, 0,107, 2, 0, 0, 69, 88, 69, /* 0x 7d0 */
|
||||
77, 65, 73, 78, 53, 0,107, 2, 0, 0, 69, 88, 69, 82, 69, 76, /* 0x 7e0 */
|
||||
79, 67, 0,108, 2, 0, 0, 69, 88, 69, 65, 68, 74, 85, 83, 0, /* 0x 7f0 */
|
||||
108, 2, 0, 0, 69, 88, 69, 78, 79, 65, 68, 74, 0,115, 2, 0, /* 0x 800 */
|
||||
0, 69, 88, 69, 82, 69, 76, 79, 49, 0,117, 2, 0, 0, 0, 0, /* 0x 810 */
|
||||
0, 0,144, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 50, 0, 0, /* 0x 820 */
|
||||
0, 0, 0, 69, 88, 69, 82, 69, 76, 57, 65, 0,147, 2, 0, 0, /* 0x 830 */
|
||||
0, 0, 0, 0,165, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, /* 0x 840 */
|
||||
0, 18, 0, 0, 0, 69, 88, 69, 82, 69, 76, 79, 50, 0,165, 2, /* 0x 850 */
|
||||
0, 0, 69, 88, 69, 82, 69, 66, 73, 71, 0,169, 2, 0, 0, 0, /* 0x 860 */
|
||||
0, 0, 0,171, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, 49, 0, /* 0x 870 */
|
||||
9, 0, 0, 0, 69, 88, 69, 82, 69, 76, 79, 51, 0,171, 2, 0, /* 0x 880 */
|
||||
0, 0, 0, 0, 0,173, 2, 0, 0, 69, 88, 69, 82, 69, 76, 79, /* 0x 890 */
|
||||
49, 0, 23, 0, 0, 0, 69, 88, 69, 77, 65, 73, 78, 56, 0,173, /* 0x 8a0 */
|
||||
2, 0, 0, 68, 69, 86, 73, 67, 69, 69, 78, 68, 0,176, 2, 0, /* 0x 8b0 */
|
||||
0, 69, 88, 69, 83, 84, 65, 67, 75, 0,195, 2, 0, 0, 69, 88, /* 0x 8c0 */
|
||||
69, 68, 85, 77, 77, 83, 0,201, 2, 0, 0, 69, 88, 69, 83, 84, /* 0x 8d0 */
|
||||
65, 83, 80, 0,201, 2, 0, 0, 69, 88, 69, 68, 85, 77, 77, 80, /* 0x 8e0 */
|
||||
0,204, 2, 0, 0, 69, 88, 69, 74, 85, 77, 80, 70, 0,204, 2, /* 0x 8f0 */
|
||||
0, 0, 69, 88, 69, 82, 69, 84, 85, 82, 0,209, 2, 0, 0, 69, /* 0x 900 */
|
||||
88, 69, 82, 67, 83, 80, 79, 0,209, 2, 0, 0, 69, 88, 69, 82, /* 0x 910 */
|
||||
69, 84, 73, 80, 0,213, 2, 0, 0, 69, 88, 69, 68, 85, 77, 77, /* 0x 920 */
|
||||
90, 0,219, 2, 0, 0, 69, 88, 69, 84, 72, 69, 78, 68, 0,219, /* 0x 930 */
|
||||
2, 0, 0,255,255,255,255,219, 2 /* 0x 940 */
|
||||
};
|
||||
|
||||
@@ -180,7 +180,7 @@ msg_SELinux:
|
||||
push $ L71 - L70; pop %arg3 # length
|
||||
call L71
|
||||
L70:
|
||||
.asciz "SELinux denied execmem.\n"
|
||||
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
|
||||
L71:
|
||||
pop %arg2 # message text
|
||||
push $2; pop %arg1 # fd stderr
|
||||
|
||||
+17
-17
@@ -1,4 +1,4 @@
|
||||
/* l_lx_elf64amd.h -- created from l_lx_elf64amd.bin, 696 (0x2b8) bytes
|
||||
/* l_lx_elf64amd.h -- created from l_lx_elf64amd.bin, 701 (0x2bd) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,12 +27,12 @@
|
||||
*/
|
||||
|
||||
|
||||
#define LINUX_ELF64AMD_LOADER_SIZE 696
|
||||
#define LINUX_ELF64AMD_LOADER_ADLER32 0x5f8e3dec
|
||||
#define LINUX_ELF64AMD_LOADER_CRC32 0x2f447d28
|
||||
#define LINUX_ELF64AMD_LOADER_SIZE 701
|
||||
#define LINUX_ELF64AMD_LOADER_ADLER32 0xf7af3eba
|
||||
#define LINUX_ELF64AMD_LOADER_CRC32 0x8ec9e668
|
||||
|
||||
unsigned char linux_elf64amd_loader[696] = {
|
||||
232,173, 2, 0, 0, 85, 83, 81, 82, 72, 1,254, 86, 72,137,254, /* 0x 0 */
|
||||
unsigned char linux_elf64amd_loader[701] = {
|
||||
232,178, 2, 0, 0, 85, 83, 81, 82, 72, 1,254, 86, 72,137,254, /* 0x 0 */
|
||||
72,137,215, 49,219, 49,201, 72,131,205,255,232,129, 1, 0, 0, /* 0x 10 */
|
||||
1,219,116, 2,243,195,139, 30, 72,131,238,252, 17,219,138, 22, /* 0x 20 */
|
||||
243,195, 72,141, 4, 47,131,249, 5,138, 16,118, 33, 72,131,253, /* 0x 30 */
|
||||
@@ -65,15 +65,15 @@ unsigned char linux_elf64amd_loader[696] = {
|
||||
32,116,104,101, 32, 85, 80, 88, 32, 84,101, 97,109, 46, 32, 65, /* 0x 1e0 */
|
||||
108,108, 32, 82,105,103,104,116,115, 32, 82,101,115,101,114,118, /* 0x 1f0 */
|
||||
101,100, 46, 32,104,116,116,112, 58, 47, 47,117,112,120, 46,115, /* 0x 200 */
|
||||
102, 46,110,101,116, 32, 36, 10, 0,104, 25, 0, 0, 0, 90,232, /* 0x 210 */
|
||||
25, 0, 0, 0, 83, 69, 76,105,110,117,120, 32,100,101,110,105, /* 0x 220 */
|
||||
101,100, 32,101,120,101, 99,109,101,109, 46, 10, 0, 94,106, 2, /* 0x 230 */
|
||||
95,106, 1, 88, 15, 5,106,127, 95,106, 60, 88, 15, 5, 91,191, /* 0x 240 */
|
||||
65, 68, 82, 77,106, 7, 90,190, 76, 69, 78, 77,106, 50, 65, 90, /* 0x 250 */
|
||||
69, 41,192,106, 9, 88, 15, 5, 57,199,117,173,104, 74, 77, 80, /* 0x 260 */
|
||||
85,104, 65, 68, 82, 85,190, 65, 68, 82, 67,104, 76, 69, 78, 85, /* 0x 270 */
|
||||
185, 67, 78, 84, 67,104, 65, 68, 82, 88,104, 76, 69, 78, 88,137, /* 0x 280 */
|
||||
250, 41,242, 1,213, 1,211,252,243, 72,165,151,137,222, 80,146, /* 0x 290 */
|
||||
173, 80, 72,137,225,173,151,173, 68, 15,182,192,135,254,255,213, /* 0x 2a0 */
|
||||
89,195, 93,232,150,255,255,255 /* 0x 2b0 */
|
||||
102, 46,110,101,116, 32, 36, 10, 0,104, 30, 0, 0, 0, 90,232, /* 0x 210 */
|
||||
30, 0, 0, 0, 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, /* 0x 220 */
|
||||
79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46, /* 0x 230 */
|
||||
10, 0, 94,106, 2, 95,106, 1, 88, 15, 5,106,127, 95,106, 60, /* 0x 240 */
|
||||
88, 15, 5, 91,191, 65, 68, 82, 77,106, 7, 90,190, 76, 69, 78, /* 0x 250 */
|
||||
77,106, 50, 65, 90, 69, 41,192,106, 9, 88, 15, 5, 57,199,117, /* 0x 260 */
|
||||
168,104, 74, 77, 80, 85,104, 65, 68, 82, 85,190, 65, 68, 82, 67, /* 0x 270 */
|
||||
104, 76, 69, 78, 85,185, 67, 78, 84, 67,104, 65, 68, 82, 88,104, /* 0x 280 */
|
||||
76, 69, 78, 88,137,250, 41,242, 1,213, 1,211,252,243, 72,165, /* 0x 290 */
|
||||
151,137,222, 80,146,173, 80, 72,137,225,173,151,173, 68, 15,182, /* 0x 2a0 */
|
||||
192,135,254,255,213, 89,195, 93,232,150,255,255,255 /* 0x 2b0 */
|
||||
};
|
||||
|
||||
+10
-2
@@ -144,7 +144,7 @@ msg_SELinux:
|
||||
pop edx ; length
|
||||
call L71
|
||||
L70:
|
||||
db "SELinux denied execmem.",10
|
||||
db "PROT_EXEC|PROT_WRITE failed.",10
|
||||
L71:
|
||||
pop ecx ; message text
|
||||
push byte 2 ; fd stderr
|
||||
@@ -165,7 +165,15 @@ unfold:
|
||||
lea eax, [ebp - (4+ decompress - _start)] ; 4: sizeof(int)
|
||||
sub eax, [eax] ; %eax= &Elf32_Ehdr of this program
|
||||
mov edx, eax ; %edx= &Elf32_Ehdr of this program
|
||||
add eax, [p_memsz + szElf32_Ehdr + eax] ; page after .text
|
||||
|
||||
; Linux requires PF_W in order to create .bss (implied by .p_filesz!=.p_memsz),
|
||||
; but strict SELinux (or PaX, grSecurity) forbids PF_W with PF_X.
|
||||
; So first PT_LOAD must be PF_R|PF_X only, and .p_memsz==.p_filesz.
|
||||
; So we must round up here, instead of pre-rounding .p_memsz.
|
||||
add eax, [p_memsz + szElf32_Ehdr + eax] ; address after .text
|
||||
add eax, PAGE_SIZE -1
|
||||
and eax, -PAGE_SIZE
|
||||
|
||||
push eax ; destination for 'ret'
|
||||
|
||||
; mmap a page to hold the decompressed fold_elf86
|
||||
|
||||
+262
-261
@@ -1,4 +1,4 @@
|
||||
/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5341 (0x14dd) bytes
|
||||
/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5353 (0x14e9) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
*/
|
||||
|
||||
|
||||
#define LINUX_I386ELF_LOADER_SIZE 5341
|
||||
#define LINUX_I386ELF_LOADER_ADLER32 0x1c76cd81
|
||||
#define LINUX_I386ELF_LOADER_CRC32 0x1aa8519f
|
||||
#define LINUX_I386ELF_LOADER_SIZE 5353
|
||||
#define LINUX_I386ELF_LOADER_ADLER32 0x73ead289
|
||||
#define LINUX_I386ELF_LOADER_CRC32 0x30e5b9ec
|
||||
|
||||
unsigned char linux_i386elf_loader[5341] = {
|
||||
unsigned char linux_i386elf_loader[5353] = {
|
||||
232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, 48, /* 0x 0 */
|
||||
131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 10 */
|
||||
117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 20 */
|
||||
@@ -110,260 +110,261 @@ unsigned char linux_i386elf_loader[5341] = {
|
||||
119, 6,128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23, /* 0x 4b0 */
|
||||
117, 0,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1, /* 0x 4c0 */
|
||||
240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0, /* 0x 4d0 */
|
||||
131,233, 1,127, 0, 97,195,106, 24, 90,232, 24, 0, 0, 0, 83, /* 0x 4e0 */
|
||||
69, 76,105,110,117,120, 32,100,101,110,105,101,100, 32,101,120, /* 0x 4f0 */
|
||||
101, 99,109,101,109, 46, 10, 89,106, 2, 91,106, 4, 88,205,128, /* 0x 500 */
|
||||
179,127,106, 1, 88,205,128, 94,141, 69,247, 43, 0,137,194, 3, /* 0x 510 */
|
||||
64, 72, 80, 49,201,106,255,106, 50,181, 16,106, 7, 81, 80,137, /* 0x 520 */
|
||||
227,106, 90, 88,205,128,133,192,120,173,146,147,252,173, 80, 84, /* 0x 530 */
|
||||
82,173, 80,173, 86,255,213,131,196, 40,195, 93,232,198,255,255, /* 0x 540 */
|
||||
255, 0, 0, 0, 76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, /* 0x 550 */
|
||||
0, 0, 0, 0, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x 560 */
|
||||
48, 0,100, 0, 0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 5, /* 0x 570 */
|
||||
0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, /* 0x 580 */
|
||||
78, 50, 66, 83, 77, 65, 49, 48, 0, 19, 0, 0, 0, 0, 0, 0, /* 0x 590 */
|
||||
0, 21, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, /* 0x 5a0 */
|
||||
0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 22, 0, 0, 0, 0, /* 0x 5b0 */
|
||||
0, 0, 0, 24, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, /* 0x 5c0 */
|
||||
4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 24, 0, 0, /* 0x 5d0 */
|
||||
0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 30, 0, 0, 0, 78, 50, /* 0x 5e0 */
|
||||
66, 83, 77, 65, 50, 48, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, /* 0x 5f0 */
|
||||
0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, /* 0x 600 */
|
||||
78, 50, 66, 70, 65, 83, 50, 48, 0, 46, 0, 0, 0, 0, 0, 0, /* 0x 610 */
|
||||
0, 50, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, /* 0x 620 */
|
||||
0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 55, 0, 0, 0, 78, /* 0x 630 */
|
||||
50, 66, 83, 77, 65, 51, 48, 0, 68, 0, 0, 0, 0, 0, 0, 0, /* 0x 640 */
|
||||
81, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, /* 0x 650 */
|
||||
0, 78, 50, 66, 70, 65, 83, 51, 48, 0, 81, 0, 0, 0, 0, 0, /* 0x 660 */
|
||||
0, 0, 85, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, /* 0x 670 */
|
||||
0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 680 */
|
||||
67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x 690 */
|
||||
0, 96, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0, 78, 50, 66, /* 0x 6a0 */
|
||||
68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, /* 0x 6b0 */
|
||||
0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, /* 0x 6c0 */
|
||||
50, 66, 83, 77, 65, 52, 48, 0,158, 0, 0, 0, 0, 0, 0, 0, /* 0x 6d0 */
|
||||
171, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, /* 0x 6e0 */
|
||||
0, 78, 50, 66, 70, 65, 83, 52, 48, 0,171, 0, 0, 0, 0, 0, /* 0x 6f0 */
|
||||
0, 0,175, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, /* 0x 700 */
|
||||
0, 0, 0, 0, 0, 0, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 710 */
|
||||
67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, /* 0x 720 */
|
||||
0,186, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, 48, 0,186, 0, /* 0x 730 */
|
||||
0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,188, 0, 0, 0, 78, /* 0x 740 */
|
||||
50, 66, 68, 69, 67, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 83, /* 0x 750 */
|
||||
77, 65, 54, 48, 0,200, 0, 0, 0, 0, 0, 0, 0,212, 0, 0, /* 0x 760 */
|
||||
0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x 770 */
|
||||
66, 70, 65, 83, 54, 48, 0,212, 0, 0, 0, 0, 0, 0, 0,223, /* 0x 780 */
|
||||
0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x 790 */
|
||||
0, 0, 0, 0,237, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, /* 0x 7a0 */
|
||||
0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0,237, 0, /* 0x 7b0 */
|
||||
0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 7c0 */
|
||||
49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, /* 0x 7d0 */
|
||||
3, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, 0, 3, 1, 0, /* 0x 7e0 */
|
||||
0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 3, 1, 0, 0, 0, 0, /* 0x 7f0 */
|
||||
0, 0, 5, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, /* 0x 800 */
|
||||
0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, 6, 1, 0, 0, /* 0x 810 */
|
||||
0, 0, 0, 0, 8, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x 820 */
|
||||
0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 8, 1, /* 0x 830 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 14, 1, 0, 0, 78, /* 0x 840 */
|
||||
50, 68, 83, 77, 65, 50, 48, 0, 25, 1, 0, 0, 0, 0, 0, 0, /* 0x 850 */
|
||||
27, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, /* 0x 860 */
|
||||
0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 30, 1, 0, 0, 0, 0, /* 0x 870 */
|
||||
0, 0, 34, 1, 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, /* 0x 880 */
|
||||
0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 39, 1, 0, 0, /* 0x 890 */
|
||||
78, 50, 68, 83, 77, 65, 51, 48, 0, 52, 1, 0, 0, 0, 0, 0, /* 0x 8a0 */
|
||||
0, 65, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, /* 0x 8b0 */
|
||||
0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 65, 1, 0, 0, 0, /* 0x 8c0 */
|
||||
0, 0, 0, 71, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 8d0 */
|
||||
16, 0, 0, 0, 0, 0, 0, 0, 80, 1, 0, 0, 78, 50, 68, 68, /* 0x 8e0 */
|
||||
69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 8f0 */
|
||||
48, 0, 80, 1, 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 78, 50, /* 0x 900 */
|
||||
68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, /* 0x 910 */
|
||||
1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, /* 0x 920 */
|
||||
0, 0, 0, 0,148, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, /* 0x 930 */
|
||||
0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, 48, 0,162, 1, /* 0x 940 */
|
||||
0, 0, 0, 0, 0, 0,175, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 950 */
|
||||
51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0, /* 0x 960 */
|
||||
175, 1, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 78, 50, 68, 68, /* 0x 970 */
|
||||
69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, 0,190, 1, 0, /* 0x 980 */
|
||||
0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, /* 0x 990 */
|
||||
68, 68, 85, 77, 77, 49, 0,190, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 9a0 */
|
||||
65, 53, 48, 0,190, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, /* 0x 9b0 */
|
||||
0,192, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0,195, 1, /* 0x 9c0 */
|
||||
0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,204, 1, 0, 0, 0, /* 0x 9d0 */
|
||||
0, 0, 0,216, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, /* 0x 9e0 */
|
||||
0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, 0,216, 1, 0, /* 0x 9f0 */
|
||||
0, 0, 0, 0, 0,227, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, /* 0x a00 */
|
||||
49, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 1, 0, 0, 78, 50, /* 0x a10 */
|
||||
68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x a20 */
|
||||
83, 54, 49, 0,241, 1, 0, 0, 0, 0, 0, 0, 7, 2, 0, 0, /* 0x a30 */
|
||||
78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x a40 */
|
||||
68, 69, 67, 54, 48, 0, 7, 2, 0, 0, 78, 82, 86, 50, 68, 69, /* 0x a50 */
|
||||
78, 68, 0, 7, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, /* 0x a60 */
|
||||
7, 2, 0, 0, 0, 0, 0, 0, 9, 2, 0, 0, 78, 50, 69, 68, /* 0x a70 */
|
||||
69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, /* 0x a80 */
|
||||
48, 0, 10, 2, 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 50, /* 0x a90 */
|
||||
69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x aa0 */
|
||||
83, 49, 49, 0, 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x ab0 */
|
||||
0, 18, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 29, 2, /* 0x ac0 */
|
||||
0, 0, 0, 0, 0, 0, 31, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x ad0 */
|
||||
49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, /* 0x ae0 */
|
||||
34, 2, 0, 0, 0, 0, 0, 0, 38, 2, 0, 0, 78, 50, 69, 70, /* 0x af0 */
|
||||
65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, /* 0x b00 */
|
||||
48, 0, 43, 2, 0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 56, /* 0x b10 */
|
||||
2, 0, 0, 0, 0, 0, 0, 69, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x b20 */
|
||||
67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, /* 0x b30 */
|
||||
0, 69, 2, 0, 0, 0, 0, 0, 0, 75, 2, 0, 0, 78, 50, 69, /* 0x b40 */
|
||||
68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 84, 2, /* 0x b50 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, /* 0x b60 */
|
||||
50, 69, 68, 69, 67, 51, 48, 0, 84, 2, 0, 0, 0, 0, 0, 0, /* 0x b70 */
|
||||
100, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, /* 0x b80 */
|
||||
0, 0, 0, 0, 0,115, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, /* 0x b90 */
|
||||
48, 0, 0, 0, 0, 0, 0, 0, 0, 0,133, 2, 0, 0, 78, 50, /* 0x ba0 */
|
||||
69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, /* 0x bb0 */
|
||||
65, 52, 48, 0,179, 2, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, /* 0x bc0 */
|
||||
78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, /* 0x bd0 */
|
||||
70, 65, 83, 52, 48, 0,192, 2, 0, 0, 0, 0, 0, 0,196, 2, /* 0x be0 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, /* 0x bf0 */
|
||||
0, 0, 0,207, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x c00 */
|
||||
82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, 0,207, 2, 0, /* 0x c10 */
|
||||
0, 78, 50, 69, 83, 77, 65, 53, 48, 0,207, 2, 0, 0, 78, 50, /* 0x c20 */
|
||||
69, 70, 65, 83, 53, 48, 0,209, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x c30 */
|
||||
67, 53, 48, 0,212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, /* 0x c40 */
|
||||
0,221, 2, 0, 0, 0, 0, 0, 0,233, 2, 0, 0, 78, 50, 69, /* 0x c50 */
|
||||
68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x c60 */
|
||||
54, 48, 0,233, 2, 0, 0, 0, 0, 0, 0,244, 2, 0, 0, 78, /* 0x c70 */
|
||||
50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x c80 */
|
||||
2, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x c90 */
|
||||
0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 2, 3, 0, 0, 0, 0, /* 0x ca0 */
|
||||
0, 0, 24, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, /* 0x cb0 */
|
||||
0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 24, 3, 0, 0, /* 0x cc0 */
|
||||
78, 82, 86, 50, 69, 69, 78, 68, 0, 24, 3, 0, 0, 67, 65, 76, /* 0x cd0 */
|
||||
76, 84, 82, 48, 48, 0, 24, 3, 0, 0, 67, 84, 67, 76, 69, 86, /* 0x ce0 */
|
||||
69, 49, 0, 38, 3, 0, 0, 0, 0, 0, 0, 43, 3, 0, 0, 67, /* 0x cf0 */
|
||||
65, 76, 76, 84, 82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, /* 0x d00 */
|
||||
84, 82, 48, 49, 0, 43, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, /* 0x d10 */
|
||||
49, 0, 48, 3, 0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 48, /* 0x d20 */
|
||||
3, 0, 0, 67, 84, 66, 82, 79, 82, 48, 49, 0, 52, 3, 0, 0, /* 0x d30 */
|
||||
67, 84, 66, 83, 87, 65, 48, 49, 0, 54, 3, 0, 0, 67, 65, 76, /* 0x d40 */
|
||||
76, 84, 82, 48, 50, 0, 59, 3, 0, 0, 0, 0, 0, 0, 73, 3, /* 0x d50 */
|
||||
0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, /* 0x d60 */
|
||||
65, 76, 76, 84, 82, 49, 48, 0, 73, 3, 0, 0, 67, 65, 76, 76, /* 0x d70 */
|
||||
84, 82, 69, 56, 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, /* 0x d80 */
|
||||
57, 0, 80, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 82, /* 0x d90 */
|
||||
3, 0, 0, 0, 0, 0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x da0 */
|
||||
82, 49, 51, 0, 5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, /* 0x db0 */
|
||||
0, 86, 3, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 67, 65, 76, /* 0x dc0 */
|
||||
76, 84, 82, 49, 49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x dd0 */
|
||||
49, 50, 0, 91, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, /* 0x de0 */
|
||||
93, 3, 0, 0, 67, 84, 66, 83, 72, 82, 49, 49, 0, 93, 3, 0, /* 0x df0 */
|
||||
0, 67, 84, 66, 82, 79, 82, 49, 49, 0, 97, 3, 0, 0, 67, 84, /* 0x e00 */
|
||||
66, 83, 87, 65, 49, 49, 0, 99, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x e10 */
|
||||
82, 49, 51, 0,104, 3, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, /* 0x e20 */
|
||||
67, 65, 76, 76, 84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, /* 0x e30 */
|
||||
72, 69, 69, 78, 68, 0,109, 3, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x e40 */
|
||||
49, 53, 0,109, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0, /* 0x e50 */
|
||||
139, 3, 0, 0, 0, 0, 0, 0,141, 3, 0, 0, 76, 88, 85, 78, /* 0x e60 */
|
||||
70, 48, 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, /* 0x e70 */
|
||||
50, 0,141, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,146, /* 0x e80 */
|
||||
3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 53, 0,148, 3, 0, 0, /* 0x e90 */
|
||||
76, 88, 77, 82, 85, 48, 48, 54, 0,153, 3, 0, 0, 76, 88, 77, /* 0x ea0 */
|
||||
82, 85, 48, 48, 55, 0,160, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x eb0 */
|
||||
48, 56, 0,167, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0, /* 0x ec0 */
|
||||
171, 3, 0, 0, 0, 0, 0, 0,176, 3, 0, 0, 76, 88, 85, 78, /* 0x ed0 */
|
||||
70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, /* 0x ee0 */
|
||||
48, 0,176, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,179, /* 0x ef0 */
|
||||
3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 54, 0,182, 3, 0, 0, /* 0x f00 */
|
||||
76, 88, 74, 67, 67, 48, 50, 48, 0,184, 3, 0, 0, 0, 0, 0, /* 0x f10 */
|
||||
0,186, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, /* 0x f20 */
|
||||
0, 0, 76, 88, 74, 67, 67, 48, 50, 49, 0,186, 3, 0, 0, 0, /* 0x f30 */
|
||||
0, 0, 0,191, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, /* 0x f40 */
|
||||
0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,191, 3, 0, /* 0x f50 */
|
||||
0, 76, 88, 85, 78, 70, 48, 51, 55, 0,198, 3, 0, 0, 76, 88, /* 0x f60 */
|
||||
85, 78, 70, 51, 56, 54, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, /* 0x f70 */
|
||||
51, 56, 55, 0,201, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, /* 0x f80 */
|
||||
0,210, 3, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 76, 88, 85, /* 0x f90 */
|
||||
78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, /* 0x fa0 */
|
||||
56, 54, 0,213, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0, /* 0x fb0 */
|
||||
217, 3, 0, 0, 0, 0, 0, 0,219, 3, 0, 0, 76, 88, 85, 78, /* 0x fc0 */
|
||||
70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, /* 0x fd0 */
|
||||
53, 0,219, 3, 0, 0, 0, 0, 0, 0,223, 3, 0, 0, 76, 88, /* 0x fe0 */
|
||||
77, 82, 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x ff0 */
|
||||
84, 69, 51, 0,223, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, /* 0x1000 */
|
||||
0,225, 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,226, 3, /* 0x1010 */
|
||||
0, 0, 77, 82, 85, 65, 82, 66, 52, 48, 0,228, 3, 0, 0, 76, /* 0x1020 */
|
||||
88, 77, 82, 85, 48, 55, 48, 0,232, 3, 0, 0, 0, 0, 0, 0, /* 0x1030 */
|
||||
237, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, /* 0x1040 */
|
||||
0, 77, 82, 85, 66, 89, 84, 69, 52, 0,240, 3, 0, 0, 77, 82, /* 0x1050 */
|
||||
85, 66, 73, 84, 83, 52, 0,243, 3, 0, 0, 77, 82, 85, 65, 82, /* 0x1060 */
|
||||
66, 53, 48, 0,245, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, /* 0x1070 */
|
||||
0,251, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0,254, 3, /* 0x1080 */
|
||||
0, 0, 77, 82, 85, 65, 82, 66, 54, 48, 0, 0, 4, 0, 0, 77, /* 0x1090 */
|
||||
82, 85, 66, 73, 84, 83, 53, 0, 1, 4, 0, 0, 77, 82, 85, 65, /* 0x10a0 */
|
||||
82, 66, 55, 48, 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, /* 0x10b0 */
|
||||
48, 0, 7, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 76, 88, /* 0x10c0 */
|
||||
77, 82, 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x10d0 */
|
||||
84, 69, 54, 0, 18, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, /* 0x10e0 */
|
||||
0, 20, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 21, 4, /* 0x10f0 */
|
||||
0, 0, 77, 82, 85, 65, 82, 66, 57, 48, 0, 23, 4, 0, 0, 76, /* 0x1100 */
|
||||
88, 77, 82, 85, 49, 48, 48, 0, 27, 4, 0, 0, 76, 88, 85, 78, /* 0x1110 */
|
||||
70, 48, 52, 48, 0, 43, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, /* 0x1120 */
|
||||
48, 0, 48, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 51, /* 0x1130 */
|
||||
4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 53, 4, 0, 0, /* 0x1140 */
|
||||
0, 0, 0, 0, 60, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, /* 0x1150 */
|
||||
0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 60, 4, /* 0x1160 */
|
||||
0, 0, 76, 69, 88, 69, 67, 48, 49, 54, 0, 60, 4, 0, 0, 0, /* 0x1170 */
|
||||
0, 0, 0, 62, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, /* 0x1180 */
|
||||
0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 62, 4, 0, /* 0x1190 */
|
||||
0, 76, 88, 74, 77, 80, 65, 48, 48, 0, 63, 4, 0, 0, 76, 88, /* 0x11a0 */
|
||||
67, 65, 76, 76, 66, 48, 0, 65, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x11b0 */
|
||||
48, 50, 49, 0, 67, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, /* 0x11c0 */
|
||||
0, 73, 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 76, 4, /* 0x11d0 */
|
||||
0, 0, 76, 88, 67, 65, 76, 76, 66, 49, 0, 78, 4, 0, 0, 77, /* 0x11e0 */
|
||||
82, 85, 66, 73, 84, 83, 49, 0, 80, 4, 0, 0, 76, 88, 77, 82, /* 0x11f0 */
|
||||
85, 48, 51, 48, 0, 81, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x1200 */
|
||||
49, 0, 83, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 85, /* 0x1210 */
|
||||
4, 0, 0, 76, 88, 77, 82, 85, 48, 52, 48, 0, 86, 4, 0, 0, /* 0x1220 */
|
||||
0, 0, 0, 0, 88, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x1230 */
|
||||
0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 88, 4, /* 0x1240 */
|
||||
0, 0, 76, 88, 74, 67, 67, 48, 48, 48, 0, 94, 4, 0, 0, 0, /* 0x1250 */
|
||||
0, 0, 0,102, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, /* 0x1260 */
|
||||
0, 0, 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,102, 4, 0, /* 0x1270 */
|
||||
0, 76, 88, 67, 74, 49, 77, 82, 85, 0,104, 4, 0, 0, 76, 88, /* 0x1280 */
|
||||
67, 65, 76, 74, 77, 80, 0,107, 4, 0, 0, 76, 88, 67, 65, 76, /* 0x1290 */
|
||||
76, 48, 48, 0,110, 4, 0, 0, 0, 0, 0, 0,112, 4, 0, 0, /* 0x12a0 */
|
||||
76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, /* 0x12b0 */
|
||||
65, 76, 76, 48, 49, 0,112, 4, 0, 0, 76, 88, 67, 74, 50, 77, /* 0x12c0 */
|
||||
82, 85, 0,115, 4, 0, 0, 0, 0, 0, 0,117, 4, 0, 0, 76, /* 0x12d0 */
|
||||
88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x12e0 */
|
||||
52, 77, 82, 85, 0,117, 4, 0, 0, 0, 0, 0, 0,119, 4, 0, /* 0x12f0 */
|
||||
0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x1300 */
|
||||
67, 74, 54, 77, 82, 85, 0,119, 4, 0, 0, 0, 0, 0, 0,121, /* 0x1310 */
|
||||
4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, /* 0x1320 */
|
||||
76, 88, 67, 74, 55, 77, 82, 85, 0,121, 4, 0, 0, 0, 0, 0, /* 0x1330 */
|
||||
0,123, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, /* 0x1340 */
|
||||
0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0,123, 4, 0, 0, 0, /* 0x1350 */
|
||||
0, 0, 0,126, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, /* 0x1360 */
|
||||
0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,126, 4, 0, /* 0x1370 */
|
||||
0, 0, 0, 0, 0,131, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x1380 */
|
||||
48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,131, /* 0x1390 */
|
||||
4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 50, 0,133, 4, 0, 0, /* 0x13a0 */
|
||||
77, 82, 85, 66, 73, 84, 83, 50, 0,138, 4, 0, 0, 77, 82, 85, /* 0x13b0 */
|
||||
65, 82, 66, 50, 48, 0,143, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x13c0 */
|
||||
53, 55, 0,148, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0, /* 0x13d0 */
|
||||
154, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,155, 4, 0, /* 0x13e0 */
|
||||
0, 67, 75, 76, 76, 84, 82, 48, 48, 0,161, 4, 0, 0, 0, 0, /* 0x13f0 */
|
||||
0, 0,165, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, /* 0x1400 */
|
||||
0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,170, 4, 0, 0, /* 0x1410 */
|
||||
0, 0, 0, 0,184, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, /* 0x1420 */
|
||||
0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,184, 4, /* 0x1430 */
|
||||
0, 0, 0, 0, 0, 0,190, 4, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1440 */
|
||||
52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 4, 0, 0, 67, /* 0x1450 */
|
||||
75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, /* 0x1460 */
|
||||
84, 82, 51, 48, 0,217, 4, 0, 0, 0, 0, 0, 0,224, 4, 0, /* 0x1470 */
|
||||
0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, /* 0x1480 */
|
||||
76, 76, 84, 82, 52, 48, 0,224, 4, 0, 0, 0, 0, 0, 0,229, /* 0x1490 */
|
||||
4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, /* 0x14a0 */
|
||||
76, 69, 88, 69, 67, 48, 49, 55, 0,229, 4, 0, 0, 76, 69, 88, /* 0x14b0 */
|
||||
69, 67, 48, 50, 48, 0,231, 4, 0, 0, 88, 84, 72, 69, 69, 78, /* 0x14c0 */
|
||||
68, 88, 0, 81, 5, 0, 0,255,255,255,255, 81, 5 /* 0x14d0 */
|
||||
131,233, 1,127, 0, 97,195,106, 29, 90,232, 29, 0, 0, 0, 80, /* 0x 4e0 */
|
||||
82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, /* 0x 4f0 */
|
||||
73, 84, 69, 32,102, 97,105,108,101,100, 46, 10, 89,106, 2, 91, /* 0x 500 */
|
||||
106, 4, 88,205,128,179,127,106, 1, 88,205,128, 94,141, 69,247, /* 0x 510 */
|
||||
43, 0,137,194, 3, 64, 72, 5,255, 15, 0, 0, 37, 0,240,255, /* 0x 520 */
|
||||
255, 80, 49,201,106,255,106, 50,181, 16,106, 7, 81, 80,137,227, /* 0x 530 */
|
||||
106, 90, 88,205,128,133,192,120,158,146,147,252,173, 80, 84, 82, /* 0x 540 */
|
||||
173, 80,173, 86,255,213,131,196, 40,195, 93,232,188,255,255,255, /* 0x 550 */
|
||||
76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 560 */
|
||||
0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, 48, 0,115, 0, /* 0x 570 */
|
||||
0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 5, 0, 0, 0, 76, /* 0x 580 */
|
||||
69, 88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, /* 0x 590 */
|
||||
77, 65, 49, 48, 0, 19, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, /* 0x 5a0 */
|
||||
0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 5b0 */
|
||||
66, 70, 65, 83, 49, 48, 0, 22, 0, 0, 0, 0, 0, 0, 0, 24, /* 0x 5c0 */
|
||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 5d0 */
|
||||
78, 50, 66, 70, 65, 83, 49, 49, 0, 24, 0, 0, 0, 78, 50, 66, /* 0x 5e0 */
|
||||
68, 69, 67, 49, 48, 0, 30, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 5f0 */
|
||||
50, 48, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 78, /* 0x 600 */
|
||||
50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, /* 0x 610 */
|
||||
65, 83, 50, 48, 0, 46, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, /* 0x 620 */
|
||||
0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 630 */
|
||||
66, 68, 69, 67, 50, 48, 0, 55, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 640 */
|
||||
65, 51, 48, 0, 68, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, /* 0x 650 */
|
||||
78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 660 */
|
||||
70, 65, 83, 51, 48, 0, 81, 0, 0, 0, 0, 0, 0, 0, 85, 0, /* 0x 670 */
|
||||
0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 680 */
|
||||
0, 0, 0, 96, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, /* 0x 690 */
|
||||
0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 96, 0, 0, /* 0x 6a0 */
|
||||
0, 0, 0, 0, 0,114, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, /* 0x 6b0 */
|
||||
48, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, 0, 0, 78, 50, /* 0x 6c0 */
|
||||
66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 6d0 */
|
||||
65, 52, 48, 0,158, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, /* 0x 6e0 */
|
||||
78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, /* 0x 6f0 */
|
||||
70, 65, 83, 52, 48, 0,171, 0, 0, 0, 0, 0, 0, 0,175, 0, /* 0x 700 */
|
||||
0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, /* 0x 710 */
|
||||
0, 0, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, /* 0x 720 */
|
||||
49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0,186, 0, 0, /* 0x 730 */
|
||||
0, 78, 50, 66, 83, 77, 65, 53, 48, 0,186, 0, 0, 0, 78, 50, /* 0x 740 */
|
||||
66, 70, 65, 83, 53, 48, 0,188, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 750 */
|
||||
67, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, /* 0x 760 */
|
||||
0,200, 0, 0, 0, 0, 0, 0, 0,212, 0, 0, 0, 78, 50, 66, /* 0x 770 */
|
||||
68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 780 */
|
||||
54, 48, 0,212, 0, 0, 0, 0, 0, 0, 0,223, 0, 0, 0, 78, /* 0x 790 */
|
||||
50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 7a0 */
|
||||
237, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x 7b0 */
|
||||
0, 78, 50, 66, 70, 65, 83, 54, 49, 0,237, 0, 0, 0, 0, 0, /* 0x 7c0 */
|
||||
0, 0, 3, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, /* 0x 7d0 */
|
||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 3, 1, 0, 0, /* 0x 7e0 */
|
||||
78, 82, 86, 50, 66, 69, 78, 68, 0, 3, 1, 0, 0, 78, 50, 68, /* 0x 7f0 */
|
||||
83, 77, 65, 49, 48, 0, 3, 1, 0, 0, 0, 0, 0, 0, 5, 1, /* 0x 800 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 810 */
|
||||
50, 68, 70, 65, 83, 49, 48, 0, 6, 1, 0, 0, 0, 0, 0, 0, /* 0x 820 */
|
||||
8, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x 830 */
|
||||
0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 8, 1, 0, 0, 78, 50, /* 0x 840 */
|
||||
68, 68, 69, 67, 49, 48, 0, 14, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 850 */
|
||||
65, 50, 48, 0, 25, 1, 0, 0, 0, 0, 0, 0, 27, 1, 0, 0, /* 0x 860 */
|
||||
78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, /* 0x 870 */
|
||||
70, 65, 83, 50, 48, 0, 30, 1, 0, 0, 0, 0, 0, 0, 34, 1, /* 0x 880 */
|
||||
0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, /* 0x 890 */
|
||||
50, 68, 68, 69, 67, 50, 48, 0, 39, 1, 0, 0, 78, 50, 68, 83, /* 0x 8a0 */
|
||||
77, 65, 51, 48, 0, 52, 1, 0, 0, 0, 0, 0, 0, 65, 1, 0, /* 0x 8b0 */
|
||||
0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, /* 0x 8c0 */
|
||||
68, 70, 65, 83, 51, 48, 0, 65, 1, 0, 0, 0, 0, 0, 0, 71, /* 0x 8d0 */
|
||||
1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, /* 0x 8e0 */
|
||||
0, 0, 0, 0, 80, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 8f0 */
|
||||
0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 80, 1, /* 0x 900 */
|
||||
0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 910 */
|
||||
50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 78, /* 0x 920 */
|
||||
50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 930 */
|
||||
148, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x 940 */
|
||||
0, 78, 50, 68, 83, 77, 65, 52, 48, 0,162, 1, 0, 0, 0, 0, /* 0x 950 */
|
||||
0, 0,175, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, /* 0x 960 */
|
||||
0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,175, 1, 0, 0, /* 0x 970 */
|
||||
0, 0, 0, 0,179, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 980 */
|
||||
0, 69, 0, 0, 0, 0, 0, 0, 0,190, 1, 0, 0, 78, 50, 68, /* 0x 990 */
|
||||
68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, /* 0x 9a0 */
|
||||
77, 49, 0,190, 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0, /* 0x 9b0 */
|
||||
190, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0,192, 1, 0, /* 0x 9c0 */
|
||||
0, 78, 50, 68, 68, 69, 67, 53, 48, 0,195, 1, 0, 0, 78, 50, /* 0x 9d0 */
|
||||
68, 83, 77, 65, 54, 48, 0,204, 1, 0, 0, 0, 0, 0, 0,216, /* 0x 9e0 */
|
||||
1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 9f0 */
|
||||
78, 50, 68, 70, 65, 83, 54, 48, 0,216, 1, 0, 0, 0, 0, 0, /* 0x a00 */
|
||||
0,227, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, /* 0x a10 */
|
||||
0, 0, 0, 0, 0, 0,241, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x a20 */
|
||||
49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, /* 0x a30 */
|
||||
241, 1, 0, 0, 0, 0, 0, 0, 7, 2, 0, 0, 78, 50, 68, 68, /* 0x a40 */
|
||||
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, /* 0x a50 */
|
||||
48, 0, 7, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 7, /* 0x a60 */
|
||||
2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 7, 2, 0, 0, /* 0x a70 */
|
||||
0, 0, 0, 0, 9, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x a80 */
|
||||
0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 10, 2, /* 0x a90 */
|
||||
0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x aa0 */
|
||||
49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x ab0 */
|
||||
12, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 18, 2, 0, /* 0x ac0 */
|
||||
0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 29, 2, 0, 0, 0, 0, /* 0x ad0 */
|
||||
0, 0, 31, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, /* 0x ae0 */
|
||||
0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, 34, 2, 0, 0, /* 0x af0 */
|
||||
0, 0, 0, 0, 38, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, /* 0x b00 */
|
||||
0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 43, 2, /* 0x b10 */
|
||||
0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 56, 2, 0, 0, 0, /* 0x b20 */
|
||||
0, 0, 0, 69, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b30 */
|
||||
31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0, 69, 2, 0, /* 0x b40 */
|
||||
0, 0, 0, 0, 0, 75, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, /* 0x b50 */
|
||||
48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 78, 50, /* 0x b60 */
|
||||
69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x b70 */
|
||||
67, 51, 48, 0, 84, 2, 0, 0, 0, 0, 0, 0,100, 2, 0, 0, /* 0x b80 */
|
||||
78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x b90 */
|
||||
0,115, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, /* 0x ba0 */
|
||||
0, 0, 0, 0, 0, 0,133, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x bb0 */
|
||||
54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0, /* 0x bc0 */
|
||||
179, 2, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 78, 50, 69, 68, /* 0x bd0 */
|
||||
69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, /* 0x be0 */
|
||||
48, 0,192, 2, 0, 0, 0, 0, 0, 0,196, 2, 0, 0, 78, 50, /* 0x bf0 */
|
||||
69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,207, /* 0x c00 */
|
||||
2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, /* 0x c10 */
|
||||
78, 50, 69, 68, 85, 77, 77, 49, 0,207, 2, 0, 0, 78, 50, 69, /* 0x c20 */
|
||||
83, 77, 65, 53, 48, 0,207, 2, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x c30 */
|
||||
53, 48, 0,209, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, /* 0x c40 */
|
||||
212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0,221, 2, 0, /* 0x c50 */
|
||||
0, 0, 0, 0, 0,233, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x c60 */
|
||||
48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,233, /* 0x c70 */
|
||||
2, 0, 0, 0, 0, 0, 0,244, 2, 0, 0, 78, 50, 69, 70, 65, /* 0x c80 */
|
||||
83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, /* 0x c90 */
|
||||
78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x ca0 */
|
||||
70, 65, 83, 54, 49, 0, 2, 3, 0, 0, 0, 0, 0, 0, 24, 3, /* 0x cb0 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x cc0 */
|
||||
50, 69, 68, 69, 67, 54, 48, 0, 24, 3, 0, 0, 78, 82, 86, 50, /* 0x cd0 */
|
||||
69, 69, 78, 68, 0, 24, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x ce0 */
|
||||
48, 0, 24, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 38, /* 0x cf0 */
|
||||
3, 0, 0, 0, 0, 0, 0, 43, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x d00 */
|
||||
82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, /* 0x d10 */
|
||||
0, 43, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 48, 3, /* 0x d20 */
|
||||
0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 48, 3, 0, 0, 67, /* 0x d30 */
|
||||
84, 66, 82, 79, 82, 48, 49, 0, 52, 3, 0, 0, 67, 84, 66, 83, /* 0x d40 */
|
||||
87, 65, 48, 49, 0, 54, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x d50 */
|
||||
50, 0, 59, 3, 0, 0, 0, 0, 0, 0, 73, 3, 0, 0, 67, 65, /* 0x d60 */
|
||||
76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, /* 0x d70 */
|
||||
82, 49, 48, 0, 73, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, /* 0x d80 */
|
||||
0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 80, 3, /* 0x d90 */
|
||||
0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 82, 3, 0, 0, 0, /* 0x da0 */
|
||||
0, 0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x db0 */
|
||||
5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, 86, 3, 0, /* 0x dc0 */
|
||||
0, 0, 0, 0, 0, 91, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, /* 0x dd0 */
|
||||
49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 91, /* 0x de0 */
|
||||
3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, 93, 3, 0, 0, /* 0x df0 */
|
||||
67, 84, 66, 83, 72, 82, 49, 49, 0, 93, 3, 0, 0, 67, 84, 66, /* 0x e00 */
|
||||
82, 79, 82, 49, 49, 0, 97, 3, 0, 0, 67, 84, 66, 83, 87, 65, /* 0x e10 */
|
||||
49, 49, 0, 99, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x e20 */
|
||||
104, 3, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, 67, 65, 76, 76, /* 0x e30 */
|
||||
84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, /* 0x e40 */
|
||||
68, 0,109, 3, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,109, /* 0x e50 */
|
||||
3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,139, 3, 0, 0, /* 0x e60 */
|
||||
0, 0, 0, 0,141, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, /* 0x e70 */
|
||||
0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0,141, 3, /* 0x e80 */
|
||||
0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,146, 3, 0, 0, 76, /* 0x e90 */
|
||||
88, 77, 82, 85, 48, 48, 53, 0,148, 3, 0, 0, 76, 88, 77, 82, /* 0x ea0 */
|
||||
85, 48, 48, 54, 0,153, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, /* 0x eb0 */
|
||||
55, 0,160, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, 0,167, /* 0x ec0 */
|
||||
3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,171, 3, 0, 0, /* 0x ed0 */
|
||||
0, 0, 0, 0,176, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, /* 0x ee0 */
|
||||
0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0,176, 3, /* 0x ef0 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,179, 3, 0, 0, 76, /* 0x f00 */
|
||||
88, 77, 82, 85, 48, 52, 54, 0,182, 3, 0, 0, 76, 88, 74, 67, /* 0x f10 */
|
||||
67, 48, 50, 48, 0,184, 3, 0, 0, 0, 0, 0, 0,186, 3, 0, /* 0x f20 */
|
||||
0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x f30 */
|
||||
74, 67, 67, 48, 50, 49, 0,186, 3, 0, 0, 0, 0, 0, 0,191, /* 0x f40 */
|
||||
3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x f50 */
|
||||
76, 88, 74, 67, 67, 48, 50, 51, 0,191, 3, 0, 0, 76, 88, 85, /* 0x f60 */
|
||||
78, 70, 48, 51, 55, 0,198, 3, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x f70 */
|
||||
56, 54, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 55, 0, /* 0x f80 */
|
||||
201, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0,210, 3, 0, /* 0x f90 */
|
||||
0, 0, 0, 0, 0,213, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, /* 0x fa0 */
|
||||
48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, 0,213, /* 0x fb0 */
|
||||
3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,217, 3, 0, 0, /* 0x fc0 */
|
||||
0, 0, 0, 0,219, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x fd0 */
|
||||
0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0,219, 3, /* 0x fe0 */
|
||||
0, 0, 0, 0, 0, 0,223, 3, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x ff0 */
|
||||
55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 51, 0, /* 0x1000 */
|
||||
223, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0,225, 3, 0, /* 0x1010 */
|
||||
0, 77, 82, 85, 66, 73, 84, 83, 51, 0,226, 3, 0, 0, 77, 82, /* 0x1020 */
|
||||
85, 65, 82, 66, 52, 48, 0,228, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x1030 */
|
||||
48, 55, 48, 0,232, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, /* 0x1040 */
|
||||
76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, 82, 85, /* 0x1050 */
|
||||
66, 89, 84, 69, 52, 0,240, 3, 0, 0, 77, 82, 85, 66, 73, 84, /* 0x1060 */
|
||||
83, 52, 0,243, 3, 0, 0, 77, 82, 85, 65, 82, 66, 53, 48, 0, /* 0x1070 */
|
||||
245, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0,251, 3, 0, /* 0x1080 */
|
||||
0, 77, 82, 85, 66, 89, 84, 69, 53, 0,254, 3, 0, 0, 77, 82, /* 0x1090 */
|
||||
85, 65, 82, 66, 54, 48, 0, 0, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x10a0 */
|
||||
84, 83, 53, 0, 1, 4, 0, 0, 77, 82, 85, 65, 82, 66, 55, 48, /* 0x10b0 */
|
||||
0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, 7, 4, /* 0x10c0 */
|
||||
0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 76, 88, 77, 82, 85, 49, /* 0x10d0 */
|
||||
48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 54, 0, /* 0x10e0 */
|
||||
18, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 20, 4, 0, /* 0x10f0 */
|
||||
0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 21, 4, 0, 0, 77, 82, /* 0x1100 */
|
||||
85, 65, 82, 66, 57, 48, 0, 23, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x1110 */
|
||||
49, 48, 48, 0, 27, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x1120 */
|
||||
0, 43, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, 48, 4, /* 0x1130 */
|
||||
0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 51, 4, 0, 0, 76, /* 0x1140 */
|
||||
88, 85, 78, 70, 48, 52, 49, 0, 53, 4, 0, 0, 0, 0, 0, 0, /* 0x1150 */
|
||||
60, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, /* 0x1160 */
|
||||
0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 60, 4, 0, 0, 76, 69, /* 0x1170 */
|
||||
88, 69, 67, 48, 49, 54, 0, 60, 4, 0, 0, 0, 0, 0, 0, 62, /* 0x1180 */
|
||||
4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, /* 0x1190 */
|
||||
76, 88, 77, 82, 85, 48, 49, 48, 0, 62, 4, 0, 0, 76, 88, 74, /* 0x11a0 */
|
||||
77, 80, 65, 48, 48, 0, 63, 4, 0, 0, 76, 88, 67, 65, 76, 76, /* 0x11b0 */
|
||||
66, 48, 0, 65, 4, 0, 0, 76, 88, 85, 78, 70, 48, 50, 49, 0, /* 0x11c0 */
|
||||
67, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, 73, 4, 0, /* 0x11d0 */
|
||||
0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 76, 4, 0, 0, 76, 88, /* 0x11e0 */
|
||||
67, 65, 76, 76, 66, 49, 0, 78, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x11f0 */
|
||||
84, 83, 49, 0, 80, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x1200 */
|
||||
0, 81, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, 83, 4, /* 0x1210 */
|
||||
0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 85, 4, 0, 0, 76, /* 0x1220 */
|
||||
88, 77, 82, 85, 48, 52, 48, 0, 86, 4, 0, 0, 0, 0, 0, 0, /* 0x1230 */
|
||||
88, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, 0, 0, /* 0x1240 */
|
||||
0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 88, 4, 0, 0, 76, 88, /* 0x1250 */
|
||||
74, 67, 67, 48, 48, 48, 0, 94, 4, 0, 0, 0, 0, 0, 0,102, /* 0x1260 */
|
||||
4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, 0, 0, /* 0x1270 */
|
||||
76, 88, 67, 74, 48, 77, 82, 85, 0,102, 4, 0, 0, 76, 88, 67, /* 0x1280 */
|
||||
74, 49, 77, 82, 85, 0,104, 4, 0, 0, 76, 88, 67, 65, 76, 74, /* 0x1290 */
|
||||
77, 80, 0,107, 4, 0, 0, 76, 88, 67, 65, 76, 76, 48, 48, 0, /* 0x12a0 */
|
||||
110, 4, 0, 0, 0, 0, 0, 0,112, 4, 0, 0, 76, 88, 85, 78, /* 0x12b0 */
|
||||
70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x12c0 */
|
||||
49, 0,112, 4, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, 0,115, /* 0x12d0 */
|
||||
4, 0, 0, 0, 0, 0, 0,117, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x12e0 */
|
||||
48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, 82, 85, /* 0x12f0 */
|
||||
0,117, 4, 0, 0, 0, 0, 0, 0,119, 4, 0, 0, 76, 88, 85, /* 0x1300 */
|
||||
78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, 54, 77, /* 0x1310 */
|
||||
82, 85, 0,119, 4, 0, 0, 0, 0, 0, 0,121, 4, 0, 0, 76, /* 0x1320 */
|
||||
88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, /* 0x1330 */
|
||||
55, 77, 82, 85, 0,121, 4, 0, 0, 0, 0, 0, 0,123, 4, 0, /* 0x1340 */
|
||||
0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x1350 */
|
||||
67, 74, 56, 77, 82, 85, 0,123, 4, 0, 0, 0, 0, 0, 0,126, /* 0x1360 */
|
||||
4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, /* 0x1370 */
|
||||
76, 88, 85, 78, 70, 48, 51, 52, 0,126, 4, 0, 0, 0, 0, 0, /* 0x1380 */
|
||||
0,131, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 0, 0, /* 0x1390 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,131, 4, 0, 0, 77, /* 0x13a0 */
|
||||
82, 85, 66, 89, 84, 69, 50, 0,133, 4, 0, 0, 77, 82, 85, 66, /* 0x13b0 */
|
||||
73, 84, 83, 50, 0,138, 4, 0, 0, 77, 82, 85, 65, 82, 66, 50, /* 0x13c0 */
|
||||
48, 0,143, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, 0,148, /* 0x13d0 */
|
||||
4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,154, 4, 0, 0, /* 0x13e0 */
|
||||
76, 88, 85, 78, 70, 48, 51, 53, 0,155, 4, 0, 0, 67, 75, 76, /* 0x13f0 */
|
||||
76, 84, 82, 48, 48, 0,161, 4, 0, 0, 0, 0, 0, 0,165, 4, /* 0x1400 */
|
||||
0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, 0, 0, 67, /* 0x1410 */
|
||||
75, 76, 76, 84, 82, 49, 48, 0,170, 4, 0, 0, 0, 0, 0, 0, /* 0x1420 */
|
||||
184, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 6, 0, 0, /* 0x1430 */
|
||||
0, 67, 75, 76, 76, 84, 82, 50, 48, 0,184, 4, 0, 0, 0, 0, /* 0x1440 */
|
||||
0, 0,190, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, /* 0x1450 */
|
||||
0, 0, 0, 0, 0, 0, 0,194, 4, 0, 0, 67, 75, 76, 76, 84, /* 0x1460 */
|
||||
82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, 82, 51, 48, /* 0x1470 */
|
||||
0,217, 4, 0, 0, 0, 0, 0, 0,224, 4, 0, 0, 67, 75, 76, /* 0x1480 */
|
||||
76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1490 */
|
||||
52, 48, 0,224, 4, 0, 0, 0, 0, 0, 0,229, 4, 0, 0, 67, /* 0x14a0 */
|
||||
75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, 69, 88, 69, /* 0x14b0 */
|
||||
67, 48, 49, 55, 0,229, 4, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x14c0 */
|
||||
48, 0,231, 4, 0, 0, 88, 84, 72, 69, 69, 78, 68, 88, 0, 96, /* 0x14d0 */
|
||||
5, 0, 0,255,255,255,255, 96, 5 /* 0x14e0 */
|
||||
};
|
||||
|
||||
@@ -66,7 +66,7 @@ __NR_exit = 1
|
||||
msg_SELinux:
|
||||
call L71
|
||||
L70:
|
||||
.asciz "SELinux denied execmem.\n"
|
||||
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
|
||||
.p2align 2 # (1<<2)
|
||||
L71:
|
||||
li a2,L71 - L70 # length
|
||||
|
||||
+17
-17
@@ -1,4 +1,4 @@
|
||||
/* l_lx_elfppc32.h -- created from l_lx_elfppc32.bin, 600 (0x258) bytes
|
||||
/* l_lx_elfppc32.h -- created from l_lx_elfppc32.bin, 604 (0x25c) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,12 +27,12 @@
|
||||
*/
|
||||
|
||||
|
||||
#define LINUX_ELFPPC32_LOADER_SIZE 600
|
||||
#define LINUX_ELFPPC32_LOADER_ADLER32 0x4d08bce9
|
||||
#define LINUX_ELFPPC32_LOADER_CRC32 0x15fa8f8e
|
||||
#define LINUX_ELFPPC32_LOADER_SIZE 604
|
||||
#define LINUX_ELFPPC32_LOADER_ADLER32 0x0a8bbdb5
|
||||
#define LINUX_ELFPPC32_LOADER_CRC32 0xcfe347e7
|
||||
|
||||
unsigned char linux_elfppc32_loader[600] = {
|
||||
72, 0, 2, 73,124, 0, 41,236,144,166, 0, 0,124,132, 26, 20, /* 0x 0 */
|
||||
unsigned char linux_elfppc32_loader[604] = {
|
||||
72, 0, 2, 77,124, 0, 41,236,144,166, 0, 0,124,132, 26, 20, /* 0x 0 */
|
||||
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 10 */
|
||||
57, 64,255,255,125,168, 2,166, 72, 0, 1, 12, 57, 32, 0, 1, /* 0x 20 */
|
||||
125, 41, 28, 44, 56, 99, 0, 4,124, 9, 0, 64,125, 41, 72, 20, /* 0x 30 */
|
||||
@@ -59,15 +59,15 @@ unsigned char linux_elfppc32_loader[600] = {
|
||||
85, 80, 88, 32, 84,101, 97,109, 46, 32, 65,108,108, 32, 82,105, /* 0x 180 */
|
||||
103,104,116,115, 32, 82,101,115,101,114,118,101,100, 46, 32,104, /* 0x 190 */
|
||||
116,116,112, 58, 47, 47,117,112,120, 46,115,102, 46,110,101,116, /* 0x 1a0 */
|
||||
32, 36, 10, 0, 72, 0, 0, 33, 83, 69, 76,105,110,117,120, 32, /* 0x 1b0 */
|
||||
100,101,110,105,101,100, 32,101,120,101, 99,109,101,109, 46, 10, /* 0x 1c0 */
|
||||
0, 0, 0, 0, 56,160, 0, 28,124,136, 2,166, 56, 96, 0, 2, /* 0x 1d0 */
|
||||
56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127, 56, 0, 0, 1, /* 0x 1e0 */
|
||||
68, 0, 0, 2,127,200, 2,166, 57, 0, 0, 0, 56,224,255,255, /* 0x 1f0 */
|
||||
128,126, 0, 4, 56,192, 0, 50, 56,160, 0, 7, 56,128, 16, 0, /* 0x 200 */
|
||||
124, 99,242, 20, 56, 0, 0, 90, 56, 99, 16, 11, 84, 99, 0, 38, /* 0x 210 */
|
||||
68, 0, 0, 2, 65,163,255,144,127,233, 3,166,136,254, 0, 8, /* 0x 220 */
|
||||
56,193, 0,124,124,101, 27,120,124,104, 3,166,128,158, 0, 4, /* 0x 230 */
|
||||
56,126, 0, 12, 78,128, 4, 32,148, 33,255,128,188, 65, 0, 4, /* 0x 240 */
|
||||
127,232, 2,166, 75,255,255,161 /* 0x 250 */
|
||||
32, 36, 10, 0, 72, 0, 0, 37, 80, 82, 79, 84, 95, 69, 88, 69, /* 0x 1b0 */
|
||||
67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105, /* 0x 1c0 */
|
||||
108,101,100, 46, 10, 0, 0, 0, 56,160, 0, 32,124,136, 2,166, /* 0x 1d0 */
|
||||
56, 96, 0, 2, 56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127, /* 0x 1e0 */
|
||||
56, 0, 0, 1, 68, 0, 0, 2,127,200, 2,166, 57, 0, 0, 0, /* 0x 1f0 */
|
||||
56,224,255,255,128,126, 0, 4, 56,192, 0, 50, 56,160, 0, 7, /* 0x 200 */
|
||||
56,128, 16, 0,124, 99,242, 20, 56, 0, 0, 90, 56, 99, 16, 11, /* 0x 210 */
|
||||
84, 99, 0, 38, 68, 0, 0, 2, 65,163,255,140,127,233, 3,166, /* 0x 220 */
|
||||
136,254, 0, 8, 56,193, 0,124,124,101, 27,120,124,104, 3,166, /* 0x 230 */
|
||||
128,158, 0, 4, 56,126, 0, 12, 78,128, 4, 32,148, 33,255,128, /* 0x 240 */
|
||||
188, 65, 0, 4,127,232, 2,166, 75,255,255,161 /* 0x 250 */
|
||||
};
|
||||
|
||||
@@ -357,12 +357,12 @@ void upx_main(
|
||||
// FIXME: packer could set address delta
|
||||
mmap(buf + (PAGE_MASK & (header.p_filesize + ~PAGE_MASK)),
|
||||
-PAGE_MASK, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 );
|
||||
#else
|
||||
// Temporary decompression buffer.
|
||||
// FIXME: packer could set length
|
||||
buf = mmap(0, (header.p_blocksize + OVERHEAD + ~PAGE_MASK) & PAGE_MASK,
|
||||
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
|
||||
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 );
|
||||
if ((unsigned long) buf >= (unsigned long) -4095)
|
||||
goto error;
|
||||
#endif
|
||||
|
||||
@@ -143,54 +143,10 @@ decompress:
|
||||
|
||||
;__LEXEC020__
|
||||
|
||||
%define PAGE_SIZE ( 1<<12)
|
||||
|
||||
%define MAP_FIXED 0x10
|
||||
%define MAP_PRIVATE 0x02
|
||||
%define MAP_ANONYMOUS 0x20
|
||||
%define PROT_READ 1
|
||||
%define PROT_WRITE 2
|
||||
%define PROT_EXEC 4
|
||||
%define __NR_mmap 90
|
||||
|
||||
; Decompress the rest of this loader, and jump to it
|
||||
unfold:
|
||||
pop esi ; &{ sz_uncompressed, sz_compressed, compressed_data...}
|
||||
cld
|
||||
lodsd
|
||||
push eax ; sz_uncompressed (junk, actually)
|
||||
push esp ; &sz_uncompressed
|
||||
mov eax, 0x400000
|
||||
push eax ; &destination
|
||||
|
||||
; mmap a page to hold the decompressed program
|
||||
xor ecx, ecx
|
||||
push ecx
|
||||
push ecx
|
||||
mov ch, PAGE_SIZE >> 8
|
||||
push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||
push byte PROT_READ | PROT_WRITE | PROT_EXEC
|
||||
push ecx ; length
|
||||
push eax ; destination
|
||||
mov ebx, esp ; address of parameter vector for __NR_mmap
|
||||
push byte __NR_mmap
|
||||
pop eax
|
||||
int 0x80
|
||||
xchg eax, ebx
|
||||
mov bh, PAGE_SIZE>>8 ; ebx= 0x401000
|
||||
add esp, byte 6*4 ; discard args to mmap
|
||||
|
||||
lodsd
|
||||
push eax ; sz_compressed
|
||||
lodsd ; junk cto8, algo, unused[2]
|
||||
push esi ; &compressed_data
|
||||
call ebp ; decompress(&src, srclen, &dst, &dstlen)
|
||||
pop eax ; discard &compressed_data
|
||||
pop eax ; discard sz_compressed
|
||||
ret ; &destination
|
||||
main:
|
||||
pop ebp ; &decompress
|
||||
call unfold
|
||||
mov ebx, 0x401000 ; &Elf32_Ehdr of this program
|
||||
;; fall into fold_begin
|
||||
|
||||
eof:
|
||||
; __XTHEENDX__
|
||||
|
||||
+256
-259
@@ -1,4 +1,4 @@
|
||||
/* l_lx_exec86.h -- created from l_lx_exec86.bin, 5323 (0x14cb) bytes
|
||||
/* l_lx_exec86.h -- created from l_lx_exec86.bin, 5279 (0x149f) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
*/
|
||||
|
||||
|
||||
#define LINUX_I386EXEC_LOADER_SIZE 5323
|
||||
#define LINUX_I386EXEC_LOADER_ADLER32 0x1a5ac7ad
|
||||
#define LINUX_I386EXEC_LOADER_CRC32 0xc5aa06ae
|
||||
#define LINUX_I386EXEC_LOADER_SIZE 5279
|
||||
#define LINUX_I386EXEC_LOADER_ADLER32 0xf155b1a6
|
||||
#define LINUX_I386EXEC_LOADER_CRC32 0x8ea0096c
|
||||
|
||||
unsigned char linux_i386exec_loader[5323] = {
|
||||
unsigned char linux_i386exec_loader[5279] = {
|
||||
232, 0, 0, 0, 0,184, 78, 77, 82, 85, 96,106, 63,139,116, 36, /* 0x 0 */
|
||||
40,139,124, 36, 48,131,205,255,235, 0,164,235, 0,138, 6, 70, /* 0x 10 */
|
||||
136, 7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, /* 0x 20 */
|
||||
@@ -111,258 +111,255 @@ unsigned char linux_i386exec_loader[5323] = {
|
||||
128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23,117, 0, /* 0x 4c0 */
|
||||
139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1,240,137, /* 0x 4d0 */
|
||||
7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0,131,233, /* 0x 4e0 */
|
||||
1,127, 0, 97,195, 94,252,173, 80, 84,184, 0, 0, 64, 0, 80, /* 0x 4f0 */
|
||||
49,201, 81, 81,181, 16,106, 50,106, 7, 81, 80,137,227,106, 90, /* 0x 500 */
|
||||
88,205,128,147,183, 16,131,196, 24,173, 80,173, 86,255,213, 88, /* 0x 510 */
|
||||
88,195, 93,232,205,255,255,255, 76, 69, 88, 69, 67, 48, 48, 48, /* 0x 520 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 76, 69, 88, /* 0x 530 */
|
||||
69, 67, 48, 50, 48, 0, 45, 0, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x 540 */
|
||||
48, 57, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 48, 0, /* 0x 550 */
|
||||
10, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 24, 0, 0, /* 0x 560 */
|
||||
0, 0, 0, 0, 0, 26, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 570 */
|
||||
48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 27, /* 0x 580 */
|
||||
0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 590 */
|
||||
67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, /* 0x 5a0 */
|
||||
0, 29, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 35, 0, /* 0x 5b0 */
|
||||
0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 46, 0, 0, 0, 0, /* 0x 5c0 */
|
||||
0, 0, 0, 48, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, /* 0x 5d0 */
|
||||
2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, 0, 51, 0, 0, /* 0x 5e0 */
|
||||
0, 0, 0, 0, 0, 55, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, /* 0x 5f0 */
|
||||
49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 60, /* 0x 600 */
|
||||
0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, 73, 0, 0, 0, /* 0x 610 */
|
||||
0, 0, 0, 0, 86, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, /* 0x 620 */
|
||||
0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, 48, 0, 86, 0, /* 0x 630 */
|
||||
0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 640 */
|
||||
50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 0, 0, 0, 78, /* 0x 650 */
|
||||
50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, /* 0x 660 */
|
||||
69, 67, 51, 48, 0,101, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, /* 0x 670 */
|
||||
0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x 680 */
|
||||
0, 0,149, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, /* 0x 690 */
|
||||
0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0,163, 0, 0, 0, /* 0x 6a0 */
|
||||
0, 0, 0, 0,176, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x 6b0 */
|
||||
0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, 48, 0,176, 0, /* 0x 6c0 */
|
||||
0, 0, 0, 0, 0, 0,180, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 6d0 */
|
||||
51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 78, /* 0x 6e0 */
|
||||
50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, /* 0x 6f0 */
|
||||
85, 77, 77, 49, 0,191, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, /* 0x 700 */
|
||||
48, 0,191, 0, 0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,193, /* 0x 710 */
|
||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0,196, 0, 0, 0, /* 0x 720 */
|
||||
78, 50, 66, 83, 77, 65, 54, 48, 0,205, 0, 0, 0, 0, 0, 0, /* 0x 730 */
|
||||
0,217, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x 740 */
|
||||
0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,217, 0, 0, 0, 0, /* 0x 750 */
|
||||
0, 0, 0,228, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, /* 0x 760 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,242, 0, 0, 0, 78, 50, 66, 68, /* 0x 770 */
|
||||
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x 780 */
|
||||
49, 0,242, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 78, 50, /* 0x 790 */
|
||||
66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 7a0 */
|
||||
67, 54, 48, 0, 8, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, /* 0x 7b0 */
|
||||
0, 8, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 8, 1, /* 0x 7c0 */
|
||||
0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 7d0 */
|
||||
49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, /* 0x 7e0 */
|
||||
11, 1, 0, 0, 0, 0, 0, 0, 13, 1, 0, 0, 78, 50, 68, 68, /* 0x 7f0 */
|
||||
69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, /* 0x 800 */
|
||||
49, 0, 13, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 19, /* 0x 810 */
|
||||
1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, 30, 1, 0, 0, /* 0x 820 */
|
||||
0, 0, 0, 0, 32, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, /* 0x 830 */
|
||||
0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 35, 1, /* 0x 840 */
|
||||
0, 0, 0, 0, 0, 0, 39, 1, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 850 */
|
||||
49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, /* 0x 860 */
|
||||
44, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, 0, 57, 1, 0, /* 0x 870 */
|
||||
0, 0, 0, 0, 0, 70, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 880 */
|
||||
48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 70, /* 0x 890 */
|
||||
1, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 8a0 */
|
||||
67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, 85, 1, 0, 0, /* 0x 8b0 */
|
||||
78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x 8c0 */
|
||||
68, 69, 67, 51, 48, 0, 85, 1, 0, 0, 0, 0, 0, 0,101, 1, /* 0x 8d0 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 8e0 */
|
||||
0, 0, 0,119, 1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, /* 0x 8f0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,153, 1, 0, 0, 78, 50, 68, 68, /* 0x 900 */
|
||||
69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, /* 0x 910 */
|
||||
48, 0,167, 1, 0, 0, 0, 0, 0, 0,180, 1, 0, 0, 78, 50, /* 0x 920 */
|
||||
68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 930 */
|
||||
83, 52, 48, 0,180, 1, 0, 0, 0, 0, 0, 0,184, 1, 0, 0, /* 0x 940 */
|
||||
78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, /* 0x 950 */
|
||||
0,195, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x 960 */
|
||||
0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,195, 1, 0, 0, 78, /* 0x 970 */
|
||||
50, 68, 83, 77, 65, 53, 48, 0,195, 1, 0, 0, 78, 50, 68, 70, /* 0x 980 */
|
||||
65, 83, 53, 48, 0,197, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, /* 0x 990 */
|
||||
48, 0,200, 1, 0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,209, /* 0x 9a0 */
|
||||
1, 0, 0, 0, 0, 0, 0,221, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 9b0 */
|
||||
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, /* 0x 9c0 */
|
||||
0,221, 1, 0, 0, 0, 0, 0, 0,232, 1, 0, 0, 78, 50, 68, /* 0x 9d0 */
|
||||
70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 1, /* 0x 9e0 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 9f0 */
|
||||
50, 68, 70, 65, 83, 54, 49, 0,246, 1, 0, 0, 0, 0, 0, 0, /* 0x a00 */
|
||||
12, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x a10 */
|
||||
0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 12, 2, 0, 0, 78, 82, /* 0x a20 */
|
||||
86, 50, 68, 69, 78, 68, 0, 12, 2, 0, 0, 78, 50, 69, 83, 77, /* 0x a30 */
|
||||
65, 49, 48, 0, 12, 2, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0, /* 0x a40 */
|
||||
78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, /* 0x a50 */
|
||||
70, 65, 83, 49, 48, 0, 15, 2, 0, 0, 0, 0, 0, 0, 17, 2, /* 0x a60 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x a70 */
|
||||
50, 69, 70, 65, 83, 49, 49, 0, 17, 2, 0, 0, 78, 50, 69, 68, /* 0x a80 */
|
||||
69, 67, 49, 48, 0, 23, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, /* 0x a90 */
|
||||
48, 0, 34, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 78, 50, /* 0x aa0 */
|
||||
69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x ab0 */
|
||||
83, 50, 48, 0, 39, 2, 0, 0, 0, 0, 0, 0, 43, 2, 0, 0, /* 0x ac0 */
|
||||
78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x ad0 */
|
||||
68, 69, 67, 50, 48, 0, 48, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x ae0 */
|
||||
51, 48, 0, 61, 2, 0, 0, 0, 0, 0, 0, 74, 2, 0, 0, 78, /* 0x af0 */
|
||||
50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, /* 0x b00 */
|
||||
65, 83, 51, 48, 0, 74, 2, 0, 0, 0, 0, 0, 0, 80, 2, 0, /* 0x b10 */
|
||||
0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, /* 0x b20 */
|
||||
0, 0, 89, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x b30 */
|
||||
0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 89, 2, 0, 0, /* 0x b40 */
|
||||
0, 0, 0, 0,105, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, /* 0x b50 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 78, 50, 69, /* 0x b60 */
|
||||
68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,138, 2, /* 0x b70 */
|
||||
0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, /* 0x b80 */
|
||||
50, 69, 83, 77, 65, 52, 48, 0,184, 2, 0, 0, 0, 0, 0, 0, /* 0x b90 */
|
||||
197, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, /* 0x ba0 */
|
||||
0, 78, 50, 69, 70, 65, 83, 52, 48, 0,197, 2, 0, 0, 0, 0, /* 0x bb0 */
|
||||
0, 0,201, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, /* 0x bc0 */
|
||||
0, 0, 0, 0, 0, 0, 0,212, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x bd0 */
|
||||
67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, /* 0x be0 */
|
||||
0,212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, 48, 0,212, 2, /* 0x bf0 */
|
||||
0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,214, 2, 0, 0, 78, /* 0x c00 */
|
||||
50, 69, 68, 69, 67, 53, 48, 0,217, 2, 0, 0, 78, 50, 69, 83, /* 0x c10 */
|
||||
77, 65, 54, 48, 0,226, 2, 0, 0, 0, 0, 0, 0,238, 2, 0, /* 0x c20 */
|
||||
0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x c30 */
|
||||
69, 70, 65, 83, 54, 48, 0,238, 2, 0, 0, 0, 0, 0, 0,249, /* 0x c40 */
|
||||
2, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x c50 */
|
||||
0, 0, 0, 0, 7, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x c60 */
|
||||
0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 7, 3, /* 0x c70 */
|
||||
0, 0, 0, 0, 0, 0, 29, 3, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x c80 */
|
||||
49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, /* 0x c90 */
|
||||
29, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, 0, 29, 3, 0, /* 0x ca0 */
|
||||
0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 29, 3, 0, 0, 67, 84, /* 0x cb0 */
|
||||
67, 76, 69, 86, 69, 49, 0, 43, 3, 0, 0, 0, 0, 0, 0, 48, /* 0x cc0 */
|
||||
3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 5, 0, 0, 0, /* 0x cd0 */
|
||||
67, 65, 76, 76, 84, 82, 48, 49, 0, 48, 3, 0, 0, 67, 84, 68, /* 0x ce0 */
|
||||
85, 77, 77, 89, 49, 0, 53, 3, 0, 0, 67, 84, 66, 83, 72, 82, /* 0x cf0 */
|
||||
48, 49, 0, 53, 3, 0, 0, 67, 84, 66, 82, 79, 82, 48, 49, 0, /* 0x d00 */
|
||||
57, 3, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, 0, 59, 3, 0, /* 0x d10 */
|
||||
0, 67, 65, 76, 76, 84, 82, 48, 50, 0, 64, 3, 0, 0, 0, 0, /* 0x d20 */
|
||||
0, 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 10, /* 0x d30 */
|
||||
0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, 78, 3, 0, 0, /* 0x d40 */
|
||||
67, 65, 76, 76, 84, 82, 69, 56, 0, 83, 3, 0, 0, 67, 65, 76, /* 0x d50 */
|
||||
76, 84, 82, 69, 57, 0, 85, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d60 */
|
||||
49, 49, 0, 87, 3, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 67, /* 0x d70 */
|
||||
65, 76, 76, 84, 82, 49, 51, 0, 5, 0, 0, 0, 67, 84, 67, 76, /* 0x d80 */
|
||||
69, 86, 69, 50, 0, 91, 3, 0, 0, 0, 0, 0, 0, 96, 3, 0, /* 0x d90 */
|
||||
0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, 0, 0, 67, 65, /* 0x da0 */
|
||||
76, 76, 84, 82, 49, 50, 0, 96, 3, 0, 0, 67, 84, 68, 85, 77, /* 0x db0 */
|
||||
77, 89, 50, 0, 98, 3, 0, 0, 67, 84, 66, 83, 72, 82, 49, 49, /* 0x dc0 */
|
||||
0, 98, 3, 0, 0, 67, 84, 66, 82, 79, 82, 49, 49, 0,102, 3, /* 0x dd0 */
|
||||
0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0,104, 3, 0, 0, 67, /* 0x de0 */
|
||||
65, 76, 76, 84, 82, 49, 51, 0,109, 3, 0, 0, 0, 0, 0, 0, /* 0x df0 */
|
||||
114, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, 5, 0, 0, /* 0x e00 */
|
||||
0, 67, 84, 84, 72, 69, 69, 78, 68, 0,114, 3, 0, 0, 76, 69, /* 0x e10 */
|
||||
88, 69, 67, 48, 49, 53, 0,114, 3, 0, 0, 76, 69, 88, 69, 67, /* 0x e20 */
|
||||
49, 49, 48, 0,146, 3, 0, 0, 76, 69, 88, 69, 67, 49, 48, 48, /* 0x e30 */
|
||||
0,152, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,153, 3, /* 0x e40 */
|
||||
0, 0, 0, 0, 0, 0,155, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x e50 */
|
||||
49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0, /* 0x e60 */
|
||||
155, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,160, 3, 0, /* 0x e70 */
|
||||
0, 76, 88, 77, 82, 85, 48, 48, 53, 0,162, 3, 0, 0, 76, 88, /* 0x e80 */
|
||||
77, 82, 85, 48, 48, 54, 0,167, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x e90 */
|
||||
48, 48, 55, 0,174, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, /* 0x ea0 */
|
||||
0,181, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,185, 3, /* 0x eb0 */
|
||||
0, 0, 0, 0, 0, 0,190, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x ec0 */
|
||||
52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, /* 0x ed0 */
|
||||
190, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,193, 3, 0, /* 0x ee0 */
|
||||
0, 76, 88, 77, 82, 85, 48, 52, 54, 0,196, 3, 0, 0, 76, 88, /* 0x ef0 */
|
||||
74, 67, 67, 48, 50, 48, 0,198, 3, 0, 0, 0, 0, 0, 0,200, /* 0x f00 */
|
||||
3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x f10 */
|
||||
76, 88, 74, 67, 67, 48, 50, 49, 0,200, 3, 0, 0, 0, 0, 0, /* 0x f20 */
|
||||
0,205, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, /* 0x f30 */
|
||||
0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,205, 3, 0, 0, 76, /* 0x f40 */
|
||||
88, 85, 78, 70, 48, 51, 55, 0,212, 3, 0, 0, 76, 88, 85, 78, /* 0x f50 */
|
||||
70, 51, 56, 54, 0,214, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, /* 0x f60 */
|
||||
55, 0,215, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0,224, /* 0x f70 */
|
||||
3, 0, 0, 0, 0, 0, 0,227, 3, 0, 0, 76, 88, 85, 78, 70, /* 0x f80 */
|
||||
48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, /* 0x f90 */
|
||||
0,227, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,231, 3, /* 0x fa0 */
|
||||
0, 0, 0, 0, 0, 0,233, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x fb0 */
|
||||
52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0, /* 0x fc0 */
|
||||
233, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, 76, 88, 77, 82, /* 0x fd0 */
|
||||
85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x fe0 */
|
||||
51, 0,237, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0,239, /* 0x ff0 */
|
||||
3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,240, 3, 0, 0, /* 0x1000 */
|
||||
77, 82, 85, 65, 82, 66, 52, 48, 0,242, 3, 0, 0, 76, 88, 77, /* 0x1010 */
|
||||
82, 85, 48, 55, 48, 0,246, 3, 0, 0, 0, 0, 0, 0,251, 3, /* 0x1020 */
|
||||
0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, /* 0x1030 */
|
||||
82, 85, 66, 89, 84, 69, 52, 0,254, 3, 0, 0, 77, 82, 85, 66, /* 0x1040 */
|
||||
73, 84, 83, 52, 0, 1, 4, 0, 0, 77, 82, 85, 65, 82, 66, 53, /* 0x1050 */
|
||||
48, 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0, 9, /* 0x1060 */
|
||||
4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0, 12, 4, 0, 0, /* 0x1070 */
|
||||
77, 82, 85, 65, 82, 66, 54, 48, 0, 14, 4, 0, 0, 77, 82, 85, /* 0x1080 */
|
||||
66, 73, 84, 83, 53, 0, 15, 4, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x1090 */
|
||||
55, 48, 0, 17, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, /* 0x10a0 */
|
||||
21, 4, 0, 0, 0, 0, 0, 0, 28, 4, 0, 0, 76, 88, 77, 82, /* 0x10b0 */
|
||||
85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x10c0 */
|
||||
54, 0, 32, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 34, /* 0x10d0 */
|
||||
4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 35, 4, 0, 0, /* 0x10e0 */
|
||||
77, 82, 85, 65, 82, 66, 57, 48, 0, 37, 4, 0, 0, 76, 88, 77, /* 0x10f0 */
|
||||
82, 85, 49, 48, 48, 0, 41, 4, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1100 */
|
||||
52, 48, 0, 57, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, /* 0x1110 */
|
||||
62, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 65, 4, 0, /* 0x1120 */
|
||||
0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 67, 4, 0, 0, 0, 0, /* 0x1130 */
|
||||
0, 0, 74, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, /* 0x1140 */
|
||||
0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 74, 4, 0, 0, /* 0x1150 */
|
||||
76, 69, 88, 69, 67, 48, 49, 54, 0, 74, 4, 0, 0, 0, 0, 0, /* 0x1160 */
|
||||
0, 76, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, /* 0x1170 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 76, 4, 0, 0, 76, /* 0x1180 */
|
||||
88, 74, 77, 80, 65, 48, 48, 0, 77, 4, 0, 0, 76, 88, 67, 65, /* 0x1190 */
|
||||
76, 76, 66, 48, 0, 79, 4, 0, 0, 76, 88, 85, 78, 70, 48, 50, /* 0x11a0 */
|
||||
49, 0, 81, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, 87, /* 0x11b0 */
|
||||
4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 90, 4, 0, 0, /* 0x11c0 */
|
||||
76, 88, 67, 65, 76, 76, 66, 49, 0, 92, 4, 0, 0, 77, 82, 85, /* 0x11d0 */
|
||||
66, 73, 84, 83, 49, 0, 94, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x11e0 */
|
||||
51, 48, 0, 95, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, /* 0x11f0 */
|
||||
97, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 99, 4, 0, /* 0x1200 */
|
||||
0, 76, 88, 77, 82, 85, 48, 52, 48, 0,100, 4, 0, 0, 0, 0, /* 0x1210 */
|
||||
0, 0,102, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, /* 0x1220 */
|
||||
0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0,102, 4, 0, 0, /* 0x1230 */
|
||||
76, 88, 74, 67, 67, 48, 48, 48, 0,108, 4, 0, 0, 0, 0, 0, /* 0x1240 */
|
||||
0,116, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, /* 0x1250 */
|
||||
0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,116, 4, 0, 0, 76, /* 0x1260 */
|
||||
88, 67, 74, 49, 77, 82, 85, 0,118, 4, 0, 0, 76, 88, 67, 65, /* 0x1270 */
|
||||
76, 74, 77, 80, 0,121, 4, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x1280 */
|
||||
48, 0,124, 4, 0, 0, 0, 0, 0, 0,126, 4, 0, 0, 76, 88, /* 0x1290 */
|
||||
85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, /* 0x12a0 */
|
||||
76, 48, 49, 0,126, 4, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, /* 0x12b0 */
|
||||
0,129, 4, 0, 0, 0, 0, 0, 0,131, 4, 0, 0, 76, 88, 85, /* 0x12c0 */
|
||||
78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, /* 0x12d0 */
|
||||
82, 85, 0,131, 4, 0, 0, 0, 0, 0, 0,133, 4, 0, 0, 76, /* 0x12e0 */
|
||||
88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x12f0 */
|
||||
54, 77, 82, 85, 0,133, 4, 0, 0, 0, 0, 0, 0,135, 4, 0, /* 0x1300 */
|
||||
0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x1310 */
|
||||
67, 74, 55, 77, 82, 85, 0,135, 4, 0, 0, 0, 0, 0, 0,137, /* 0x1320 */
|
||||
4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, /* 0x1330 */
|
||||
76, 88, 67, 74, 56, 77, 82, 85, 0,137, 4, 0, 0, 0, 0, 0, /* 0x1340 */
|
||||
0,140, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, /* 0x1350 */
|
||||
0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,140, 4, 0, 0, 0, /* 0x1360 */
|
||||
0, 0, 0,145, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, /* 0x1370 */
|
||||
0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,145, 4, 0, /* 0x1380 */
|
||||
0, 77, 82, 85, 66, 89, 84, 69, 50, 0,147, 4, 0, 0, 77, 82, /* 0x1390 */
|
||||
85, 66, 73, 84, 83, 50, 0,152, 4, 0, 0, 77, 82, 85, 65, 82, /* 0x13a0 */
|
||||
66, 50, 48, 0,157, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, /* 0x13b0 */
|
||||
0,162, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,168, 4, /* 0x13c0 */
|
||||
0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,169, 4, 0, 0, 67, /* 0x13d0 */
|
||||
75, 76, 76, 84, 82, 48, 48, 0,175, 4, 0, 0, 0, 0, 0, 0, /* 0x13e0 */
|
||||
179, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, 0, /* 0x13f0 */
|
||||
0, 67, 75, 76, 76, 84, 82, 49, 48, 0,184, 4, 0, 0, 0, 0, /* 0x1400 */
|
||||
0, 0,198, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 6, /* 0x1410 */
|
||||
0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,198, 4, 0, 0, /* 0x1420 */
|
||||
0, 0, 0, 0,204, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, /* 0x1430 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,208, 4, 0, 0, 67, 75, 76, /* 0x1440 */
|
||||
76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1450 */
|
||||
51, 48, 0,231, 4, 0, 0, 0, 0, 0, 0,238, 4, 0, 0, 67, /* 0x1460 */
|
||||
75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, 76, /* 0x1470 */
|
||||
84, 82, 52, 48, 0,238, 4, 0, 0, 0, 0, 0, 0,243, 4, 0, /* 0x1480 */
|
||||
0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, 69, /* 0x1490 */
|
||||
88, 69, 67, 48, 49, 55, 0,243, 4, 0, 0, 76, 69, 88, 69, 67, /* 0x14a0 */
|
||||
48, 50, 48, 0,245, 4, 0, 0, 88, 84, 72, 69, 69, 78, 68, 88, /* 0x14b0 */
|
||||
0, 40, 5, 0, 0,255,255,255,255, 40, 5 /* 0x14c0 */
|
||||
1,127, 0, 97,195, 93,187, 0, 16, 64, 0, 0, 76, 69, 88, 69, /* 0x 4f0 */
|
||||
67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, /* 0x 500 */
|
||||
0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 0, 0, 0, 0, 76, 69, /* 0x 510 */
|
||||
88, 69, 67, 48, 48, 57, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, /* 0x 520 */
|
||||
48, 49, 48, 0, 10, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, /* 0x 530 */
|
||||
0, 24, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 78, 50, 66, /* 0x 540 */
|
||||
68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 550 */
|
||||
49, 48, 0, 27, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 78, /* 0x 560 */
|
||||
50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, /* 0x 570 */
|
||||
65, 83, 49, 49, 0, 29, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 580 */
|
||||
48, 0, 35, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 46, /* 0x 590 */
|
||||
0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 5a0 */
|
||||
65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, /* 0x 5b0 */
|
||||
0, 51, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 78, 50, 66, /* 0x 5c0 */
|
||||
70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 5d0 */
|
||||
50, 48, 0, 60, 0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, /* 0x 5e0 */
|
||||
73, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 78, 50, 66, 68, /* 0x 5f0 */
|
||||
69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, /* 0x 600 */
|
||||
48, 0, 86, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 78, 50, /* 0x 610 */
|
||||
66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, /* 0x 620 */
|
||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, /* 0x 630 */
|
||||
78, 50, 66, 68, 69, 67, 51, 48, 0,101, 0, 0, 0, 0, 0, 0, /* 0x 640 */
|
||||
0,119, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, /* 0x 650 */
|
||||
0, 0, 0, 0, 0, 0,149, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 660 */
|
||||
53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0, /* 0x 670 */
|
||||
163, 0, 0, 0, 0, 0, 0, 0,176, 0, 0, 0, 78, 50, 66, 68, /* 0x 680 */
|
||||
69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, /* 0x 690 */
|
||||
48, 0,176, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 78, 50, /* 0x 6a0 */
|
||||
66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,191, /* 0x 6b0 */
|
||||
0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, /* 0x 6c0 */
|
||||
78, 50, 66, 68, 85, 77, 77, 49, 0,191, 0, 0, 0, 78, 50, 66, /* 0x 6d0 */
|
||||
83, 77, 65, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 6e0 */
|
||||
53, 48, 0,193, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, /* 0x 6f0 */
|
||||
196, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0,205, 0, 0, /* 0x 700 */
|
||||
0, 0, 0, 0, 0,217, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 710 */
|
||||
48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,217, /* 0x 720 */
|
||||
0, 0, 0, 0, 0, 0, 0,228, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 730 */
|
||||
83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,242, 0, 0, 0, /* 0x 740 */
|
||||
78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 750 */
|
||||
70, 65, 83, 54, 49, 0,242, 0, 0, 0, 0, 0, 0, 0, 8, 1, /* 0x 760 */
|
||||
0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 770 */
|
||||
50, 66, 68, 69, 67, 54, 48, 0, 8, 1, 0, 0, 78, 82, 86, 50, /* 0x 780 */
|
||||
66, 69, 78, 68, 0, 8, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, /* 0x 790 */
|
||||
48, 0, 8, 1, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 78, 50, /* 0x 7a0 */
|
||||
68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 7b0 */
|
||||
83, 49, 48, 0, 11, 1, 0, 0, 0, 0, 0, 0, 13, 1, 0, 0, /* 0x 7c0 */
|
||||
78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, /* 0x 7d0 */
|
||||
70, 65, 83, 49, 49, 0, 13, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 7e0 */
|
||||
49, 48, 0, 19, 1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, /* 0x 7f0 */
|
||||
30, 1, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 78, 50, 68, 83, /* 0x 800 */
|
||||
77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, /* 0x 810 */
|
||||
48, 0, 35, 1, 0, 0, 0, 0, 0, 0, 39, 1, 0, 0, 78, 50, /* 0x 820 */
|
||||
68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, /* 0x 830 */
|
||||
67, 50, 48, 0, 44, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, /* 0x 840 */
|
||||
0, 57, 1, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 78, 50, 68, /* 0x 850 */
|
||||
68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 860 */
|
||||
51, 48, 0, 70, 1, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 78, /* 0x 870 */
|
||||
50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, /* 0x 880 */
|
||||
85, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, /* 0x 890 */
|
||||
0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 85, 1, 0, 0, 0, 0, /* 0x 8a0 */
|
||||
0, 0,101, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, /* 0x 8b0 */
|
||||
0, 0, 0, 0, 0, 0, 0,119, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 8c0 */
|
||||
67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 1, 0, 0, /* 0x 8d0 */
|
||||
78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x 8e0 */
|
||||
83, 77, 65, 52, 48, 0,167, 1, 0, 0, 0, 0, 0, 0,180, 1, /* 0x 8f0 */
|
||||
0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, /* 0x 900 */
|
||||
50, 68, 70, 65, 83, 52, 48, 0,180, 1, 0, 0, 0, 0, 0, 0, /* 0x 910 */
|
||||
184, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, /* 0x 920 */
|
||||
0, 0, 0, 0, 0,195, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 930 */
|
||||
48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,195, /* 0x 940 */
|
||||
1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0,195, 1, 0, 0, /* 0x 950 */
|
||||
78, 50, 68, 70, 65, 83, 53, 48, 0,197, 1, 0, 0, 78, 50, 68, /* 0x 960 */
|
||||
68, 69, 67, 53, 48, 0,200, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 970 */
|
||||
54, 48, 0,209, 1, 0, 0, 0, 0, 0, 0,221, 1, 0, 0, 78, /* 0x 980 */
|
||||
50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, /* 0x 990 */
|
||||
65, 83, 54, 48, 0,221, 1, 0, 0, 0, 0, 0, 0,232, 1, 0, /* 0x 9a0 */
|
||||
0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, /* 0x 9b0 */
|
||||
0, 0,246, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, /* 0x 9c0 */
|
||||
0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0,246, 1, 0, 0, /* 0x 9d0 */
|
||||
0, 0, 0, 0, 12, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x 9e0 */
|
||||
0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 12, 2, /* 0x 9f0 */
|
||||
0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 12, 2, 0, 0, 78, /* 0x a00 */
|
||||
50, 69, 83, 77, 65, 49, 48, 0, 12, 2, 0, 0, 0, 0, 0, 0, /* 0x a10 */
|
||||
14, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x a20 */
|
||||
0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 15, 2, 0, 0, 0, 0, /* 0x a30 */
|
||||
0, 0, 17, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, /* 0x a40 */
|
||||
0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 17, 2, 0, 0, /* 0x a50 */
|
||||
78, 50, 69, 68, 69, 67, 49, 48, 0, 23, 2, 0, 0, 78, 50, 69, /* 0x a60 */
|
||||
83, 77, 65, 50, 48, 0, 34, 2, 0, 0, 0, 0, 0, 0, 36, 2, /* 0x a70 */
|
||||
0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, /* 0x a80 */
|
||||
50, 69, 70, 65, 83, 50, 48, 0, 39, 2, 0, 0, 0, 0, 0, 0, /* 0x a90 */
|
||||
43, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, /* 0x aa0 */
|
||||
0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 48, 2, 0, 0, 78, 50, /* 0x ab0 */
|
||||
69, 83, 77, 65, 51, 48, 0, 61, 2, 0, 0, 0, 0, 0, 0, 74, /* 0x ac0 */
|
||||
2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, /* 0x ad0 */
|
||||
78, 50, 69, 70, 65, 83, 51, 48, 0, 74, 2, 0, 0, 0, 0, 0, /* 0x ae0 */
|
||||
0, 80, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, /* 0x af0 */
|
||||
0, 0, 0, 0, 0, 0, 89, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b00 */
|
||||
51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b10 */
|
||||
89, 2, 0, 0, 0, 0, 0, 0,105, 2, 0, 0, 78, 50, 69, 68, /* 0x b20 */
|
||||
69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, /* 0x b30 */
|
||||
0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x b40 */
|
||||
0, 0,138, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, /* 0x b50 */
|
||||
0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,184, 2, 0, 0, /* 0x b60 */
|
||||
0, 0, 0, 0,197, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x b70 */
|
||||
0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, 0,197, 2, /* 0x b80 */
|
||||
0, 0, 0, 0, 0, 0,201, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b90 */
|
||||
51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,212, 2, 0, 0, 78, /* 0x ba0 */
|
||||
50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, /* 0x bb0 */
|
||||
85, 77, 77, 49, 0,212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, /* 0x bc0 */
|
||||
48, 0,212, 2, 0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,214, /* 0x bd0 */
|
||||
2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0,217, 2, 0, 0, /* 0x be0 */
|
||||
78, 50, 69, 83, 77, 65, 54, 48, 0,226, 2, 0, 0, 0, 0, 0, /* 0x bf0 */
|
||||
0,238, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x c00 */
|
||||
0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,238, 2, 0, 0, 0, /* 0x c10 */
|
||||
0, 0, 0,249, 2, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, /* 0x c20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 78, 50, 69, 68, /* 0x c30 */
|
||||
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, /* 0x c40 */
|
||||
49, 0, 7, 3, 0, 0, 0, 0, 0, 0, 29, 3, 0, 0, 78, 50, /* 0x c50 */
|
||||
69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x c60 */
|
||||
67, 54, 48, 0, 29, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, /* 0x c70 */
|
||||
0, 29, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 29, 3, /* 0x c80 */
|
||||
0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 43, 3, 0, 0, 0, /* 0x c90 */
|
||||
0, 0, 0, 48, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, /* 0x ca0 */
|
||||
5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, 48, 3, 0, /* 0x cb0 */
|
||||
0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 53, 3, 0, 0, 67, 84, /* 0x cc0 */
|
||||
66, 83, 72, 82, 48, 49, 0, 53, 3, 0, 0, 67, 84, 66, 82, 79, /* 0x cd0 */
|
||||
82, 48, 49, 0, 57, 3, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, /* 0x ce0 */
|
||||
0, 59, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, 0, 64, 3, /* 0x cf0 */
|
||||
0, 0, 0, 0, 0, 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d00 */
|
||||
48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, /* 0x d10 */
|
||||
78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0, 83, 3, 0, /* 0x d20 */
|
||||
0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 85, 3, 0, 0, 67, 65, /* 0x d30 */
|
||||
76, 76, 84, 82, 49, 49, 0, 87, 3, 0, 0, 0, 0, 0, 0, 91, /* 0x d40 */
|
||||
3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 5, 0, 0, 0, /* 0x d50 */
|
||||
67, 84, 67, 76, 69, 86, 69, 50, 0, 91, 3, 0, 0, 0, 0, 0, /* 0x d60 */
|
||||
0, 96, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, /* 0x d70 */
|
||||
0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 96, 3, 0, 0, 67, /* 0x d80 */
|
||||
84, 68, 85, 77, 77, 89, 50, 0, 98, 3, 0, 0, 67, 84, 66, 83, /* 0x d90 */
|
||||
72, 82, 49, 49, 0, 98, 3, 0, 0, 67, 84, 66, 82, 79, 82, 49, /* 0x da0 */
|
||||
49, 0,102, 3, 0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0,104, /* 0x db0 */
|
||||
3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,109, 3, 0, 0, /* 0x dc0 */
|
||||
0, 0, 0, 0,114, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, /* 0x dd0 */
|
||||
0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, 0,114, 3, /* 0x de0 */
|
||||
0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,114, 3, 0, 0, 76, /* 0x df0 */
|
||||
69, 88, 69, 67, 49, 49, 48, 0,146, 3, 0, 0, 76, 69, 88, 69, /* 0x e00 */
|
||||
67, 49, 48, 48, 0,152, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, /* 0x e10 */
|
||||
48, 0,153, 3, 0, 0, 0, 0, 0, 0,155, 3, 0, 0, 76, 88, /* 0x e20 */
|
||||
85, 78, 70, 48, 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, /* 0x e30 */
|
||||
48, 48, 50, 0,155, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, /* 0x e40 */
|
||||
0,160, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 53, 0,162, 3, /* 0x e50 */
|
||||
0, 0, 76, 88, 77, 82, 85, 48, 48, 54, 0,167, 3, 0, 0, 76, /* 0x e60 */
|
||||
88, 77, 82, 85, 48, 48, 55, 0,174, 3, 0, 0, 76, 88, 85, 78, /* 0x e70 */
|
||||
70, 48, 48, 56, 0,181, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, /* 0x e80 */
|
||||
48, 0,185, 3, 0, 0, 0, 0, 0, 0,190, 3, 0, 0, 76, 88, /* 0x e90 */
|
||||
85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, /* 0x ea0 */
|
||||
48, 49, 48, 0,190, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, /* 0x eb0 */
|
||||
0,193, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 54, 0,196, 3, /* 0x ec0 */
|
||||
0, 0, 76, 88, 74, 67, 67, 48, 50, 48, 0,198, 3, 0, 0, 0, /* 0x ed0 */
|
||||
0, 0, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, /* 0x ee0 */
|
||||
0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 49, 0,200, 3, 0, /* 0x ef0 */
|
||||
0, 0, 0, 0, 0,205, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x f00 */
|
||||
52, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,205, /* 0x f10 */
|
||||
3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0,212, 3, 0, 0, /* 0x f20 */
|
||||
76, 88, 85, 78, 70, 51, 56, 54, 0,214, 3, 0, 0, 76, 88, 85, /* 0x f30 */
|
||||
78, 70, 51, 56, 55, 0,215, 3, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x f40 */
|
||||
56, 56, 0,224, 3, 0, 0, 0, 0, 0, 0,227, 3, 0, 0, 76, /* 0x f50 */
|
||||
88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, /* 0x f60 */
|
||||
70, 52, 56, 54, 0,227, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, /* 0x f70 */
|
||||
55, 0,231, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 76, 88, /* 0x f80 */
|
||||
85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, /* 0x f90 */
|
||||
48, 54, 53, 0,233, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, /* 0x fa0 */
|
||||
76, 88, 77, 82, 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, /* 0x fb0 */
|
||||
66, 89, 84, 69, 51, 0,237, 3, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x fc0 */
|
||||
51, 48, 0,239, 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0, /* 0x fd0 */
|
||||
240, 3, 0, 0, 77, 82, 85, 65, 82, 66, 52, 48, 0,242, 3, 0, /* 0x fe0 */
|
||||
0, 76, 88, 77, 82, 85, 48, 55, 48, 0,246, 3, 0, 0, 0, 0, /* 0x ff0 */
|
||||
0, 0,251, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, /* 0x1000 */
|
||||
0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 52, 0,254, 3, 0, 0, /* 0x1010 */
|
||||
77, 82, 85, 66, 73, 84, 83, 52, 0, 1, 4, 0, 0, 77, 82, 85, /* 0x1020 */
|
||||
65, 82, 66, 53, 48, 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x1030 */
|
||||
56, 48, 0, 9, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0, /* 0x1040 */
|
||||
12, 4, 0, 0, 77, 82, 85, 65, 82, 66, 54, 48, 0, 14, 4, 0, /* 0x1050 */
|
||||
0, 77, 82, 85, 66, 73, 84, 83, 53, 0, 15, 4, 0, 0, 77, 82, /* 0x1060 */
|
||||
85, 65, 82, 66, 55, 48, 0, 17, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x1070 */
|
||||
48, 57, 48, 0, 21, 4, 0, 0, 0, 0, 0, 0, 28, 4, 0, 0, /* 0x1080 */
|
||||
76, 88, 77, 82, 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, /* 0x1090 */
|
||||
66, 89, 84, 69, 54, 0, 32, 4, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x10a0 */
|
||||
56, 48, 0, 34, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, /* 0x10b0 */
|
||||
35, 4, 0, 0, 77, 82, 85, 65, 82, 66, 57, 48, 0, 37, 4, 0, /* 0x10c0 */
|
||||
0, 76, 88, 77, 82, 85, 49, 48, 48, 0, 41, 4, 0, 0, 76, 88, /* 0x10d0 */
|
||||
85, 78, 70, 48, 52, 48, 0, 57, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x10e0 */
|
||||
49, 49, 48, 0, 62, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, /* 0x10f0 */
|
||||
0, 65, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 67, 4, /* 0x1100 */
|
||||
0, 0, 0, 0, 0, 0, 74, 4, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1110 */
|
||||
51, 52, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, /* 0x1120 */
|
||||
74, 4, 0, 0, 76, 69, 88, 69, 67, 48, 49, 54, 0, 74, 4, 0, /* 0x1130 */
|
||||
0, 0, 0, 0, 0, 76, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, /* 0x1140 */
|
||||
50, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 76, /* 0x1150 */
|
||||
4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 48, 0, 77, 4, 0, 0, /* 0x1160 */
|
||||
76, 88, 67, 65, 76, 76, 66, 48, 0, 79, 4, 0, 0, 76, 88, 85, /* 0x1170 */
|
||||
78, 70, 48, 50, 49, 0, 81, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x1180 */
|
||||
50, 50, 0, 87, 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, /* 0x1190 */
|
||||
90, 4, 0, 0, 76, 88, 67, 65, 76, 76, 66, 49, 0, 92, 4, 0, /* 0x11a0 */
|
||||
0, 77, 82, 85, 66, 73, 84, 83, 49, 0, 94, 4, 0, 0, 76, 88, /* 0x11b0 */
|
||||
77, 82, 85, 48, 51, 48, 0, 95, 4, 0, 0, 77, 82, 85, 66, 89, /* 0x11c0 */
|
||||
84, 69, 49, 0, 97, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, /* 0x11d0 */
|
||||
0, 99, 4, 0, 0, 76, 88, 77, 82, 85, 48, 52, 48, 0,100, 4, /* 0x11e0 */
|
||||
0, 0, 0, 0, 0, 0,102, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x11f0 */
|
||||
51, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, /* 0x1200 */
|
||||
102, 4, 0, 0, 76, 88, 74, 67, 67, 48, 48, 48, 0,108, 4, 0, /* 0x1210 */
|
||||
0, 0, 0, 0, 0,116, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, /* 0x1220 */
|
||||
48, 0, 0, 0, 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,116, /* 0x1230 */
|
||||
4, 0, 0, 76, 88, 67, 74, 49, 77, 82, 85, 0,118, 4, 0, 0, /* 0x1240 */
|
||||
76, 88, 67, 65, 76, 74, 77, 80, 0,121, 4, 0, 0, 76, 88, 67, /* 0x1250 */
|
||||
65, 76, 76, 48, 48, 0,124, 4, 0, 0, 0, 0, 0, 0,126, 4, /* 0x1260 */
|
||||
0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, /* 0x1270 */
|
||||
88, 67, 65, 76, 76, 48, 49, 0,126, 4, 0, 0, 76, 88, 67, 74, /* 0x1280 */
|
||||
50, 77, 82, 85, 0,129, 4, 0, 0, 0, 0, 0, 0,131, 4, 0, /* 0x1290 */
|
||||
0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, /* 0x12a0 */
|
||||
67, 74, 52, 77, 82, 85, 0,131, 4, 0, 0, 0, 0, 0, 0,133, /* 0x12b0 */
|
||||
4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x12c0 */
|
||||
76, 88, 67, 74, 54, 77, 82, 85, 0,133, 4, 0, 0, 0, 0, 0, /* 0x12d0 */
|
||||
0,135, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, /* 0x12e0 */
|
||||
0, 0, 76, 88, 67, 74, 55, 77, 82, 85, 0,135, 4, 0, 0, 0, /* 0x12f0 */
|
||||
0, 0, 0,137, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, /* 0x1300 */
|
||||
1, 0, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0,137, 4, 0, /* 0x1310 */
|
||||
0, 0, 0, 0, 0,140, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x1320 */
|
||||
55, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,140, /* 0x1330 */
|
||||
4, 0, 0, 0, 0, 0, 0,145, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x1340 */
|
||||
48, 51, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, /* 0x1350 */
|
||||
0,145, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 50, 0,147, 4, /* 0x1360 */
|
||||
0, 0, 77, 82, 85, 66, 73, 84, 83, 50, 0,152, 4, 0, 0, 77, /* 0x1370 */
|
||||
82, 85, 65, 82, 66, 50, 48, 0,157, 4, 0, 0, 76, 88, 77, 82, /* 0x1380 */
|
||||
85, 48, 53, 55, 0,162, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, /* 0x1390 */
|
||||
56, 0,168, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,169, /* 0x13a0 */
|
||||
4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0,175, 4, 0, 0, /* 0x13b0 */
|
||||
0, 0, 0, 0,179, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, /* 0x13c0 */
|
||||
0, 30, 0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,184, 4, /* 0x13d0 */
|
||||
0, 0, 0, 0, 0, 0,198, 4, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x13e0 */
|
||||
50, 48, 0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, /* 0x13f0 */
|
||||
198, 4, 0, 0, 0, 0, 0, 0,204, 4, 0, 0, 67, 75, 76, 76, /* 0x1400 */
|
||||
84, 82, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 4, 0, /* 0x1410 */
|
||||
0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, /* 0x1420 */
|
||||
76, 76, 84, 82, 51, 48, 0,231, 4, 0, 0, 0, 0, 0, 0,238, /* 0x1430 */
|
||||
4, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, /* 0x1440 */
|
||||
67, 75, 76, 76, 84, 82, 52, 48, 0,238, 4, 0, 0, 0, 0, 0, /* 0x1450 */
|
||||
0,243, 4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, /* 0x1460 */
|
||||
0, 0, 76, 69, 88, 69, 67, 48, 49, 55, 0,243, 4, 0, 0, 76, /* 0x1470 */
|
||||
69, 88, 69, 67, 48, 50, 48, 0,245, 4, 0, 0, 88, 84, 72, 69, /* 0x1480 */
|
||||
69, 78, 68, 88, 0,251, 4, 0, 0,255,255,255,255,251, 4 /* 0x1490 */
|
||||
};
|
||||
|
||||
@@ -33,7 +33,7 @@ OUTPUT_ARCH(i386)
|
||||
/*ENTRY(_start)*/
|
||||
PHDRS /* force exactly 1 ELF32_Phdr: in particular, no PT_GNU_STACK */
|
||||
{
|
||||
phdr0 PT_LOAD FILEHDR PHDRS FLAGS(7);
|
||||
phdr0 PT_LOAD FILEHDR PHDRS FLAGS(5); /* no PF_W: strict SELinux, PaX, grSecurity */
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
|
||||
+2
-2
@@ -209,7 +209,7 @@ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum)
|
||||
lo -= ~PAGE_MASK & lo; // round down to page boundary
|
||||
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
|
||||
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
|
||||
addr = mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC, mflags, 0, 0);
|
||||
addr = mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC, mflags, -1, 0);
|
||||
|
||||
// Doing this may destroy the brk() that we set so carefully above.
|
||||
// The munmap() is "needed" only for discontiguous PT_LOAD,
|
||||
@@ -266,7 +266,7 @@ ERR_LAB
|
||||
addr += mlen + frag; /* page boundary on hi end */
|
||||
if (addr < haddr) { // need pages for .bss
|
||||
if (addr != mmap(addr, haddr - addr, prot,
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ) ) {
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) {
|
||||
err_exit(9);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ unfold:
|
||||
add ecx, 1+ 3+ (3 -1)+ PAGE_SIZE ; '\0' + "-c" + decompr_overrun + stub
|
||||
|
||||
push eax ; offset (ignored when MAP_ANONYMOUS)
|
||||
push eax ; fd (ignored when MAP_ANONYMOUS)
|
||||
push byte -1 ; fd [required by *BSD for MAP_ANONYMOUS]
|
||||
push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||
push byte PROT_READ | PROT_WRITE | PROT_EXEC
|
||||
push ecx ; length
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
|
||||
|
||||
#define LINUX_I386SH_LOADER_SIZE 4416
|
||||
#define LINUX_I386SH_LOADER_ADLER32 0x93e2f039
|
||||
#define LINUX_I386SH_LOADER_CRC32 0x1614a613
|
||||
#define LINUX_I386SH_LOADER_ADLER32 0x7a82f154
|
||||
#define LINUX_I386SH_LOADER_CRC32 0x82883299
|
||||
|
||||
unsigned char linux_i386sh_loader[4416] = {
|
||||
232, 0, 0, 0, 0, 96,139,116, 36, 36,139,124, 36, 44,131,205, /* 0x 0 */
|
||||
@@ -104,11 +104,11 @@ unsigned char linux_i386sh_loader[4416] = {
|
||||
84, 36, 40, 57,214,116, 1, 72, 43,124, 36, 44,139, 84, 36, 48, /* 0x 450 */
|
||||
137, 58,137, 68, 36, 28, 97,195, 94,252,173, 80, 84,186, 0, 0, /* 0x 460 */
|
||||
64, 1,139, 66, 72, 1,208,131,194,116, 80,139, 74, 16,129,193, /* 0x 470 */
|
||||
6, 16, 0, 0, 80, 80,106, 50,106, 7, 81, 80,137,227,106, 90, /* 0x 480 */
|
||||
88,205,128,141,152, 3, 16, 0, 0,131,196, 24,173, 80,173, 86, /* 0x 490 */
|
||||
255,213, 88, 88,195, 93,232,189,255,255,255, 0, 76, 69, 88, 69, /* 0x 4a0 */
|
||||
6, 16, 0, 0, 80,106,255,106, 50,106, 7, 81, 80,137,227,106, /* 0x 480 */
|
||||
90, 88,205,128,141,152, 3, 16, 0, 0,131,196, 24,173, 80,173, /* 0x 490 */
|
||||
86,255,213, 88, 88,195, 93,232,188,255,255,255, 76, 69, 88, 69, /* 0x 4a0 */
|
||||
67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, /* 0x 4b0 */
|
||||
0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 61, 0, 0, 0, 76, 69, /* 0x 4c0 */
|
||||
0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 62, 0, 0, 0, 76, 69, /* 0x 4c0 */
|
||||
88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 4d0 */
|
||||
65, 49, 48, 0, 17, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, /* 0x 4e0 */
|
||||
78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, /* 0x 4f0 */
|
||||
@@ -307,5 +307,5 @@ unsigned char linux_i386sh_loader[4416] = {
|
||||
68, 0, 75, 4, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0, 75, /* 0x1100 */
|
||||
4, 0, 0, 76, 69, 88, 69, 67, 48, 49, 55, 0,102, 4, 0, 0, /* 0x1110 */
|
||||
76, 69, 88, 69, 67, 48, 50, 48, 0,104, 4, 0, 0, 88, 84, 72, /* 0x1120 */
|
||||
69, 69, 78, 68, 88, 0,171, 4, 0, 0,255,255,255,255,171, 4 /* 0x1130 */
|
||||
69, 69, 78, 68, 88, 0,172, 4, 0, 0,255,255,255,255,172, 4 /* 0x1130 */
|
||||
};
|
||||
|
||||
+42
-8
@@ -45,7 +45,7 @@ int close(int);
|
||||
void exit(int) __attribute__((__noreturn__));
|
||||
int mprotect(void *, size_t, int);
|
||||
int open(char const *, unsigned, unsigned);
|
||||
ssize_t read(int, void *, size_t);
|
||||
ssize_t pread(int, void *, size_t, unsigned);
|
||||
|
||||
#define CONST_CAST(type, var) \
|
||||
((type) ((uintptr_t) (var)))
|
||||
@@ -215,6 +215,25 @@ upx_bzero(char *p, size_t len)
|
||||
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
|
||||
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
|
||||
|
||||
typedef struct {
|
||||
unsigned magic;
|
||||
unsigned nfat_arch;
|
||||
} Fat_header;
|
||||
typedef struct {
|
||||
unsigned cputype;
|
||||
unsigned cpusubtype;
|
||||
unsigned offset;
|
||||
unsigned size;
|
||||
unsigned align; /* power of 2 */
|
||||
} Fat_arch;
|
||||
enum e8 {
|
||||
FAT_MAGIC = 0xcafebabe
|
||||
};
|
||||
enum e9 {
|
||||
CPU_TYPE_POWERPC = 0x00000012,
|
||||
CPU_TYPE_POWERPC64 = 0x01000012
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
unsigned magic;
|
||||
unsigned cputype;
|
||||
@@ -227,9 +246,6 @@ typedef struct {
|
||||
enum e0 {
|
||||
MH_MAGIC = 0xfeedface
|
||||
};
|
||||
enum e1 {
|
||||
CPU_TYPE_POWERPC = 18
|
||||
};
|
||||
enum e2 {
|
||||
MH_EXECUTE = 2
|
||||
};
|
||||
@@ -319,6 +335,7 @@ extern char *mmap(char *, size_t, unsigned, unsigned, int, /*off_t*/size_t);
|
||||
static Mach_ppc_thread_state const *
|
||||
do_xmap(
|
||||
Mach_header const *const mhdr,
|
||||
unsigned const fat_offset,
|
||||
Extent *const xi,
|
||||
int const fdi,
|
||||
Mach_header **mhdrpp,
|
||||
@@ -344,7 +361,7 @@ do_xmap(
|
||||
if (0!=mlen && addr != mmap(addr, mlen, VM_PROT_READ | VM_PROT_WRITE,
|
||||
MAP_FIXED | MAP_PRIVATE |
|
||||
((xi || 0==sc->filesize) ? MAP_ANON : 0),
|
||||
((0==sc->filesize) ? -1 : fdi), sc->fileoff) ) {
|
||||
((0==sc->filesize) ? -1 : fdi), sc->fileoff + fat_offset) ) {
|
||||
err_exit(8);
|
||||
}
|
||||
if (xi && 0!=sc->filesize) {
|
||||
@@ -396,6 +413,7 @@ upx_main(
|
||||
)
|
||||
{
|
||||
Mach_ppc_thread_state const *entry;
|
||||
unsigned fat_offset = 0;
|
||||
Extent xi, xo, xi0;
|
||||
xi.buf = CONST_CAST(char *, 1+ (struct p_info const *)(1+ li)); // &b_info
|
||||
xi.size = sz_compressed - (sizeof(struct l_info) + sizeof(struct p_info));
|
||||
@@ -406,7 +424,7 @@ upx_main(
|
||||
// Uncompress Macho headers
|
||||
unpackExtent(&xi, &xo, f_decompress, 0); // never filtered?
|
||||
|
||||
entry = do_xmap(mhdr, &xi0, -1, mhdrpp, f_decompress, f_unf);
|
||||
entry = do_xmap(mhdr, fat_offset, &xi0, -1, mhdrpp, f_decompress, f_unf);
|
||||
|
||||
{ // Map dyld dynamic loader
|
||||
Mach_load_command const *lc = (Mach_load_command const *)(1+ mhdr);
|
||||
@@ -421,12 +439,28 @@ upx_main(
|
||||
if (0 > fdi) {
|
||||
err_exit(18);
|
||||
}
|
||||
if ((ssize_t)sz_mhdr!=read(fdi, (void *)mhdr, sz_mhdr)) {
|
||||
fat:
|
||||
if ((ssize_t)sz_mhdr!=pread(fdi, (void *)mhdr, sz_mhdr, fat_offset)) {
|
||||
ERR_LAB
|
||||
err_exit(19);
|
||||
}
|
||||
entry = do_xmap(mhdr, 0, fdi, 0, 0, 0);
|
||||
switch (mhdr->magic) {
|
||||
case MH_MAGIC: break;
|
||||
case FAT_MAGIC: {
|
||||
// stupid Apple: waste code and a page fault on EVERY execve
|
||||
Fat_header const *const fh = (Fat_header const *)mhdr;
|
||||
Fat_arch const *fa = (Fat_arch const *)(1+ fh);
|
||||
for (j= 0; j < fh->nfat_arch; ++j, ++fa) {
|
||||
if (CPU_TYPE_POWERPC==fa->cputype) {
|
||||
fat_offset= fa->offset;
|
||||
goto fat;
|
||||
}
|
||||
}
|
||||
} break;
|
||||
} // switch
|
||||
entry = do_xmap(mhdr, fat_offset, 0, fdi, 0, 0, 0);
|
||||
close(fdi);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
armpe_tester
|
||||
@@ -1 +0,0 @@
|
||||
armpe_tester
|
||||
@@ -1,15 +1,25 @@
|
||||
# Makefile for armpe_tester
|
||||
|
||||
MAKEFLAGS += -rR
|
||||
SHELL = /bin/sh
|
||||
|
||||
all: armpe_tester
|
||||
# update path for our special stub build tools
|
||||
ifneq ($(wildcard $(HOME)/local/bin/bin-upx),)
|
||||
export PATH := $(HOME)/local/bin/bin-upx:$(PATH)
|
||||
endif
|
||||
|
||||
|
||||
all: armpe_tester wtest.exe
|
||||
|
||||
armpe_tester: armpe_tester.c
|
||||
arm-9tdmi-linux-gnu-gcc -Wl,--section-start,.interp=0x1000 -g -Wall -W -o $@ $<
|
||||
|
||||
wtest.exe: armpe_tester.c
|
||||
arm-wince-pe-gcc -Wl,--image-base,0x400000 -s -Wall -W -o $@ $<
|
||||
|
||||
mostlyclean clean distclean maintainer-clean:
|
||||
rm -f *.d *.o *.obj
|
||||
rm -f armpe_tester
|
||||
rm -f armpe_tester wtest.exe
|
||||
|
||||
.PHONY: all mostlyclean clean distclean maintainer-clean
|
||||
|
||||
|
||||
@@ -29,12 +29,13 @@
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
// arm-9tdmi-linux-gnu-gcc -Wl,--section-start,.interp=0x1000 armpe_tester.c
|
||||
// arm-9tdmi-linux-gnu-gcc -Wl,--section-start,.interp=0x1000
|
||||
// arm-wince-pe-gcc -Wl,--image-base,0x400000
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef i386
|
||||
# define UPX_MMAP_ADDRESS 0x20000000
|
||||
@@ -42,6 +43,14 @@
|
||||
# define UPX_MMAP_ADDRESS 0x10000
|
||||
#endif
|
||||
|
||||
#ifdef linux
|
||||
# include <sys/mman.h>
|
||||
#else
|
||||
void *VirtualAlloc(void *address, unsigned size, unsigned type, unsigned protect);
|
||||
# define MEM_COMMIT 0x1000
|
||||
# define PAGE_EXECUTE_READWRITE 0x0040
|
||||
#endif
|
||||
|
||||
typedef unsigned short LE16;
|
||||
typedef unsigned long LE32;
|
||||
#define __attribute_packed
|
||||
@@ -144,6 +153,19 @@ static struct pe_header_t ih;
|
||||
static struct pe_section_t isections[3];
|
||||
static FILE *f;
|
||||
static void *vaddr;
|
||||
static FILE *out;
|
||||
|
||||
static int print(const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
va_start(ap, format);
|
||||
ret = fprintf(out, format, ap);
|
||||
fflush(out);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int load(const char *file)
|
||||
{
|
||||
@@ -152,13 +174,13 @@ static int load(const char *file)
|
||||
unsigned pe_offset = 0;
|
||||
|
||||
if ((f = fopen(file, "rb")) == NULL)
|
||||
return printf("can not open file: %s\n", file);
|
||||
return print("can not open file: %s\n", file);
|
||||
|
||||
for (ic = 0; ic < 20; ic++)
|
||||
{
|
||||
if (fseek(f, pe_offset, SEEK_SET)
|
||||
|| fread(&h, sizeof(h), 1, f) != 1)
|
||||
return printf("read error at %u\n", pe_offset);
|
||||
return print("read error at %u\n", pe_offset);
|
||||
|
||||
if (h.mz == 'M' + 'Z'*256) // dos exe
|
||||
{
|
||||
@@ -170,19 +192,19 @@ static int load(const char *file)
|
||||
else if (get_le32(&h) == 'P' + 'E'*256)
|
||||
break;
|
||||
else
|
||||
return printf("bad header at %u\n", pe_offset);
|
||||
return print("bad header at %u\n", pe_offset);
|
||||
}
|
||||
if (ic == 20)
|
||||
return printf("pe header not found\n");
|
||||
return print("pe header not found\n");
|
||||
if (fseek(f, pe_offset, SEEK_SET)
|
||||
|| fread(&ih, sizeof(ih), 1, f) != 1)
|
||||
return printf("can not load pe header\n");
|
||||
return print("can not load pe header\n");
|
||||
|
||||
if (ih.cpu != 0x1c0 && ih.cpu != 0x1c2)
|
||||
return printf("unsupported processor type: %x\n", ih.cpu);
|
||||
return print("unsupported processor type: %x\n", ih.cpu);
|
||||
|
||||
if (ih.objects != 3 || fread(isections, sizeof(isections), 1, f) != 1)
|
||||
return printf("error reading section descriptors\n");
|
||||
return print("error reading section descriptors\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -190,24 +212,35 @@ static int load(const char *file)
|
||||
static int read(void)
|
||||
{
|
||||
unsigned ic;
|
||||
#ifdef linux
|
||||
vaddr = mmap((void *) UPX_MMAP_ADDRESS, ih.imagesize,
|
||||
PROT_WRITE | PROT_READ | PROT_EXEC,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
|
||||
if (((int) vaddr) == -1)
|
||||
return printf("mmap() failed: %d\n", errno);
|
||||
if (((int) vaddr) == -1)
|
||||
return print("mmap() failed: %d\n", errno);
|
||||
#else
|
||||
if ((vaddr = VirtualAlloc(0, ih.imagesize,
|
||||
MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == 0)
|
||||
return print("VirtualAlloc() failed\n");
|
||||
print("VirtualAlloc() ok %x\n", vaddr);
|
||||
#endif
|
||||
|
||||
for (ic = 1; ic <= 2; ic++)
|
||||
if (fseek(f, isections[ic].rawdataptr, SEEK_SET)
|
||||
|| fread(vaddr + isections[ic].vaddr,
|
||||
isections[ic].vsize, 1, f) != 1)
|
||||
return printf("error reading section %u\n", ic);
|
||||
return print("error reading section %u\n", ic);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dump(char n)
|
||||
{
|
||||
char buf[100];
|
||||
#ifdef linux
|
||||
snprintf(buf, sizeof(buf), "/tmp/a.dump%c", n);
|
||||
#else
|
||||
snprintf(buf, sizeof(buf), "/a.dump%c", n);
|
||||
#endif
|
||||
FILE *f2 = fopen(buf, "wb");
|
||||
fwrite(vaddr + 0x1000, ih.imagesize - 0x1000, 1, f2);
|
||||
fclose(f2);
|
||||
@@ -223,26 +256,26 @@ static int getprocaddressa(unsigned h, const char *proc)
|
||||
unsigned p = (unsigned) proc;
|
||||
if (p < 0x10000)
|
||||
{
|
||||
printf("getprocaddressa called %c%c%c, ordinal %u\n",
|
||||
print("getprocaddressa called %c%c%c, ordinal %u\n",
|
||||
h, h >> 8, h >> 16, p);
|
||||
return h + p * 0x10000;
|
||||
}
|
||||
printf("getprocaddressa called %c%c%c, name %s\n",
|
||||
print("getprocaddressa called %c%c%c, name %s\n",
|
||||
h, h >> 8, h >> 16, proc);
|
||||
return h + proc[0] * 0x10000 + proc[1] * 0x1000000;
|
||||
}
|
||||
|
||||
static void cachesync(unsigned v)
|
||||
{
|
||||
printf("cachesync called %u\n", v);
|
||||
print("cachesync called %u\n", v);
|
||||
}
|
||||
|
||||
static int import(void)
|
||||
{
|
||||
if (ih.ddirs[PEDIR_IMPORT].vaddr == 0)
|
||||
return printf("no imports?\n");
|
||||
return print("no imports?\n");
|
||||
void *imports = vaddr + ih.ddirs[PEDIR_IMPORT].vaddr;
|
||||
void *coredll_imports = vaddr + get_le32(imports);
|
||||
void *coredll_imports = vaddr + get_le32(imports + 16);
|
||||
set_le32(coredll_imports, (unsigned) loadlibraryw);
|
||||
set_le32(coredll_imports + 4, (unsigned) getprocaddressa);
|
||||
set_le32(coredll_imports + 8, (unsigned) cachesync);
|
||||
@@ -257,7 +290,7 @@ static int reloc(void)
|
||||
void *page = vaddr + get_le32(relocs);
|
||||
unsigned size = get_le32(relocs + 4);
|
||||
if (size != ih.ddirs[PEDIR_RELOC].size)
|
||||
return printf("only 1 page can be relocated\n");
|
||||
return print("only 1 page can be relocated\n");
|
||||
unsigned num = (size - 8) / 2;
|
||||
while (num--)
|
||||
{
|
||||
@@ -265,7 +298,7 @@ static int reloc(void)
|
||||
if (pos == 0)
|
||||
continue;
|
||||
if ((pos & 0xF000) != 0x3000)
|
||||
return printf("unknown relocation type: %x\n", pos);
|
||||
return print("unknown relocation type: %x\n", pos);
|
||||
|
||||
void *r = page + (pos & 0xFFF);
|
||||
set_le32(r, get_le32(r) - ih.imagebase + (unsigned) vaddr);
|
||||
@@ -273,19 +306,25 @@ static int reloc(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dump2(int c)
|
||||
{
|
||||
print("dump2 %c\n", c);
|
||||
dump(c);
|
||||
}
|
||||
|
||||
static void call(void)
|
||||
{
|
||||
#ifndef i386
|
||||
void (*entry)(unsigned, unsigned) = vaddr + ih.entry;
|
||||
entry(0, 1);
|
||||
dump('c');
|
||||
void (*entry)(void (*)(int), unsigned) = vaddr + ih.entry;
|
||||
entry(dump2, 1);
|
||||
dump('z');
|
||||
#endif
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
static int main2(int argc, char **argv)
|
||||
{
|
||||
if (argc != 2)
|
||||
return printf("usage: %s arm_pe_file\n", argv[0]), 1;
|
||||
return print("usage: %s arm_pe_file\n", argv[0]), 1;
|
||||
if (load(argv[1]))
|
||||
return 2;
|
||||
if (read())
|
||||
@@ -293,12 +332,23 @@ int main(int argc, char **argv)
|
||||
dump('0');
|
||||
if (import())
|
||||
return 4;
|
||||
dump('i');
|
||||
dump('1');
|
||||
if (reloc())
|
||||
return 5;
|
||||
dump('r');
|
||||
dump('2');
|
||||
|
||||
call();
|
||||
printf("ok.\n");
|
||||
print("ok.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
out = stdout;
|
||||
#ifndef linux
|
||||
out = fopen("/wtest.log", "wt");
|
||||
#endif
|
||||
int ret = main2(argc, argv);
|
||||
fclose(out);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
amd64-linux-sstrip
|
||||
i386-linux-sstrip
|
||||
sstrip
|
||||
sstrip.exe
|
||||
@@ -1,4 +0,0 @@
|
||||
amd64-linux-sstrip
|
||||
i386-linux-sstrip
|
||||
sstrip
|
||||
sstrip.exe
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
#define UPX_VERSION_HEX 0x020000 /* 02.00.00 */
|
||||
#define UPX_VERSION_STRING "2.00"
|
||||
#define UPX_VERSION_STRING4 "2.00"
|
||||
#define UPX_VERSION_DATE "Apr 27th 2006"
|
||||
#define UPX_VERSION_DATE_ISO "2006-04-27"
|
||||
#define UPX_VERSION_HEX 0x020100 /* 02.01.00 */
|
||||
#define UPX_VERSION_STRING "2.01"
|
||||
#define UPX_VERSION_STRING4 "2.01"
|
||||
#define UPX_VERSION_DATE "Jun 06th 2006"
|
||||
#define UPX_VERSION_DATE_ISO "2006-06-06"
|
||||
#define UPX_VERSION_YEAR "2006"
|
||||
|
||||
Reference in New Issue
Block a user