Compare commits

...

72 Commits

Author SHA1 Message Date
Markus F.X.J. Oberhumer 71ffbbc420 Prepared 1.96 release.
committer: mfx <mfx> 1144943500 +0000
2006-04-13 15:51:40 +00:00
Markus F.X.J. Oberhumer 4fd09b889d Updated .cvsignore.
committer: mfx <mfx> 1144943334 +0000
2006-04-13 15:48:54 +00:00
László Molnár 4cb2a3eebe show image size change in info mode
committer: ml1050 <ml1050> 1144941392 +0000
2006-04-13 15:16:32 +00:00
László Molnár c25186b1f6 minor documentation updates
committer: ml1050 <ml1050> 1144941274 +0000
2006-04-13 15:14:34 +00:00
László Molnár 779033d0bc added filter (id: 0x50) support to the stub
the data cache is written back before the stub jumps to the uncompressed code

committer: ml1050 <ml1050> 1144931349 +0000
2006-04-13 12:29:09 +00:00
László Molnár 3e31560e7d added a new filter for ARM 24-bit naive calltrick
committer: ml1050 <ml1050> 1144931022 +0000
2006-04-13 12:23:42 +00:00
László Molnár d23d7e8775 removed unneeded entry point address check
committer: ml1050 <ml1050> 1144745835 +0000
2006-04-11 08:57:15 +00:00
László Molnár f6fdf5cb7f show image size change in info mode
committer: ml1050 <ml1050> 1144671675 +0000
2006-04-10 12:21:15 +00:00
Markus F.X.J. Oberhumer 1879ccd27d Next version will be 2.00.
committer: mfx <mfx> 1144586292 +0000
2006-04-09 12:38:12 +00:00
Markus F.X.J. Oberhumer 08c0796719 Avoid warnings when building for m68k.
committer: mfx <mfx> 1144523702 +0000
2006-04-08 19:15:02 +00:00
Markus F.X.J. Oberhumer edc7994ce5 Prepared 1.95 release.
committer: mfx <mfx> 1144522884 +0000
2006-04-08 19:01:24 +00:00
Markus F.X.J. Oberhumer bcfcfbd064 Added some more operators.
committer: mfx <mfx> 1144522838 +0000
2006-04-08 19:00:38 +00:00
Markus F.X.J. Oberhumer 9e79b3258d Make const-correct to avoid warning.
committer: mfx <mfx> 1144522792 +0000
2006-04-08 18:59:52 +00:00
John Reiser 243873cd2d Workaround inconsistent SIZEOF_HEADERS in stub/*.lds.
Test with --force-execve and --no-filter.
	p_lx_exc.cpp p_lx_sh.cpp stub/l_lx_sh86.asm stub/l_lx_sh86.h

committer: jreiser <jreiser> 1144381286 +0000
2006-04-07 03:41:26 +00:00
Markus F.X.J. Oberhumer c7b8a4b0c1 Updated.
committer: mfx <mfx> 1144320028 +0000
2006-04-06 10:40:28 +00:00
Markus F.X.J. Oberhumer e39e0c7140 Added .gitignore files.
committer: mfx <mfx> 1144319429 +0000
2006-04-06 10:30:29 +00:00
Markus F.X.J. Oberhumer d4a3f11dbb Whitespace changes.
committer: mfx <mfx> 1144318755 +0000
2006-04-06 10:19:15 +00:00
Markus F.X.J. Oberhumer 0962f266b3 Whitespace changes.
committer: mfx <mfx> 1144314053 +0000
2006-04-06 09:00:53 +00:00
Markus F.X.J. Oberhumer 69e4d3fdad Bumped tentative release date.
committer: mfx <mfx> 1144313563 +0000
2006-04-06 08:52:43 +00:00
Markus F.X.J. Oberhumer c0908f463a Added files to "clean" target.
committer: mfx <mfx> 1144313493 +0000
2006-04-06 08:51:33 +00:00
Markus F.X.J. Oberhumer b00a61a17b Updated.
committer: mfx <mfx> 1144313468 +0000
2006-04-06 08:51:08 +00:00
László Molnár 553c2f886a arm/pe: thumb mode dll support added
committer: ml1050 <ml1050> 1144312217 +0000
2006-04-06 08:30:17 +00:00
László Molnár 4fd9c5772a arm/pe:
v4 ARM mode stub support with assembly decompressor by John
dll support for v4 ARM mode
unpacking support

committer: ml1050 <ml1050> 1144249762 +0000
2006-04-05 15:09:22 +00:00
Markus F.X.J. Oberhumer 04e0e06d85 Whitespace changes.
committer: mfx <mfx> 1144235344 +0000
2006-04-05 11:09:04 +00:00
Markus F.X.J. Oberhumer 4d7829d72b New ACC version.
committer: mfx <mfx> 1144235271 +0000
2006-04-05 11:07:51 +00:00
John Reiser 6b751aac57 Fix return from THUMB to ARM mode on ARMv4T. Document r6 unused.
committer: jreiser <jreiser> 1143650112 +0000
2006-03-29 16:35:12 +00:00
László Molnár 813349fd23 arm/pe: support for nrv2b, support for cpu = 0x1c2, certificate info now removed
committer: ml1050 <ml1050> 1143614738 +0000
2006-03-29 06:45:38 +00:00
John Reiser 16a2744782 find_SEGMENT_gap() like find_LOAD_gap(). Use it to avoid checksum trouble.
p_mach.cpp p_mach.h

committer: jreiser <jreiser> 1143576015 +0000
2006-03-28 20:00:15 +00:00
John Reiser 7b6870db22 Fix bug: bad test for reaching back too far in SAFE mode. (Thank you, Laszlo.)
committer: jreiser <jreiser> 1143564998 +0000
2006-03-28 16:56:38 +00:00
Markus F.X.J. Oberhumer 3e38e7d52c Small cleanups.
committer: mfx <mfx> 1143474969 +0000
2006-03-27 15:56:09 +00:00
László Molnár 8142d3474d get_le32 reimplemented in assembly
committer: ml1050 <ml1050> 1143473260 +0000
2006-03-27 15:27:40 +00:00
Markus F.X.J. Oberhumer 8773649de6 Make code warning-free.
committer: mfx <mfx> 1143464312 +0000
2006-03-27 12:58:32 +00:00
Markus F.X.J. Oberhumer c117920ff9 Add -Wall -Werror to cross-compiler flags.
committer: mfx <mfx> 1143463128 +0000
2006-03-27 12:38:48 +00:00
László Molnár c8dd2a3eb8 arm/pe: use -march=armv4t instead of v5
committer: ml1050 <ml1050> 1143462067 +0000
2006-03-27 12:21:07 +00:00
Markus F.X.J. Oberhumer 90b1817e92 Undef PAGE_{MASK,SIZE} in conf.h.
committer: mfx <mfx> 1143454717 +0000
2006-03-27 10:18:37 +00:00
Markus F.X.J. Oberhumer d6c3ff5997 Cleanups.
committer: mfx <mfx> 1143454663 +0000
2006-03-27 10:17:43 +00:00
László Molnár 984ec25132 arm/pe: the assembly thumb mode decompressor is used in the stub
arm/pe: the C part of the stub is compiled as thumb

committer: ml1050 <ml1050> 1143449862 +0000
2006-03-27 08:57:42 +00:00
John Reiser a7bff34784 Fix THUMB mode return to ARM mode on ARMv4T. Spend 18 bytes to inline
most of get1b via conditional subroutine call idiom.

committer: jreiser <jreiser> 1143302120 +0000
2006-03-25 15:55:20 +00:00
John Reiser a6e7afbc91 Fix bug: first 'add' instead of 'adc' at get1_n2b. (Thank you, Laszlo.)
committer: jreiser <jreiser> 1143228535 +0000
2006-03-24 19:28:55 +00:00
John Reiser 33f1d63b64 Fix bug: first 'add' at get1_n2e instead of 'adc'.
Also conditionally assemble SAFE mode for buffer checking (default off).

committer: jreiser <jreiser> 1143228361 +0000
2006-03-24 19:26:01 +00:00
John Reiser f95e171e11 Workaround linux-2.6.14 binfmt_elf.c: SIGKILL if (0==.p_memsz) on a page boundary.
p_lx_elf.cpp p_lx_exc.cpp

committer: jreiser <jreiser> 1143057770 +0000
2006-03-22 20:02:50 +00:00
Markus F.X.J. Oberhumer c82b50b212 Bumped tentative release date.
committer: mfx <mfx> 1142610024 +0000
2006-03-17 15:40:24 +00:00
Markus F.X.J. Oberhumer 2b402b77f1 Updated short-list of supported executable formats.
committer: mfx <mfx> 1142609852 +0000
2006-03-17 15:37:32 +00:00
Markus F.X.J. Oberhumer adcb551020 Increase alignment to 16.
committer: mfx <mfx> 1142608657 +0000
2006-03-17 15:17:37 +00:00
Markus F.X.J. Oberhumer 2680aabe06 Removed bogus __attribute_packed from struct udll.
committer: mfx <mfx> 1142607440 +0000
2006-03-17 14:57:20 +00:00
Markus F.X.J. Oberhumer d5c0533b74 Allow the PE sections to cross a page boundary.
committer: mfx <mfx> 1142603590 +0000
2006-03-17 13:53:10 +00:00
Markus F.X.J. Oberhumer 609307668b Use $(MAKEFILE_LIST) for dependencies.
committer: mfx <mfx> 1142527291 +0000
2006-03-16 16:41:31 +00:00
Markus F.X.J. Oberhumer cdaf36572a Use UPX_VERSION_DATE_ISO from src/version.h.
committer: mfx <mfx> 1142527194 +0000
2006-03-16 16:39:54 +00:00
Markus F.X.J. Oberhumer 033c8d5d51 Updated.
committer: mfx <mfx> 1142523608 +0000
2006-03-16 15:40:08 +00:00
Markus F.X.J. Oberhumer 6216ec1d6a Mention John as a main author.
committer: mfx <mfx> 1142522272 +0000
2006-03-16 15:17:52 +00:00
László Molnár 6c9c67f6c5 DEP hack: it seems we need to patch the flags of section "UPX1" too
committer: ml1050 <ml1050> 1142508181 +0000
2006-03-16 11:23:01 +00:00
Markus F.X.J. Oberhumer 5bd32b5521 Commented out "int3" debugging leftovers.
committer: mfx <mfx> 1142312678 +0000
2006-03-14 05:04:38 +00:00
Markus F.X.J. Oberhumer 549336f75b Use boolean instead of bitwise logic.
committer: mfx <mfx> 1142311485 +0000
2006-03-14 04:44:45 +00:00
Markus F.X.J. Oberhumer f0e75f30b3 Fixed typo in comment.
committer: mfx <mfx> 1142310885 +0000
2006-03-14 04:34:45 +00:00
Markus F.X.J. Oberhumer 144c09f175 Rebuilt i386-linux stubs by gcc-3.4.6.
committer: mfx <mfx> 1142310823 +0000
2006-03-14 04:33:43 +00:00
Markus F.X.J. Oberhumer ee50c0f97c Corrected app_*.pl dependency.
committer: mfx <mfx> 1142309988 +0000
2006-03-14 04:19:48 +00:00
John Reiser ade921bf02 %.asy and %.asx depend onf $(APP_I386)
committer: jreiser <jreiser> 1142306625 +0000
2006-03-14 03:23:45 +00:00
John Reiser 676cacff04 gcc-4.1.0 vs. mmap()
linux.hh
	fold_elf86.asm  l_lx_elf.c
	fold_exec86.asm l_lx_exec.c
	fold_pti86.asm  l_lx_pti.c
	fold_sh86.asm   l_lx_sh.c    l_lx_sh86.asm
	l_lx_sep.c

committer: jreiser <jreiser> 1142305438 +0000
2006-03-14 03:03:58 +00:00
Markus F.X.J. Oberhumer a3097d5e25 Added a dependency.
committer: mfx <mfx> 1142303569 +0000
2006-03-14 02:32:49 +00:00
Markus F.X.J. Oberhumer fd78148558 Fixed typo in disabled code.
committer: mfx <mfx> 1142302679 +0000
2006-03-14 02:17:59 +00:00
Markus F.X.J. Oberhumer a4d79d7375 Small cosmetic changes.
committer: mfx <mfx> 1142302586 +0000
2006-03-14 02:16:26 +00:00
Markus F.X.J. Oberhumer df04e8183d Filter parameters should be called "ft" instead of "fp".
committer: mfx <mfx> 1142301730 +0000
2006-03-14 02:02:10 +00:00
Markus F.X.J. Oberhumer c43c484a62 Re-synced both files a little bit.
committer: mfx <mfx> 1142301586 +0000
2006-03-14 01:59:46 +00:00
Markus F.X.J. Oberhumer 0608c35669 Added some more OBJSTRIP. Small cleanups.
committer: mfx <mfx> 1142298790 +0000
2006-03-14 01:13:10 +00:00
Markus F.X.J. Oberhumer 7dd4d06e26 Added some more calls to $(OBJSTRIP_LINUX_I386) after $(NASM) invocations.
committer: mfx <mfx> 1142288478 +0000
2006-03-13 22:21:18 +00:00
John Reiser 1ee0310b86 silence complaint from ld "cannot find entry symbol _start; defaulting to 10000000"
committer: jreiser <jreiser> 1142285749 +0000
2006-03-13 21:35:49 +00:00
Markus F.X.J. Oberhumer cc0a52038f Rebuilt i386-linux stubs with gcc-4.1.0 for small size decrease.
committer: mfx <mfx> 1142248018 +0000
2006-03-13 11:06:58 +00:00
Markus F.X.J. Oberhumer 6aed1fe231 Updated.
committer: mfx <mfx> 1142247976 +0000
2006-03-13 11:06:16 +00:00
Markus F.X.J. Oberhumer 680608fe18 Portability fix.
committer: mfx <mfx> 1142247872 +0000
2006-03-13 11:04:32 +00:00
Markus F.X.J. Oberhumer ec6acbc602 Small fix to make valid ANSI C again.
committer: mfx <mfx> 1142247837 +0000
2006-03-13 11:03:57 +00:00
John Reiser cb7ee4c5d2 _syscall1nr() for _exit; [still wastes 4 bytes]
committer: jreiser <jreiser> 1142210712 +0000
2006-03-13 00:45:12 +00:00
Markus F.X.J. Oberhumer 88d5798f45 Bumped versions for starting 1.95 development.
committer: mfx <mfx> 1142090576 +0000
2006-03-11 15:22:56 +00:00
72 changed files with 3401 additions and 1841 deletions
+13
View File
@@ -0,0 +1,13 @@
.bzr*
.darcs*
.git*
.hg*
_darcs
B
build*
doxygen
maint
ChangeLog.cvs*
GNUmakefile
MMakefile
TODO.*
+2 -2
View File
@@ -8,8 +8,8 @@
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer & Laszlo Molnar
http://upx.sourceforge.net
Copyright (c) 1996-2006 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
Limitations and other things which are not (yet) supported:
+12 -2
View File
@@ -2,10 +2,20 @@
User visible changes for UPX
==================================================================
[ UNSTABLE BETA VERSION - please see README.1ST for some more info ]
Changes in 2.00 (XX XXX 2006):
Changes in 1.96 beta (13 Apr 2006):
* arm/pe: added filter support
* win32/pe: removed an unnecessary check so that Delphi 2006 and
Digital Mars C++ programs finally work
Changes in 1.95 beta (09 Apr 2006):
* arm/pe: added DLL support
* arm/pe: added thumb mode stub support
* arm/pe: added unpacking support
* win32/pe: really worked around R6002 runtime errors
Changes in 1.94 beta (11 Mar 2006):
* UNSTABLE BETA VERSION - DO NOT USE EXCEPT FOR TESTING
* new format: added support for arm/pe (ARM executables running on WinCE)
* new format: added support for linux elf/amd64
* new format: added support for linux elf/ppc32
+2 -2
View File
@@ -8,8 +8,8 @@
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer & Laszlo Molnar
http://upx.sourceforge.net
Copyright (c) 1996-2006 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
Here are some possible projects from which you can choose if you'd like to
+4 -3
View File
@@ -8,8 +8,8 @@
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer & Laszlo Molnar
http://upx.sourceforge.net
Copyright (c) 1996-2006 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
@@ -62,7 +62,7 @@ and run exactly as before, with no runtime or memory penalty for most
of the supported formats.
UPX supports a number of different executable formats, including
Windows 95/98/ME/NT/2000/XP programs and DLLs, DOS programs,
Windows 95/98/ME/NT/2000/XP/CE programs and DLLs, DOS programs,
and Linux executables and kernels.
UPX is free software distributed under the term of the GNU General
@@ -135,6 +135,7 @@ COPYRIGHT
Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2006 Laszlo Molnar
Copyright (C) 2000-2006 John F. Reiser
This program may be used freely, and you are welcome to
redistribute it under certain conditions.
+5 -9
View File
@@ -8,18 +8,14 @@
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer & Laszlo Molnar
http://upx.sourceforge.net
Copyright (c) 1996-2006 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
WARNING - UNSTABLE BETA VERSION
===============================
All versions 1.9x are unstable beta releases - use them only for testing,
and never distribute a program that is packed with them !
There will be hidden bugs. Really.
The current stable release is 1.25, and the next stable release
will be called version 2.00.
@@ -31,8 +27,8 @@ The main news since 1.25 are:
- direct Linux ELF-to-memory decompression ("linux/elf386") and
shell-to-memory decompression ("linux/sh386")
- support for arm/WinCE ("arm/pe") exes
- support for mach/ppc32
- support for Linux elf/ppc32
- support for Linux elf/amd64
- support for Linux elf/ppc32
- support for mach/ppc32
- support for playstation exes ("ps1/exe")
- lots of new bugs ;-) take care
+2 -3
View File
@@ -113,7 +113,7 @@ If you want to modify the stub sources you'll also need
- Other cross compilers targeted at the following architectures:
- powerpc-750-linux-gnu
- x86_64-unknown-linux-gnu
- arm-wince-pe
- arm-9tdmi-linux-gnu
- ASM5900 - a MIPS R3000 assembler
@@ -130,8 +130,7 @@ Misc. notes
- Use gcc extensions and other compiler specific stuff only through
macros.
- Keep in mind that it should be possible to build UPX on braindead
file systems (FAT). Don't use long file names or other things
that break building under plain DOS.
case insensitive file systems (FAT).
***
+2 -4
View File
@@ -8,8 +8,8 @@
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer & Laszlo Molnar
http://upx.sourceforge.net
Copyright (c) 1996-2006 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
.___.. .
@@ -39,8 +39,6 @@ Ice
for debugging the PE headersize problem down
Joergen Ibsen <jibz@hotmail.com> and d'b
for the relocation & address optimization ideas
John F. Reiser <jreiser@BitWagon.com>
for the new Linux executable formats
John S. Fine <johnfine@erols.com>
for the new version of the dos/exe decompressor
Lukundoo <Lukundoo@softhome.net>
+6
View File
@@ -0,0 +1,6 @@
upx.1
upx.doc
upx.html
upx.man
upx.ps
upx.tex
+6 -6
View File
@@ -1,10 +1,12 @@
MAKEFLAGS += -rR
.SUFFIXES:
SHELL = /bin/sh
top_srcdir = ..
PACKAGE = upx
VERSION_DATE = 11 Mar 2006
VERSION := $(shell sed -n 's/^.*UPX_VERSION_STRING .*"\(.*\)".*/\1/p' $(top_srcdir)/src/version.h)
PACKAGE = upx
VERSION_DATE := $(shell sed -n 's/^.*UPX_VERSION_DATE_ISO .*"\(.*\)".*/\1/p' $(top_srcdir)/src/version.h)
VERSION := $(shell sed -n 's/^.*UPX_VERSION_STRING .*"\(.*\)".*/\1/p' $(top_srcdir)/src/version.h)
TRIMSPACE = cat
TRIMSPACE = sed -e 's/ *$$//'
@@ -62,7 +64,5 @@ maintainer-clean: distclean
### dependencies
###
$(BUILT_SOURCES): $(top_srcdir)/src/version.h Makefile
.NOEXPORT:
$(BUILT_SOURCES): $(top_srcdir)/src/version.h $(MAKEFILE_LIST)
+14 -6
View File
@@ -12,9 +12,9 @@ B<upx> S<[ I<command> ]> S<[ I<options> ]> I<filename>...
=head1 ABSTRACT
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer & Laszlo Molnar
http://upx.sourceforge.net
The Ultimate Packer for eXecutables
Copyright (c) 1996-2006 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
B<UPX> is a portable, extendable, high-performance executable packer for
@@ -75,9 +75,10 @@ B<UPX> is a versatile executable packer with the following features:
* rtm32/pe
* tmt/adam
* vmlinuz/386 [bootable Linux kernel]
* vmlinux/386
* watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)
* win32/pe
* arm/pe
* win32/pe (exe and dll)
* arm/pe (exe and dll)
* linux/elfamd64
* linux/elfppc32
* mach/elfppc32
@@ -840,12 +841,19 @@ smaller, but it's still there.
If you're running executables from network, then compressed programs
will load faster, and require less bandwidth during execution.
DLLs are supported.
DLLs are supported. But UPX compressed DLLs can not share common data and
code when they got used by multiple applications. So compressing msvcrt.dll
is a waste of memory, but compressing the dll plugins of a particular
application may be a better idea.
Screensavers are supported, with the restriction that the filename
must end with ".scr" (as screensavers are handled slightly different
than normal exe files).
UPX compressed PE files has some minor memory overhead (usually in the
10 - 30 kbytes range) which can be seen by specifying the "-i" command
line switch during compression.
Extra options available for this executable format:
--compress-exports=0 Don't compress the export section.
View File
+1
View File
@@ -17,3 +17,4 @@ MMakefile
compress_nrv.*
upx
version1*.h
version2*.h
+20
View File
@@ -0,0 +1,20 @@
*.0??
*.d
*.dat
*.idb
*.img
*.map
*.raw
*.rc
*.rel
*.res
*.pdb
*.out
*.upx
.gdbinit
GNUmakefile
MMakefile
compress_nrv.*
upx
version1*.h
version2*.h
+21 -3
View File
@@ -262,9 +262,12 @@ struct BE16
BE16& operator += (unsigned v) { set_be16(d, get_be16(d) + v); return *this; }
BE16& operator -= (unsigned v) { set_be16(d, get_be16(d) - v); return *this; }
BE16& operator *= (unsigned v) { set_be16(d, get_be16(d) * v); return *this; }
BE16& operator /= (unsigned v) { set_be16(d, get_be16(d) / v); return *this; }
BE16& operator &= (unsigned v) { set_be16(d, get_be16(d) & v); return *this; }
BE16& operator |= (unsigned v) { set_be16(d, get_be16(d) | v); return *this; }
BE16& operator ^= (unsigned v) { set_be16(d, get_be16(d) ^ v); return *this; }
BE16& operator <<= (unsigned v) { set_be16(d, get_be16(d) << v); return *this; }
BE16& operator >>= (unsigned v) { set_be16(d, get_be16(d) >> v); return *this; }
operator unsigned () const { return get_be16(d); }
}
@@ -279,9 +282,12 @@ struct BE32
BE32& operator += (unsigned v) { set_be32(d, get_be32(d) + v); return *this; }
BE32& operator -= (unsigned v) { set_be32(d, get_be32(d) - v); return *this; }
BE32& operator *= (unsigned v) { set_be32(d, get_be32(d) * v); return *this; }
BE32& operator /= (unsigned v) { set_be32(d, get_be32(d) / v); return *this; }
BE32& operator &= (unsigned v) { set_be32(d, get_be32(d) & v); return *this; }
BE32& operator |= (unsigned v) { set_be32(d, get_be32(d) | v); return *this; }
BE32& operator ^= (unsigned v) { set_be32(d, get_be32(d) ^ v); return *this; }
BE32& operator <<= (unsigned v) { set_be32(d, get_be32(d) << v); return *this; }
BE32& operator >>= (unsigned v) { set_be32(d, get_be32(d) >> v); return *this; }
operator unsigned () const { return get_be32(d); }
}
@@ -296,9 +302,12 @@ struct BE64
BE64& operator += (acc_uint64l_t v) { set_be64(d, get_be64(d) + v); return *this; }
BE64& operator -= (acc_uint64l_t v) { set_be64(d, get_be64(d) - v); return *this; }
BE64& operator *= (acc_uint64l_t v) { set_be64(d, get_be64(d) * v); return *this; }
BE64& operator /= (acc_uint64l_t v) { set_be64(d, get_be64(d) / v); return *this; }
BE64& operator &= (acc_uint64l_t v) { set_be64(d, get_be64(d) & v); return *this; }
BE64& operator |= (acc_uint64l_t v) { set_be64(d, get_be64(d) | v); return *this; }
BE64& operator ^= (acc_uint64l_t v) { set_be64(d, get_be64(d) ^ v); return *this; }
BE64& operator <<= (unsigned v) { set_be64(d, get_be64(d) << v); return *this; }
BE64& operator >>= (unsigned v) { set_be64(d, get_be64(d) >> v); return *this; }
operator acc_uint64l_t () const { return get_be64(d); }
}
@@ -313,9 +322,12 @@ struct LE16
LE16& operator += (unsigned v) { set_le16(d, get_le16(d) + v); return *this; }
LE16& operator -= (unsigned v) { set_le16(d, get_le16(d) - v); return *this; }
LE16& operator *= (unsigned v) { set_le16(d, get_le16(d) * v); return *this; }
LE16& operator /= (unsigned v) { set_le16(d, get_le16(d) / v); return *this; }
LE16& operator &= (unsigned v) { set_le16(d, get_le16(d) & v); return *this; }
LE16& operator |= (unsigned v) { set_le16(d, get_le16(d) | v); return *this; }
LE16& operator ^= (unsigned v) { set_le16(d, get_le16(d) ^ v); return *this; }
LE16& operator <<= (unsigned v) { set_le16(d, get_le16(d) << v); return *this; }
LE16& operator >>= (unsigned v) { set_le16(d, get_le16(d) >> v); return *this; }
operator unsigned () const { return get_le16(d); }
}
@@ -330,9 +342,12 @@ struct LE32
LE32& operator += (unsigned v) { set_le32(d, get_le32(d) + v); return *this; }
LE32& operator -= (unsigned v) { set_le32(d, get_le32(d) - v); return *this; }
LE32& operator *= (unsigned v) { set_le32(d, get_le32(d) * v); return *this; }
LE32& operator /= (unsigned v) { set_le32(d, get_le32(d) / v); return *this; }
LE32& operator &= (unsigned v) { set_le32(d, get_le32(d) & v); return *this; }
LE32& operator |= (unsigned v) { set_le32(d, get_le32(d) | v); return *this; }
LE32& operator ^= (unsigned v) { set_le32(d, get_le32(d) ^ v); return *this; }
LE32& operator <<= (unsigned v) { set_le32(d, get_le32(d) << v); return *this; }
LE32& operator >>= (unsigned v) { set_le32(d, get_le32(d) >> v); return *this; }
operator unsigned () const { return get_le32(d); }
}
@@ -347,9 +362,12 @@ struct LE64
LE64& operator += (acc_uint64l_t v) { set_le64(d, get_le64(d) + v); return *this; }
LE64& operator -= (acc_uint64l_t v) { set_le64(d, get_le64(d) - v); return *this; }
LE64& operator *= (acc_uint64l_t v) { set_le64(d, get_le64(d) * v); return *this; }
LE64& operator /= (acc_uint64l_t v) { set_le64(d, get_le64(d) / v); return *this; }
LE64& operator &= (acc_uint64l_t v) { set_le64(d, get_le64(d) & v); return *this; }
LE64& operator |= (acc_uint64l_t v) { set_le64(d, get_le64(d) | v); return *this; }
LE64& operator ^= (acc_uint64l_t v) { set_le64(d, get_le64(d) ^ v); return *this; }
LE64& operator <<= (unsigned v) { set_le64(d, get_le64(d) << v); return *this; }
LE64& operator >>= (unsigned v) { set_le64(d, get_le64(d) >> v); return *this; }
operator acc_uint64l_t () const { return get_le64(d); }
}
@@ -430,7 +448,7 @@ int __acc_cdecl_qsort le64_compare_signed(const void *, const void *);
# ifndef LE16
# define LE16 LE16_unaligned
# endif
# ifndef LE16
# ifndef LE32
# define LE32 LE32_unaligned
# endif
#endif
@@ -440,7 +458,7 @@ int __acc_cdecl_qsort le64_compare_signed(const void *, const void *);
# ifndef LE16
# define LE16 LE16_unaligned
# endif
# ifndef LE16
# ifndef LE32
# define LE32 LE32_unaligned
# endif
#endif
@@ -450,7 +468,7 @@ int __acc_cdecl_qsort le64_compare_signed(const void *, const void *);
# ifndef LE16
# define LE16 LE16_unaligned
# endif
# ifndef LE16
# ifndef LE32
# define LE32 LE32_unaligned
# endif
# pragma warning(disable: 4244) // Wx: conversion, possible loss of data
+3
View File
@@ -292,6 +292,9 @@
#define index upx_index
#define outp upx_outp
#undef PAGE_MASK
#undef PAGE_SIZE
#undef __attribute_packed
#if (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE)
+40
View File
@@ -383,6 +383,46 @@ static int s_ct32_e8e9_bswap_be(Filter *f)
#undef CT32
/*************************************************************************
// 24-bit ARM calltrick ("naive")
**************************************************************************/
#define CT24ARM(f, cond, addvalue, get, set) \
upx_byte *b = f->buf; \
upx_byte *b_end = b + f->buf_len - 4; \
do { \
if (cond) \
{ \
unsigned a = (unsigned) (b - f->buf); \
f->lastcall = a; \
set(b, get(b) + (addvalue)); \
f->calls++; \
} \
b += 4; \
} while (b < b_end); \
if (f->lastcall) f->lastcall += 4; \
return 0;
#define ARMCT_COND (((b[3] & 0x0f) == 0x0b))
static int f_ct24arm_le(Filter *f)
{
CT24ARM(f, ARMCT_COND, a / 4 + f->addvalue, get_le24, set_le24)
}
static int u_ct24arm_le(Filter *f)
{
CT24ARM(f, ARMCT_COND, 0 - a / 4 - f->addvalue, get_le24, set_le24)
}
static int s_ct24arm_le(Filter *f)
{
CT24ARM(f, ARMCT_COND, a + f->addvalue, get_le24, set_dummy)
}
#undef CT24ARM
#undef ARMCT_COND
/*
vi:ts=4:et:nowrap
+3
View File
@@ -224,6 +224,9 @@ const FilterImp::FilterEntry FilterImp::filters[] = {
{ 0x46, 6, 0x00ffffff, f_ctok32_e8e9_bswap_le, u_ctok32_e8e9_bswap_le, s_ctok32_e8e9_bswap_le },
{ 0x49, 6, 0x00ffffff, f_ctok32_e8e9_bswap_le, u_ctok32_e8e9_bswap_le, s_ctok32_e8e9_bswap_le },
// 24-bit calltrick for arm
{ 0x50, 8, 0x01ffffff, f_ct24arm_le, u_ct24arm_le, s_ct24arm_le },
// 32-bit cto calltrick with jmp and jcc(swap 0x0f/0x8Y) and relative renumbering
{ 0x80, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le },
{ 0x81, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le },
+5 -4
View File
@@ -256,13 +256,14 @@ void show_help(int x)
" dos/sys,"
"\n "
//" elks/8086,"
" linux/386,"
" linux/elf386,"
" linux/sh386,"
" linux/amd64,"
" linux/i386,"
" linux/ppc32,"
" mach/ppc32,"
" ps1/exe,"
" rtm32/pe,"
" tmt/adam,"
"\n "
" tmt/adam,"
" vmlinux/386,"
" vmlinuz/386,"
" watcom/le,"
+2
View File
@@ -1070,6 +1070,8 @@ static int test(void)
assert( (v1 < v2)); assert(!(v1 > v2));
v2 += 2;
assert(v1 == 1); assert(v2 == 0);
v1 <<= 1; v1 |= v2; v1 >>= 1; v2 &= v1; v2 /= v1; v2 *= v1;
assert(v1 == 1); assert(v2 == 0);
return (v1 ^ v2) == 1;
}};
+5 -3
View File
@@ -60,6 +60,8 @@ static int mcheck_init()
MemBuffer::MemBuffer() :
b(NULL), b_size(0)
{
if (use_mcheck < 0)
mcheck_init();
}
MemBuffer::MemBuffer(unsigned size) :
@@ -87,7 +89,7 @@ void MemBuffer::dealloc()
set_be32(b + b_size, 0);
set_be32(b + b_size + 4, 0);
//
::free(b - 8);
::free(b - 16);
}
else
::free(b);
@@ -173,7 +175,7 @@ void MemBuffer::alloc(unsigned size)
assert(b_size == 0);
//
assert((int)size > 0);
unsigned total = use_mcheck ? size + 16 : size;
unsigned total = use_mcheck ? size + 32 : size;
assert((int)total > 0);
unsigned char *p = (unsigned char *) malloc(total);
if (!p)
@@ -185,7 +187,7 @@ void MemBuffer::alloc(unsigned size)
b_size = size;
if (use_mcheck)
{
b = p + 8;
b = p + 16;
// store magic constants to detect buffer overruns
set_be32(b - 8, b_size);
set_be32(b - 4, MAGIC1(b));
+99 -22
View File
@@ -37,7 +37,7 @@
#ifndef __ACC_H_INCLUDED
#define __ACC_H_INCLUDED 1
#define ACC_VERSION 20060309L
#define ACC_VERSION 20060404L
#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
# define __CYGWIN__ __CYGWIN32__
#endif
@@ -330,6 +330,9 @@
# define ACC_INFO_OS "freestanding"
#elif defined(ACC_OS_EMBEDDED)
# define ACC_INFO_OS "embedded"
#elif 1 && defined(__IAR_SYSTEMS_ICC__)
# define ACC_OS_EMBEDDED 1
# define ACC_INFO_OS "embedded"
#elif defined(__CYGWIN__) && defined(__GNUC__)
# define ACC_OS_CYGWIN 1
# define ACC_INFO_OS "cygwin"
@@ -573,6 +576,14 @@
# define ACC_CC_HIGHC 1
# define ACC_INFO_CC "MetaWare High C"
# define ACC_INFO_CCVER "unknown"
#elif defined(__IAR_SYSTEMS_ICC__)
# define ACC_CC_IARC 1
# define ACC_INFO_CC "IAR C"
# if defined(__VER__)
# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__VER__)
# else
# define ACC_INFO_CCVER "unknown"
# endif
#elif defined(__IBMC__)
# define ACC_CC_IBMC 1
# define ACC_INFO_CC "IBM C"
@@ -704,6 +715,16 @@
# define ACC_ARCH_ARM 1
# define ACC_ARCH_ARM_THUMB 1
# define ACC_INFO_ARCH "arm_thumb"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__)
# define ACC_ARCH_ARM 1
# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1)
# define ACC_ARCH_ARM_THUMB 1
# define ACC_INFO_ARCH "arm_thumb"
# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2)
# define ACC_INFO_ARCH "arm"
# else
# define ACC_INFO_ARCH "arm"
# endif
#elif defined(__arm__) || defined(_M_ARM)
# define ACC_ARCH_ARM 1
# define ACC_INFO_ARCH "arm"
@@ -719,6 +740,9 @@
#elif defined(__cris__)
# define ACC_ARCH_CRIS 1
# define ACC_INFO_ARCH "cris"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__)
# define ACC_ARCH_EZ80 1
# define ACC_INFO_ARCH "ez80"
#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
# define ACC_ARCH_H8300 1
# define ACC_INFO_ARCH "h8300"
@@ -743,10 +767,13 @@
#elif (UINT_MAX == ACC_0xffffL) && defined(__m32c__)
# define ACC_ARCH_M16C 1
# define ACC_INFO_ARCH "m16c"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__)
# define ACC_ARCH_M16C 1
# define ACC_INFO_ARCH "m16c"
#elif defined(__m32r__)
# define ACC_ARCH_M32R 1
# define ACC_INFO_ARCH "m32r"
#elif (ACC_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(_M_M68K)
#elif (ACC_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K)
# define ACC_ARCH_M68K 1
# define ACC_INFO_ARCH "m68k"
#elif (UINT_MAX == ACC_0xffffL) && defined(__C251__)
@@ -755,12 +782,18 @@
#elif (UINT_MAX == ACC_0xffffL) && defined(__C51__)
# define ACC_ARCH_MCS51 1
# define ACC_INFO_ARCH "mcs51"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__)
# define ACC_ARCH_MCS51 1
# define ACC_INFO_ARCH "mcs51"
#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000)
# define ACC_ARCH_MIPS 1
# define ACC_INFO_ARCH "mips"
#elif (UINT_MAX == ACC_0xffffL) && defined(__MSP430__)
# define ACC_ARCH_MSP430 1
# define ACC_INFO_ARCH "msp430"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__)
# define ACC_ARCH_MSP430 1
# define ACC_INFO_ARCH "msp430"
#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR)
# define ACC_ARCH_POWERPC 1
# define ACC_INFO_ARCH "powerpc"
@@ -1256,6 +1289,12 @@ extern "C" {
# define ACC_ABI_LITTLE_ENDIAN 1
#elif (ACC_ARCH_M68K || ACC_ARCH_S390)
# define ACC_ABI_BIG_ENDIAN 1
#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__)
# if (__LITTLE_ENDIAN__ == 1)
# define ACC_ABI_LITTLE_ENDIAN 1
# else
# define ACC_ABI_BIG_ENDIAN 1
# endif
#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
# define ACC_ABI_BIG_ENDIAN 1
#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
@@ -1328,6 +1367,9 @@ extern "C" {
#elif (ACC_CC_MWERKS) && defined(__MSL__)
# define ACC_LIBC_MSL __MSL__
# define ACC_INFO_LIBC "msl"
#elif 1 && defined(__IAR_SYSTEMS_ICC__)
# define ACC_LIBC_ISOC90 1
# define ACC_INFO_LIBC "isoc90"
#else
# define ACC_LIBC_DEFAULT 1
# define ACC_INFO_LIBC "default"
@@ -1815,11 +1857,11 @@ extern "C" {
#elif (ACC_OS_EMX)
# define HAVE_ALLOCA_H 1
# define HAVE_IO_H 1
#elif (ACC_OS_TOS && ACC_CC_GNUC)
#elif (ACC_ARCH_M68K && ACC_OS_TOS && ACC_CC_GNUC)
# if !defined(__MINT__)
# undef HAVE_MALLOC_H
# endif
#elif (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
#elif (ACC_ARCH_M68K && ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
# undef HAVE_DIRENT_H
# undef HAVE_FCNTL_H
# undef HAVE_MALLOC_H
@@ -1982,7 +2024,10 @@ extern "C" {
#endif
#if (ACC_LIBC_ISOC90 || ACC_LIBC_ISOC99)
# undef HAVE_DIRENT_H
# undef HAVE_FCNTL_H
# undef HAVE_MALLOC_H
# undef HAVE_UNISTD_H
# undef HAVE_UTIME_H
# undef HAVE_SYS_STAT_H
# undef HAVE_SYS_TIME_H
# undef HAVE_SYS_TYPES_H
@@ -2027,6 +2072,7 @@ extern "C" {
#define HAVE_FSTAT 1
#define HAVE_GETTIMEOFDAY 1
#define HAVE_GMTIME 1
#define HAVE_ISATTY 1
#define HAVE_LOCALTIME 1
#define HAVE_LONGJMP 1
#define HAVE_LSTAT 1
@@ -2034,9 +2080,11 @@ extern "C" {
#define HAVE_MEMCPY 1
#define HAVE_MEMMOVE 1
#define HAVE_MEMSET 1
#define HAVE_MKDIR 1
#define HAVE_MKTIME 1
#define HAVE_QSORT 1
#define HAVE_RAISE 1
#define HAVE_RMDIR 1
#define HAVE_SETJMP 1
#define HAVE_SIGNAL 1
#define HAVE_SNPRINTF 1
@@ -2094,12 +2142,12 @@ extern "C" {
#elif (ACC_OS_EMX)
# undef HAVE_CHOWN
# undef HAVE_LSTAT
#elif (ACC_OS_TOS && ACC_CC_GNUC)
#elif (ACC_ARCH_M68K && ACC_OS_TOS && ACC_CC_GNUC)
# if !defined(__MINT__)
# undef HAVE_SNPRINTF
# undef HAVE_VSNPRINTF
# endif
#elif (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
#elif (ACC_ARCH_M68K && ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
# undef HAVE_ALLOCA
# undef HAVE_ACCESS
# undef HAVE_CHMOD
@@ -2290,6 +2338,15 @@ extern "C" {
# undef HAVE_STAT
# undef HAVE_UMASK
# undef HAVE_UTIME
# if 1
# undef HAVE_ALLOCA
# undef HAVE_ISATTY
# undef HAVE_MKDIR
# undef HAVE_RMDIR
# undef HAVE_STRDUP
# undef HAVE_STRICMP
# undef HAVE_STRNICMP
# endif
#endif
#endif
#endif
@@ -3571,7 +3628,7 @@ ACCLIB_EXTERN_NOINLINE(const acc_hvoid_p, acc_vget_acc_hvoid_cp) (const acc_hvoi
#if !defined(ACC_FN_NAME_MAX)
#if (ACC_OS_DOS16 || ACC_OS_WIN16)
# define ACC_FN_NAME_MAX 12
#elif (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
#elif (ACC_ARCH_M68K && ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
# define ACC_FN_NAME_MAX 12
#elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
#elif (ACC_OS_DOS32)
@@ -3593,7 +3650,7 @@ ACCLIB_EXTERN(int, acc_fnmatch) (const acc_hchar_p, const acc_hchar_p, int);
# if (ACC_OS_DOS32 && defined(__BORLANDC__))
# elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
# elif (ACC_OS_OS2 || ACC_OS_OS216)
# elif (ACC_OS_TOS && ACC_CC_GNUC)
# elif (ACC_ARCH_M68K && ACC_OS_TOS && ACC_CC_GNUC)
# elif (ACC_OS_WIN32 && !defined(ACC_HAVE_WINDOWS_H))
# elif (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_TOS || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64)
# undef __ACCLIB_USE_OPENDIR
@@ -3671,6 +3728,7 @@ ACCLIB_EXTERN(int, acc_closedir) (acc_dir_p);
ACCLIB_EXTERN(acclib_handle_t, acc_get_osfhandle) (int);
ACCLIB_EXTERN(int, acc_isatty) (int);
ACCLIB_EXTERN(int, acc_mkdir) (const char*, unsigned);
ACCLIB_EXTERN(int, acc_rmdir) (const char*);
ACCLIB_EXTERN(int, acc_response) (int*, char***);
ACCLIB_EXTERN(int, acc_set_binmode) (int, int);
ACCLIB_EXTERN(acc_int32l_t, acc_muldiv32) (acc_int32l_t, acc_int32l_t, acc_int32l_t);
@@ -3745,7 +3803,7 @@ struct acc_pclock_handle_t {
const char* name;
int (*gettime) (acc_pclock_handle_p, acc_pclock_p);
#if defined(acc_int64l_t)
acc_int64l_t ticks_base;
acc_uint64l_t ticks_base;
#endif
#if defined(__ACCLIB_PCLOCK_USE_PERFCTR)
acc_perfctr_handle_t pch;
@@ -4094,7 +4152,8 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a
ACCCHK_ASSERT((~0l & ~0u) == ~0u)
ACCCHK_ASSERT((~0ul & ~0) == ~0ul)
ACCCHK_ASSERT((~0ul & ~0u) == ~0u)
#if (SIZEOF_INT == 2)
#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
#elif (SIZEOF_INT == 2)
ACCCHK_ASSERT((~0l & ~0u) == 0xffffU)
ACCCHK_ASSERT((~0ul & ~0u) == 0xffffU)
#elif (SIZEOF_INT == 4)
@@ -4205,7 +4264,7 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a
ACCCHK_ASSERT((((1u << 15) + 1) >> 15) == 1)
ACCCHK_ASSERT((((1ul << 31) + 1) >> 31) == 1)
#endif
#if (ACC_CC_TURBOC && (__TURBOC__ < 0x0150))
#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
#elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
#else
ACCCHK_ASSERT((1 << (8*SIZEOF_INT-1)) < 0)
@@ -4223,7 +4282,7 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a
ACCCHK_ASSERT(sizeof(acc_int16e_t) == sizeof(acc_uint16e_t))
ACCCHK_ASSERT_IS_SIGNED_T(acc_int16e_t)
ACCCHK_ASSERT_IS_UNSIGNED_T(acc_uint16e_t)
#if (ACC_CC_TURBOC && (__TURBOC__ < 0x0150))
#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
#else
ACCCHK_ASSERT(((acc_uint16e_t)(~(acc_uint16e_t)0ul) >> 15) == 1)
#endif
@@ -4773,7 +4832,7 @@ ACCLIB_PUBLIC(acc_hvoid_p, acc_hmemcpy) (acc_hvoid_p dest, const acc_hvoid_p src
#if (ACC_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCPY)
acc_hbyte_p p1 = (acc_hbyte_p) dest;
const acc_hbyte_p p2 = (const acc_hbyte_p) src;
if (len <= 0 || p1 == p2)
if (!(len > 0) || p1 == p2)
return dest;
do
*p1++ = *p2++;
@@ -4788,7 +4847,7 @@ ACCLIB_PUBLIC(acc_hvoid_p, acc_hmemmove) (acc_hvoid_p dest, const acc_hvoid_p sr
#if (ACC_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMMOVE)
acc_hbyte_p p1 = (acc_hbyte_p) dest;
const acc_hbyte_p p2 = (const acc_hbyte_p) src;
if (len <= 0 || p1 == p2)
if (!(len > 0) || p1 == p2)
return dest;
if (p1 < p2)
{
@@ -5125,7 +5184,7 @@ ACC_EXTERN_C int __far __pascal GlobalUnlock(const void __near*);
ACCLIB_PUBLIC(acc_hvoid_p, acc_halloc) (acc_hsize_t size)
{
acc_hvoid_p p = 0;
if (size <= 0)
if (!(size > 0))
return p;
#if 0 && defined(__palmos__)
p = MemPtrNew(size);
@@ -5405,7 +5464,7 @@ static int acc_pclock_read_clock(acc_pclock_handle_p h, acc_pclock_p c)
ticks = clock();
secs = (double)ticks / (CLOCKS_PER_SEC);
nsecs = (acc_uint64l_t) (secs * 1000000000.0);
c->tv_sec = nsecs / 1000000000ul;
c->tv_sec = (acc_int64l_t) (nsecs / 1000000000ul);
c->tv_nsec = (acc_uint32l_t) (nsecs % 1000000000ul);
#else
ticks = clock();
@@ -5463,7 +5522,7 @@ static int acc_pclock_read_getprocesstimes(acc_pclock_handle_p h, acc_pclock_p c
h->ticks_base = ticks;
else
ticks -= h->ticks_base;
c->tv_sec = ticks / 10000000ul;
c->tv_sec = (acc_int64l_t) (ticks / 10000000ul);
c->tv_nsec = (acc_uint32l_t)(ticks % 10000000ul) * 100u;
ACC_UNUSED(h); return 0;
}
@@ -5537,7 +5596,7 @@ static int acc_pclock_read_getthreadtimes(acc_pclock_handle_p h, acc_pclock_p c)
h->ticks_base = ticks;
else
ticks -= h->ticks_base;
c->tv_sec = ticks / 10000000ul;
c->tv_sec = (acc_int64l_t) (ticks / 10000000ul);
c->tv_nsec = (acc_uint32l_t)(ticks % 10000000ul) * 100;
ACC_UNUSED(h); return 0;
}
@@ -5819,7 +5878,7 @@ ACCLIB_PUBLIC(int, acc_uclock_close) (acc_uclock_handle_p h)
ACCLIB_PUBLIC(void, acc_uclock_read) (acc_uclock_handle_p h, acc_uclock_p c)
{
#if (__ACCLIB_UCLOCK_USE_RDTSC)
acc_tsc_read((acc_uint32e_t*) &c->tsc);
acc_tsc_read((acc_uint32e_t*) (void*) &c->tsc);
#endif
#if (__ACCLIB_UCLOCK_USE_PERFCTR)
if (h->pch.h) {
@@ -5999,7 +6058,7 @@ ACCLIB_PUBLIC(acclib_handle_t, acc_get_osfhandle) (int fd)
}
ACCLIB_PUBLIC(int, acc_set_binmode) (int fd, int binary)
{
#if (ACC_OS_TOS && defined(__MINT__))
#if (ACC_ARCH_M68K && ACC_OS_TOS && defined(__MINT__))
FILE* fp; int old_binary;
if (fd == STDIN_FILENO) fp = stdin;
else if (fd == STDOUT_FILENO) fp = stdout;
@@ -6008,7 +6067,7 @@ ACCLIB_PUBLIC(int, acc_set_binmode) (int fd, int binary)
old_binary = fp->__mode.__binary;
__set_binmode(fp, binary ? 1 : 0);
return old_binary ? 1 : 0;
#elif (ACC_OS_TOS)
#elif (ACC_ARCH_M68K && ACC_OS_TOS)
ACC_UNUSED(fd); ACC_UNUSED(binary);
return -1;
#elif (ACC_OS_DOS16 && (ACC_CC_AZTECC || ACC_CC_PACIFICC))
@@ -6092,11 +6151,18 @@ ACCLIB_PUBLIC(int, acc_isatty) (int fd)
}
}
#endif
#if defined(HAVE_ISATTY)
return (isatty(fd)) ? 1 : 0;
#else
return 0;
#endif
}
ACCLIB_PUBLIC(int, acc_mkdir) (const char* name, unsigned mode)
{
#if (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
#if !defined(HAVE_MKDIR)
ACC_UNUSED(name); ACC_UNUSED(mode);
return -1;
#elif (ACC_ARCH_M68K && ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
ACC_UNUSED(mode);
return Dcreate(name);
#elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
@@ -6114,6 +6180,17 @@ ACCLIB_PUBLIC(int, acc_mkdir) (const char* name, unsigned mode)
return mkdir(name, mode);
#endif
}
ACCLIB_PUBLIC(int, acc_rmdir) (const char* name)
{
#if !defined(HAVE_RMDIR)
ACC_UNUSED(name);
return -1;
#elif ((ACC_OS_DOS16 || ACC_OS_DOS32) && (ACC_CC_HIGHC || ACC_CC_PACIFICC))
return rmdir((char *) name);
#else
return rmdir(name);
#endif
}
ACCLIB_PUBLIC(acc_int32l_t, acc_muldiv32) (acc_int32l_t a, acc_int32l_t b, acc_int32l_t x)
{
acc_int32l_t r = 0;
+481 -63
View File
@@ -158,7 +158,9 @@ PackArmPe::PackArmPe(InputFile *f) : super(f)
kernel32ordinal = false;
tlsindex = 0;
big_relocs = 0;
sorelocs = 0;
soxrelocs = 0;
use_thumb_stub = false;
}
@@ -178,15 +180,27 @@ PackArmPe::~PackArmPe()
const int *PackArmPe::getCompressionMethods(int method, int level) const
{
static const int m_nrv2e[] = { M_NRV2E_8, -1 };
UNUSED(method); UNUSED(level);
static const int m_nrv2b[] = { M_NRV2B_8, M_NRV2E_8, -1 };
static const int m_nrv2e[] = { M_NRV2E_8, M_NRV2B_8, -1 };
static const int m_nrv2e_v4[] = { M_NRV2E_8, -1 };
UNUSED(level);
// FIXME this when we have v4 mode nrv2b
if (!use_thumb_stub)
return m_nrv2e_v4;
if (M_IS_NRV2B(method))
return m_nrv2b;
if (M_IS_NRV2E(method))
return m_nrv2e;
return m_nrv2e;
}
const int *PackArmPe::getFilters() const
{
return 0;
static const int filters[] = { 0x50, -1 };
return filters;
}
@@ -341,7 +355,7 @@ void Interval::dump() const
/*************************************************************************
// relocation handling
**************************************************************************/
#if 0
class Reloc
{
upx_byte *start;
@@ -506,7 +520,7 @@ void PackArmPe::processRelocs() // pass1
delete [] fix[3];
info("Relocations: original size: %u bytes, preprocessed size: %u bytes",(unsigned) IDSIZE(PEDIR_RELOC),sorelocs);
}
#endif
/*************************************************************************
// import handling
@@ -543,7 +557,9 @@ void PackArmPe::processImports(unsigned myimport) // pass 2
unsigned PackArmPe::processImports() // pass 1
{
static const unsigned char kernel32dll[] = "COREDLL.dll";
static const char llgpa[] = "\x0\x0""LoadLibraryW\x0\x0""GetProcAddressA";
static const char llgpa[] = "\x0\x0""LoadLibraryW\x0\x0"
"GetProcAddressA\x0\x0\x0"
"CacheSync";
//static const char exitp[] = "ExitProcess\x0\x0\x0";
unsigned dllnum = 0;
@@ -565,7 +581,6 @@ unsigned PackArmPe::processImports() // pass 1
LE32 *lookupt;
unsigned npos;
bool isk32;
unsigned _; // padding to 32
static int __acc_cdecl_qsort compare(const void *p1, const void *p2)
{
@@ -581,8 +596,7 @@ unsigned PackArmPe::processImports() // pass 1
if (!u2->shname) return -1;
return strlen(u1->shname) - strlen(u2->shname);
}
}
__attribute_packed;
};
// +1 for dllnum=0
Array(struct udll, dlls, dllnum+1);
@@ -611,7 +625,6 @@ unsigned PackArmPe::processImports() // pass 1
importbyordinal = true;
soimport += 2; // ordinal num: 2 bytes
dlls[ic].ordinal = *tarr & 0xffff;
//if (dlls[ic].isk32)
// kernel32ordinal = true,k32o++;
}
@@ -648,7 +661,7 @@ unsigned PackArmPe::processImports() // pass 1
im = (import_desc*) oimpdlls;
LE32 *ordinals = (LE32*) (oimpdlls + (dllnum2 + 1) * sizeof(import_desc));
LE32 *lookuptable = ordinals + 3;// + k32o + (isdll ? 0 : 1);
LE32 *lookuptable = ordinals + 4;// + k32o + (isdll ? 0 : 1);
upx_byte *dllnames = ((upx_byte*) lookuptable) + (dllnum2 - 1) * 8;
upx_byte *importednames = dllnames + (dllnamelen &~ 1);
@@ -658,8 +671,9 @@ unsigned PackArmPe::processImports() // pass 1
strcpy(dllnames,kernel32dll);
im->dllname = k32namepos;
im->iat = ptr_diff(ordinals,oimpdlls);
*ordinals++ = ptr_diff(importednames,oimpdlls);
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14;
*ordinals++ = ptr_diff(importednames,oimpdlls); // LoadLibraryW
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14; // GetProcAddressA
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14 + 18; // CacheSync
dllnames += sizeof(kernel32dll);
importednames += sizeof(llgpa);
@@ -672,7 +686,7 @@ unsigned PackArmPe::processImports() // pass 1
if (idlls[ic]->ordinal)
for (LE32 *tarr = idlls[ic]->lookupt; *tarr; tarr++)
if (*tarr & 0x80000000)
*ordinals++ = *tarr;
*ordinals++ = *tarr;
*/
}
else if (ic && strcasecmp(idlls[ic-1]->name,idlls[ic]->name) == 0)
@@ -702,6 +716,7 @@ unsigned PackArmPe::processImports() // pass 1
Interval names(ibuf),iats(ibuf),lookups(ibuf);
// create the preprocessed data
//ordinals -= k32o;
upx_byte *ppi = oimport; // preprocessed imports
for (ic = 0; ic < dllnum; ic++)
{
@@ -801,7 +816,7 @@ unsigned PackArmPe::processImports() // pass 1
/*************************************************************************
// export handling
**************************************************************************/
#if 0
class Export
{
struct export_dir_t
@@ -1008,6 +1023,9 @@ void PackArmPe::processTls(Interval *iv) // pass 1
if ((sotls = ALIGN_UP(IDSIZE(PEDIR_TLS),4)) == 0)
return;
// never should happen on wince
throwCantPack("Static TLS entries found. Send a report please.");
const tls * const tlsp = (const tls*) (ibuf + IDADDR(PEDIR_TLS));
// note: TLS callbacks are not implemented in Windows 95/98/ME
if (tlsp->callbacks)
@@ -1075,7 +1093,7 @@ void PackArmPe::processTls(Reloc *rel,const Interval *iv,unsigned newaddr) // pa
tlsp->dataend = newaddr + sotls + ih.imagebase;
tlsp->callbacks = 0; // note: TLS callbacks are not implemented in Windows 95/98/ME
}
#endif
/*************************************************************************
// resource handling
@@ -1529,8 +1547,9 @@ unsigned PackArmPe::stripDebug(unsigned overlaystart)
bool PackArmPe::canPack()
{
if (!readFileHeader() || ih.cpu != 0x1c0)
if (!readFileHeader() || (ih.cpu != 0x1c0 && ih.cpu != 0x1c2))
return false;
use_thumb_stub |= ih.cpu == 0x1c2 || (ih.entry & 1) == 1;
return true;
}
@@ -1540,10 +1559,14 @@ int PackArmPe::buildLoader(const Filter *ft)
UNUSED(ft);
// prepare loader
initLoader(nrv_loader, sizeof(nrv_loader), -1, 2);
addLoader("ARMWPE00,ARMWPE99,"
"IDENTSTR,UPX1HEAD",
NULL
);
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");
addLoader(stubname, "IDENTSTR,UPX1HEAD", NULL);
return getLoaderSize();
}
@@ -1562,43 +1585,37 @@ void PackArmPe::pack(OutputFile *fo)
// check the PE header
// FIXME: add more checks
if (!opt->force && (
ih.opthdrsize != 0xE0
|| (ih.flags & EXECUTABLE) == 0
|| ih.subsystem != 9
|| (ih.entry == 0 && !isdll)
|| ih.ddirsentries != 16
/*|| IDSIZE(PEDIR_EXCEPTION*/) // is this used on i386?
(ih.cpu != 0x1c0 && ih.cpu != 0x1c2)
|| (ih.opthdrsize != 0xe0)
|| ((ih.flags & EXECUTABLE) == 0)
|| (ih.subsystem != 9)
|| (ih.entry == 0 /*&& !isdll*/)
|| (ih.ddirsentries != 16)
// || IDSIZE(PEDIR_EXCEPTION) // is this used on arm?
// || IDSIZE(PEDIR_COPYRIGHT)
)
))
throwCantPack("unexpected value in PE header (try --force)");
if (IDSIZE(PEDIR_SEC))
throwCantPack("compressing certificate info is not supported");
IDSIZE(PEDIR_SEC) = IDADDR(PEDIR_SEC) = 0;
// throwCantPack("compressing certificate info is not supported");
if (IDSIZE(PEDIR_COMRT))
throwCantPack(".NET files (win32/net) are not yet supported");
#if 1
if (IDSIZE(PEDIR_EXPORT))
IDSIZE(PEDIR_EXPORT) = IDADDR(PEDIR_EXPORT) = 0;
#else
if (IDSIZE(PEDIR_EXPORT))
throwCantPack("exports not yet supported");
#endif
if (IDSIZE(PEDIR_RELOC))
throwCantPack("relocations not yet supported");
if (isdll)
opt->win32_pe.strip_relocs = false;
else if (opt->win32_pe.strip_relocs < 0)
opt->win32_pe.strip_relocs = (ih.imagebase >= 0x400000);
opt->win32_pe.strip_relocs = (ih.imagebase >= 0x10000);
if (opt->win32_pe.strip_relocs)
if (ih.imagebase < 0x400000)
throwCantPack("--strip-relocs is not allowed when imagebase < 0x400000");
if (ih.imagebase < 0x10000)
throwCantPack("--strip-relocs is not allowed when imagebase < 0x10000");
else
ih.flags |= RELOCS_STRIPPED;
if (memcmp(isection[0].name,"UPX",3) == 0)
throwAlreadyPackedByUPX();
if (!opt->force && (IDSIZE(15) || ih.entry > isection[1].vaddr))
if (!opt->force && IDSIZE(15))
throwCantPack("file is possibly packed/protected (try --force)");
if (ih.entry && ih.entry < rvamin)
throwCantPack("run a virus scanner on this file!");
@@ -1671,13 +1688,13 @@ void PackArmPe::pack(OutputFile *fo)
Resource res;
Interval tlsiv(ibuf);
//Export xport((char*)(unsigned char*)ibuf);
Export xport((char*)(unsigned char*)ibuf);
const unsigned dllstrings = processImports();
//processTls(&tlsiv); // call before processRelocs!!
processTls(&tlsiv); // call before processRelocs!!
processResources(&res);
//processExports(&xport);
//processRelocs();
processExports(&xport);
processRelocs();
//OutputFile::dump("x1", ibuf, usize);
@@ -1791,19 +1808,28 @@ void PackArmPe::pack(OutputFile *fo)
const unsigned ncsection = (s1addr + s1size + oam1) &~ oam1;
const unsigned upxsection = s1addr + ic + clen;
const unsigned myimport = ncsection + soresources - rvamin;
// 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, "DSTL", ph.u_len);
patch_le32(loader, codesize, "SRCL", ph.c_len);
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, "SRC0", ih.imagebase + s1addr + ic);
patch_le32(loader, codesize, "SRCL", ph.c_len);
patch_le32(loader, codesize, "SRC0", ih.imagebase + s1addr + identsize - identsplit);
#if 0
if (ih.entry)
{
@@ -1853,10 +1879,19 @@ void PackArmPe::pack(OutputFile *fo)
const unsigned esi0 = s1addr + ic;
patch_le32(loader,codesize,"EDI0", 0u - esi0 + rvamin);
patch_le32(loader,codesize,"ESI0", esi0 + ih.imagebase);
ic = getLoaderSection("PEMAIN01") + 2 + upxsection;
#endif
//Reloc rel(1024); // new relocations are put here
//rel.add(ic,3);
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);
// new PE header
memcpy(&oh,&ih,sizeof(oh));
@@ -1878,7 +1913,7 @@ void PackArmPe::pack(OutputFile *fo)
// tls is put into section 1
ic = s1addr + s1size - sotls;
//processTls(&rel,&tlsiv,ic);
processTls(&rel,&tlsiv,ic);
ODADDR(PEDIR_TLS) = sotls ? ic : 0;
ODSIZE(PEDIR_TLS) = sotls ? 0x18 : 0;
ic += sotls;
@@ -1886,16 +1921,25 @@ void PackArmPe::pack(OutputFile *fo)
// these are put into section 2
ic = ncsection;
// wince wants relocation data at the beginning of a section
processRelocs(&rel);
ODADDR(PEDIR_RELOC) = soxrelocs ? ic : 0;
ODSIZE(PEDIR_RELOC) = soxrelocs;
ic += soxrelocs;
if (soresources)
processResources(&res,ic);
ODADDR(PEDIR_RESOURCE) = soresources ? ic : 0;
ODSIZE(PEDIR_RESOURCE) = soresources;
ic += soresources;
processImports(ic);
ODADDR(PEDIR_IMPORT) = ic;
ODSIZE(PEDIR_IMPORT) = soimpdlls;
ic += soimpdlls;
//processExports(&xport,ic);
processExports(&xport,ic);
ODADDR(PEDIR_EXPORT) = soexport ? ic : 0;
ODSIZE(PEDIR_EXPORT) = soexport;
if (!isdll && opt->win32_pe.compress_exports)
@@ -1904,13 +1948,12 @@ void PackArmPe::pack(OutputFile *fo)
ODSIZE(PEDIR_EXPORT) = IDSIZE(PEDIR_EXPORT);
}
ic += soexport;
//processRelocs(&rel);
ODADDR(PEDIR_RELOC) = soxrelocs ? ic : 0;
ODSIZE(PEDIR_RELOC) = soxrelocs;
ic += soxrelocs;
if (isdll && soxrelocs != assumed_soxrelocs)
throwInternalError("FIXME: soxrelocs != assumed_soxrelocs");
// this is computed here, because soxrelocs changes some lines above
const unsigned ncsize = soresources + soimpdlls + soexport + soxrelocs;
const unsigned ncsize = soxrelocs + soresources + soimpdlls + soexport;
ic = oh.filealign - 1;
// this one is tricky: it seems windoze touches 4 bytes after
@@ -1969,6 +2012,9 @@ void PackArmPe::pack(OutputFile *fo)
// set_le32(ibuf + ic,get_le32("UPX "));
ibuf.clear(0, oh.filealign);
info("Image size change: %u -> %u kBytes",
ih.imagesize / 1024, oh.imagesize / 1024);
infoHeader("[Writing compressed file]");
// write loader + compressed file
@@ -1986,15 +2032,17 @@ void PackArmPe::pack(OutputFile *fo)
fo->write(obuf,clen);
infoWriting("compressed data", clen);
fo->write(loader,codesize);
if (opt->debug.dump_stub_loader)
OutputFile::dump(opt->debug.dump_stub_loader, loader, codesize);
if ((ic = fo->getBytesWritten() & 3) != 0)
fo->write(ibuf,4 - ic);
fo->write(otls,sotls);
if ((ic = fo->getBytesWritten() & (oh.filealign-1)) != 0)
fo->write(ibuf,oh.filealign - ic);
fo->write(oxrelocs,soxrelocs);
fo->write(oresources,soresources);
fo->write(oimpdlls,soimpdlls);
fo->write(oexport,soexport);
fo->write(oxrelocs,soxrelocs);
if ((ic = fo->getBytesWritten() & (oh.filealign-1)) != 0)
fo->write(ibuf,oh.filealign - ic);
@@ -2030,13 +2078,383 @@ void PackArmPe::pack(OutputFile *fo)
int PackArmPe::canUnpack()
{
if (!readFileHeader() || (ih.cpu != 0x1c0 && ih.cpu != 0x1c2))
return false;
unsigned objs = ih.objects;
isection = new pe_section_t[objs];
fi->seek(pe_offset+sizeof(ih),SEEK_SET);
fi->readx(isection,sizeof(pe_section_t)*objs);
if (ih.objects < 3)
return -1;
bool is_packed = (ih.objects == 3 &&
(IDSIZE(15) || ih.entry > isection[1].vaddr));
bool found_ph = false;
if (memcmp(isection[0].name,"UPX",3) == 0)
{
// current version
fi->seek(isection[1].rawdataptr - 64, SEEK_SET);
found_ph = readPackHeader(1024);
if (!found_ph)
{
// old versions
fi->seek(isection[2].rawdataptr, SEEK_SET);
found_ph = readPackHeader(1024);
}
}
if (is_packed && found_ph)
return true;
if (!is_packed && !found_ph)
return -1;
if (is_packed && ih.entry < isection[2].vaddr)
{
unsigned char buf[256];
bool x = false;
memset(buf, 0, sizeof(buf));
try {
fi->seek(ih.entry - isection[1].vaddr + isection[1].rawdataptr, SEEK_SET);
fi->read(buf, sizeof(buf));
// FIXME this is for x86
static const unsigned char magic[] = "\x8b\x1e\x83\xee\xfc\x11\xdb";
// mov ebx, [esi]; sub esi, -4; adc ebx,ebx
int offset = find(buf, sizeof(buf), magic, 7);
if (offset >= 0 && find(buf + offset + 1, sizeof(buf) - offset - 1, magic, 7) >= 0)
x = true;
} catch (...) {
//x = true;
}
if (x)
throwCantUnpack("file is modified/hacked/protected; take care!!!");
else
throwCantUnpack("file is possibly modified/hacked/protected; take care!");
return false; // not reached
}
// FIXME: what should we say here ?
//throwCantUnpack("file is possibly modified/hacked/protected; take care!");
return false;
}
void PackArmPe::unpack(OutputFile *)
void PackArmPe::rebuildImports(upx_byte *& extrainfo)
{
if (ODADDR(PEDIR_IMPORT) == 0)
return;
// const upx_byte * const idata = obuf + get_le32(extrainfo);
OPTR_C(const upx_byte, idata, obuf + get_le32(extrainfo));
const unsigned inamespos = get_le32(extrainfo + 4);
extrainfo += 8;
unsigned sdllnames = 0;
// const upx_byte *import = ibuf + IDADDR(PEDIR_IMPORT) - isection[2].vaddr;
// const upx_byte *p;
IPTR_I(const upx_byte, import, ibuf + IDADDR(PEDIR_IMPORT) - isection[2].vaddr);
OPTR(const upx_byte, p);
for (p = idata; get_le32(p) != 0; ++p)
{
const upx_byte *dname = get_le32(p) + import;
const unsigned dlen = strlen(dname);
ICHECK(dname, dlen + 1);
sdllnames += dlen + 1;
for (p += 8; *p;)
if (*p == 1)
p += strlen(++p) + 1;
else if (*p == 0xff)
p += 3; // ordinal
else
p += 5;
}
sdllnames = ALIGN_UP(sdllnames,2);
upx_byte * const Obuf = obuf - rvamin;
import_desc * const im0 = (import_desc*) (Obuf + ODADDR(PEDIR_IMPORT));
import_desc *im = im0;
upx_byte *dllnames = Obuf + inamespos;
upx_byte *importednames = dllnames + sdllnames;
for (p = idata; get_le32(p) != 0; ++p)
{
// restore the name of the dll
const upx_byte *dname = get_le32(p) + import;
const unsigned dlen = strlen(dname);
ICHECK(dname, dlen + 1);
const unsigned iatoffs = get_le32(p + 4) + rvamin;
if (inamespos)
{
// now I rebuild the dll names
OCHECK(dllnames, dlen + 1);
strcpy(dllnames, dname);
im->dllname = ptr_diff(dllnames,Obuf);
//;;;printf("\ndll: %s:",dllnames);
dllnames += dlen + 1;
}
else
{
OCHECK(Obuf + im->dllname, dlen + 1);
strcpy(Obuf + im->dllname, dname);
}
im->oft = im->iat = iatoffs;
// LE32 *newiat = (LE32 *) (Obuf + iatoffs);
OPTR_I(LE32, newiat, (LE32 *) (Obuf + iatoffs));
// restore the imported names+ordinals
for (p += 8; *p; ++newiat)
if (*p == 1)
{
const unsigned ilen = strlen(++p) + 1;
if (inamespos)
{
if (ptr_diff(importednames,oimpdlls) & 1)
importednames -= 1;
omemcpy(importednames + 2, p, ilen);
//;;;printf(" %s",importednames+2);
*newiat = ptr_diff(importednames, Obuf);
importednames += 2 + ilen;
}
else
{
OCHECK(Obuf + *newiat + 2, ilen + 1);
strcpy(Obuf + *newiat + 2, p);
}
p += ilen;
}
else if (*p == 0xff)
{
*newiat = get_le16(p + 1) + 0x80000000;
//;;;printf(" %x",(unsigned)*newiat);
p += 3;
}
else
{
*newiat = get_le32(get_le32(p + 1) + import);
assert(*newiat & 0x80000000);
p += 5;
}
*newiat = 0;
im++;
}
//memset(idata,0,p - idata);
}
void PackArmPe::rebuildRelocs(upx_byte *& extrainfo)
{
if (!ODADDR(PEDIR_RELOC) || !ODSIZE(PEDIR_RELOC) || (oh.flags & RELOCS_STRIPPED))
return;
if (ODSIZE(PEDIR_RELOC) == 8) // some tricky dlls use this
{
omemcpy(obuf + ODADDR(PEDIR_RELOC) - rvamin, "\x0\x0\x0\x0\x8\x0\x0\x0", 8);
return;
}
upx_byte *rdata = obuf + get_le32(extrainfo);
const upx_byte big = extrainfo[4];
extrainfo += 5;
// upx_byte *p = rdata;
OPTR_I(upx_byte, p, rdata);
MemBuffer wrkmem;
unsigned relocn = unoptimizeReloc32(&rdata,obuf,&wrkmem,1);
unsigned r16 = 0;
if (big & 6) // 16 bit relocations
{
const LE32 *q = (LE32*) rdata;
while (*q++)
r16++;
if ((big & 6) == 6)
while (*++q)
r16++;
}
Reloc rel(relocn + r16);
if (big & 6)
{
LE32 *q = (LE32*) rdata;
while (*q)
rel.add(*q++ + rvamin,(big & 4) ? 2 : 1);
if ((big & 6) == 6)
while (*++q)
rel.add(*q + rvamin,1);
rdata = (upx_byte*) q;
}
//memset(p,0,rdata - p);
for (unsigned ic = 0; ic < relocn; ic++)
{
p = obuf + get_le32(wrkmem + 4 * ic);
set_le32(p, get_le32((unsigned char *)p) + oh.imagebase + rvamin);
rel.add(rvamin + get_le32(wrkmem + 4 * ic),3);
}
rel.finish (oxrelocs,soxrelocs);
if (opt->win32_pe.strip_relocs && !isdll)
{
obuf.clear(ODADDR(PEDIR_RELOC) - rvamin, ODSIZE(PEDIR_RELOC));
ODADDR(PEDIR_RELOC) = 0;
soxrelocs = 0;
// FIXME: try to remove the original relocation section somehow
}
else
omemcpy(obuf + ODADDR(PEDIR_RELOC) - rvamin,oxrelocs,soxrelocs);
delete [] oxrelocs; oxrelocs = NULL;
wrkmem.dealloc();
ODSIZE(PEDIR_RELOC) = soxrelocs;
}
void PackArmPe::rebuildExports()
{
if (ODSIZE(PEDIR_EXPORT) == 0 || ODADDR(PEDIR_EXPORT) == IDADDR(PEDIR_EXPORT))
return; // nothing to do
opt->win32_pe.compress_exports = 0;
Export xport((char*)(unsigned char*) ibuf - isection[2].vaddr);
processExports(&xport);
processExports(&xport,ODADDR(PEDIR_EXPORT));
omemcpy(obuf + ODADDR(PEDIR_EXPORT) - rvamin,oexport,soexport);
}
void PackArmPe::rebuildTls()
{
// this is an easy one : just do nothing ;-)
}
void PackArmPe::rebuildResources(upx_byte *& extrainfo)
{
if (ODSIZE(PEDIR_RESOURCE) == 0)
return;
icondir_count = get_le16(extrainfo);
extrainfo += 2;
const unsigned vaddr = IDADDR(PEDIR_RESOURCE);
const upx_byte *r = ibuf - isection[2].vaddr;
Resource res(r + vaddr);
while (res.next())
if (res.offs() > vaddr)
{
unsigned origoffs = get_le32(r + res.offs() - 4);
res.newoffs() = origoffs;
omemcpy(obuf + origoffs - rvamin,r + res.offs(),res.size());
if (icondir_count && res.itype() == RT_GROUP_ICON)
{
set_le16(obuf + origoffs - rvamin + 4,icondir_count);
icondir_count = 0;
}
}
upx_byte *p = res.build();
// write back when the original is zeroed
if (get_le32(obuf + ODADDR(PEDIR_RESOURCE) - rvamin + 12) == 0)
omemcpy(obuf + ODADDR(PEDIR_RESOURCE) - rvamin,p,res.dirsize());
delete [] p;
}
void PackArmPe::unpack(OutputFile *fo)
{
//infoHeader("[Processing %s, format %s, %d sections]", fn_basename(fi->getName()), getName(), objs);
handleStub(fi,fo,pe_offset);
const unsigned overlay = file_size - ALIGN_UP(isection[2].rawdataptr + isection[2].size,ih.filealign);
checkOverlay(overlay);
ibuf.alloc(ph.c_len);
obuf.allocForUncompression(ph.u_len);
fi->seek(isection[1].rawdataptr - 64 + ph.buf_offset + ph.getPackHeaderSize(),SEEK_SET);
fi->readx(ibuf,ph.c_len);
// decompress
decompress(ibuf,obuf);
upx_byte *extrainfo = obuf + get_le32(obuf + ph.u_len - 4);
//upx_byte * const eistart = extrainfo;
memcpy(&oh, extrainfo, sizeof (oh));
extrainfo += sizeof (oh);
unsigned objs = oh.objects;
Array(pe_section_t, osection, objs);
memcpy(osection,extrainfo,sizeof(pe_section_t) * objs);
rvamin = osection[0].vaddr;
extrainfo += sizeof(pe_section_t) * objs;
// read the noncompressed section
ibuf.dealloc();
ibuf.alloc(isection[2].size);
fi->seek(isection[2].rawdataptr,SEEK_SET);
fi->readx(ibuf,isection[2].size);
// unfilter
if (ph.filter)
{
Filter ft(ph.level);
ft.init(ph.filter,oh.codebase - rvamin);
ft.cto = (unsigned char) ph.filter_cto;
ft.unfilter(obuf + oh.codebase - rvamin, oh.codesize);
}
rebuildImports(extrainfo);
rebuildRelocs(extrainfo);
rebuildTls();
rebuildExports();
rebuildResources(extrainfo);
//FIXME: this does bad things if the relocation section got removed
// during compression ...
//memset(eistart,0,extrainfo - eistart + 4);
// fill the data directory
ODADDR(PEDIR_DEBUG) = 0;
ODSIZE(PEDIR_DEBUG) = 0;
ODADDR(PEDIR_IAT) = 0;
ODSIZE(PEDIR_IAT) = 0;
ODADDR(PEDIR_BOUNDIM) = 0;
ODSIZE(PEDIR_BOUNDIM) = 0;
// oh.headersize = osection[0].rawdataptr;
// oh.headersize = ALIGN_UP(pe_offset + sizeof(oh) + sizeof(pe_section_t) * objs, oh.filealign);
oh.headersize = rvamin;
oh.chksum = 0;
// FIXME: ih.flags is checked here because of a bug in UPX 0.92
if ((opt->win32_pe.strip_relocs && !isdll) || (ih.flags & RELOCS_STRIPPED))
{
oh.flags |= RELOCS_STRIPPED;
ODADDR(PEDIR_RELOC) = 0;
ODSIZE(PEDIR_RELOC) = 0;
}
// write decompressed file
if (fo)
{
ibuf.dealloc();
ibuf.alloc(osection[0].rawdataptr);
ibuf.clear();
infoHeader("[Writing uncompressed file]");
// write loader + compressed file
fo->write(&oh,sizeof(oh));
fo->write(osection,objs * sizeof(pe_section_t));
fo->write(ibuf,osection[0].rawdataptr - fo->getBytesWritten());
for(unsigned ic = 0; ic < objs; ic++)
if (osection[ic].rawdataptr)
fo->write(obuf + osection[ic].vaddr - rvamin,ALIGN_UP(osection[ic].size,oh.filealign));
copyOverlay(fo, overlay, &obuf);
}
ibuf.dealloc();
}
/*
vi:ts=4:et
*/
+4 -2
View File
@@ -37,7 +37,7 @@ class PackArmPe_Export;
/*************************************************************************
// w32/pe
// arm/pe
**************************************************************************/
class PackArmPe : public Packer
@@ -61,7 +61,7 @@ public:
// unpacker capabilities
virtual bool canUnpackVersion(int version) const
{ UNUSED(version); return false; }
{ return version == 13; }
protected:
virtual int readFileHeader();
@@ -118,6 +118,8 @@ protected:
unsigned crelocs; // rva of preprocessed fixups
int big_relocs;
bool use_thumb_stub;
struct pe_header_t
{
// 0x0
+14 -8
View File
@@ -587,12 +587,16 @@ PackLinuxElf32::generateElfHdr(
// Info for OS kernel to set the brk()
if (brka) {
#define PAGE_MASK (~0u<<12)
// linux-2.6.14 binfmt_elf.c: SIGKILL if (0==.p_memsz) on a page boundary
unsigned const brkb = brka | ((0==(~PAGE_MASK & brka)) ? 0x20 : 0);
set_native32(&h2->phdr[1].p_type, PT_LOAD32); // be sure
set_native32(&h2->phdr[1].p_offset, 0xfff&brka);
set_native32(&h2->phdr[1].p_vaddr, brka);
set_native32(&h2->phdr[1].p_paddr, brka);
set_native32(&h2->phdr[1].p_offset, ~PAGE_MASK & brkb);
set_native32(&h2->phdr[1].p_vaddr, brkb);
set_native32(&h2->phdr[1].p_paddr, brkb);
h2->phdr[1].p_filesz = 0;
h2->phdr[1].p_memsz = 0;
#undef PAGE_MASK
}
}
@@ -625,12 +629,16 @@ PackLinuxElf64::generateElfHdr(
// Info for OS kernel to set the brk()
if (brka) {
#define PAGE_MASK (~0ul<<12)
// linux-2.6.14 binfmt_elf.c: SIGKILL if (0==.p_memsz) on a page boundary
unsigned const brkb = brka | ((0==(~PAGE_MASK & brka)) ? 0x20 : 0);
set_native32(&h2->phdr[1].p_type, PT_LOAD32); // be sure
set_native64(&h2->phdr[1].p_offset, 0xfff&brka);
set_native64(&h2->phdr[1].p_vaddr, brka);
set_native64(&h2->phdr[1].p_paddr, brka);
set_native64(&h2->phdr[1].p_offset, ~PAGE_MASK & brkb);
set_native64(&h2->phdr[1].p_vaddr, brkb);
set_native64(&h2->phdr[1].p_paddr, brkb);
h2->phdr[1].p_filesz = 0;
h2->phdr[1].p_memsz = 0;
#undef PAGE_MASK
}
}
@@ -941,8 +949,6 @@ void PackLinuxElf64amd::pack3(OutputFile *fo, Filter &ft)
fo->write(&zero, frag);
len += frag;
#undef PAGE_MASK
#undef PAGE_SIZE
#define PAGE_MASK (~0u<<12)
#define PAGE_SIZE (-PAGE_MASK)
upx_byte *const p = const_cast<upx_byte *>(getLoader());
+32 -7
View File
@@ -108,12 +108,22 @@ PackLinuxI386::generateElfHdr(
// Info for OS kernel to set the brk()
if (brka) {
#define PAGE_MASK (~0ul<<12)
// linux-2.6.14 binfmt_elf.c: SIGKILL if (0==.p_memsz) on a page boundary
unsigned const brkb = brka | ((0==(~PAGE_MASK & brka)) ? 0x20 : 0);
h2->phdr[1].p_type = PT_LOAD; // be sure
h2->phdr[1].p_offset = 0xfff&brka;
h2->phdr[1].p_vaddr = brka;
h2->phdr[1].p_paddr = brka;
h2->phdr[1].p_offset = ~PAGE_MASK & brkb;
h2->phdr[1].p_vaddr = brkb;
h2->phdr[1].p_paddr = brkb;
h2->phdr[1].p_filesz = 0;
h2->phdr[1].p_memsz = 0;
if (0==h2->phdr[1].p_flags) {
h2->phdr[1].p_flags = Elf32_Phdr::PF_R|Elf32_Phdr::PF_W;
}
if (0==h2->phdr[1].p_align) {
h2->phdr[1].p_align = 0x1000;
}
#undef PAGE_MASK
}
if (ph.format==UPX_F_LINUX_i386 ) {
@@ -128,7 +138,7 @@ PackLinuxI386::generateElfHdr(
}
else if (ph.format==UPX_F_LINUX_SH_i386) {
assert(h2->ehdr.e_phnum==1);
h2->ehdr.e_phnum = 2;
h2->ehdr.e_phnum = 1;
memset(&h2->linfo, 0, sizeof(h2->linfo));
fo->write(h2, sizeof(*h2));
}
@@ -250,8 +260,12 @@ PackLinuxI386::buildLinuxLoader(
unsigned fold_hdrlen = 0;
if (0 < szfold) {
cprElfHdr1 const *const hf = (cprElfHdr1 const *)fold;
fold_hdrlen = umax(0x80, sizeof(hf->ehdr) +
hf->ehdr.e_phentsize * hf->ehdr.e_phnum + sizeof(l_info) );
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;
@@ -352,6 +366,9 @@ PackLinuxI386::buildLinuxLoader(
addLoader("LEXEC017", NULL);
}
}
else {
addLoader("LEXEC017", NULL);
}
addLoader("IDENTSTR", NULL);
addLoader("LEXEC020", NULL);
@@ -392,7 +409,14 @@ PackLinuxI386::buildLoader(Filter const *ft)
// filter
optimizeFilter(&fold_ft, buf, sz_fold);
bool success = fold_ft.filter(buf + sizeof(cprElfHdr2), sz_fold - sizeof(cprElfHdr2));
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(
@@ -400,6 +424,7 @@ PackLinuxI386::buildLoader(Filter const *ft)
buf, sz_fold, ft );
}
// FIXME: getLoaderPrefixSize is unused?
int PackLinuxI386::getLoaderPrefixSize() const
{
return 116;
+16 -1
View File
@@ -59,6 +59,15 @@ PackLinuxI386sh::~PackLinuxI386sh()
{
}
static unsigned
umax(unsigned a, unsigned b)
{
if (a <= b) {
return b;
}
return a;
}
int
PackLinuxI386sh::buildLoader(Filter const *ft)
{
@@ -78,7 +87,13 @@ PackLinuxI386sh::buildLoader(Filter const *ft)
// filter
optimizeFilter(&fold_ft, buf, sz_fold);
bool success = fold_ft.filter(buf + sizeof(cprElfHdr2), sz_fold - sizeof(cprElfHdr2));
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);
UNUSED(success);
return buildLinuxLoader(
+85 -20
View File
@@ -180,26 +180,67 @@ PackMachPPC32::pack3(OutputFile *fo, Filter &ft) // append loader
super::pack3(fo, ft);
}
// Determine length of gap between PT_LOAD phdri[k] and closest PT_LOAD
// which follows in the file (or end-of-file). Optimize for common case
// where the PT_LOAD are adjacent ascending by .p_offset. Assume no overlap.
unsigned PackMachPPC32::find_SEGMENT_gap(
unsigned const k
)
{
if (Mach_segment_command::LC_SEGMENT!=msegcmd[k].cmd
|| 0==msegcmd[k].filesize ) {
return 0;
}
unsigned const hi = get_native32(&msegcmd[k].fileoff) +
get_native32(&msegcmd[k].filesize);
unsigned lo = ph.u_file_size;
unsigned j = k;
for (;;) { // circular search, optimize for adjacent ascending
++j;
if (n_segment==j) {
j = 0;
}
if (k==j) {
break;
}
if (Mach_segment_command::LC_SEGMENT==msegcmd[j].cmd
&& 0!=msegcmd[j].filesize ) {
unsigned const t = get_native32(&msegcmd[j].fileoff);
if ((t - hi) < (lo - hi)) {
lo = t;
if (hi==lo) {
break;
}
}
}
}
return lo - hi;
}
void
PackMachPPC32::pack2(OutputFile *fo, Filter &ft) // append compressed body
{
Extent x;
unsigned k;
ui_total_passes = n_segment;
// count passes, set ptload vars
ui_total_passes = 0;
for (k = 0; k < n_segment; ++k) {
if (Mach_segment_command::LC_SEGMENT==msegcmd[k].cmd
&& 0!=msegcmd[k].filesize ) {
ui_total_passes++;
if (find_SEGMENT_gap(k)) {
ui_total_passes++;
}
}
}
// compress extents
unsigned total_in = 0;
unsigned total_out = 0;
ui_pass = -1; // Compressing Mach headers is invisible to UI.
x.offset = 0;
x.size = mhdri.sizeofcmds;
{
int const old_level = ph.level; ph.level = 10;
packExtent(x, total_in, total_out, 0, fo);
ph.level = old_level;
}
unsigned hdr_ulen = mhdri.sizeofcmds;
ui_pass = 0;
ft.addvalue = 0;
@@ -217,13 +258,17 @@ PackMachPPC32::pack2(OutputFile *fo, Filter &ft) // append compressed body
}
packExtent(x, total_in, total_out,
((Mach_segment_command::VM_PROT_EXECUTE & msegcmd[k].initprot)
? &ft : 0 ), fo );
? &ft : 0 ), fo, hdr_ulen );
hdr_ulen = 0;
++nx;
}
if ((off_t)total_in < file_size) { // non-LC_SEGMENT stuff
x.offset = total_in;
x.size = file_size - total_in;
packExtent(x, total_in, total_out, 0, fo);
for (k = 0; k < n_segment; ++k) {
x.size = find_SEGMENT_gap(k);
if (x.size) {
x.offset = get_native32(&msegcmd[k].fileoff) +
get_native32(&msegcmd[k].filesize);
packExtent(x, total_in, total_out, 0, fo);
}
}
if ((off_t)total_in != file_size)
@@ -296,6 +341,21 @@ PackMachPPC32::unpack(OutputFile *fo)
fi->readx(ibuf, ph.c_len);
Mach_header *const mhdr = (Mach_header *)new upx_byte[ph.u_len];
decompress(ibuf, (upx_byte *)mhdr, false);
unsigned const ncmds = mhdr->ncmds;
msegcmd = new Mach_segment_command[ncmds];
unsigned char *ptr = (unsigned char *)(1+mhdr);
for (unsigned j= 0; j < ncmds; ++j) {
msegcmd[j] = *(Mach_segment_command *)ptr;
ptr += (unsigned) ((Mach_segment_command *)ptr)->cmdsize;
}
// Put LC_SEGMENT together at the beginning, ascending by .vmaddr.
qsort(msegcmd, ncmds, sizeof(*msegcmd), compare_segment_command);
n_segment = 0;
for (unsigned j= 0; j < ncmds; ++j) {
n_segment += (Mach_segment_command::LC_SEGMENT==msegcmd[j].cmd);
}
unsigned total_in = 0;
unsigned total_out = 0;
@@ -307,7 +367,7 @@ PackMachPPC32::unpack(OutputFile *fo)
fi->seek(- (off_t)(sizeof(bhdr) + ph.c_len), SEEK_CUR);
for (
k = 0;
k < mhdr->ncmds;
k < ncmds;
(++k), (sc = (Mach_segment_command const *)(sc->cmdsize + (char const *)sc))
) {
if (Mach_segment_command::LC_SEGMENT==sc->cmd
@@ -316,11 +376,16 @@ PackMachPPC32::unpack(OutputFile *fo)
unpackExtent(filesize, fo, total_in, total_out, c_adler, u_adler, false, sizeof(bhdr));
}
}
unsigned const rest = orig_file_size - total_out;
if (0!=rest) { // non-LC_SEGMENT stuff
if (fo)
fo->seek(0, SEEK_END);
unpackExtent(rest, fo, total_in, total_out, c_adler, u_adler, false, sizeof(bhdr));
for (unsigned j = 0; j < ncmds; ++j) {
unsigned const size = find_SEGMENT_gap(j);
if (size) {
unsigned const where = get_native32(&msegcmd[k].fileoff) +
get_native32(&msegcmd[k].filesize);
if (fo)
fo->seek(where, SEEK_SET);
unpackExtent(size, fo, total_in, total_out,
c_adler, u_adler, false, sizeof(bhdr));
}
}
}
+1
View File
@@ -177,6 +177,7 @@ public:
virtual void unpack(OutputFile *fo);
virtual bool canPack();
virtual unsigned find_SEGMENT_gap(unsigned const k);
protected:
virtual int buildLoader(const Filter *ft);
+1 -1
View File
@@ -77,7 +77,7 @@ static const
PackPs1::PackPs1(InputFile *f) :
super(f),
isCon(true^opt->ps1_exe.boot_only), is32Bit(true^opt->ps1_exe.do_8bit),
isCon(!opt->ps1_exe.boot_only), is32Bit(!opt->ps1_exe.do_8bit),
overlap(0), sa_cnt(0)
{
COMPILE_TIME_ASSERT(sizeof(ps1_exe_t) == 188);
+29 -18
View File
@@ -159,6 +159,8 @@ PackW32Pe::PackW32Pe(InputFile *f) : super(f)
kernel32ordinal = false;
tlsindex = 0;
big_relocs = 0;
sorelocs = 0;
soxrelocs = 0;
soloadconf = 0;
use_dep_hack = true;
use_clear_dirty_stack = true;
@@ -573,7 +575,6 @@ unsigned PackW32Pe::processImports() // pass 1
LE32 *lookupt;
unsigned npos;
bool isk32;
unsigned _; // padding to 32
static int __acc_cdecl_qsort compare(const void *p1, const void *p2)
{
@@ -589,8 +590,7 @@ unsigned PackW32Pe::processImports() // pass 1
if (!u2->shname) return -1;
return strlen(u1->shname) - strlen(u2->shname);
}
}
__attribute_packed;
};
// +1 for dllnum=0
Array(struct udll, dlls, dllnum+1);
@@ -661,15 +661,15 @@ unsigned PackW32Pe::processImports() // pass 1
unsigned k32namepos = ptr_diff(dllnames,oimpdlls);
memcpy(importednames,llgpa,sizeof(llgpa));
memcpy(importednames, llgpa, sizeof(llgpa));
if (!isdll)
memcpy(importednames + sizeof(llgpa) - 1,exitp,sizeof(exitp));
memcpy(importednames + sizeof(llgpa) - 1, exitp, sizeof(exitp));
strcpy(dllnames,kernel32dll);
im->dllname = k32namepos;
im->iat = ptr_diff(ordinals,oimpdlls);
*ordinals++ = ptr_diff(importednames,oimpdlls); // LoadLibraryA
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14; // GetProcAddress
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14 + 16; // VirtualProtect
*ordinals++ = ptr_diff(importednames,oimpdlls); // LoadLibraryA
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14; // GetProcAddress
*ordinals++ = ptr_diff(importednames,oimpdlls) + 14 + 16; // VirtualProtect
if (!isdll)
*ordinals++ = ptr_diff(importednames,oimpdlls) + sizeof(llgpa) - 3; // ExitProcess
dllnames += sizeof(kernel32dll);
@@ -1483,6 +1483,7 @@ void PackW32Pe::processResources(Resource *res)
info("Resources: compressed %u (%u bytes), not compressed %u (%u bytes)",cnum,csize,unum,usize);
}
/*************************************************************************
// Load Configuration handling
**************************************************************************/
@@ -1673,12 +1674,12 @@ void PackW32Pe::pack(OutputFile *fo)
// check the PE header
// FIXME: add more checks
if (!opt->force && (
ih.cpu < 0x14c || ih.cpu > 0x150
|| ih.opthdrsize != 0xE0
|| (ih.flags & EXECUTABLE) == 0
(ih.cpu < 0x14c || ih.cpu > 0x150)
|| (ih.opthdrsize != 0xe0)
|| ((ih.flags & EXECUTABLE) == 0)
|| (ih.subsystem != 2 && ih.subsystem != 3 && ih.subsystem != 1)
|| (ih.entry == 0 && !isdll)
|| ih.ddirsentries != 16
|| (ih.ddirsentries != 16)
|| IDSIZE(PEDIR_EXCEPTION) // is this used on i386?
// || IDSIZE(PEDIR_COPYRIGHT)
))
@@ -1701,7 +1702,7 @@ void PackW32Pe::pack(OutputFile *fo)
if (memcmp(isection[0].name,"UPX",3) == 0)
throwAlreadyPackedByUPX();
if (!opt->force && (IDSIZE(15) || ih.entry > isection[1].vaddr))
if (!opt->force && IDSIZE(15))
throwCantPack("file is possibly packed/protected (try --force)");
if (ih.entry && ih.entry < rvamin)
throwCantPack("run a virus scanner on this file!");
@@ -1915,11 +1916,11 @@ void PackW32Pe::pack(OutputFile *fo)
// file. If this check fails the runtime does "interesting" things
// like not running the floating point initialization code - the result
// is an R6002 runtime error.
// These supposed to be read only addresses are covered by the section
// UPX0 in the compressed files, so we have to patch the PE header
// These supposed to be read only addresses are covered by the sections
// UPX0 & UPX1 in the compressed files, so we have to patch the PE header
// in the memory. And the page on which the PE header is stored is read
// only so we must make it rw, fix the flag (i.e. clear
// PEFL_WRITE of osection[0].flags), and make it ro again.
// only so we must make it rw, fix the flags (i.e. clear
// PEFL_WRITE of osection[x].flags), and make it ro again.
// rva of the most significant byte of member "flags" in section "UPX0"
const unsigned swri = pe_offset + sizeof(oh) + sizeof(pe_section_t) - 1;
@@ -1927,11 +1928,18 @@ void PackW32Pe::pack(OutputFile *fo)
if (swri >= 0x1000)
throwCantPack("swri >= 0x1000! Send a bug report please!");
patch_le32(loader, codesize, "SWRI", swri);
patch_le32(loader, codesize, "IMGL", 0x1000); // one page
patch_le32(loader, codesize, "IMGB", 0u - rvamin);
#else
// make sure we only touch exactly one page
// make sure we only touch the minimum number of pages
const unsigned addr = 0u - rvamin + swri;
patch_le32(loader, codesize, "SWRI", addr & 0xfff); // page offset
// check whether osection[0].flags and osection[1].flags
// are on the same page
if ((addr & 0xfff) + 0x28 >= 0x1000)
patch_le32(loader, codesize, "IMGL", 0x2000); // two pages
else
patch_le32(loader, codesize, "IMGL", 0x1000); // one page
patch_le32(loader, codesize, "IMGB", addr &~ 0xfff); // page mask
#endif
patch_le32(loader, codesize, "VPRO", myimport + get_le32(oimpdlls + 16) + 8);
@@ -2102,6 +2110,9 @@ void PackW32Pe::pack(OutputFile *fo)
// set_le32(ibuf + ic,get_le32("UPX "));
ibuf.clear(0, oh.filealign);
info("Image size change: %u -> %u kBytes",
ih.imagesize / 1024, oh.imagesize / 1024);
infoHeader("[Writing compressed file]");
// write loader + compressed file
+5 -5
View File
@@ -295,7 +295,7 @@ bool Packer::checkFinalCompressionRatio(const OutputFile *fo) const
**************************************************************************/
void Packer::decompress(const upx_bytep in, upx_bytep out,
bool verify_checksum, Filter *fp)
bool verify_checksum, Filter *ft)
{
unsigned adler;
@@ -316,8 +316,8 @@ void Packer::decompress(const upx_bytep in, upx_bytep out,
// verify checksum of decompressed data
if (verify_checksum)
{
if (fp) {
fp->unfilter(out, ph.u_len);
if (ft) {
ft->unfilter(out, ph.u_len);
}
adler = upx_adler32(out, ph.u_len, ph.saved_u_adler);
if (adler != ph.u_adler)
@@ -358,7 +358,7 @@ bool Packer::testOverlappingDecompression(const upx_bytep buf,
}
void Packer::verifyOverlappingDecompression(Filter *fp)
void Packer::verifyOverlappingDecompression(Filter *ft)
{
assert(ph.c_len < ph.u_len);
assert((int)ph.overlap_overhead > 0);
@@ -384,7 +384,7 @@ void Packer::verifyOverlappingDecompression(Filter *fp)
if (offset + ph.c_len > obuf.getSize())
return;
memmove(obuf + offset, obuf, ph.c_len);
decompress(obuf + offset, obuf, true, fp);
decompress(obuf + offset, obuf, true, ft);
obuf.checkState();
#endif /* !UNUPX */
}
+2 -2
View File
@@ -161,7 +161,7 @@ protected:
virtual bool compress(upx_bytep in, upx_bytep out,
unsigned max_offset = 0, unsigned max_match = 0);
virtual void decompress(const upx_bytep in, upx_bytep out,
bool verify_checksum = true, Filter *fp = 0);
bool verify_checksum = true, Filter *ft = NULL);
virtual bool checkCompressionRatio(unsigned u_len, unsigned c_len) const;
virtual bool checkFinalCompressionRatio(const OutputFile *fo) const;
@@ -185,7 +185,7 @@ protected:
unsigned range = 0,
unsigned upper_limit = ~0u) const;
// destructive decompress + verify
virtual void verifyOverlappingDecompression(Filter *fp = 0);
virtual void verifyOverlappingDecompression(Filter *ft = NULL);
// packheader handling
+1 -1
View File
@@ -7,8 +7,8 @@
*.i
*.lst
*.map
*.out
*.o
*.out
*.tmp
GNUmakefile
MMakefile
+18
View File
@@ -0,0 +1,18 @@
.*-stamp
*.ah
*.asx
*.asy
*.bin
*.d
*.i
*.lst
*.map
*.o
*.out
*.tmp
GNUmakefile
MMakefile
stamp-h
stubify.exe
upxb
upxd
+71 -29
View File
@@ -101,28 +101,23 @@ O2BIN = perl -w $(srcdir)/scripts/o2bin.pl
### i386-linux
###
LD_LINUX_I386 = ld-2.13.2 -m elf_i386
LD_LINUX_I386 = ld -m elf_i386
OBJCOPY_LINUX_I386 = objcopy -F elf32-i386
OBJSTRIP_LINUX_I386 = $(OBJCOPY_LINUX_I386) -R .comment -R .note
STRIPELF_LINUX_I386 = ./util/sstrip/i386-linux-sstrip
# gcc 2.7.2.3 (fold_*86.bin: 1839 / 1011 / xxxx / 1390)
# gcc 2.7.2.3 (fold_*86.bin: 1900 / 1011 / 1786 / 1401)
CC_LINUX_I386_GCC272 = gcc-2.72 -m386 -O2 -MMD
CC_LINUX_I386_GCC272 += -malign-functions=0 -malign-jumps=0 -malign-loops=0
# gcc 2.95.3 (fold_*86.bin: 1721 / 995 / xxxx / 1321)
# gcc 2.95.3 (fold_*86.bin: 1770 / 995 / 1661 / 1314)
CC_LINUX_I386_GCC295 = gcc-2.95.3 -march=i386 -mcpu=k6 -fno-exceptions -MMD
CC_LINUX_I386_GCC295 += -Os -fno-omit-frame-pointer
CC_LINUX_I386_GCC295 += -malign-functions=0 -malign-jumps=0 -malign-loops=0
CC_LINUX_I386_GCC295 += -Werror
# gcc 3.4.5 (fold_*86.bin: 1670 / 947 / 1552 / 1212)
# gcc 3.4.6 (fold_*86.bin: 1670 / 947 / 1552 / 1212) [unchanged from 3.4.5]
# gcc 4.0.3 (fold_*86.bin: 1741 / 995 / 1639 / 1202)
# gcc 4.1.0 (fold_*86.bin: 1644 / 947 / 1524 / 1144)
## ==> TODO: upgrade to 4.1.0
CC_LINUX_I386_GCC34 = gcc-3.4.5
# gcc 3.4.6 (fold_*86.bin: 1651 / 947 / 1537 / 1190)
CC_LINUX_I386_GCC34 = gcc-3.4.6
CC_LINUX_I386_GCC34 += -m32 -march=i386 -mtune=k6 -fno-exceptions -MMD
CC_LINUX_I386_GCC34 += -Os -fno-omit-frame-pointer
CC_LINUX_I386_GCC34 += -momit-leaf-frame-pointer
@@ -131,8 +126,20 @@ CC_LINUX_I386_GCC34 += -mpreferred-stack-boundary=2
CC_LINUX_I386_GCC34 += -fweb
CC_LINUX_I386_GCC34 += -Werror
# gcc 4.1.0 (fold_*86.bin: 1725 / 963 / 1620 / 1202)
# gcc 4.0.3 (fold_*86.bin: 1731 / 995 / 1625 / 1195)
CC_LINUX_I386_GCC41 = gcc-4.1.0
CC_LINUX_I386_GCC41 += -m32 -march=i386 -mtune=k6 -fno-exceptions -MMD
CC_LINUX_I386_GCC41 += -Os -fno-omit-frame-pointer
CC_LINUX_I386_GCC41 += -momit-leaf-frame-pointer
CC_LINUX_I386_GCC41 += -fno-align-functions -fno-align-jumps -fno-align-labels -fno-align-loops
CC_LINUX_I386_GCC41 += -mpreferred-stack-boundary=2
CC_LINUX_I386_GCC41 += -fweb
CC_LINUX_I386_GCC41 += -Werror
CC_LINUX_I386 = $(CC_LINUX_I386_GCC272)
CC_LINUX_I386 = $(CC_LINUX_I386_GCC295)
CC_LINUX_I386 = $(CC_LINUX_I386_GCC41)
CC_LINUX_I386 = $(CC_LINUX_I386_GCC34)
CC_LINUX_I386 += -nostdinc
CC_LINUX_I386 += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings
@@ -186,6 +193,7 @@ ifneq ($(wildcard $d),)
LD_PPC32 := $d/powerpc-750-linux-gnu-ld
OBJCOPY_PPC32 := $d/powerpc-750-linux-gnu-objcopy
endif
GCC_PPC32 += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror
###
@@ -209,16 +217,19 @@ ifneq ($(wildcard $d),)
LD_AMD64 := $d/x86_64-unknown-linux-gnu-ld -m elf_x86_64
OBJCOPY_AMD64 := $d/x86_64-unknown-linux-gnu-objcopy -F elf64-x86-64
endif
GCC_AMD64 += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror
###
### ARM-PE-WINCE
###
GCC_WINCE := arm-wince-pe-gcc -Os
LD_WINCE := arm-wince-pe-ld
OBJCOPY_WINCE := arm-wince-pe-objcopy
BIN2H_WINCE := perl -ne 'print "db\t", join(",", map { sprintf "%\#02x", $$_ } unpack("C*", $$_)), "\n"'
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
OBJCOPY_ARM := arm-9tdmi-linux-gnu-objcopy
BIN2H_WINCE := perl -ne 'print "db\t", join(",", map { sprintf "%\#02x", $$_ } unpack("C*", $$_)), "\n"'
# /***********************************************************************
@@ -238,7 +249,7 @@ stubs: $(STUBS)
mostlyclean:
-rm -f *.bin *.bkp *.d *.i *.lst *.map stubify.exe
-rm -f *.o *.asx *.asy
-rm -f *.ah *.asx *.asy *.o *.out
clean: mostlyclean
ifneq ($(strip $(wildcard stamp-h)),)
@@ -264,10 +275,10 @@ strings: all
# // rules
# ************************************************************************/
%.asx : %.asm
%.asx : %.asm $(srcdir)/scripts/app_i386.pl
$(APP_I386) $< $@
%.asy : %.ash
%.asy : %.ash $(srcdir)/scripts/app_i386.pl
$(APP_I386) $< $@
@@ -319,6 +330,7 @@ l_w32pe.h: l_w32pe.asx
$(NASM) -f bin -o $T.bin $<
$(BIN2H) $T.bin nrv_loader $@
# /***********************************************************************
# // atari/tos rules
# ************************************************************************/
@@ -414,7 +426,8 @@ l_lx_elfppc32.h: l_lx_elfppc32.S ppc_d_nrv2e.S
$(BIN2H) $T.bin linux_elfppc32_loader $@
l_lx_elf64amd.h: l_lx_elf64amd.S amd_d_nrv2e.S
$(GCC_AMD64) -c $T.S
$(GCC_AMD64) -c $<
$(OBJSTRIP_AMD64) $T.o
$(LD_AMD64) -o $T.bin --oformat binary $T.o
$(BIN2H) $T.bin linux_elf64amd_loader $@
@@ -436,6 +449,7 @@ l_lx_sh.o: l_lx_sh.c linux.hh $(MAKEFILE_DEPS)
l_lx_pti.o: l_lx_pti.c linux.hh $(MAKEFILE_DEPS)
$(CC_LINUX_I386) -c $<
$(OBJSTRIP_LINUX_I386) $@
fold_elf86.o: fold_elf86.asm
$(NASM) -f elf -o $@ $<
@@ -450,18 +464,20 @@ fold_elf86.h: l_lx_elf.o fold_elf86.o l_lx_elf86.lds
$(BIN2H) $T.bin linux_i386elf_fold $@
m_lx_elfppc32.o: m_lx_elfppc32.c $(MAKEFILE_DEPS)
$(GCC_PPC32) -Os -c $<
$(GCC_PPC32) -c -Os $<
$(OBJSTRIP_PPC32) $@
a_lx_elf64amd.o: a_lx_elf64.c $(MAKEFILE_DEPS)
$(GCC_AMD64) -c -Os -o $@ $<
$(OBJSTRIP_AMD64) $@
fold_elfppc32.o: fold_elfppc32.S ppc_bxx.S $(MAKEFILE_DEPS)
$(GCC_PPC32) -c $<
$(OBJSTRIP_PPC32) $@
fold_elf64amd.o: fold_elf64amd.S amd_bxx.S $(MAKEFILE_DEPS)
$(GCC_AMD64) -c -O $T.S
$(GCC_AMD64) -c $<
$(OBJSTRIP_AMD64) $@
fold_elfppc32.h: m_lx_elfppc32.o fold_elfppc32.o l_lx_elfppc32.lds
$(LD_PPC32) -T $(srcdir)/l_lx_elfppc32.lds -Map $T.map -o $T.bin --strip-all \
@@ -499,7 +515,8 @@ fold_sh86.h: l_lx_sh.o fold_sh86.o l_lx_sh86.lds
$(BIN2H) $T.bin linux_i386sh_fold $@
fold_pti86.o: fold_pti86.asm
$(NASM) -i$(UCL_I386)/ -f elf -o $@ $<
$(NASM) -f elf -i$(UCL_I386)/ -o $@ $<
$(OBJSTRIP_LINUX_I386) $@
fold_pti86.h: l_lx_pti.o fold_pti86.o l_lx_pti86.lds
$(LD_LINUX_I386) -T $(srcdir)/l_lx_pti86.lds -Map $T.map -o $T.bin $T.o l_lx_pti.o
@@ -523,28 +540,53 @@ fold_machppc32.o: fold_machppc32.S ppc_bxx.S $(MAKEFILE_DEPS)
$(OBJSTRIP_PPC32) $@
upxb: l_lx_sep.o l_lx_sep86.asm
$(NASM) -i$(UCL_I386)/ -f elf -dNRV2B -o $T.o l_lx_sep86.asm
$(NASM) -f elf -i$(UCL_I386)/ -dNRV2B -o $T.o l_lx_sep86.asm
$(OBJSTRIP_LINUX_I386) $T.o
$(LD_LINUX_I386) -T $(srcdir)/l_lx_sep86.lds -Map $T.map -o $@ $T.o l_lx_sep.o
$(OBJSTRIP_LINUX_I386) $@
$(STRIPELF_LINUX_I386) $@
$(BRANDELF) $@
upxd: l_lx_sep.o l_lx_sep86.asm
$(NASM) -i$(UCL_I386)/ -f elf -dNRV2D -o $T.o l_lx_sep86.asm
$(NASM) -f elf -i$(UCL_I386)/ -dNRV2D -o $T.o l_lx_sep86.asm
$(OBJSTRIP_LINUX_I386) $T.o
$(LD_LINUX_I386) -T $(srcdir)/l_lx_sep86.lds -Map $T.map -o $@ $T.o l_lx_sep.o
$(OBJSTRIP_LINUX_I386) $@
$(STRIPELF_LINUX_I386) $@
$(BRANDELF) $@
l_armpe.h: l_armpe.asx l_armpe_s.S l_armpe_c.c
$(GCC_WINCE) -c l_armpe_s.S l_armpe_c.c
$(LD_WINCE) -nostdlib -o l_armpe_.out l_armpe_s.o l_armpe_c.o
$(OBJCOPY_WINCE) --only-section .text -O binary l_armpe_.out l_armpe_.bin
$(BIN2H_WINCE) <l_armpe_.bin >l_armpe_.ah
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 $@
# /***********************************************************************
# // dependencies
# ************************************************************************/
@@ -577,6 +619,7 @@ l_w32pe.h: $(DEPS2) $(DEPS3)
l_lx_elf86.h: l_lx_elf86.asm macros.ash macros.asy $(DEPS3)
l_lx_exec86.h: l_lx_exec86.asm macros.ash macros.asy $(DEPS3)
l_lx_pti86.h: l_lx_pti86.asm macros.ash macros.asy $(DEPS3)
l_lx_sh86.h: l_lx_sh86.asm macros.ash macros.asy $(DEPS3)
@@ -588,5 +631,4 @@ start-interp.o: start-interp.S
interp.o: interp.c
gcc -c -g $<
# vi:nowrap
+4 -2
View File
@@ -170,6 +170,8 @@ upx_bzero(char *p, size_t len)
} while (--len);
}
#define bzero upx_bzero
#else
#define bzero(a,b) __builtin_memset(a,0,b)
#endif /*}*/
static void
@@ -317,8 +319,8 @@ upx_main( // returns entry address
Extent xo, xi1, xi2;
xo.buf = (char *)ehdr;
xo.size = bi->sz_unc;
xi2.buf = (char *)bi; xi2.size = sz_compressed;
xi1.buf = (char *)bi; xi1.size = sz_compressed;
xi2.buf = CONST_CAST(char *, bi); xi2.size = sz_compressed;
xi1.buf = CONST_CAST(char *, bi); xi1.size = sz_compressed;
// ehdr = Uncompress Ehdr and Phdrs
unpackExtent(&xi2, &xo, f_decompress, 0); // never filtered?
+9 -14
View File
@@ -35,12 +35,12 @@
#define tmp r3
#define bits r4
#define off r5
#define g1b r6
/* r6 UNUSED */
#define wrnk r7 /* 0xd00 M2_MAX_OFFSET before "wrinkle" */
/* r12 ("ip") is assumed to be a scratch register. */
#define GETBIT blx g1b
#define GETBIT add bits,bits; mov lr,pc; beq get1_n2b
#define getnextb(reg) GETBIT; adc reg,reg
#define jnextb0 GETBIT; bcc
@@ -53,15 +53,14 @@ ucl_nrv2b_decompress_8: .globl ucl_nrv2b_decompress_8 @ ARM mode
bx r12 @ enter THUMB mode
.code 16 @ THUMB mode
go_thumb_n2b:
.thumb_func
go_thumb_n2b: .globl go_thumb_n2b
add r1,len,src @ r1= eof_src;
push {r1,r2,r3, r4,r5,r6,r7, lr}
mov bits,#1; neg off,bits @ off= -1 initial condition
lsl bits,#31 @ 1<<31: refill next time
mov wrnk,#0xd
lsl wrnk,#8 @ 0xd00
adr g1b,get1_n2b @ load pc-relative address
add g1b,#1 @ force THUMB mode
b top_n2b
eof_n2b:
@@ -69,25 +68,21 @@ eof_n2b:
sub src,r1 @ 0 if actual src length equals expected length
sub dst,r3 @ actual dst length
str dst,[r4]
pop {r4,r5,r6,r7, pc} @ return
pop {r4,r5,r6,r7 /*,pc*/}
pop {r1}; bx r1 @ "pop {,pc}" fails return to ARM mode on ARMv4T
.align 2 @ 1<<2 for benefit of loading address with 'adr' above
get1_n2b:
adc bits,bits; bne get1r_n2b @ CarryOut has data bit
ldrb bits,[src] @ zero-extend next byte
ldrb bits,[src] @ zero-extend next byte
adc bits,bits @ double and insert CarryIn as low bit
add src,#1
add src,#1
lsl bits,#24 @ move to top byte, and set CarryOut from old bit 8
get1r_n2b:
bx lr
mov pc,lr
lit_n2b:
ldrb tmp,[src]; add src,#1
strb tmp,[dst]; add dst,#1
top_n2b:
jnextb1 lit_n2b
mov len,#1 @ the msb
getoff_n2b: @ ss11 len= [2..)
getnextb(len)
+69 -22
View File
@@ -28,6 +28,7 @@
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#define SAFE 0 /* 1 for src+dst bounds checking: cost 40 bytes */
#define src r0
#define len r1 /* overlaps 'cnt' */
@@ -35,12 +36,34 @@
#define tmp r3
#define bits r4
#define off r5
#define g1b r6
#define wrnk r7 /* 0x500 M2_MAX_OFFSET before "wrinkle" */
#define wrnk r6 /* 0x500 M2_MAX_OFFSET before "wrinkle" */
#define srclim r7
#if 1==SAFE /*{*/
#define dstlim r12
#endif /*}*/
#define cnt r1 /* overlaps 'len' while reading an offset */
#define GETBIT blx g1b
#if 1==SAFE /*{*/
#define CHECK_SRC cmp src,srclim; bhs bad_src_n2e
#define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2e
#else /*}{*/
#define CHECK_SRC /*empty*/
#define CHECK_DST /*empty*/
#endif /*}*/
#if 0 /*{ DEBUG only: check newly-decompressed against original dst */
#define CHECK_BYTE \
push {wrnk}; \
ldrb wrnk,[dst]; \
cmp wrnk,tmp; beq 0f; bkpt; \
0: pop {wrnk}
#else /*}{*/
#define CHECK_BYTE /*empty*/
#endif /*}*/
/* "mov lr,pc; bxx ..." implements conditional subroutine call */
#define GETBIT add bits,bits; mov lr,pc; beq get1_n2e
#define getnextb(reg) GETBIT; adc reg,reg
#define jnextb0 GETBIT; bcc
@@ -48,39 +71,55 @@
ucl_nrv2e_decompress_8: .globl ucl_nrv2e_decompress_8 @ ARM mode
.type ucl_nrv2e_decompress_8, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst) */
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
*/
adr r12,1+thumb_nrv2e_d8; bx r12 @ enter THUMB mode
.code 16 @ THUMB mode
.globl thumb_nrv2e_d8
.thumb_func
thumb_nrv2e_d8:
add r1,len,src @ r1= eof_src;
push {r1,r2,r3, r4,r5,r6,r7, lr}
push {r2,r3, r4,r5,r6,r7, lr}
#define sp_DST0 0 /* stack offset of original dst */
add srclim,len,src @ srclim= eof_src;
#if 1==SAFE /*{*/
ldr tmp,[r3] @ len_dst
add tmp,dst
mov dstlim,tmp
#endif /*}*/
mov bits,#1; neg off,bits @ off= -1 initial condition
lsl bits,#31 @ 1<<31; refill next time
mov wrnk,#5
lsl wrnk,#8 @ 0x500
adr g1b,get1_n2e @ load pc-relative address
add g1b,#1 @ force THUMB mode
lsl wrnk,#8 @ 0x500 @ nrv2e M2_MAX_OFFSET
b top_n2e
#if 1==SAFE /*{*/
bad_dst_n2e: # return value will be 2
add src,srclim,#1
bad_src_n2e: # return value will be 1
add src,#1
#endif /*}*/
eof_n2e:
pop {r1,r3,r4} @ r1= eof_src; r3= orig_dst; r4= plen_dst
sub src,r1 @ 0 if actual src length equals expected length
pop {r3,r4} @ r3= orig_dst; r4= plen_dst
sub src,srclim @ 0 if actual src length equals expected length
sub dst,r3 @ actual dst length
str dst,[r4]
pop {r4,r5,r6,r7, pc} @ return
pop {r4,r5,r6,r7 /*,pc*/}
pop {r1}; bx r1 @ "pop {,pc}" fails return to ARM mode on ARMv4T
.align 2 @ 1<<2 for benefit of loading address with 'adr' above
get1_n2e:
adc bits,bits; bne get1r_n2e @ CarryOut has data bit
get1_n2e: @ In: Carry set [from adding 0x80000000 (1<<31) to itself]
ldrb bits,[src] @ zero-extend next byte
adc bits,bits @ double and insert CarryIn as low bit
CHECK_SRC
add src,#1
lsl bits,#24 @ move to top byte, and set CarryOut from old bit 8
get1r_n2e:
bx lr
mov pc,lr @ return, stay in current (THUMB) mode
lit_n2e:
ldrb tmp,[src]; add src,#1
strb tmp,[dst]; add dst,#1
CHECK_SRC; ldrb tmp,[src]; add src,#1
CHECK_BYTE
CHECK_DST; strb tmp,[dst]; add dst,#1
top_n2e:
jnextb1 lit_n2e
mov cnt,#1; b getoff_n2e
@@ -96,7 +135,7 @@ getoff_n2e:
mov len,#0 @ Carry unaffected
blo offprev_n2e @ cnt was 2; tests Carry only
lsl tmp,#8
ldrb off,[src]; add src,#1 @ low 7+1 bits
CHECK_SRC; ldrb off,[src]; add src,#1 @ low 7+1 bits
orr off,tmp
mvn off,off; beq eof_n2e @ off= ~off
asr off,#1; bcs lenlast_n2e
@@ -117,16 +156,24 @@ lenlast_n2e:
getnextb(len) @ 0,1,2,3
add len,#2
gotlen_n2e: @ 'cmn': add the inputs, set condition codes, discard the sum
cmn off,wrnk; bcs near_n2e @ within M2_MAX_OFFSET
cmn wrnk,off; bcs near_n2e @ within M2_MAX_OFFSET
add len,#1 @ too far away, so minimum match length is 3
near_n2e:
#if 1==SAFE /*{*/
ldr tmp,[sp,#sp_DST0]
sub tmp,dst
sub tmp,off; bhi bad_dst_n2e @ reaching back too far
add tmp,dst,cnt
cmp tmp,dstlim; bhi bad_dst_n2e @ too much output
#endif /*}*/
ldrb tmp,[dst] @ force cacheline allocate
copy_n2e:
ldrb tmp,[dst,off]
CHECK_BYTE
strb tmp,[dst]; add dst,#1
sub len,#1; bne copy_n2e
b top_n2e
.size ucl_nrv2e_decompress_8, .-ucl_nrv2e_decompress_8
/*
+181
View File
@@ -0,0 +1,181 @@
/* armv4_n2e_d8.S -- ARM decompressor for NRV2E
This file is part of the UPX executable compressor.
Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2004 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 SAFE 0 /* 1 for src+dst bounds checking: cost 76 bytes */
#define src r0
#define len r1 /* overlaps 'cnt' */
#define dst r2
#define tmp r3
#define bits r4
#define off r5
/* r6 UNUSED in ARM code unless DEBUG mode */
#define srclim r7
#if 1==SAFE /*{*/
#define dstlim r12
#endif /*}*/
#define cnt r1 /* overlaps 'len' while reading an offset */
/* macros reduce "noise" when comparing this ARM code to corresponding THUMB code */
#define PUSH stmdb sp!,
#define POP ldmia sp!,
#define ADD2( dst,src) add dst,dst,src
#define ADD2S(dst,src) adds dst,dst,src
#define ADC2( dst,src) adc dst,dst,src
#define ADC2S(dst,src) adcs dst,dst,src
#define SUB2( dst,src) sub dst,dst,src
#define SUB2S(dst,src) subs dst,dst,src
#define LDRB3(reg,psrc,incr) ldrb reg,psrc,incr
#define STRB3(reg,pdst,incr) strb reg,pdst,incr
#if 1==SAFE /*{*/
#define CHECK_SRC cmp srclim,src; bls bad_src_n2e /* Out: 1==Carry for get8_n2e */
#define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2e
#else /*}{*/
#define CHECK_SRC /*empty*/
#define CHECK_DST /*empty*/
#endif /*}*/
#if 0 /*{ DEBUG only: check newly-decompressed against original dst */
#define CHECK_BYTE \
ldrb r6,[dst]; \
cmp r6,tmp; beq 0f; bkpt; 0:
#else /*}{*/
#define CHECK_BYTE /*empty*/
#endif /*}*/
#define GETBIT ADD2S(bits,bits); bleq get8_n2e
#define getnextb(reg) GETBIT; ADC2(reg,reg) /* Out: condition code not changed */
#define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs
ucl_nrv2e_decompress_8: .globl ucl_nrv2e_decompress_8 @ ARM mode
.type ucl_nrv2e_decompress_8, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
*/
PUSH {r2,r3, r4,r5,r6,r7, lr}
#define sp_DST0 0 /* stack offset of original dst */
add srclim,len,src @ srclim= eof_src;
#if 1==SAFE /*{*/
ldr tmp,[r3] @ len_dst
add dstlim,tmp,dst
#endif /*}*/
mvn off,#~-1 @ off= -1 initial condition
mov bits,#1<<31 @ refill next time
b top_n2e
#if 1==SAFE /*{*/
bad_dst_n2e: # return value will be 2
bkpt
add src,srclim,#1
bad_src_n2e: # return value will be 1
ADD2(src,#1)
#endif /*}*/
eof_n2e:
POP {r3,r4} @ r3= orig_dst; r4= plen_dst
SUB2(src,srclim) @ 0 if actual src length equals expected length
SUB2(dst,r3) @ actual dst length
str dst,[r4]
POP {r4,r5,r6,r7 ,pc}
get8_n2e: @ In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; LDRB3(bits,[src],#1) @ zero-extend next byte
adc bits,bits,bits @ double and insert CarryIn as low bit
movs bits,bits,lsl #24 @ move to top byte, and set CarryOut from old bit 8
mov pc,lr
lit_n2e:
CHECK_SRC; LDRB3(tmp,[src],#1)
CHECK_BYTE
CHECK_DST; STRB3(tmp,[dst],#1)
top_n2e:
jnextb1 lit_n2e
mov cnt,#1; b getoff_n2e
off_n2e:
SUB2(cnt,#1)
getnextb(cnt)
getoff_n2e:
getnextb(cnt)
jnextb0 off_n2e
subs tmp,cnt,#3 @ set Carry
mov len,#0 @ Carry unaffected
blo offprev_n2e @ cnt was 2; tests Carry only
CHECK_SRC; LDRB3(off,[src],#1) @ low 7+1 bits
orr off,off,tmp,lsl #8
mvns off,off; beq eof_n2e @ off= ~off
movs off,off,asr #1; bcs lenlast_n2e
b lenmore_n2e
offprev_n2e:
jnextb1 lenlast_n2e
lenmore_n2e:
mov len,#1
jnextb1 lenlast_n2e
len_n2e:
getnextb(len)
jnextb0 len_n2e
ADD2(len,#6-2)
b gotlen_n2e
lenlast_n2e:
getnextb(len) @ 0,1,2,3
ADD2(len,#2)
gotlen_n2e: @ 'cmn': add the inputs, set condition codes, discard the sum
cmn off,#5<<8; bcs near_n2e @ within M2_MAX_OFFSET
ADD2(len,#1) @ too far away, so minimum match length is 3
near_n2e:
#if 1==SAFE /*{*/
ldr tmp,[sp,#sp_DST0]
SUB2( tmp,dst)
SUB2S(tmp,off); bhi bad_dst_n2e @ reaching back too far
add tmp,dst,cnt
cmp tmp,dstlim; bhi bad_dst_n2e @ too much output
#endif /*}*/
ldrb tmp,[dst] @ force cacheline allocate
copy_n2e:
ldrb tmp,[dst,off]
CHECK_BYTE
STRB3(tmp,[dst],#1)
SUB2S(len,#1); bne copy_n2e
b top_n2e
.size ucl_nrv2e_decompress_8, .-ucl_nrv2e_decompress_8
/*
vi:ts=8:et:nowrap
*/
+12
View File
@@ -209,5 +209,17 @@ L32:
pop edi ; &auxtab
ret
%define __NR_mmap 90
global mmap
mmap:
push ebx
lea ebx, [2*4 + esp]
push byte __NR_mmap
pop eax
int 0x80
pop ebx
ret
; vi:ts=8:et:nowrap
+95 -96
View File
@@ -1,4 +1,4 @@
/* fold_elf86.h -- created from fold_elf86.bin, 1670 (0x686) bytes
/* fold_elf86.h -- created from fold_elf86.bin, 1651 (0x673) bytes
This file is part of the UPX executable compressor.
@@ -27,114 +27,113 @@
*/
#define LINUX_I386ELF_FOLD_SIZE 1670
#define LINUX_I386ELF_FOLD_ADLER32 0x2e7cd8c9
#define LINUX_I386ELF_FOLD_CRC32 0x2993f845
#define LINUX_I386ELF_FOLD_SIZE 1651
#define LINUX_I386ELF_FOLD_ADLER32 0x3a4ad069
#define LINUX_I386ELF_FOLD_CRC32 0xd4e0324c
unsigned char linux_i386elf_fold[1670] = {
unsigned char linux_i386elf_fold[1651] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
2, 0, 3, 0, 1, 0, 0, 0,128, 0,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, 0,192, 0, /* 0x 30 */
0, 0,192, 0,134, 6, 0, 0,136, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0, 16, 0, 0, 1, 0, 0, 0,134, 6, 0, 0,136, 6,192, 0, /* 0x 50 */
136, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */
0, 0,192, 0,115, 6, 0, 0,116, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0, 16, 0, 0, 1, 0, 0, 0,115, 6, 0, 0,116, 6,192, 0, /* 0x 50 */
116, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
41,201,186,120, 2, 0, 0,137,230,137,231,232,112, 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, 90, 0, 0, 0,129,236, 0, 10, 0, 0,137,226, 83, 49, /* 0x a0 */
201, 81,141,131,140, 0, 0, 0,139,115, 24,102,131,123, 16, 3, /* 0x b0 */
117, 11, 89, 1,222,181, 16, 3, 91, 72, 1,203, 83, 41,198,139, /* 0x c0 */
24,139, 72, 4,131,193, 12, 96, 71,232,163, 4, 0, 0,131,196, /* 0x d0 */
24,139, 72, 4,131,193, 12, 96, 71,232,144, 4, 0, 0,131,196, /* 0x d0 */
32, 89, 91,129,196, 0, 10, 0, 0, 80, 79, 41,192, 60,175,175, /* 0x e0 */
117,252, 80, 80, 80, 80, 80, 80, 80, 80, 41,217,176, 91,255, 39, /* 0x f0 */
173,171,133,192,117,250,173,171,133,192,117,250, 87,173,171,131, /* 0x 100 */
248, 32,115, 3, 15,179,194,133,192,173,171,117,240,131,239, 8, /* 0x 110 */
1,201, 64,243,171, 72,171,171, 95,195, 0, 0, 85, 87,137,207, /* 0x 120 */
86,137,198, 83, 57, 8,139,104, 4,115, 8,106,127, 91,106, 1, /* 0x 130 */
88,205,128,133,255,116, 11,137,249,138, 69, 0, 69,136, 2, 66, /* 0x 140 */
226,247, 91, 1,126, 4, 41, 62, 94, 95, 93,195, 83,141, 92, 36, /* 0x 150 */
8,106, 90, 88,205,128, 91,195, 85,137,229, 87, 86,137,199, 83, /* 0x 160 */
137,214,131,236, 24,139, 69, 8,131, 58, 0,137, 69,220, 15,132, /* 0x 170 */
189, 0, 0, 0,141, 85,228,137,248,185, 12, 0, 0, 0,232,153, /* 0x 180 */
255,255,255,131,125,228, 0,139, 69,232,117, 18, 61, 85, 80, 88, /* 0x 190 */
33,117, 15,131, 63, 0, 15,132,149, 0, 0, 0,235, 4,133,192, /* 0x 1a0 */
117, 8,106,127, 91,106, 1, 88,205,128,139, 77,232,139, 69,228, /* 0x 1b0 */
57,193,119,238, 59, 6,119,234, 57,193,115, 88, 15,182, 69,236, /* 0x 1c0 */
80,141, 69,224, 80,255,118, 4, 81,255,119, 4,255, 85,220,131, /* 0x 1d0 */
196, 20,133,192,117,204,139, 85,224, 59, 85,228,117,196,138, 69, /* 0x 1e0 */
237,132,192,116, 37,131,125, 12, 0,116, 31,129,250, 0, 2, 0, /* 0x 1f0 */
0,119, 4, 57, 22,117, 19, 15,182,192, 80, 15,182, 69,238, 80, /* 0x 200 */
82,255,118, 4,255, 85, 12,131,196, 16,139, 69,232, 1, 71, 4, /* 0x 210 */
41, 7,235, 10,139, 86, 4,137,248,232,254,254,255,255,139, 85, /* 0x 220 */
228,139, 6, 1, 86, 4, 41,208,133,192,137, 6,233, 61,255,255, /* 0x 230 */
255,141,101,244, 91, 94, 95,201,195,133,210,137,209,116, 6,198, /* 0x 240 */
0, 0, 64,226,250,195,133,192, 83,137,211,116, 29,168, 1,117, /* 0x 250 */
25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7,137, 24, /* 0x 260 */
137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137,229, 87, /* 0x 270 */
86, 83,131,236, 72,137, 85,224,139, 77,224,137, 69,228,139, 93, /* 0x 280 */
224,199, 69,208, 0, 0, 0, 0, 3, 73, 28,139, 69, 8,139, 85, /* 0x 290 */
12,137, 69,220, 49,192,102,131,123, 16, 2,137, 85,216,137, 77, /* 0x 2a0 */
212,137,202, 15,183, 75, 44, 15,148,192,131,206,255,193,224, 4, /* 0x 2b0 */
137,207,131,192, 34, 49,219, 79,137, 69,180,120, 34,131, 58, 1, /* 0x 2c0 */
117, 24,139, 66, 8, 57,240,115, 8,139,122, 16,137,198,137,125, /* 0x 2d0 */
208, 3, 66, 20, 57,195,115, 2,137,195,131,194, 32,226,222,137, /* 0x 2e0 */
247,106, 0,129,231, 0,240,255,255,106, 0, 41,251,255,117,180, /* 0x 2f0 */
129,195,255, 15, 0, 0,106, 7,129,227, 0,240,255,255,139, 85, /* 0x 300 */
208, 83,137,240, 37,255, 15, 0, 0, 87,137, 93,172,141,180, 2, /* 0x 310 */
255, 15, 0, 0,232, 51,254,255,255,137,194,131,196, 24, 1,218, /* 0x 320 */
129,230, 0,240,255,255,137, 85,240,137,194, 41,243, 1,242,137, /* 0x 330 */
217,137, 69,176,137,211,106, 91, 88,205,128,139,117,176,139, 69, /* 0x 340 */
224, 41,254, 49,255,102,131,120, 44, 0, 15,132,221, 1, 0, 0, /* 0x 350 */
139, 85,212,139, 2,131,248, 6,117, 23,139, 74, 8,186, 3, 0, /* 0x 360 */
0, 0,139, 69,216, 1,241,232,218,254,255,255,233,168, 1, 0, /* 0x 370 */
0, 72, 15,133,161, 1, 0, 0,139, 93,212,199, 69,200, 64, 98, /* 0x 380 */
81,115,139, 75, 24,139, 67, 8,131,225, 7,139, 83, 16, 1,240, /* 0x 390 */
193,225, 2,211,109,200,139, 75, 20,137,195,129,227,255, 15, 0, /* 0x 3a0 */
0,137, 85,232, 1,218, 1,193,137, 85,196,139, 85,212,137, 69, /* 0x 3b0 */
236, 41,216,137, 69,192,139, 66, 4,131,101,200, 7, 41,216,131, /* 0x 3c0 */
125,220, 1, 80,255,117,228, 25,192,137, 77,188,131,224,224,137, /* 0x 3d0 */
93,184,131,192, 50,131,125,220, 0, 80,139, 69,196,106, 3,116, /* 0x 3e0 */
3,131,192, 3, 80,255,117,192,232, 95,253,255,255,131,196, 24, /* 0x 3f0 */
57, 69,192, 15,133,198, 0, 0, 0,131,125,220, 0,116, 34,139, /* 0x 400 */
77,212, 49,192,246, 65, 24, 1,116, 6,139, 69,228,131,192, 2, /* 0x 410 */
80,139, 69,220,255,117,228,141, 85,232,232, 57,253,255,255, 88, /* 0x 420 */
90,139, 85,184,139, 69,192,232, 13,254,255,255,139, 93,196,139, /* 0x 430 */
69,192,247,219, 3, 69,196,129,227,255, 15, 0, 0,137,218,137, /* 0x 440 */
93,184,232,242,253,255,255,131,125,220, 0,116, 96,139, 69,212, /* 0x 450 */
131, 56, 1,117, 88,246, 64, 24, 1,116, 82,139, 80, 20,139, 88, /* 0x 460 */
8,141, 4, 26,141, 12, 48,139, 69,212, 59, 80, 16,117, 14,137, /* 0x 470 */
200,247,216, 37,255, 15, 0, 0,131,248, 3,119, 16,139, 85,212, /* 0x 480 */
107,198, 52,131,122, 4, 0,141, 76, 3, 12,117, 15,139, 1, 61, /* 0x 490 */
205,128, 97,195,116, 6,199, 1,205,128, 97,195,133,201,116, 13, /* 0x 4a0 */
139, 69,216, 49,210,131,224,254,232,153,253,255,255,139, 93,192, /* 0x 4b0 */
139, 77,196,139, 85,200,106,125, 88,205,128,133,192,116, 8,106, /* 0x 4c0 */
127, 91,106, 1, 88,205,128,139, 69,196, 3, 69,184, 1, 69,192, /* 0x 4d0 */
139, 69,188, 57, 69,192,115, 31,106, 0, 43, 69,192,106, 0,106, /* 0x 4e0 */
50,255,117,200, 80,255,117,192,232, 95,252,255,255,131,196, 24, /* 0x 4f0 */
57, 69,192,116, 36,235,200,131,125,220, 0,116, 28,131, 69,196, /* 0x 500 */
3,129,101,196,255, 15, 0, 0,131,125,196, 3,119, 11,139, 93, /* 0x 510 */
192,139, 77,196,106, 91, 88,205,128,139, 85,224, 71,131, 69,212, /* 0x 520 */
32, 15,183, 66, 44, 57,199, 15,140, 35,254,255,255,131,125,220, /* 0x 530 */
0,117, 17,139, 93,228,106, 6, 88,205,128,133,192,116, 23,233, /* 0x 540 */
123,255,255,255,139,125,224,102,131,127, 16, 3,116, 8,139, 93, /* 0x 550 */
240,106, 45, 88,205,128,131,125, 16, 0,116, 5,139, 69, 16,137, /* 0x 560 */
48,139, 85,224, 3,114, 24,141,101,244, 91,137,240, 94, 95,201, /* 0x 570 */
195, 85,137,229, 87, 86, 83,131,236, 12,139,125, 28,106, 0,139, /* 0x 580 */
69, 16,141, 87, 52,139,117, 8, 80,139, 93, 32,137, 69,236,137, /* 0x 590 */
85,232,141, 69, 32,141, 85, 24,232,187,251,255,255,139, 69, 12, /* 0x 5a0 */
15,183, 79, 44,186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, /* 0x 5b0 */
36,232,144,252,255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137, /* 0x 5c0 */
240,232,128,252,255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, /* 0x 5d0 */
0, 3, 75, 8,137,240,131,193, 52,232,104,252,255,255,141, 69, /* 0x 5e0 */
240,137,250, 80,141, 69, 32, 86, 80,139, 69,236,232,123,252,255, /* 0x 5f0 */
255,186, 9, 0, 0, 0,137,193,137,195,137,240,232, 69,252,255, /* 0x 600 */
255,102,139, 79, 44,131,196, 20, 49,210,102,133,201,116, 93,139, /* 0x 610 */
69,232,131, 56, 3,117, 73,139, 93,240, 49,201, 3, 88, 8,137, /* 0x 620 */
202,106, 5, 88,205,128,133,192,137,198,120, 20,102,186, 0, 2, /* 0x 630 */
137,195,137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10, /* 0x 640 */
106,127, 91,106, 1, 88,205,128,235,246,106, 0,137,250,106, 0, /* 0x 650 */
137,240,106, 0,232, 19,252,255,255,131,196, 12,137,195,235, 12, /* 0x 660 */
66, 15,183,193,131, 69,232, 32, 57,194,124,163,141,101,244,137, /* 0x 670 */
216, 91, 94, 95,201,195 /* 0x 680 */
1,201, 64,243,171, 72,171,171, 95,195, 83,141, 92, 36, 8,106, /* 0x 120 */
90, 88,205,128, 91,195, 0, 0, 87, 86,137,206, 83,137,195, 57, /* 0x 130 */
8,139,120, 4,115, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x 140 */
133,201,116, 8,138, 7, 71,136, 2, 66,226,248, 1,115, 4, 41, /* 0x 150 */
51, 91, 94, 95,195, 85,137,229, 87, 86,137,198, 83,137,211,131, /* 0x 160 */
236, 24,139, 69, 8,139,125, 12,137, 69,220,131, 58, 0, 15,132, /* 0x 170 */
184, 0, 0, 0,141, 85,228,185, 12, 0, 0, 0,137,240,232,165, /* 0x 180 */
255,255,255,139, 69,228,139, 77,232,133,192,117, 19,129,249, 85, /* 0x 190 */
80, 88, 33,117, 15,131, 62, 0, 15,132,142, 0, 0, 0,235, 4, /* 0x 1a0 */
133,201,117, 10,106,127, 91,106, 1, 88,205,128,235,254, 57,193, /* 0x 1b0 */
119,242, 59, 3,119,238, 57,193,115, 85, 15,182, 69,236, 80,141, /* 0x 1c0 */
69,224, 80,255,115, 4, 81,255,118, 4,255, 85,220,131,196, 20, /* 0x 1d0 */
133,192,117,208,139, 85,224, 59, 85,228,117,200,138, 69,237,132, /* 0x 1e0 */
192,116, 34,133,255,116, 30,129,250, 0, 2, 0, 0,119, 4, 57, /* 0x 1f0 */
19,117, 18, 15,182,192, 80, 15,182, 69,238, 80, 82,255,115, 4, /* 0x 200 */
255,215,131,196, 16,139, 69,232, 1, 70, 4, 41, 6,235, 10,139, /* 0x 210 */
83, 4,137,240,232, 15,255,255,255,139, 85,228,139, 3, 1, 83, /* 0x 220 */
4, 41,208,133,192,137, 3,233, 66,255,255,255,141,101,244, 91, /* 0x 230 */
94, 95,201,195,133,210,137,209,116, 6,198, 0, 0, 64,226,250, /* 0x 240 */
195,133,192, 83,137,211,116, 29,168, 1,117, 25,139, 16, 57,218, /* 0x 250 */
116, 7, 74,117, 11,133,219,116, 7,137, 24,137, 72, 4,235, 5, /* 0x 260 */
131,192, 8,235,231, 91,195, 85,137,229, 87, 86, 83,131,236, 72, /* 0x 270 */
137, 85,224,139, 77,224,137, 69,228,139, 93,224,199, 69,204, 0, /* 0x 280 */
0, 0, 0, 3, 73, 28,139, 69, 8,139, 85, 12,137, 69,220, 49, /* 0x 290 */
192,102,131,123, 16, 2,137, 85,216,137, 77,212,137,202, 15,183, /* 0x 2a0 */
75, 44, 15,148,192,131,206,255,193,224, 4,137,207,131,192, 34, /* 0x 2b0 */
49,219, 79,137, 69,184,120, 34,131, 58, 1,117, 24,139, 66, 8, /* 0x 2c0 */
57,240,115, 8,139,122, 16,137,198,137,125,204, 3, 66, 20, 57, /* 0x 2d0 */
195,115, 2,137,195,131,194, 32,226,222,137,247,106, 0,129,231, /* 0x 2e0 */
0,240,255,255,106, 0, 41,251,255,117,184,129,195,255, 15, 0, /* 0x 2f0 */
0,106, 7,129,227, 0,240,255,255,139, 85,204, 83,137,240, 37, /* 0x 300 */
255, 15, 0, 0, 87,137, 93,172,141,180, 2,255, 15, 0, 0,232, /* 0x 310 */
6,254,255,255,137,194,131,196, 24, 1,218,129,230, 0,240,255, /* 0x 320 */
255,137, 85,240,137,194, 41,243, 1,242,137,217,137, 69,176,137, /* 0x 330 */
211,106, 91, 88,205,128,139, 69,176,199, 69,196, 0, 0, 0, 0, /* 0x 340 */
139, 85,224, 41,248,102,131,122, 44, 0,137, 69,208, 15,132,195, /* 0x 350 */
1, 0, 0,139, 77,212,139, 1,131,248, 6,117, 27,139, 93,212, /* 0x 360 */
186, 3, 0, 0, 0,139, 77,208, 3, 75, 8,139, 69,216,232,206, /* 0x 370 */
254,255,255,233,135, 1, 0, 0, 72, 15,133,128, 1, 0, 0,139, /* 0x 380 */
125,212,199, 69,192, 64, 98, 81,115,139, 69,208,139, 79, 24, 3, /* 0x 390 */
71, 8,131,225, 7,139, 87, 16,193,225, 2,211,109,192,137,195, /* 0x 3a0 */
139, 79, 20,137,199,129,231,255, 15, 0, 0,137, 85,232,141, 52, /* 0x 3b0 */
58,139, 85,212, 1,193,137, 69,236,139, 66, 4, 41,251,131,101, /* 0x 3c0 */
192, 7, 41,248,131,125,220, 1, 80,255,117,228, 25,192,137, 77, /* 0x 3d0 */
188,131,224,224,131,192, 50,131,125,220, 0, 80,137,240,106, 3, /* 0x 3e0 */
116, 3,141, 70, 3, 80, 83,232, 46,253,255,255,131,196, 24, 57, /* 0x 3f0 */
195, 15,133,186, 0, 0, 0,131,125,220, 0,116, 34,139, 77,212, /* 0x 400 */
49,192,246, 65, 24, 1,116, 6,139, 69,228,131,192, 2, 80,139, /* 0x 410 */
69,220,255,117,228,141, 85,232,232, 56,253,255,255, 88, 90,137, /* 0x 420 */
250,137,247,137,216,247,223,232, 8,254,255,255,129,231,255, 15, /* 0x 430 */
0, 0,141, 4, 51,137,250,137,125,180,232,245,253,255,255,131, /* 0x 440 */
125,220, 0,116, 94,139, 69,212,131, 56, 1,117, 86,246, 64, 24, /* 0x 450 */
1,116, 80,139, 80, 20,139,120, 8,141, 12, 58, 3, 77,208, 59, /* 0x 460 */
80, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131,248, 3, /* 0x 470 */
119, 17,139, 85,212,107, 69,208, 52,131,122, 4, 0,141, 76, 7, /* 0x 480 */
12,117, 15,139, 1, 61,205,128, 97,195,116, 6,199, 1,205,128, /* 0x 490 */
97,195,133,201,116, 13,139, 69,216, 49,210,131,224,254,232,158, /* 0x 4a0 */
253,255,255,137,241,139, 85,192,106,125, 88,205,128,133,192,116, /* 0x 4b0 */
10,106,127, 91,106, 1, 88,205,128,235,254,139,125,180,141, 4, /* 0x 4c0 */
62, 1,195, 59, 93,188,115, 30,106, 0,106, 0,106, 50,255,117, /* 0x 4d0 */
192, 41, 93,188,255,117,188, 83,232, 61,252,255,255,131,196, 24, /* 0x 4e0 */
57,195,116, 27,235,203,131,125,220, 0,116, 19,141, 78, 3,129, /* 0x 4f0 */
225,255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88,205,128,139, /* 0x 500 */
85,224,255, 69,196, 15,183, 66, 44,131, 69,212, 32, 57, 69,196, /* 0x 510 */
15,140, 61,254,255,255,131,125,220, 0,117, 14,139, 93,228,106, /* 0x 520 */
6, 88,205,128,133,192,116, 20,235,135,139,125,224,102,131,127, /* 0x 530 */
16, 3,116, 8,139, 93,240,106, 45, 88,205,128,131,125, 16, 0, /* 0x 540 */
116, 8,139, 85,208,139, 69, 16,137, 16,139, 77,224,139, 73, 24, /* 0x 550 */
1, 77,208,139, 69,208,141,101,244, 91, 94, 95,201,195, 85,137, /* 0x 560 */
229, 87, 86, 83,131,236, 12,139,125, 28,106, 0,139, 69, 16,141, /* 0x 570 */
87, 52,139,117, 8, 80,139, 93, 32,137, 69,236,137, 85,232,141, /* 0x 580 */
69, 32,141, 85, 24,232,203,251,255,255,139, 69, 12, 15,183, 79, /* 0x 590 */
44,186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, 36,232,158, /* 0x 5a0 */
252,255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137,240,232,142, /* 0x 5b0 */
252,255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, 0, 3, 75, /* 0x 5c0 */
8,137,240,131,193, 52,232,118,252,255,255,141, 69,240,137,250, /* 0x 5d0 */
80,141, 69, 32, 86, 80,139, 69,236,232,137,252,255,255,186, 9, /* 0x 5e0 */
0, 0, 0,137,193,137,195,137,240,232, 83,252,255,255,102,139, /* 0x 5f0 */
79, 44,131,196, 20, 49,210,102,133,201,116, 93,139, 69,232,131, /* 0x 600 */
56, 3,117, 73,139, 93,240, 49,201, 3, 88, 8,137,202,106, 5, /* 0x 610 */
88,205,128,133,192,137,198,120, 20,102,186, 0, 2,137,195,137, /* 0x 620 */
249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, 91, /* 0x 630 */
106, 1, 88,205,128,235,254,106, 0,137,250,106, 0,137,240,106, /* 0x 640 */
0,232, 33,252,255,255,131,196, 12,137,195,235, 12, 66, 15,183, /* 0x 650 */
193,131, 69,232, 32, 57,194,124,163,141,101,244,137,216, 91, 94, /* 0x 660 */
95,201,195 /* 0x 670 */
};
+12
View File
@@ -59,4 +59,16 @@ EXTERN upx_main
call upx_main ; Call the UPX main function
hlt ; Crash if somehow upx_main does return
%define __NR_mmap 90
global mmap
mmap:
push ebx
lea ebx, [2*4 + esp]
push byte __NR_mmap
pop eax
int 0x80
pop ebx
ret
; vi:ts=8:et:nowrap
+15 -15
View File
@@ -28,8 +28,8 @@
#define LINUX_I386EXEC_FOLD_SIZE 947
#define LINUX_I386EXEC_FOLD_ADLER32 0xf7998d99
#define LINUX_I386EXEC_FOLD_CRC32 0x4ada49e8
#define LINUX_I386EXEC_FOLD_ADLER32 0x14ec8f58
#define LINUX_I386EXEC_FOLD_CRC32 0x81e80623
unsigned char linux_i386exec_fold[947] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
@@ -39,10 +39,10 @@ unsigned char linux_i386exec_fold[947] = {
0, 16, 64, 0,179, 3, 0, 0,180, 3, 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 */
88, 88, 88,137,225,141, 84,132, 4,139,115, 24,131,195, 96, 41, /* 0x 60 */
222,141,125, 2, 96,232,197, 0, 0, 0,244, 0, 83,137,195,139, /* 0x 70 */
76, 36, 8,136,208,131,224, 31, 60, 25,118, 3,131,232, 43,131, /* 0x 80 */
192, 65, 75,136, 3,137,208,193,232, 5,137,194,226,229, 91,195, /* 0x 90 */
83,141, 92, 36, 8,106, 90, 88,205,128, 91,195, 85, 49,201,137, /* 0x a0 */
222,141,125, 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 */
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, 32,139, 93, 8,106, 5, 88,205, /* 0x b0 */
128,133,192,137,199,120,108,199, 69,212, 47,112,114,111,199, 69, /* 0x c0 */
216, 99, 47, 0, 0,106, 20, 88,205,128,141, 85,218,141,117,212, /* 0x d0 */
@@ -58,17 +58,17 @@ unsigned char linux_i386exec_fold[947] = {
12,129,125,228, 85, 80, 88, 51,137,117,152, 15,133,100, 1, 0, /* 0x 170 */
0,199, 69,196, 47,116,109,112,199, 69,200, 47,117,112,120,141, /* 0x 180 */
77,215,106, 20, 88,205,128,137,194,106, 4,137,200,141,117,211, /* 0x 190 */
232,215,254,255,255,141, 93,172,137,199,198, 69,215, 0, 51,125, /* 0x 1a0 */
232,227,254,255,255,141, 93,172,137,199,198, 69,215, 0, 51,125, /* 0x 1a0 */
228, 49,201,106, 78, 88,205,128, 51,125,172,139, 85,176,137,240, /* 0x 1b0 */
199, 4, 36, 7, 0, 0, 0,193,226, 12,141, 93,196, 49,250,232, /* 0x 1c0 */
168,254,255,255, 88,106, 10, 88,205,128,131,248,254,116, 8,133, /* 0x 1d0 */
180,254,255,255, 88,106, 10, 88,205,128,131,248,254,116, 8,133, /* 0x 1d0 */
192, 15,133,254, 0, 0, 0,185,194, 0, 0, 0,186,192, 1, 0, /* 0x 1e0 */
0,141, 93,196,106, 5, 88,205,128,137, 69,136,139, 77,232,137, /* 0x 1f0 */
195,106, 93, 88,205,128,133,192, 15,133,207, 0, 0, 0,106, 0, /* 0x 200 */
83,106, 1,106, 3, 81,106, 0,232,131,254,255,255,131,196, 24, /* 0x 210 */
83,106, 1,106, 3, 81,106, 0,232, 94,254,255,255,131,196, 24, /* 0x 210 */
61, 0,240,255,255,137, 69,132, 15,135,175, 0, 0, 0,139, 69, /* 0x 220 */
232,106, 0,106, 0, 5,255, 15, 0, 0,106, 50, 37, 0,240,255, /* 0x 230 */
255,106, 3, 3, 69,132,104, 0, 16, 0, 0, 80,232, 79,254,255, /* 0x 240 */
255,106, 3, 3, 69,132,104, 0, 16, 0, 0, 80,232, 42,254,255, /* 0x 240 */
255,131,196, 24,141,125,180,139,117,152,165,165,165,139, 77,180, /* 0x 250 */
131,109,148, 12,133,201,137,117,152,139, 85,184,117, 20,129,250, /* 0x 260 */
85, 80, 88, 33,117,103,131,125,232, 0, 15,132,141, 0, 0, 0, /* 0x 270 */
@@ -78,17 +78,17 @@ unsigned char linux_i386exec_fold[947] = {
44,235, 8,139,125,132,139,117,152,243,164,139, 77,180,139, 93, /* 0x 2b0 */
132,106, 91, 88,205,128,139, 69,184, 1,203, 41, 69,148, 41, 77, /* 0x 2c0 */
232, 1, 69,152,131,125,148, 0,137, 93,132,121, 18,141, 93,196, /* 0x 2d0 */
106, 10, 88,205,128,106,127, 91,106, 1, 88,205,128,235,246,139, /* 0x 2e0 */
106, 10, 88,205,128,106,127, 91,106, 1, 88,205,128,235,254,139, /* 0x 2e0 */
77,152,139, 93,144,129,225, 0,240,255,255, 43, 77,144,106, 91, /* 0x 2f0 */
88,205,128, 1,203,137, 93,144,233, 71,255,255,255,139, 93,136, /* 0x 300 */
106, 6, 88,205,128,133,192,117,196,255,117, 28,255,117, 32,141, /* 0x 310 */
117,196, 86,232,132,253,255,255,133,192,120,177,106, 2, 88,205, /* 0x 320 */
128,133,192,117, 49,106, 2, 88,205,128,133,192,137,193,117, 31, /* 0x 330 */
128,133,192,117, 51,106, 2, 88,205,128,133,192,137,193,117, 31, /* 0x 330 */
199, 69,160, 85, 80, 88, 52,184,162, 0, 0, 0,141, 93,160,199, /* 0x 340 */
69,164, 0, 0, 0, 0,205,128,137,243,106, 10, 88,205,128, 49, /* 0x 350 */
219,106, 1, 88,205,128, 49,201,131,203,255,137,202,106, 7, 88, /* 0x 360 */
205,128,141, 93,196,139, 77, 32,139, 85, 28,106, 11, 88,205,128, /* 0x 370 */
233, 88,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 380 */
219,106, 1, 88,205,128,235,254, 49,201,131,203,255,137,202,106, /* 0x 360 */
7, 88,205,128,141, 93,196,139, 77, 32,139, 85, 28,106, 11, 88, /* 0x 370 */
205,128,233, 86,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 380 */
87,137,215,106, 10,252, 89,232, 5, 0, 0, 0,136, 39,151, 95, /* 0x 390 */
195,153,247,241, 82,133,192,116, 5,232,243,255,255,255, 88, 4, /* 0x 3a0 */
48,170,195 /* 0x 3b0 */
+1
View File
@@ -50,6 +50,7 @@ reg_mq = 38*4
reg_vrsave = 39*4
_start: .globl _start # ignored, but silence "cannot find entry symbol _start" from ld
/* In:
r31= &decompress; also 8+ (char *)&(offset to {l_info; p_info; b_info})
*/
+42 -43
View File
@@ -1,4 +1,4 @@
/* fold_machppc32.h -- created from fold_machppc32.bin, 1544 (0x608) bytes
/* fold_machppc32.h -- created from fold_machppc32.bin, 1528 (0x5f8) bytes
This file is part of the UPX executable compressor.
@@ -27,11 +27,11 @@
*/
#define FOLD_MACHPPC32_SIZE 1544
#define FOLD_MACHPPC32_ADLER32 0xa57805a9
#define FOLD_MACHPPC32_CRC32 0x2fb8902f
#define FOLD_MACHPPC32_SIZE 1528
#define FOLD_MACHPPC32_ADLER32 0xb665fdb7
#define FOLD_MACHPPC32_CRC32 0x0feee296
unsigned char fold_machppc32[1544] = {
unsigned char fold_machppc32[1528] = {
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,7 +42,7 @@ unsigned char fold_machppc32[1544] = {
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, 37,127,161,235,120,128, 67, 0, 0, /* 0x a0 */
127,231,251,120, 72, 0, 4, 33,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 */
@@ -72,7 +72,7 @@ unsigned char fold_machppc32[1544] = {
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,129, 97, 0, 20,128, 30, 0, 4,129, 62, 0, 0, /* 0x 280 */
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 */
@@ -82,51 +82,50 @@ unsigned char fold_machppc32[1544] = {
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,124, /* 0x 320 */
129, 62, 0, 0, 47,137, 0, 1, 64,190, 1, 48,129, 62, 0, 24, /* 0x 330 */
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,128, 47,155, 0, 0, /* 0x 3a0 */
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, 40,128,190, 0, 44, /* 0x 400 */
127,227,251,120,127,132,227,120, 76,198, 49,130, 75,255,252,253, /* 0x 410 */
47,131, 0, 0, 65,190, 0, 12, 56, 96, 0,127, 75,255,252,205, /* 0x 420 */
124, 28,234, 20,127,255, 2, 20,127,159,200, 64, 64,188, 0, 84, /* 0x 430 */
128,190, 0, 44,124,159,200, 80,127,227,251,120, 56,192, 16, 18, /* 0x 440 */
56,224,255,255, 57, 0, 0, 0, 75,255,252,137,127,159, 24, 0, /* 0x 450 */
65,190, 0, 48, 75,255,255,196, 56, 9,255,252, 43,128, 0, 1, /* 0x 460 */
65,157, 0, 32,128, 30, 0, 8, 47,128, 0, 1, 64,190, 0, 20, /* 0x 470 */
128, 30, 0, 12, 47,128, 0, 40, 64,190, 0, 8, 58,254, 0, 16, /* 0x 480 */
128, 26, 0, 16, 59, 24, 0, 1,127,152, 0, 64,128, 30, 0, 4, /* 0x 490 */
127,222, 2, 20, 75,255,254,136,128, 1, 0, 84,126,227,187,120, /* 0x 4a0 */
129,129, 0, 24,186, 97, 0, 28,124, 8, 3,166, 56, 33, 0, 80, /* 0x 4b0 */
125,128,129, 32, 78,128, 0, 32,148, 33,255,192,124, 8, 2,166, /* 0x 4c0 */
144,129, 0, 8,191, 65, 0, 40,129, 97, 0, 8,124,191, 43,120, /* 0x 4d0 */
144, 1, 0, 68, 56, 3, 0, 24, 57,107,255,232,144, 1, 0, 20, /* 0x 4e0 */
145, 97, 0, 16,124,253, 59,120,128, 3, 0, 24,125, 60, 75,120, /* 0x 4f0 */
200, 1, 0, 16,125, 27, 67,120,124,229, 59,120, 56, 97, 0, 16, /* 0x 500 */
56,129, 0, 24,124,218, 51,120, 56,192, 0, 0,144, 1, 0, 24, /* 0x 510 */
216, 1, 0, 32, 59,192, 0, 0,147,225, 0, 28, 75,255,252, 97, /* 0x 520 */
127,167,235,120,127,104,219,120,127,227,251,120,127,134,227,120, /* 0x 530 */
56,129, 0, 32, 56,160,255,255, 75,255,253,161,128, 31, 0, 16, /* 0x 540 */
124,123, 27,120, 59,191, 0, 28,127,158, 0, 64, 64,156, 0,148, /* 0x 550 */
128, 29, 0, 0, 59,222, 0, 1, 56,128, 0, 0, 56,160, 0, 0, /* 0x 560 */
47,128, 0, 14, 64,190, 0,104,128,125, 0, 8,124,125, 26, 20, /* 0x 570 */
76,198, 49,130, 75,255,251,133,127,228,251,120,124,124, 27,121, /* 0x 580 */
127, 69,211,120, 65,128, 0, 44, 76,198, 49,130, 75,255,251,101, /* 0x 590 */
56,128, 0, 0,127,154, 24, 0,127,133,227,120,127,227,251,120, /* 0x 5a0 */
56,192, 0, 0, 56,224, 0, 0, 57, 0, 0, 0, 65,190, 0, 12, /* 0x 5b0 */
56, 96, 0,127, 75,255,251, 53, 75,255,253, 33,124,123, 27,120, /* 0x 5c0 */
127,131,227,120, 76,198, 49,130, 75,255,251, 57,128, 31, 0, 16, /* 0x 5d0 */
129, 61, 0, 4,127,158, 0, 64,127,189, 74, 20, 75,255,255,112, /* 0x 5e0 */
128, 1, 0, 68,127, 99,219,120,187, 65, 0, 40, 56, 33, 0, 64, /* 0x 5f0 */
124, 8, 3,166, 78,128, 0, 32 /* 0x 600 */
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 */
};
+12
View File
@@ -115,5 +115,17 @@ EXTERN pti_main
sub edi,edi
ret ; goto entry point
%define __NR_mmap 90
global mmap
mmap:
push ebx
lea ebx, [2*4 + esp]
push byte __NR_mmap
pop eax
int 0x80
pop ebx
ret
; vi:ts=8:et:nowrap
+91 -91
View File
@@ -1,4 +1,4 @@
/* fold_pti86.h -- created from fold_pti86.bin, 1552 (0x610) bytes
/* fold_pti86.h -- created from fold_pti86.bin, 1537 (0x601) bytes
This file is part of the UPX executable compressor.
@@ -27,106 +27,106 @@
*/
#define LINUX_I386PTI_FOLD_SIZE 1552
#define LINUX_I386PTI_FOLD_ADLER32 0x7ae39f1d
#define LINUX_I386PTI_FOLD_CRC32 0x67ccdc9d
#define LINUX_I386PTI_FOLD_SIZE 1537
#define LINUX_I386PTI_FOLD_ADLER32 0xf6d697b8
#define LINUX_I386PTI_FOLD_CRC32 0xcce6fcb1
unsigned char linux_i386pti_fold[1552] = {
unsigned char linux_i386pti_fold[1537] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */
2, 0, 3, 0, 1, 0, 0, 0,128, 0, 1, 0, 52, 0, 0, 0, /* 0x 10 */
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x 30 */
0, 0, 1, 0, 16, 6, 0, 0, 16, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0, 16, 0, 0, 1, 0, 0, 0, 16, 6, 0, 0, 16, 6, 1, 0, /* 0x 50 */
16, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */
0, 0, 1, 0, 1, 6, 0, 0, 4, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0, 16, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0, 4, 6, 1, 0, /* 0x 50 */
4, 6, 1, 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 */
93, 89, 88,141,124,132, 4, 80, 41,192,175,117,253,175,137,254, /* 0x 80 */
139, 6,131,248, 3,116, 8,131,198, 8,131,248, 0,117,241,139, /* 0x 90 */
94, 4, 83,129,236, 0, 10, 0, 0,137,226, 81,141, 67, 88,139, /* 0x a0 */
115, 24, 41,198,139, 24,139, 72, 4,131,193, 12, 96,232, 86, 4, /* 0x b0 */
115, 24, 41,198,139, 24,139, 72, 4,131,193, 12, 96,232, 71, 4, /* 0x b0 */
0, 0,129,196, 36, 10, 0, 0, 91, 80,139, 75, 20,139, 91, 8, /* 0x c0 */
184, 91, 0, 0, 0,205,128, 41,192, 41,201, 41,210, 41,219, 41, /* 0x d0 */
237, 41,246, 41,255,195, 0, 0, 85, 87,137,207, 86,137,198, 83, /* 0x e0 */
57, 8,139,104, 4,115, 8,106,127, 91,106, 1, 88,205,128,133, /* 0x f0 */
255,116, 11,137,249,138, 69, 0, 69,136, 2, 66,226,247, 91, 1, /* 0x 100 */
126, 4, 41, 62, 94, 95, 93,195, 83,141, 92, 36, 8,106, 90, 88, /* 0x 110 */
205,128, 91,195, 85,137,229, 87, 86,137,199, 83,137,214,131,236, /* 0x 120 */
20,131, 58, 0, 15,132,188, 0, 0, 0,141, 85,228,137,248,185, /* 0x 130 */
12, 0, 0, 0,232,159,255,255,255,131,125,228, 0,139, 69,232, /* 0x 140 */
117, 18, 61, 85, 80, 88, 33,117, 15,131, 63, 0, 15,132,148, 0, /* 0x 150 */
0, 0,235, 4,133,192,117, 8,106,127, 91,106, 1, 88,205,128, /* 0x 160 */
139, 77,232,139, 69,228, 57,193,119,238, 59, 6,119,234, 57,193, /* 0x 170 */
115, 87, 15,182, 69,236, 80,255, 85, 8, 15,182, 85,236,137, 20, /* 0x 180 */
36,141, 85,224, 82,255,118, 4,255,117,232,255,119, 4,255, 16, /* 0x 190 */
131,196, 20,133,192,117,193,139, 69,228, 57, 69,224,117,185,138, /* 0x 1a0 */
69,237,132,192,116, 25, 15,182,192, 80,255, 85, 12, 15,182, 85, /* 0x 1b0 */
238,137, 20, 36,255,117,224,255,118, 4,255, 16,131,196, 12,139, /* 0x 1c0 */
69,232, 1, 71, 4, 41, 7,235, 10,139, 86, 4,137,248,232, 5, /* 0x 1d0 */
255,255,255,139, 85,228,139, 6, 1, 86, 4, 41,208,133,192,137, /* 0x 1e0 */
6,233, 62,255,255,255,141,101,244, 91, 94, 95,201,195,133,210, /* 0x 1f0 */
137,209,116, 6,198, 0, 0, 64,226,250,195,133,192, 83,137,211, /* 0x 200 */
116, 29,168, 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11,133, /* 0x 210 */
219,116, 7,137, 24,137, 72, 4,235, 5,131,192, 8,235,231, 91, /* 0x 220 */
195, 85,137,229, 87, 86, 83,131,236, 76,137, 69,228,139, 69, 8, /* 0x 230 */
137, 85,224,139, 77, 16,199, 69,204, 0, 0, 0, 0,137, 69,220, /* 0x 240 */
3, 64, 28,139, 93,220,137, 77,212,139, 85, 12,137, 69,208, 49, /* 0x 250 */
192,102,131,123, 16, 3,137, 85,216, 15,183, 75, 44,139, 85,208, /* 0x 260 */
15,149,192,131,206,255,193,224, 4,137,207,131,192, 34, 49,219, /* 0x 270 */
79,137, 69,184,120, 34,131, 58, 1,117, 24,139, 66, 8, 57,240, /* 0x 280 */
115, 8,139,122, 16,137,198,137,125,204, 3, 66, 20, 57,195,115, /* 0x 290 */
2,137,195,131,194, 32,226,222,137,247,106, 0,129,231, 0,240, /* 0x 2a0 */
255,255,106, 0, 41,251,255,117,184,129,195,255, 15, 0, 0,106, /* 0x 2b0 */
7,129,227, 0,240,255,255,139, 85,204, 83,137,240, 37,255, 15, /* 0x 2c0 */
0, 0, 87,137, 93,168,141,180, 2,255, 15, 0, 0,232, 54,254, /* 0x 2d0 */
255,255,137,194,131,196, 24, 1,218,129,230, 0,240,255,255,137, /* 0x 2e0 */
85,240,137,194, 41,243, 1,242,137,217,137, 69,172,137,211,106, /* 0x 2f0 */
91, 88,205,128,139,117,172,139, 69,220, 41,254, 49,255,102,131, /* 0x 300 */
120, 44, 0, 15,132,198, 1, 0, 0,139, 85,208,139, 2,131,248, /* 0x 310 */
6,117, 23,139, 74, 8,186, 3, 0, 0, 0,139, 69,212, 1,241, /* 0x 320 */
232,214,254,255,255,233,145, 1, 0, 0, 72, 15,133,138, 1, 0, /* 0x 330 */
0,139, 93,208,199, 69,196, 64, 98, 81,115,139, 75, 24,139, 67, /* 0x 340 */
8,131,225, 7,139, 83, 16,193,225, 2,137, 69,236,211,109,196, /* 0x 350 */
137,193, 3, 75, 20,137,195,129,227,255, 15, 0, 0,137, 85,232, /* 0x 360 */
1,218, 41,216,137, 85,192,139, 85,208, 1,240, 1,241,137, 69, /* 0x 370 */
180,139, 66, 4,131,101,196, 7, 41,216,131,125,216, 1, 80,255, /* 0x 380 */
117,228, 25,192,137, 93,188,131,224,224,137, 77,176,131,192, 50, /* 0x 390 */
131,125,216, 0, 80,139, 69,192,106, 3,116, 3,131,192, 3, 80, /* 0x 3a0 */
255,117,180,232, 96,253,255,255,131,196, 24, 57, 69,180, 15,133, /* 0x 3b0 */
173, 0, 0, 0,131,125,216, 0,116, 19,255,117,224,255,117,228, /* 0x 3c0 */
141, 85,232,139, 69,216,232, 73,253,255,255, 88, 90,139, 85,188, /* 0x 3d0 */
139, 69,180,232, 22,254,255,255,139, 77,192,139, 69,180,247,217, /* 0x 3e0 */
3, 69,192,129,225,255, 15, 0, 0,137,202,137, 77,188,232,251, /* 0x 3f0 */
253,255,255,131,125,216, 0,116, 86,139, 93,208,131, 59, 1,117, /* 0x 400 */
78,246, 67, 24, 1,116, 72,139, 67, 20, 59, 67, 16,139, 83, 8, /* 0x 410 */
141, 12, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131,248, /* 0x 420 */
3,119, 12,139, 69,208,141, 74, 12,131,120, 4, 0,117, 15,139, /* 0x 430 */
237, 41,246, 41,255,195, 83,141, 92, 36, 8,106, 90, 88,205,128, /* 0x e0 */
91,195, 0, 0, 87, 86,137,206, 83,137,195, 57, 8,139,120, 4, /* 0x f0 */
115, 10,106,127, 91,106, 1, 88,205,128,235,254,133,201,116, 8, /* 0x 100 */
138, 7, 71,136, 2, 66,226,248, 1,115, 4, 41, 51, 91, 94, 95, /* 0x 110 */
195, 85,137,229, 87, 86,137,198, 83,137,211,131,236, 20,139,125, /* 0x 120 */
12,131, 58, 0, 15,132,185, 0, 0, 0,141, 85,228,185, 12, 0, /* 0x 130 */
0, 0,137,240,232,171,255,255,255,139, 69,228,139, 77,232,133, /* 0x 140 */
192,117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, 15,132, /* 0x 150 */
143, 0, 0, 0,235, 4,133,201,117, 10,106,127, 91,106, 1, 88, /* 0x 160 */
205,128,235,254, 57,193,119,242, 59, 3,119,238, 57,193,115, 86, /* 0x 170 */
15,182, 69,236, 80,255, 85, 8, 15,182, 85,236,137, 20, 36,141, /* 0x 180 */
85,224, 82,255,115, 4,255,117,232,255,118, 4,255, 16,131,196, /* 0x 190 */
20,133,192,117,197,139, 69,228, 57, 69,224,117,189,138, 69,237, /* 0x 1a0 */
132,192,116, 24, 15,182,192, 80,255,215, 15,182, 85,238,137, 20, /* 0x 1b0 */
36,255,117,224,255,115, 4,255, 16,131,196, 12,139, 69,232, 1, /* 0x 1c0 */
70, 4, 41, 6,235, 10,139, 83, 4,137,240,232, 20,255,255,255, /* 0x 1d0 */
139, 85,228,139, 3, 1, 83, 4, 41,208,133,192,137, 3,233, 65, /* 0x 1e0 */
255,255,255,141,101,244, 91, 94, 95,201,195,133,210,137,209,116, /* 0x 1f0 */
6,198, 0, 0, 64,226,250,195,133,192, 83,137,211,116, 29,168, /* 0x 200 */
1,117, 25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7, /* 0x 210 */
137, 24,137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137, /* 0x 220 */
229, 87, 86, 83,131,236, 80,137, 69,228,139, 69, 8,137, 85,224, /* 0x 230 */
139, 77, 16,199, 69,200, 0, 0, 0, 0,137, 69,220, 3, 64, 28, /* 0x 240 */
139, 93,220,137, 77,212,139, 85, 12,137, 69,208, 49,192,102,131, /* 0x 250 */
123, 16, 3,137, 85,216, 15,183, 75, 44,139, 85,208, 15,149,192, /* 0x 260 */
131,206,255,193,224, 4,137,207,131,192, 34, 49,219, 79,137, 69, /* 0x 270 */
184,120, 34,131, 58, 1,117, 24,139, 66, 8, 57,240,115, 8,139, /* 0x 280 */
122, 16,137,198,137,125,200, 3, 66, 20, 57,195,115, 2,137,195, /* 0x 290 */
131,194, 32,226,222,137,247,106, 0,129,231, 0,240,255,255,106, /* 0x 2a0 */
0, 41,251,255,117,184,129,195,255, 15, 0, 0,106, 7,129,227, /* 0x 2b0 */
0,240,255,255,139, 85,200, 83,137,240, 37,255, 15, 0, 0, 87, /* 0x 2c0 */
137, 93,172,141,180, 2,255, 15, 0, 0,232, 7,254,255,255,137, /* 0x 2d0 */
194,131,196, 24, 1,218,129,230, 0,240,255,255,137, 85,240,137, /* 0x 2e0 */
194, 41,243, 1,242,137,217,137, 69,176,137,211,106, 91, 88,205, /* 0x 2f0 */
128,139, 69,176,199, 69,192, 0, 0, 0, 0,139, 85,220, 41,248, /* 0x 300 */
102,131,122, 44, 0,137, 69,204, 15,132,177, 1, 0, 0,139, 77, /* 0x 310 */
208,139, 1,131,248, 6,117, 27,139, 93,208,186, 3, 0, 0, 0, /* 0x 320 */
139, 77,204, 3, 75, 8,139, 69,212,232,202,254,255,255,233,117, /* 0x 330 */
1, 0, 0, 72, 15,133,110, 1, 0, 0,139,125,208,199, 69,188, /* 0x 340 */
64, 98, 81,115,139, 79, 24,139, 71, 8,131,225, 7,139, 87, 16, /* 0x 350 */
193,225, 2,137, 69,236,211,109,188,137,193, 3, 79, 20,137,199, /* 0x 360 */
129,231,255, 15, 0, 0,137, 85,232,141, 52, 58,139, 85,204, 41, /* 0x 370 */
248,131,101,188, 7, 1,209,141, 28, 16,137, 77,180,139, 77,208, /* 0x 380 */
139, 65, 4, 41,248,131,125,216, 1, 80,255,117,228, 25,192,131, /* 0x 390 */
224,224,131,192, 50,131,125,216, 0, 80,137,240,106, 3,116, 3, /* 0x 3a0 */
141, 70, 3, 80, 83,232, 44,253,255,255,131,196, 24, 57,195, 15, /* 0x 3b0 */
133,168, 0, 0, 0,131,125,216, 0,116, 19,255,117,224,255,117, /* 0x 3c0 */
228,141, 85,232,139, 69,216,232, 69,253,255,255, 88, 90,137,250, /* 0x 3d0 */
137,247,137,216,247,223,232, 16,254,255,255,129,231,255, 15, 0, /* 0x 3e0 */
0,141, 4, 51,137,250,232, 0,254,255,255,131,125,216, 0,116, /* 0x 3f0 */
94,139, 69,208,131, 56, 1,117, 86,246, 64, 24, 1,116, 80,139, /* 0x 400 */
80, 20,139, 72, 8,137, 77,164,137,209, 3, 77,164, 59, 80, 16, /* 0x 410 */
117, 14,137,200,247,216, 37,255, 15, 0, 0,131,248, 3,119, 15, /* 0x 420 */
139, 77,164,139, 69,208,131,193, 12,131,120, 4, 0,117, 15,139, /* 0x 430 */
1, 61,205,128, 97,195,116, 6,199, 1,205,128, 97,195,133,201, /* 0x 440 */
116, 13,139, 69,212, 49,210,131,224,254,232,172,253,255,255,139, /* 0x 450 */
93,180,139, 77,192,139, 85,196,106,125, 88,205,128,133,192,116, /* 0x 460 */
8,106,127, 91,106, 1, 88,205,128,139, 69,192, 3, 69,188, 1, /* 0x 470 */
69,180,139, 69,176, 57, 69,180,115, 31,106, 0, 43, 69,180,106, /* 0x 480 */
0,106, 50,255,117,196, 80,255,117,180,232,121,252,255,255,131, /* 0x 490 */
196, 24, 57, 69,180,116, 36,235,200,131,125,216, 0,116, 28,131, /* 0x 4a0 */
69,192, 3,129,101,192,255, 15, 0, 0,131,125,192, 3,119, 11, /* 0x 4b0 */
139, 93,180,139, 77,192,106, 91, 88,205,128,139, 85,220, 71,131, /* 0x 4c0 */
69,208, 32, 15,183, 66, 44, 57,199, 15,140, 58,254,255,255,131, /* 0x 4d0 */
125,216, 0,117, 17,139, 93,228,106, 6, 88,205,128,133,192,116, /* 0x 4e0 */
23,233,123,255,255,255,139,125,220,102,131,127, 16, 3,116, 8, /* 0x 4f0 */
139, 93,240,106, 45, 88,205,128,139, 69,220, 3,112, 24,141,101, /* 0x 500 */
244, 91,137,240, 94, 95,201,195, 85,137,229, 87, 86, 83, 81,139, /* 0x 510 */
125, 20,141, 85, 24,255,117, 40,141, 71, 52,139, 93, 8,255,117, /* 0x 520 */
16,137, 69,240,139,117, 32,141, 69, 32,232,229,251,255,255,139, /* 0x 530 */
85,240,139, 69, 12,139, 74, 8,186, 3, 0, 0, 0,137, 69, 32, /* 0x 540 */
137,216,131,193, 52, 41,117, 36,232,174,252,255,255, 15,183, 79, /* 0x 550 */
42,137,216,186, 4, 0, 0, 0,232,158,252,255,255, 15,183, 79, /* 0x 560 */
44,137,216,186, 5, 0, 0, 0,232,142,252,255,255,139, 79, 24, /* 0x 570 */
137,216,186, 9, 0, 0, 0,232,127,252,255,255,141, 69, 32, 83, /* 0x 580 */
139, 85, 40, 80,139, 69, 16, 87,232,148,252,255,255,102,139, 79, /* 0x 590 */
44,131,196, 20, 49,210,102,133,201,137,195,116, 89,139, 69,240, /* 0x 5a0 */
131, 56, 3,117, 69, 49,201,139, 88, 8,137,202,106, 5, 88,205, /* 0x 5b0 */
128,133,192,137,198,120, 20,102,186, 0, 2,137,195,137,249,106, /* 0x 5c0 */
3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, 91,106, 1, /* 0x 5d0 */
88,205,128,235,246,106, 0, 49,210,106, 0,137,240, 87,232, 62, /* 0x 5e0 */
252,255,255,131,196, 12,137,195,235, 12, 66, 15,183,193,131, 69, /* 0x 5f0 */
240, 32, 57,194,124,167,141,101,244,137,216, 91, 94, 95,201,195 /* 0x 600 */
116, 13,139, 69,212, 49,210,131,224,254,232,169,253,255,255,137, /* 0x 450 */
241,139, 85,188,106,125, 88,205,128,133,192,116, 10,106,127, 91, /* 0x 460 */
106, 1, 88,205,128,235,254,141, 4, 62, 1,195, 59, 93,180,115, /* 0x 470 */
30,106, 0,106, 0,106, 50,255,117,188, 41, 93,180,255,117,180, /* 0x 480 */
83,232, 80,252,255,255,131,196, 24, 57,195,116, 27,235,206,131, /* 0x 490 */
125,216, 0,116, 19,141, 78, 3,129,225,255, 15, 0, 0,131,249, /* 0x 4a0 */
3,119, 5,106, 91, 88,205,128,139, 93,220,255, 69,192, 15,183, /* 0x 4b0 */
67, 44,131, 69,208, 32, 57, 69,192, 15,140, 79,254,255,255,131, /* 0x 4c0 */
125,216, 0,117, 14,139, 93,228,106, 6, 88,205,128,133,192,116, /* 0x 4d0 */
20,235,138,139,125,220,102,131,127, 16, 3,116, 8,139, 93,240, /* 0x 4e0 */
106, 45, 88,205,128,139, 69,220,139, 64, 24, 1, 69,204,139, 69, /* 0x 4f0 */
204,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83, 81, /* 0x 500 */
139,125, 20,141, 85, 24,255,117, 40,141, 71, 52,139, 93, 8,255, /* 0x 510 */
117, 16,137, 69,240,139,117, 32,141, 69, 32,232,241,251,255,255, /* 0x 520 */
139, 85,240,139, 69, 12,139, 74, 8,186, 3, 0, 0, 0,137, 69, /* 0x 530 */
32,137,216,131,193, 52, 41,117, 36,232,186,252,255,255, 15,183, /* 0x 540 */
79, 42,137,216,186, 4, 0, 0, 0,232,170,252,255,255, 15,183, /* 0x 550 */
79, 44,137,216,186, 5, 0, 0, 0,232,154,252,255,255,139, 79, /* 0x 560 */
24,137,216,186, 9, 0, 0, 0,232,139,252,255,255,141, 69, 32, /* 0x 570 */
83,139, 85, 40, 80,139, 69, 16, 87,232,160,252,255,255,102,139, /* 0x 580 */
79, 44,131,196, 20, 49,210,102,133,201,137,195,116, 89,139, 69, /* 0x 590 */
240,131, 56, 3,117, 69, 49,201,139, 88, 8,137,202,106, 5, 88, /* 0x 5a0 */
205,128,133,192,137,198,120, 20,102,186, 0, 2,137,195,137,249, /* 0x 5b0 */
106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, 91,106, /* 0x 5c0 */
1, 88,205,128,235,254,106, 0, 49,210,106, 0,137,240, 87,232, /* 0x 5d0 */
74,252,255,255,131,196, 12,137,195,235, 12, 66, 15,183,193,131, /* 0x 5e0 */
69,240, 32, 57,194,124,167,141,101,244,137,216, 91, 94, 95,201, /* 0x 5f0 */
195 /* 0x 600 */
};
+13 -1
View File
@@ -159,10 +159,22 @@ EXTERN upx_main
; ourselves the stub. We would need a place to put the escape hatch
; "int $0x80; popa; ret", and some kernels do not allow execution
; on the stack. So, we would have to dirty a page of the shell
; or of /lib/ld-linux.so. It's simpler just to omit the unapping.
; or of /lib/ld-linux.so. It's simpler just to omit the unmapping.
popa
ret
%define __NR_mmap 90
global mmap
mmap:
push ebx
lea ebx, [2*4 + esp]
push byte __NR_mmap
pop eax
int 0x80
pop ebx
ret
; vi:ts=8:et:nowrap
+64 -65
View File
@@ -1,4 +1,4 @@
/* fold_sh86.h -- created from fold_sh86.bin, 1212 (0x4bc) bytes
/* fold_sh86.h -- created from fold_sh86.bin, 1190 (0x4a6) bytes
This file is part of the UPX executable compressor.
@@ -27,16 +27,16 @@
*/
#define LINUX_I386SH_FOLD_SIZE 1212
#define LINUX_I386SH_FOLD_ADLER32 0x3f61f91a
#define LINUX_I386SH_FOLD_CRC32 0x17eab497
#define LINUX_I386SH_FOLD_SIZE 1190
#define LINUX_I386SH_FOLD_ADLER32 0x93daf2db
#define LINUX_I386SH_FOLD_CRC32 0x4e35857e
unsigned char linux_i386sh_fold[1212] = {
unsigned char linux_i386sh_fold[1190] = {
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,188, 4, 0, 0,188, 4, 0, 0, 7, 0, 0, 0, /* 0x 40 */
0, 0, 64, 1,166, 4, 0, 0,168, 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 */
@@ -48,64 +48,63 @@ unsigned char linux_i386sh_fold[1212] = {
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 */
85, 87, 86,137,198, 83,139,108, 36, 20, 57, 40,139,120, 4,115, /* 0x 100 */
8,106,127, 91,106, 1, 88,205,128,133,237,116, 10,137,233,138, /* 0x 110 */
7, 71,136, 2, 66,226,248, 91, 1,110, 4, 41, 46, 94, 95, 93, /* 0x 120 */
195, 83,141, 92, 36, 8,106, 90, 88,205,128, 91,195,133,210,137, /* 0x 130 */
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, 44,137, 85,240,139, 69, 8,137,202,137, /* 0x 150 */
69,236,106, 5, 88,205,128,133,192,137, 69,232,121, 8,106,127, /* 0x 160 */
91,106, 1, 88,205,128,186, 0, 2, 0, 0,139, 93,232,139, 77, /* 0x 170 */
240,106, 3, 88,205,128, 61, 0, 2, 0, 0,117,225,139, 69,240, /* 0x 180 */
199, 69,224,255,255,255,255, 3, 73, 28,102,131,120, 16, 3,139, /* 0x 190 */
93,240,137, 77,228,137,202, 15,149,192, 15,183, 75, 44, 15,182, /* 0x 1a0 */
192, 49,246,193,224, 4,131,192, 34,137, 69,204,137,200, 72,120, /* 0x 1b0 */
32,131, 58, 1,117, 22,139, 66, 8, 59, 69,224,115, 3,137, 69, /* 0x 1c0 */
224,139, 90, 20, 1,195, 57,222,115, 2,137,222,131,194, 32,226, /* 0x 1d0 */
224,246, 69,204, 16,116, 7,137,243,106, 45, 88,205,128,139, 93, /* 0x 1e0 */
224,106, 0,106, 0,129,227, 0,240,255,255,255,117,204, 41,222, /* 0x 1f0 */
106, 7,141,134,255, 15, 0, 0, 37, 0,240,255,255, 80, 83,232, /* 0x 200 */
29,255,255,255,131,196, 24,137,198,139, 69,240, 41,222,199, 69, /* 0x 210 */
220, 0, 0, 0, 0,102,131,120, 44, 0, 15,132,247, 0, 0, 0, /* 0x 220 */
139, 85,228,139, 2,131,248, 6,117, 14,139, 66, 8,139, 77,236, /* 0x 230 */
137, 65, 20,233,200, 0, 0, 0, 72, 15,133,193, 0, 0, 0,139, /* 0x 240 */
93,228,199, 69,216, 64, 98, 81,115,139, 75, 24,139, 67, 8,131, /* 0x 250 */
225, 7,193,225, 2,137,194,211,109,216,137,193,129,225,255, 15, /* 0x 260 */
0, 0, 3, 83, 20,137, 77,208, 3, 75, 16, 43, 69,208, 1,242, /* 0x 270 */
131,101,216, 7,137, 77,212,141, 60, 48,139, 67, 4, 43, 69,208, /* 0x 280 */
137, 85,200, 80,255,117,232,106, 18,106, 3, 81, 87,232,143,254, /* 0x 290 */
255,255,131,196, 24, 57,199,117, 54,139, 85,208,137,248,232,138, /* 0x 2a0 */
254,255,255,139, 93,212,139, 85,212,247,219,129,227,255, 15, 0, /* 0x 2b0 */
0,141, 4, 23,137,218,137, 93,208,232,111,254,255,255,137,251, /* 0x 2c0 */
139, 77,212,139, 85,216,106,125, 88,205,128,133,192,116, 8,106, /* 0x 2d0 */
127, 91,106, 1, 88,205,128,139, 69,212, 3, 69,208, 1,199, 59, /* 0x 2e0 */
125,200,115, 28,106, 0,139, 69,200,106, 0,106, 50, 41,248,255, /* 0x 2f0 */
117,216, 80, 87,232, 40,254,255,255,131,196, 24, 57,199,117,207, /* 0x 300 */
139, 85,240,255, 69,220, 15,183, 66, 44,131, 69,228, 32, 57, 69, /* 0x 310 */
220, 15,140, 9,255,255,255,139, 93,232,106, 6, 88,205,128,133, /* 0x 320 */
192,117,172,139, 69,240, 3,112, 24,141,101,244, 91,137,240, 94, /* 0x 330 */
95,201,195, 85,137,229, 87, 86, 83,131,236, 40,141,125, 32,139, /* 0x 340 */
69, 8,141,117, 24,139, 85, 16,137, 69,212,139, 69, 20,137, 85, /* 0x 350 */
208,137, 69,204,139, 69, 36, 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 */
141, 0, 0, 0,141, 85,220,137,240,106, 12,232,112,253,255,255, /* 0x 380 */
131,125,220, 0, 88,139, 69,224,117, 14, 61, 85, 80, 88, 33,117, /* 0x 390 */
11,131, 62, 0,116,107,235, 4,133,192,117, 8,106,127, 91,106, /* 0x 3a0 */
1, 88,205,128,139, 77,224,139, 69,220, 57,193,119,238, 59, 7, /* 0x 3b0 */
119,234, 57,193,115, 44, 15,182, 69,228, 80,141, 69,216, 80,255, /* 0x 3c0 */
119, 4, 81,255,118, 4,255, 85,208,131,196, 20,133,192,117,204, /* 0x 3d0 */
139, 69,220, 57, 69,216,117,196,139, 69,224, 1, 70, 4, 41, 6, /* 0x 3e0 */
235, 12,139, 87, 4,137,240, 81,232, 3,253,255,255, 91,139, 85, /* 0x 3f0 */
220,139, 7, 1, 87, 4, 41,208,133,192,137, 7,233,109,255,255, /* 0x 400 */
255,139, 69,236,139, 85,204,138, 24,139, 69,236,198, 0, 0,255, /* 0x 410 */
117,212,139, 69,240,232, 32,253,255,255,139, 85,212,137,198,139, /* 0x 420 */
69,236,136, 24,199, 66, 16, 3, 0, 0, 0,199, 66, 24, 4, 0, /* 0x 430 */
0, 0,139, 85,204, 15,183, 66, 42,139, 85,212,137, 66, 28,199, /* 0x 440 */
66, 32, 5, 0, 0, 0,139, 85,204, 15,183, 66, 44,139, 85,212, /* 0x 450 */
137, 66, 36,139, 69,204,199, 66, 44, 0, 16, 0, 0,137,114, 68, /* 0x 460 */
199, 66, 40, 6, 0, 0, 0,102,139, 88, 44,199, 66, 64, 9, 0, /* 0x 470 */
0, 0,139, 85,204, 89, 49,201,131,194, 52,102,133,219,116, 34, /* 0x 480 */
131, 58, 3,117, 18,139, 66, 8,106, 0,139, 85,204,232,168,252, /* 0x 490 */
255,255,137,198, 88,235, 11, 65, 15,183,195,131,194, 32, 57,193, /* 0x 4a0 */
124,222,141,101,244,137,240, 91, 94, 95,201,195 /* 0x 4b0 */
86, 83,137,195,131,236, 40,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, 3, 73, 28,102,131,120, 16, 3,139, 93,240,137, 77,228, /* 0x 190 */
137,202, 15,149,192, 15,183, 75, 44, 15,182,192,131,207,255,193, /* 0x 1a0 */
224, 4,131,192, 34, 49,246,137, 69,212,137,200, 72,120, 30,131, /* 0x 1b0 */
58, 1,117, 20,139, 66, 8, 57,248,115, 2,137,199,139, 90, 20, /* 0x 1c0 */
1,195, 57,222,115, 2,137,222,131,194, 32,226,226,246, 69,212, /* 0x 1d0 */
16,116, 7,137,243,106, 45, 88,205,128,137,251,106, 0,129,227, /* 0x 1e0 */
0,240,255,255,106, 0, 41,222,255,117,212,141,134,255, 15, 0, /* 0x 1f0 */
0,106, 7, 37, 0,240,255,255, 80, 83,232,241,254,255,255,131, /* 0x 200 */
196, 24, 41,216,199, 69,220, 0, 0, 0, 0,137, 69,224,139, 69, /* 0x 210 */
240,102,131,120, 44, 0, 15,132,247, 0, 0, 0,139, 85,228,139, /* 0x 220 */
2,131,248, 6,117, 14,139, 66, 8,139, 77,236,137, 65, 20,233, /* 0x 230 */
200, 0, 0, 0, 72, 15,133,193, 0, 0, 0,139, 93,228,199, 69, /* 0x 240 */
216, 64, 98, 81,115,139, 75, 24,139, 67, 8,131,225, 7,193,225, /* 0x 250 */
2,137,194,211,109,216,139, 77,228, 3, 83, 20,137,195,139,121, /* 0x 260 */
16,129,227,255, 15, 0, 0,139, 77,224, 41,216, 1,223,131,101, /* 0x 270 */
216, 7, 1,202,141, 52, 8,137, 85,208,139, 85,228,139, 66, 4, /* 0x 280 */
41,216, 80,255,117,232,106, 18,106, 3, 87, 86,232, 95,254,255, /* 0x 290 */
255,131,196, 24, 57,198,117, 48,137,218,137,240,232,140,254,255, /* 0x 2a0 */
255,137,249,247,217,141, 4, 62,129,225,255, 15, 0, 0,137,243, /* 0x 2b0 */
137,202,137, 77,204,232,115,254,255,255,137,249,139, 85,216,106, /* 0x 2c0 */
125, 88,205,128,133,192,116, 10,106,127, 91,106, 1, 88,205,128, /* 0x 2d0 */
235,254,139, 85,204,141, 4, 23,141, 28, 6, 59, 93,208,115, 28, /* 0x 2e0 */
106, 0,106, 0,106, 50,255,117,216, 41, 93,208,255,117,208, 83, /* 0x 2f0 */
232,251,253,255,255,131,196, 24, 57,195,117,204,139, 77,240,255, /* 0x 300 */
69,220, 15,183, 65, 44,131, 69,228, 32, 57, 69,220, 15,140, 9, /* 0x 310 */
255,255,255,139, 93,232,106, 6, 88,205,128,133,192,117,169,139, /* 0x 320 */
69,240,139, 64, 24, 1, 69,224,139, 69,224,141,101,244, 91, 94, /* 0x 330 */
95,201,195, 85,137,229, 87, 86, 83,131,236, 36,141,117, 32,139, /* 0x 340 */
69, 16,141, 93, 24,139, 85, 20,137, 69,212,139, 69, 36,139,125, /* 0x 350 */
8,137, 85,208, 5, 85, 80, 88, 50,137, 69,240,139, 69,240, 5, /* 0x 360 */
85, 80, 88, 51,131,125, 32, 0,137, 69,236, 15,132,139, 0, 0, /* 0x 370 */
0,141, 85,220,137,216,106, 12,232,127,253,255,255, 88,139, 69, /* 0x 380 */
220,139, 77,224,133,192,117, 15,129,249, 85, 80, 88, 33,117, 11, /* 0x 390 */
131, 59, 0,116,103,235, 4,133,201,117, 10,106,127, 91,106, 1, /* 0x 3a0 */
88,205,128,235,254, 57,193,119,242, 59, 6,119,238, 57,193,115, /* 0x 3b0 */
44, 15,182, 69,228, 80,141, 69,216, 80,255,118, 4, 81,255,115, /* 0x 3c0 */
4,255, 85,212,131,196, 20,133,192,117,208,139, 69,220, 57, 69, /* 0x 3d0 */
216,117,200,139, 69,224, 1, 67, 4, 41, 3,235, 12,139, 86, 4, /* 0x 3e0 */
137,216, 81,232, 20,253,255,255, 88,139, 85,220,139, 6, 1, 86, /* 0x 3f0 */
4, 41,208,133,192,137, 6,233,111,255,255,255,139, 69,236,139, /* 0x 400 */
85,208,138, 24,139, 69,236,198, 0, 0,139, 69,240, 87,232, 39, /* 0x 410 */
253,255,255,139, 85,208,137,198,139, 69,236,136, 24, 15,183, 66, /* 0x 420 */
42,199, 71, 16, 3, 0, 0, 0,199, 71, 24, 4, 0, 0, 0,199, /* 0x 430 */
71, 32, 5, 0, 0, 0,137, 71, 28, 15,183, 66, 44,199, 71, 44, /* 0x 440 */
0, 16, 0, 0,137,119, 68,131,194, 52,199, 71, 40, 6, 0, 0, /* 0x 450 */
0,137, 71, 36,139, 69,208,199, 71, 64, 9, 0, 0, 0,102,139, /* 0x 460 */
88, 44, 89, 49,201,102,133,219,116, 34,131, 58, 3,117, 18,139, /* 0x 470 */
66, 8,106, 0,139, 85,208,232,190,252,255,255,137,198, 88,235, /* 0x 480 */
11, 65, 15,183,195,131,194, 32, 57,193,124,222,141,101,244,137, /* 0x 490 */
240, 91, 94, 95,201,195 /* 0x 4a0 */
};
+14 -4
View File
@@ -39,12 +39,22 @@
; ============= ENTRY POINT
; =============
; __ARMWPE00__
start:
%include "l_armpe_.ah"
; __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:
; __ARMWPE99__
; __ARMPEEOF__
section .data
dd -1
dw eof
+265 -73
View File
@@ -1,9 +1,10 @@
/* l_armpe.h -- created from l_armpe.bin, 1069 (0x42d) bytes
/* l_armpe.h -- created from l_armpe.bin, 4112 (0x1010) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2005 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2005 Laszlo Molnar
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
@@ -26,75 +27,266 @@
*/
#define NRV_LOADER_ADLER32 0x793a99ed
#define NRV_LOADER_CRC32 0x90e7375f
#define NRV_LOADER_SIZE 4112
#define NRV_LOADER_ADLER32 0x78258e9b
#define NRV_LOADER_CRC32 0xa3de7215
unsigned char nrv_loader[1069] = {
15, 64, 45,233, 12, 0,160,227, 0, 0,143,224, 11, 0, 0,235, /* 0x 0 */
15, 64,189,232, 24,240,159,229, 88,120,120, 88, 83, 82, 67, 48, /* 0x 10 */
68, 83, 84, 48, 66, 73, 77, 80, 79, 78, 65, 77, 71, 69, 84, 80, /* 0x 20 */
76, 79, 65, 68, 69, 78, 84, 82, 83, 82, 67, 76, 68, 83, 84, 76, /* 0x 30 */
240, 71, 45,233, 4, 80,144,228, 0, 48,160,227, 4,112,144,228, /* 0x 40 */
136,208, 77,226, 4, 32,144,228, 4, 48,141,229, 4,144,144,228, /* 0x 50 */
3, 64,160,225, 4,128,144,228, 0, 32,141,229, 0, 96,144,229, /* 0x 60 */
3,192,160,225, 3, 0,160,225, 1,160,160,227, 4, 0, 0,234, /* 0x 70 */
5, 48,132,224, 0, 48,211,229, 1, 64,132,226, 7, 48,192,231, /* 0x 80 */
1, 0,128,226,127, 0, 28,227, 5, 48,212, 7,140, 48,160, 17, /* 0x 90 */
131, 48,160, 1, 1, 48,131, 2, 1, 64,132, 2, 1, 12, 19,227, /* 0x a0 */
3,192,160,225,241,255,255, 26, 1, 16,160,227,127, 0, 28,227, /* 0x b0 */
5, 48,212, 7,140, 48,160, 17,131, 48,160, 1, 1, 48,131, 2, /* 0x c0 */
1, 64,132, 2, 3,192,160,225,127, 0, 19,227,129, 32,160,225, /* 0x d0 */
131, 59,160,225,163, 31,130,225, 5, 48,212, 7,140, 48,160, 17, /* 0x e0 */
131, 48,160, 1, 1, 48,131, 2, 1, 64,132, 2, 1, 12, 19,227, /* 0x f0 */
3,192,160,225, 11, 0, 0, 26,127, 0, 19,227, 5, 48,212, 7, /* 0x 100 */
131, 48,160, 17,131, 48,160, 1, 1, 48,131, 2,129, 32,160,225, /* 0x 110 */
3,192,160,225,131, 59,160,225,163, 63,130,225, 1, 64,132, 2, /* 0x 120 */
2, 16, 67,226,224,255,255,234, 2, 0, 81,227, 10, 0, 0, 26, /* 0x 130 */
127, 0, 19,227, 5, 48,212, 7,131, 48,160, 17,131, 48,160, 1, /* 0x 140 */
1, 48,131, 2, 3,192,160,225, 35, 52,160,225, 10, 16,160,225, /* 0x 150 */
1, 64,132, 2, 1, 32, 3,226, 10, 0, 0,234, 5, 48,212,231, /* 0x 160 */
1, 64,132,226, 1, 52,131,224, 3, 28, 67,226, 1, 0,113,227, /* 0x 170 */
71, 0, 0, 10, 1, 48,224,225,161, 16,160,225, 1, 16,129,226, /* 0x 180 */
1, 32, 3,226, 1,160,160,225, 0, 0, 82,227,127, 48, 12,226, /* 0x 190 */
10, 0, 0, 10, 0, 0, 83,227, 5, 48,212, 7,140, 48,160, 17, /* 0x 1a0 */
131, 48,160, 1, 1, 48,131, 2, 3,192,160,225, 35, 52,160,225, /* 0x 1b0 */
1, 48, 3,226, 1, 64,132, 2, 1, 32,131,226, 39, 0, 0,234, /* 0x 1c0 */
0, 0, 83,227, 5, 48,212, 7,140, 48,160, 17,131, 48,160, 1, /* 0x 1d0 */
1, 48,131, 2, 1, 64,132, 2, 1, 12, 19,227, 3,192,160,225, /* 0x 1e0 */
1, 32,160, 3, 10, 0, 0, 10,127, 0, 19,227, 5, 48,212, 7, /* 0x 1f0 */
131, 48,160, 17,131, 48,160, 1, 1, 48,131, 2, 3,192,160,225, /* 0x 200 */
35, 52,160,225, 1, 48, 3,226, 1, 64,132, 2, 3, 32,131,226, /* 0x 210 */
18, 0, 0,234,127, 0, 28,227,140, 48,160,225, 5, 48,212, 7, /* 0x 220 */
130, 32,160,225,131, 48,160, 1, 1, 48,131, 2,131,224,160,225, /* 0x 230 */
1, 64,132, 2,127, 0, 19,227,131, 59,160,225,163, 47,130,225, /* 0x 240 */
5, 48,212, 7, 1, 64,132, 2,131, 48,160, 1, 1,224,131, 2, /* 0x 250 */
1, 12, 30,227, 14,192,160,225,237,255,255, 10, 3, 32,130,226, /* 0x 260 */
0, 48,135,224, 3,224, 97,224, 1, 48,222,228, 5, 12, 81,227, /* 0x 270 */
1, 32,130,130, 0, 48,199,231, 1, 0,128,226, 1, 48,222,228, /* 0x 280 */
1, 32, 82,226, 7, 48,192,231, 1, 0,128,226,250,255,255, 26, /* 0x 290 */
123,255,255,234, 0,160,150,229, 0,128,152,229, 0, 64,157,229, /* 0x 2a0 */
4, 0,141,229, 3, 16,212,229, 2, 48,212,229, 1, 32,212,229, /* 0x 2b0 */
1, 52,131,224, 0, 16,212,229, 3, 36,130,224, 2,228,129,224, /* 0x 2c0 */
0, 0, 94,227, 59, 0, 0, 10, 4, 48,132,226, 3, 16,211,229, /* 0x 2d0 */
2, 32,211,229, 1, 48,211,229, 1, 36,130,224, 4, 16,212,229, /* 0x 2e0 */
2, 52,131,224, 9,192,254,231, 3, 20,129,224, 8, 0,141,226, /* 0x 2f0 */
0, 0, 92,227, 7, 80,129,224, 0, 48,160,225, 3, 0, 0, 10, /* 0x 300 */
178,192,195,224, 1,192,254,229, 0, 0, 92,227,250,255,255,234, /* 0x 310 */
0, 32,160,227,176, 32,195,225, 15,224,160,225, 10,240,160,225, /* 0x 320 */
8, 48,244,229, 0, 96,160,225, 0, 0, 83,227, 31, 0, 0, 10, /* 0x 330 */
255, 48, 3,226, 1, 0, 83,227, 1, 64,132,226, 2, 0, 0, 10, /* 0x 340 */
255, 0, 83,227, 9, 0, 0, 10, 19, 0, 0,234, 6, 0,160,225, /* 0x 350 */
4, 16,160,225, 15,224,160,225, 8,240,160,225, 4, 0,133,228, /* 0x 360 */
1, 48,212,228, 0, 0, 83,227,252,255,255, 26, 13, 0, 0,234, /* 0x 370 */
0, 48,212,229, 1, 16,212,229, 6, 0,160,225, 1, 20,131,224, /* 0x 380 */
15,224,160,225, 8,240,160,225, 2, 64,132,226, 5, 48,160,225, /* 0x 390 */
4, 80,133,226, 0, 0,131,229, 2, 0, 0,234, 0, 32,160,227, /* 0x 3a0 */
1, 48,160,227, 0, 32,131,229, 0, 48,212,229,221,255,255,234, /* 0x 3b0 */
1, 64,132,226,186,255,255,234,136,208,141,226,240,135,189,232, /* 0x 3c0 */
255,255,255,255, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, /* 0x 3d0 */
85, 80, 88, 33,161,216,208,213, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 3e0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, /* 0x 3f0 */
65, 82, 77, 87, 80, 69, 48, 48, 0, 0, 0, 0, 0, 85, 80, 88, /* 0x 400 */
49, 72, 69, 65, 68, 0,224, 3, 0, 0, 65, 82, 77, 87, 80, 69, /* 0x 410 */
57, 57, 0, 0, 4, 0, 0,255,255,255,255, 0, 4 /* 0x 420 */
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 */
};
+66 -279
View File
@@ -29,127 +29,22 @@
<jreiser@users.sourceforge.net>
*/
#define WRITEFILE(name0, buf, len) \
do { short b[3]; b[0] = '\\'; b[1] = name0; b[2] = 0; \
typedef int (*CF)(short *, int, int, int, int, int, int); CF cf = (CF) 0x1f99c58; \
typedef void (*WF)(int, const void *, int, int *, int); WF wf = (WF) 0x1f99d60; \
typedef void (*CH)(int); CH ch = (CH) 0x1f9a2f0; \
int h = cf(b, 0x40000000L, 3, 0, 2, 0x80, 0);\
int l; wf(h, buf, len, &l, 0); \
ch(h); } while (0)
#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);
typedef unsigned int ucl_uint32;
typedef int ucl_int32;
typedef unsigned int ucl_uint;
typedef int ucl_int;
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 int
ucl_nrv2e_decompress_8 ( const unsigned char * src, ucl_uint src_len,
unsigned char * dst, ucl_uint * dst_len)
{
{
ucl_uint32 bb = 0;
ucl_uint ilen = 0, olen = 0, last_m_off = 1;
for (;;)
{
ucl_uint m_off, m_len;
while ((((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1))
{
;
;
dst[olen++] = src[ilen++];
}
m_off = 1;
for (;;)
{
m_off = m_off*2 + (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1);
;
;
if ((((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1)) break;
m_off = (m_off-1)*2 + (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1);
}
if (m_off == 2)
{
m_off = last_m_off;
m_len = (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1);
}
else
{
;
m_off = (m_off-3)*256 + src[ilen++];
if (m_off == ((0xffffffff) + 0U))
break;
m_len = (m_off ^ ((0xffffffff) + 0U)) & 1;
m_off >>= 1;
last_m_off = ++m_off;
}
if (m_len)
m_len = 1 + (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1);
else if ((((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1))
m_len = 3 + (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1);
else
{
m_len++;
do {
m_len = m_len*2 + (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1);
;
;
} while (!(((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1));
m_len += 3;
}
m_len += (m_off > 0x500);
;
;
{
const unsigned char * m_pos;
m_pos = dst + olen - m_off;
dst[olen++] = *m_pos++;
do dst[olen++] = *m_pos++; while (--m_len > 0);
}
}
*dst_len = olen;
return ilen == src_len ? 0 : (ilen < src_len ? (-205) : (-201));
}
}
typedef void *(*loadlibraryw)(unsigned short *);
typedef void *(*getprocaddra)(void *, void *);
#define T(a,b,c,d) ((a) + ((b) * 0x100) + ((c) * 0x10000) + ((d) * 0x1000000))
static inline void *get_le32(unsigned char *p)
{
return (void*) T(p[0], p[1], p[2], p[3]);
}
static void handle_imports(unsigned char *imp,
unsigned name_offset,
unsigned iat_offset,
loadlibraryw ll,
getprocaddra gpa)
static void handle_imports(const unsigned char *imp, unsigned name_offset,
unsigned iat_offset)
{
unsigned short buf[64];
while (1)
@@ -166,7 +61,7 @@ static void handle_imports(unsigned char *imp,
*b = *name;
*b = 0;
void *dll = ll(buf);
void *dll = LoadLibraryW(buf);
imp += 8;
unsigned ord;
@@ -176,7 +71,7 @@ static void handle_imports(unsigned char *imp,
{
case 1:
// by name
*iat++ = (unsigned) gpa(dll, imp);
*iat++ = (unsigned) GetProcAddressA(dll, imp);
while (*imp++)
;
break;
@@ -184,10 +79,10 @@ static void handle_imports(unsigned char *imp,
// by ordinal
ord = ((unsigned) imp[0]) + imp[1] * 0x100;
imp += 2;
*iat++ = (unsigned) gpa(dll, (void *) ord);
*iat++ = (unsigned) GetProcAddressA(dll, (void *) ord);
break;
default:
*(int*) 1 = 0;
// *(int*) 1 = 0;
break;
}
}
@@ -195,163 +90,55 @@ static void handle_imports(unsigned char *imp,
}
}
void upx_main(unsigned *info)
// 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)
{
int dlen = 0;
unsigned src0 = *info++;
unsigned dst0 = *info++;
unsigned bimp = *info++;
unsigned onam = *info++;
unsigned getp = *info++;
unsigned load = *info++;
unsigned entr = *info++;
unsigned srcl = *info++;
unsigned dstl = *info++;
//WRITEFILE('1', (void*) 0x11000, load + 256 - 0x11000);
ucl_nrv2e_decompress_8((void *) src0, srcl, (void *) dst0, &dlen);
handle_imports((void *) bimp, onam, dst0, *(void**) load, *(void**) getp);
//WRITEFILE('2', (void*) 0x11000, load + 256 - 0x11000);
}
#ifndef __pe__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static void *test_loadlibraryw(unsigned short *x)
{
printf("loadlibraryw called: ");
while (*x)
printf("%c", *x++);
printf("\n");
static unsigned ret = 0x2a2a2a00;
return (void*) ret++;
}
static void *test_getprocaddra(void *a, void *x)
{
if ((unsigned) x < 0x10000)
printf("getprocaddra called: %p %x\n", a, (unsigned) x);
else
printf("getprocaddra called: %p %s\n", a, (char*) x);
static unsigned ret = 1;
return a + ret++;
}
int main(int argc, char **argv)
{
if (argc != 2)
return printf("usage: %s <compressed.exe>\n", argv[0]);
void *mem = malloc(32*1024*1024);
void *mem16m = (void*) ((((unsigned) mem) + 0xffffff) & 0xff000000);
printf("mem: %p %p\n", mem, mem16m);
char command[100 + strlen(argv[1])];
snprintf(command, sizeof(command),
"arm-wince-pe-objdump -h '%s'|grep '2[*][*]2'", argv[1]);
FILE *fp = popen(command, "r");
if (fgets(command, 100, fp) == NULL)
return printf("error while calling objdump\n");
unsigned start_uncompressed;
if (sscanf(command, "%*d %*s %*x %x", &start_uncompressed) != 1)
return printf("scanf failed on '%s'", command);
printf("start_uncompressed=%x ", start_uncompressed);
if (fgets(command, 100, fp) == NULL)
return printf("error while calling objdump\n");
unsigned size;
unsigned offset;
unsigned vma;
if (sscanf(command, "%*d %*s %x %x %*x %x", &size, &vma, &offset) != 3)
return printf("scanf failed on '%s'" , command);
printf("size=%x vma=%x offset=%x\n", size, vma, offset);
if (fgets(command, 100, fp) == NULL)
return printf("error while calling objdump\n");
unsigned size2;
unsigned offset2;
unsigned vma2;
if (sscanf(command, "%*d %*s %x %x %*x %x", &size2, &vma2, &offset2) != 3)
return printf("scanf failed on '%s'" , command);
printf("size2=%x vma2=%x offset2=%x\n", size2, vma2, offset2);
pclose(fp);
FILE *f1 = fopen(argv[1], "rb");
if (f1 == NULL)
return printf("can not open %s\n", argv[1]);
if (fseek(f1, offset, SEEK_SET))
return printf("fseek failed\n");
if (fread(mem16m + vma, size, 1, f1) != 1)
return printf("fread failed\n");
if (fseek(f1, offset2, SEEK_SET))
return printf("fseek failed\n");
if (fread(mem16m + vma2, size2, 1, f1) != 1)
return printf("fread failed\n");
fclose(f1);
unsigned *info = (unsigned *) memmem(mem16m + vma, size, "XxxX", 4);
if (info == NULL)
return printf("decompression info not found\n");
info++;
unsigned src0 = *info++;
unsigned dst0 = *info++;
unsigned bimp = *info++;
unsigned onam = *info++;
unsigned getp = *info++;
unsigned load = *info++;
unsigned entr = *info++;
unsigned srcl = *info++;
unsigned dstl = *info++;
printf("%x %x %x %x %x %x %x %x %x\n", src0, srcl, dst0, dstl, bimp, onam, load, getp, entr);
int dlen = 0;
int ret = ucl_nrv2e_decompress_8(mem16m + src0, srcl, mem16m + dst0, &dlen);
printf("dlen=%x, ret=%d\n", dlen, ret);
if (dlen != (int) dstl)
return printf("corrupt compressed data\n");
f1 = fopen("/tmp/image.out", "w");
fwrite(mem16m, vma + size + 0x10000, 1, f1);
fclose(f1);
handle_imports(bimp + mem16m, onam + mem16m, dst0 + mem16m,
test_loadlibraryw, test_getprocaddra);
f1 = fopen("/tmp/image.out", "w");
fwrite(mem16m, vma2 + size2, 1, f1);
fclose(f1);
return 0;
}
#endif
unsigned dlen = 0;
#if 0
int main(void)
{
FILE *f1 = fopen("/r", "w");
int h = LoadLibraryW(L"coredll.dll");
fprintf(f1, "%p\n", GetProcAddressA(h, "DeleteFileW"));
fclose(f1);
return 0;
}
int main(void)
{
typedef void (*df)(ushort *);
df dfw = 0x1f99bc8;
dfw(L"\\r");
return 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
}
+427 -12
View File
@@ -29,20 +29,435 @@
<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
.align 0
.global _mainCRTStartup
.globl upx_main
.globl _start
_mainCRTStartup:
#ifdef STUB_IN_THUMB_MODE
START
stmfd sp!, {r0 - r3, lr}
mov r0, #L2 - L0 - 8
L0:
add r0, pc, r0
bl _upx_main
@ 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}
ldr pc, L21
.ascii "XxxX"
L2:
.ascii "SRC0DST0BIMPONAMGETPLOAD"
L21:
.ascii "ENTRSRCLDSTL"
.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
.align 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
+7 -13
View File
@@ -96,14 +96,8 @@ do_brk(void *addr)
return brk(addr);
}
static char *
__attribute_cdecl
do_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
(void)len; (void)prot; (void)flags; (void)fd; (void)offset;
return mmap((void *)&addr);
}
extern char *mmap(void *addr, size_t len,
int prot, int flags, int fd, off_t offset);
/*************************************************************************
// UPX & NRV stuff
@@ -274,7 +268,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 = do_mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC,
addr = mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC,
mflags, 0, 0 );
*p_brk = hi + addr; // the logical value of brk(0)
munmap(szlo + addr, hi - szlo); // desirable if PT_LOAD non-contiguous
@@ -306,7 +300,7 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, struct Extent *const xi,
addr -= frag;
// Decompressor can overrun the destination by 3 bytes.
if (addr != do_mmap(addr, mlen + (xi ? 3 : 0), PROT_READ | PROT_WRITE,
if (addr != mmap(addr, mlen + (xi ? 3 : 0), PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | (xi ? MAP_ANONYMOUS : 0),
fdi, phdr->p_offset - frag) ) {
err_exit(8);
@@ -331,7 +325,7 @@ ERR_LAB
}
addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss
if (addr != do_mmap(addr, haddr - addr, prot,
if (addr != mmap(addr, haddr - addr, prot,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ) ) {
err_exit(9);
}
@@ -392,11 +386,11 @@ void *upx_main(
Elf32_Addr reloc;
Elf32_Addr entry;
(void)junk;
// sizeof(Ehdr+Phdrs), compressed; including b_info header
size_t const sz_pckhdrs = xi.size;
(void)junk;
// Uncompress Ehdr and Phdrs.
unpackExtent(&xi, &xo, f_decompress, 0);
+5 -11
View File
@@ -127,14 +127,8 @@ static uint32_t ascii5(char *p, uint32_t v, unsigned n)
}
static unsigned char *
__attribute_cdecl
do_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
(void)len; (void)prot; (void)flags; (void)fd; (void)offset;
return (unsigned char *) mmap((void *)&addr);
}
extern char *mmap(void *addr, size_t len,
int prot, int flags, int fd, off_t offset);
#if defined(__i386__)
# define SET2(p, c0, c1) \
@@ -359,7 +353,7 @@ void upx_main(
#if defined(USE_MMAP_FO)
// FIXME: packer could set length
buf = do_mmap(0, header.p_filesize,
buf = (unsigned char *)mmap(0, header.p_filesize,
PROT_READ | PROT_WRITE, MAP_SHARED, fdo, 0);
if ((unsigned long) buf >= (unsigned long) -4095)
goto error;
@@ -367,13 +361,13 @@ void upx_main(
// Decompressor can overrun the output by 3 bytes.
// Defend against SIGSEGV by using a scratch page.
// FIXME: packer could set address delta
do_mmap(buf + (PAGE_MASK & (header.p_filesize + ~PAGE_MASK)),
mmap(buf + (PAGE_MASK & (header.p_filesize + ~PAGE_MASK)),
-PAGE_MASK, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
#else
// Temporary decompression buffer.
// FIXME: packer could set length
buf = do_mmap(0, (header.p_blocksize + OVERHEAD + ~PAGE_MASK) & PAGE_MASK,
buf = mmap(0, (header.p_blocksize + OVERHEAD + ~PAGE_MASK) & PAGE_MASK,
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
if ((unsigned long) buf >= (unsigned long) -4095)
goto error;
+5 -11
View File
@@ -96,14 +96,8 @@ do_brk(void *addr)
return brk(addr);
}
static char *
__attribute_cdecl
do_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
(void)len; (void)prot; (void)flags; (void)fd; (void)offset;
return mmap((void *)&addr);
}
extern char *mmap(void *addr, size_t len,
int prot, int flags, int fd, off_t offset);
/*************************************************************************
// UPX & NRV stuff
@@ -270,7 +264,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 = do_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, 0, 0);
*p_brk = hi + addr; // the logical value of brk(0)
munmap(szlo + addr, hi - szlo); // desirable if PT_LOAD non-contiguous
return (unsigned long)addr - lo;
@@ -310,7 +304,7 @@ do_xmap(
haddr += reloc;
// Decompressor can overrun the destination by 3 bytes.
if (addr != do_mmap(addr, mlen + (xi ? 3 : 0), PROT_READ | PROT_WRITE,
if (addr != mmap(addr, mlen + (xi ? 3 : 0), PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | (xi ? MAP_ANONYMOUS : 0),
fdi, phdr->p_offset - frag) ) {
err_exit(8);
@@ -334,7 +328,7 @@ ERR_LAB
}
addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss
if (addr != do_mmap(addr, haddr - addr, prot,
if (addr != mmap(addr, haddr - addr, prot,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ) ) {
err_exit(9);
}
+1 -1
View File
@@ -45,7 +45,7 @@
GLOBAL _start
;__LXPTI000__
_start:
int3
;;;; int3
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
+414 -415
View File
@@ -1,4 +1,4 @@
/* l_lx_pti86.h -- created from l_lx_pti86.bin, 6546 (0x1992) bytes
/* l_lx_pti86.h -- created from l_lx_pti86.bin, 6542 (0x198e) bytes
This file is part of the UPX executable compressor.
@@ -27,419 +27,418 @@
*/
#define LINUX_I386PTI_LOADER_SIZE 6546
#define LINUX_I386PTI_LOADER_ADLER32 0x0cc7d0ff
#define LINUX_I386PTI_LOADER_CRC32 0x04a4071e
#define LINUX_I386PTI_LOADER_SIZE 6542
#define LINUX_I386PTI_LOADER_ADLER32 0xe080d1eb
#define LINUX_I386PTI_LOADER_CRC32 0xa507af83
unsigned char linux_i386pti_loader[6546] = {
204,232, 28, 0, 0, 0,131,248, 70,185,210, 5, 0, 0,116, 15, /* 0x 0 */
131,248, 73,185,210, 5, 0, 0,116, 5,185, 33, 0, 0, 0,137, /* 0x 10 */
200,195,232, 0, 0, 0, 0,131,248, 2,185, 84, 0, 0, 0,116, /* 0x 20 */
238,131,248, 5,185, 84, 0, 0, 0,116,228,131,248, 8,185, 84, /* 0x 30 */
0, 0, 0,116,218,131,248, 11,185, 84, 0, 0, 0,116,208,233, /* 0x 40 */
198,255,255,255, 96,131,205,255,139,116, 36, 36,139,124, 36, 44, /* 0x 50 */
235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219,117, 7,139, /* 0x 60 */
30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7,114, 0,184, /* 0x 70 */
1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 80 */
192, 1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219, /* 0x 90 */
115, 0,117, 9,139, 30,131,238,252, 17,219,115, 0, 49,201,131, /* 0x a0 */
232, 3,114, 13,193,224, 8,138, 6, 70,131,240,255,116, 0,137, /* 0x b0 */
197, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219, /* 0x c0 */
117, 7,139, 30,131,238,252, 17,219, 17,201,117, 0, 65, 1,219, /* 0x d0 */
117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219,117, 7,139, /* 0x e0 */
30,131,238,252, 17,219,115, 0, 1,219,115, 0,117, 9,139, 30, /* 0x f0 */
131,238,252, 17,219,115, 0, 65, 65,131,193, 2,129,253, 0,243, /* 0x 100 */
255,255,131,209, 1, 86,141, 52, 47,243,164, 94,233, 0, 0, 0, /* 0x 110 */
0,141, 20, 47,131,253,252,138, 4, 15,118, 0,138, 2, 66,136, /* 0x 120 */
7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2,131,194, 4,137, /* 0x 130 */
7,131,199, 4,131,233, 4,119,241, 1,207,233, 0, 0, 0, 0, /* 0x 140 */
235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219,117, 7,139, /* 0x 150 */
30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7,114, 0,184, /* 0x 160 */
1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 170 */
192, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, 1,219, /* 0x 180 */
115, 11,117, 0,139, 30,131,238,252, 17,219,114, 0, 72, 1,219, /* 0x 190 */
117, 7,139, 30,131,238,252, 17,219, 17,192,235, 0, 49,201,131, /* 0x 1a0 */
232, 3,114, 17,193,224, 8,138, 6, 70,131,240,255,116, 0,209, /* 0x 1b0 */
248,137,197,235, 11, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 1c0 */
17,201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, /* 0x 1d0 */
0, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1, /* 0x 1e0 */
219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0, /* 0x 1f0 */
117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2, /* 0x 200 */
129,253, 0,251,255,255,131,209, 1, 86,141, 52, 47,243,164, 94, /* 0x 210 */
233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0, /* 0x 220 */
138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2, /* 0x 230 */
131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, /* 0x 240 */
0, 0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1, /* 0x 250 */
219,117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, /* 0x 260 */
7,114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238, /* 0x 270 */
252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 280 */
114, 0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, /* 0x 290 */
0, 72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, /* 0x 2a0 */
0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,235, 0, /* 0x 2b0 */
49,201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240,255, /* 0x 2c0 */
116, 0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131,238, /* 0x 2d0 */
252, 17,219,114,204, 65, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 2e0 */
219,114,190, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, /* 0x 2f0 */
1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, /* 0x 300 */
0,117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, /* 0x 310 */
2,129,253, 0,251,255,255,131,209, 2, 86,141, 52, 47,243,164, /* 0x 320 */
94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, /* 0x 330 */
0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, /* 0x 340 */
2,131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207, /* 0x 350 */
233, 0, 0, 0, 0,255,210, 1,219,117, 2,255,210,144,232, 0, /* 0x 360 */
0, 0, 0, 1,219,116, 0,195,139, 30,131,238,252, 17,219,195, /* 0x 370 */
41,201, 17,201,114, 0, 17,201,114, 0, 17,201, 17,192, 72, 17, /* 0x 380 */
192,131,233, 1,115, 0,141, 72, 15, 61,240,255, 0, 0,114, 0, /* 0x 390 */
141, 4, 14, 80,233, 0, 0, 0, 0, 17,201, 17,201,131,193, 13, /* 0x 3a0 */
235, 0,133,201,116, 0, 65,131,193, 8,235, 0, 41,201, 90, 41, /* 0x 3b0 */
219,141, 65, 1,115, 0,114, 0,114, 0,114, 0,131,193, 2,114, /* 0x 3c0 */
0, 65,114, 5,233, 0, 0, 0, 0, 17,201,209,233,115, 1,164, /* 0x 3d0 */
209,233,115, 2,102,165,243,165,141, 65, 1,235, 3,164,164,164, /* 0x 3e0 */
17,192,115, 0,131,232, 3,114, 11,193,224, 8,172,131,240,255, /* 0x 3f0 */
116, 0,137,197, 17,201, 17,201,117, 0, 65, 17,201,115, 0,131, /* 0x 400 */
193, 2,129,253, 0,243,255,255,131,209, 1, 86,141, 52, 47,131, /* 0x 410 */
253,252,119, 19,209,233,115, 1,164,209,233,115, 2,102,165,243, /* 0x 420 */
165, 94,233, 0, 0, 0, 0,131,253,255,117, 5,172,243,170,235, /* 0x 430 */
240,243,164,235,236,233, 0, 0, 0, 0,139, 84, 36, 36, 3, 84, /* 0x 440 */
36, 40, 57,214,116, 1, 72, 43,124, 36, 44,139, 84, 36, 48,137, /* 0x 450 */
58,137, 68, 36, 28, 97,195,185, 84, 69, 88, 76,138, 7, 71, 44, /* 0x 460 */
232, 60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, 4,102, /* 0x 470 */
193,232, 8,134,196,193,192, 16,134,196, 41,248,128,235,232,137, /* 0x 480 */
7,131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176,232,176, /* 0x 490 */
233,242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193,232, 8, /* 0x 4a0 */
134,196,193,192, 16,134,196, 41,248,171,235, 0,235, 0, 90, 88, /* 0x 4b0 */
89,151, 96, 49,219,187, 78, 77, 82, 85,106, 15, 88,138,100, 36, /* 0x 4c0 */
32,106, 15, 91,138,124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, /* 0x 4d0 */
0, 15,183, 47, 43,110, 12, 41,221,117, 0,131,237, 1,115, 0, /* 0x 4e0 */
136, 95,255, 73,136, 7, 71,139, 7,156,102,193,232, 8,193,192, /* 0x 4f0 */
16,134,196,157,115, 0,176, 0, 15,200,115, 0,209,232,115, 0, /* 0x 500 */
254,203, 75, 35, 30,125, 2, 3, 30,137, 4,156,235, 0,141, 20, /* 0x 510 */
24, 15,182,210, 35, 22, 59, 22,114, 2, 43, 22,139, 4,148,254, /* 0x 520 */
203, 75, 35, 30,125, 2, 3, 30,139, 44,156,133,237,117, 0, 80, /* 0x 530 */
139, 70, 4,254,200, 72, 35, 6,125, 2, 3, 6, 49,237,137, 70, /* 0x 540 */
4,135,108,132, 4, 88,137, 44,148,137, 4,156, 41,248,131,233, /* 0x 550 */
4, 3, 70, 16, 1,240,137, 7,131,199, 4,235, 0,235, 0, 80, /* 0x 560 */
176,233,176,232, 80,106, 0, 83,137,230, 94,137,218,178,233,178, /* 0x 570 */
232, 67,106, 0,254,203, 75,117, 0, 15,183, 7,131,199, 1, 60, /* 0x 580 */
128,114, 4, 60,143,118, 0, 41,208, 43, 70, 8,131,232, 2,116, /* 0x 590 */
0,131,232, 1,114, 0,115, 0,122, 0,123, 0,248,235, 0,131, /* 0x 5a0 */
233, 1,127, 0,137,231,185, 4, 1, 0, 0,139, 14,131,193, 5, /* 0x 5b0 */
139, 14,131,193, 4, 49,192,243,171,137,252, 86, 97,151, 81, 80, /* 0x 5c0 */
82,195, 96,139,124, 36, 36,139, 76, 36, 40,139, 84, 36, 44,137, /* 0x 5d0 */
254,235, 0,138, 7,131,199, 1, 60,128,114, 10, 60,143,119, 6, /* 0x 5e0 */
128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23,117, 0, /* 0x 5f0 */
139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1,240,137, /* 0x 600 */
7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0,131,233, /* 0x 610 */
1,127, 0, 97,195, 0, 0, 0, 76, 88, 80, 84, 73, 48, 48, 48, /* 0x 620 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 76, 88, 80, /* 0x 630 */
84, 73, 50, 48, 48, 0, 0, 0, 0, 0, 76, 88, 80, 84, 73, 48, /* 0x 640 */
52, 48, 0, 84, 0, 0, 0, 76, 88, 80, 84, 73, 48, 52, 49, 0, /* 0x 650 */
84, 0, 0, 0, 76, 88, 80, 84, 73, 48, 52, 50, 0, 84, 0, 0, /* 0x 660 */
0, 76, 88, 80, 84, 73, 48, 52, 51, 0, 84, 0, 0, 0, 76, 88, /* 0x 670 */
80, 84, 73, 48, 53, 48, 0, 84, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 680 */
65, 49, 48, 0, 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, /* 0x 690 */
78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, /* 0x 6a0 */
70, 65, 83, 49, 48, 0, 99, 0, 0, 0, 0, 0, 0, 0,101, 0, /* 0x 6b0 */
0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 6c0 */
50, 66, 70, 65, 83, 49, 49, 0,101, 0, 0, 0, 78, 50, 66, 68, /* 0x 6d0 */
69, 67, 49, 48, 0,107, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, /* 0x 6e0 */
48, 0,118, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 78, 50, /* 0x 6f0 */
66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 700 */
83, 50, 48, 0,123, 0, 0, 0, 0, 0, 0, 0,127, 0, 0, 0, /* 0x 710 */
78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 720 */
68, 69, 67, 50, 48, 0,132, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 730 */
51, 48, 0,145, 0, 0, 0, 0, 0, 0, 0,158, 0, 0, 0, 78, /* 0x 740 */
50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, /* 0x 750 */
65, 83, 51, 48, 0,158, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, /* 0x 760 */
0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x 770 */
0, 0,173, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, /* 0x 780 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0,173, 0, 0, 0, /* 0x 790 */
0, 0, 0, 0,191, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, /* 0x 7a0 */
0, 0, 0, 0, 0, 0, 0, 0, 0,221, 0, 0, 0, 78, 50, 66, /* 0x 7b0 */
68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 7c0 */
52, 48, 0,235, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 78, /* 0x 7d0 */
50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, /* 0x 7e0 */
65, 83, 52, 48, 0,248, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, /* 0x 7f0 */
0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, /* 0x 800 */
0, 0, 7, 1, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, /* 0x 810 */
0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0, 7, 1, 0, 0, /* 0x 820 */
78, 50, 66, 83, 77, 65, 53, 48, 0, 7, 1, 0, 0, 78, 50, 66, /* 0x 830 */
70, 65, 83, 53, 48, 0, 9, 1, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 840 */
53, 48, 0, 12, 1, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0, /* 0x 850 */
21, 1, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 78, 50, 66, 68, /* 0x 860 */
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x 870 */
48, 0, 33, 1, 0, 0, 0, 0, 0, 0, 44, 1, 0, 0, 78, 50, /* 0x 880 */
66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, /* 0x 890 */
1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 8a0 */
78, 50, 66, 70, 65, 83, 54, 49, 0, 58, 1, 0, 0, 0, 0, 0, /* 0x 8b0 */
0, 80, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x 8c0 */
0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 80, 1, 0, 0, 78, /* 0x 8d0 */
82, 86, 50, 66, 69, 78, 68, 0, 80, 1, 0, 0, 78, 50, 68, 83, /* 0x 8e0 */
77, 65, 49, 48, 0, 80, 1, 0, 0, 0, 0, 0, 0, 82, 1, 0, /* 0x 8f0 */
0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 900 */
68, 70, 65, 83, 49, 48, 0, 83, 1, 0, 0, 0, 0, 0, 0, 85, /* 0x 910 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 920 */
78, 50, 68, 70, 65, 83, 49, 49, 0, 85, 1, 0, 0, 78, 50, 68, /* 0x 930 */
68, 69, 67, 49, 48, 0, 91, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 940 */
50, 48, 0,102, 1, 0, 0, 0, 0, 0, 0,104, 1, 0, 0, 78, /* 0x 950 */
50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, /* 0x 960 */
65, 83, 50, 48, 0,107, 1, 0, 0, 0, 0, 0, 0,111, 1, 0, /* 0x 970 */
0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 980 */
68, 68, 69, 67, 50, 48, 0,116, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 990 */
65, 51, 48, 0,129, 1, 0, 0, 0, 0, 0, 0,142, 1, 0, 0, /* 0x 9a0 */
78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x 9b0 */
70, 65, 83, 51, 48, 0,142, 1, 0, 0, 0, 0, 0, 0,148, 1, /* 0x 9c0 */
0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, /* 0x 9d0 */
0, 0, 0,157, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 9e0 */
16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0,157, 1, 0, /* 0x 9f0 */
0, 0, 0, 0, 0,173, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, /* 0x a00 */
48, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 78, 50, /* 0x a10 */
68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,225, /* 0x a20 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, /* 0x a30 */
78, 50, 68, 83, 77, 65, 52, 48, 0,239, 1, 0, 0, 0, 0, 0, /* 0x a40 */
0,252, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x a50 */
0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,252, 1, 0, 0, 0, /* 0x a60 */
0, 0, 0, 0, 2, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x a70 */
69, 0, 0, 0, 0, 0, 0, 0, 11, 2, 0, 0, 78, 50, 68, 68, /* 0x a80 */
69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, /* 0x a90 */
49, 0, 11, 2, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0, 11, /* 0x aa0 */
2, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0, 13, 2, 0, 0, /* 0x ab0 */
78, 50, 68, 68, 69, 67, 53, 48, 0, 16, 2, 0, 0, 78, 50, 68, /* 0x ac0 */
83, 77, 65, 54, 48, 0, 25, 2, 0, 0, 0, 0, 0, 0, 37, 2, /* 0x ad0 */
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x ae0 */
50, 68, 70, 65, 83, 54, 48, 0, 37, 2, 0, 0, 0, 0, 0, 0, /* 0x af0 */
48, 2, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, /* 0x b00 */
0, 0, 0, 0, 0, 62, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, /* 0x b10 */
48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 62, /* 0x b20 */
2, 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 78, 50, 68, 68, 69, /* 0x b30 */
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, /* 0x b40 */
0, 84, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 84, 2, /* 0x b50 */
0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 84, 2, 0, 0, 0, /* 0x b60 */
0, 0, 0, 86, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, /* 0x b70 */
4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 87, 2, 0, /* 0x b80 */
0, 0, 0, 0, 0, 89, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x b90 */
48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 89, /* 0x ba0 */
2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 95, 2, 0, 0, /* 0x bb0 */
78, 50, 69, 83, 77, 65, 50, 48, 0,106, 2, 0, 0, 0, 0, 0, /* 0x bc0 */
0,108, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, /* 0x bd0 */
0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0,111, 2, 0, 0, 0, /* 0x be0 */
0, 0, 0,115, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x bf0 */
0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0,120, 2, 0, /* 0x c00 */
0, 78, 50, 69, 83, 77, 65, 51, 48, 0,133, 2, 0, 0, 0, 0, /* 0x c10 */
0, 0,146, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x c20 */
0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0,146, 2, 0, 0, /* 0x c30 */
0, 0, 0, 0,152, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x c40 */
0, 31, 0, 0, 0, 0, 0, 0, 0,161, 2, 0, 0, 78, 50, 69, /* 0x c50 */
68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x c60 */
51, 48, 0,161, 2, 0, 0, 0, 0, 0, 0,177, 2, 0, 0, 78, /* 0x c70 */
50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x c80 */
192, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x c90 */
0, 0, 0, 0, 0,210, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, /* 0x ca0 */
48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0, 0, /* 0x cb0 */
3, 0, 0, 0, 0, 0, 0, 13, 3, 0, 0, 78, 50, 69, 68, 69, /* 0x cc0 */
67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, /* 0x cd0 */
0, 13, 3, 0, 0, 0, 0, 0, 0, 17, 3, 0, 0, 78, 50, 69, /* 0x ce0 */
68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0, 28, 3, /* 0x cf0 */
0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, /* 0x d00 */
50, 69, 68, 85, 77, 77, 49, 0, 28, 3, 0, 0, 78, 50, 69, 83, /* 0x d10 */
77, 65, 53, 48, 0, 28, 3, 0, 0, 78, 50, 69, 70, 65, 83, 53, /* 0x d20 */
48, 0, 30, 3, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 33, /* 0x d30 */
3, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0, 42, 3, 0, 0, /* 0x d40 */
0, 0, 0, 0, 54, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x d50 */
0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0, 54, 3, /* 0x d60 */
0, 0, 0, 0, 0, 0, 65, 3, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x d70 */
54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 78, /* 0x d80 */
50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, /* 0x d90 */
65, 83, 54, 49, 0, 79, 3, 0, 0, 0, 0, 0, 0,101, 3, 0, /* 0x da0 */
0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x db0 */
69, 68, 69, 67, 54, 48, 0,101, 3, 0, 0, 78, 82, 86, 50, 69, /* 0x dc0 */
69, 78, 68, 0,101, 3, 0, 0, 67, 76, 49, 83, 77, 65, 49, 66, /* 0x dd0 */
0,101, 3, 0, 0, 67, 76, 49, 70, 65, 83, 49, 66, 0,103, 3, /* 0x de0 */
0, 0, 67, 76, 49, 71, 69, 84, 49, 66, 0,109, 3, 0, 0, 67, /* 0x df0 */
76, 49, 69, 78, 84, 69, 82, 0,109, 3, 0, 0, 0, 0, 0, 0, /* 0x e00 */
115, 3, 0, 0, 67, 76, 49, 83, 84, 65, 82, 84, 0, 0, 0, 0, /* 0x e10 */
0, 67, 76, 49, 83, 77, 65, 49, 48, 0,115, 3, 0, 0, 0, 0, /* 0x e20 */
0, 0,119, 3, 0, 0, 67, 76, 49, 82, 76, 79, 65, 68, 0, 0, /* 0x e30 */
0, 0, 0, 67, 76, 49, 82, 76, 79, 65, 68, 0,120, 3, 0, 0, /* 0x e40 */
67, 76, 49, 87, 73, 68, 48, 49, 0,128, 3, 0, 0, 67, 76, 49, /* 0x e50 */
87, 73, 68, 48, 50, 0,130, 3, 0, 0, 67, 76, 49, 87, 73, 68, /* 0x e60 */
48, 51, 0,132, 3, 0, 0, 0, 0, 0, 0,134, 3, 0, 0, 67, /* 0x e70 */
76, 49, 87, 73, 68, 49, 48, 0, 12, 0, 0, 0, 67, 76, 49, 87, /* 0x e80 */
73, 68, 48, 52, 0,134, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, /* 0x e90 */
53, 0,136, 3, 0, 0, 0, 0, 0, 0,138, 3, 0, 0, 67, 76, /* 0x ea0 */
49, 87, 73, 68, 49, 48, 0, 7, 0, 0, 0, 67, 76, 49, 87, 73, /* 0x eb0 */
68, 48, 54, 0,138, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 55, /* 0x ec0 */
0,140, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 56, 0,143, 3, /* 0x ed0 */
0, 0, 0, 0, 0, 0,150, 3, 0, 0, 67, 76, 49, 87, 73, 68, /* 0x ee0 */
48, 54, 0, 2, 0, 0, 0, 0, 0, 0, 0,160, 3, 0, 0, 67, /* 0x ef0 */
76, 49, 87, 73, 68, 49, 48, 0, 15, 0, 0, 0, 0, 0, 0, 0, /* 0x f00 */
169, 3, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, 0, 18, 0, 0, /* 0x f10 */
0, 67, 76, 49, 87, 73, 68, 48, 57, 0,169, 3, 0, 0, 67, 76, /* 0x f20 */
49, 87, 73, 68, 49, 48, 0,171, 3, 0, 0, 0, 0, 0, 0,178, /* 0x f30 */
3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 55, 0, 2, 0, 0, 0, /* 0x f40 */
0, 0, 0, 0,182, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 56, /* 0x f50 */
0, 26, 0, 0, 0, 0, 0, 0, 0,188, 3, 0, 0, 67, 76, 49, /* 0x f60 */
84, 79, 80, 48, 55, 0, 2, 0, 0, 0, 67, 76, 49, 83, 84, 65, /* 0x f70 */
82, 84, 0,188, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 48, 0, /* 0x f80 */
193, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 49, 0,196, 3, 0, /* 0x f90 */
0, 0, 0, 0, 0,198, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, /* 0x fa0 */
55, 0, 23, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 50, 0,198, /* 0x fb0 */
3, 0, 0, 0, 0, 0, 0,200, 3, 0, 0, 67, 76, 49, 84, 79, /* 0x fc0 */
80, 48, 55, 0, 22, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 51, /* 0x fd0 */
0,200, 3, 0, 0, 0, 0, 0, 0,202, 3, 0, 0, 67, 76, 49, /* 0x fe0 */
84, 79, 80, 48, 55, 0, 21, 0, 0, 0, 67, 76, 49, 84, 79, 80, /* 0x ff0 */
48, 52, 0,202, 3, 0, 0, 0, 0, 0, 0,204, 3, 0, 0, 67, /* 0x1000 */
76, 49, 84, 79, 80, 48, 55, 0, 20, 0, 0, 0, 67, 76, 49, 84, /* 0x1010 */
79, 80, 48, 53, 0,207, 3, 0, 0, 0, 0, 0, 0,209, 3, 0, /* 0x1020 */
0, 67, 76, 49, 84, 79, 80, 48, 54, 0, 7, 0, 0, 0, 67, 76, /* 0x1030 */
49, 84, 79, 80, 48, 54, 0,210, 3, 0, 0, 0, 0, 0, 0,217, /* 0x1040 */
3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 49, 0, 0, 0, 0, 0, /* 0x1050 */
67, 76, 49, 84, 79, 80, 48, 55, 0,217, 3, 0, 0, 67, 76, 49, /* 0x1060 */
79, 70, 70, 48, 49, 0,240, 3, 0, 0, 67, 76, 49, 79, 70, 70, /* 0x1070 */
48, 50, 0,242, 3, 0, 0, 0, 0, 0, 0,244, 3, 0, 0, 67, /* 0x1080 */
76, 49, 84, 79, 80, 48, 55, 0, 23, 0, 0, 0, 0, 0, 0, 0, /* 0x1090 */
2, 4, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, 0, 51, 0, 0, /* 0x10a0 */
0, 67, 76, 49, 79, 70, 70, 48, 51, 0, 4, 4, 0, 0, 67, 76, /* 0x10b0 */
49, 79, 70, 70, 48, 52, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, /* 0x10c0 */
4, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, 0, 0, 0, 0, 0, /* 0x10d0 */
67, 76, 49, 76, 69, 78, 48, 48, 0, 10, 4, 0, 0, 67, 76, 49, /* 0x10e0 */
76, 69, 78, 48, 49, 0, 11, 4, 0, 0, 67, 76, 49, 76, 69, 78, /* 0x10f0 */
48, 50, 0, 13, 4, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 67, /* 0x1100 */
76, 49, 76, 69, 78, 48, 48, 0, 1, 0, 0, 0, 67, 76, 49, 67, /* 0x1110 */
79, 80, 89, 48, 0, 18, 4, 0, 0, 0, 0, 0, 0, 55, 4, 0, /* 0x1120 */
0, 67, 76, 49, 84, 79, 80, 48, 48, 0, 0, 0, 0, 0, 67, 76, /* 0x1130 */
49, 69, 78, 68, 0, 69, 4, 0, 0, 76, 88, 80, 84, 73, 48, 57, /* 0x1140 */
48, 0, 69, 4, 0, 0, 0, 0, 0, 0, 74, 4, 0, 0, 76, 88, /* 0x1150 */
80, 84, 73, 48, 57, 49, 0, 0, 0, 0, 0, 76, 88, 80, 84, 73, /* 0x1160 */
48, 57, 49, 0, 74, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, /* 0x1170 */
0,103, 4, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0,117, 4, /* 0x1180 */
0, 0, 0, 0, 0, 0,122, 4, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x1190 */
48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, /* 0x11a0 */
122, 4, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0,127, 4, 0, /* 0x11b0 */
0, 67, 84, 66, 83, 72, 82, 48, 49, 0,127, 4, 0, 0, 67, 84, /* 0x11c0 */
66, 82, 79, 82, 48, 49, 0,131, 4, 0, 0, 67, 84, 66, 83, 87, /* 0x11d0 */
65, 48, 49, 0,133, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, /* 0x11e0 */
0,138, 4, 0, 0, 0, 0, 0, 0,152, 4, 0, 0, 67, 65, 76, /* 0x11f0 */
76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x1200 */
49, 48, 0,152, 4, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0, /* 0x1210 */
157, 4, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0,159, 4, 0, /* 0x1220 */
0, 67, 65, 76, 76, 84, 82, 49, 49, 0,161, 4, 0, 0, 0, 0, /* 0x1230 */
0, 0,165, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 5, /* 0x1240 */
0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0,165, 4, 0, 0, /* 0x1250 */
0, 0, 0, 0,170, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, /* 0x1260 */
0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0,170, 4, /* 0x1270 */
0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0,172, 4, 0, 0, 67, /* 0x1280 */
84, 66, 83, 72, 82, 49, 49, 0,172, 4, 0, 0, 67, 84, 66, 82, /* 0x1290 */
79, 82, 49, 49, 0,176, 4, 0, 0, 67, 84, 66, 83, 87, 65, 49, /* 0x12a0 */
49, 0,178, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,183, /* 0x12b0 */
4, 0, 0, 0, 0, 0, 0,188, 4, 0, 0, 67, 65, 76, 76, 84, /* 0x12c0 */
82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, /* 0x12d0 */
0,188, 4, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,188, 4, /* 0x12e0 */
0, 0, 0, 0, 0, 0,190, 4, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x12f0 */
49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0, /* 0x1300 */
190, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,195, 4, 0, /* 0x1310 */
0, 76, 88, 77, 82, 85, 48, 48, 53, 0,197, 4, 0, 0, 76, 88, /* 0x1320 */
77, 82, 85, 48, 48, 54, 0,202, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x1330 */
48, 48, 55, 0,209, 4, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, /* 0x1340 */
0,216, 4, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,220, 4, /* 0x1350 */
0, 0, 0, 0, 0, 0,225, 4, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1360 */
52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, /* 0x1370 */
225, 4, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,228, 4, 0, /* 0x1380 */
0, 76, 88, 77, 82, 85, 48, 52, 54, 0,231, 4, 0, 0, 76, 88, /* 0x1390 */
74, 67, 67, 48, 50, 48, 0,233, 4, 0, 0, 0, 0, 0, 0,235, /* 0x13a0 */
4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x13b0 */
76, 88, 74, 67, 67, 48, 50, 49, 0,235, 4, 0, 0, 0, 0, 0, /* 0x13c0 */
0,240, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, /* 0x13d0 */
0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,240, 4, 0, 0, 76, /* 0x13e0 */
88, 85, 78, 70, 48, 51, 55, 0,247, 4, 0, 0, 76, 88, 85, 78, /* 0x13f0 */
70, 51, 56, 54, 0,249, 4, 0, 0, 76, 88, 85, 78, 70, 51, 56, /* 0x1400 */
55, 0,250, 4, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0, 3, /* 0x1410 */
5, 0, 0, 0, 0, 0, 0, 6, 5, 0, 0, 76, 88, 85, 78, 70, /* 0x1420 */
48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, /* 0x1430 */
0, 6, 5, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0, 10, 5, /* 0x1440 */
0, 0, 0, 0, 0, 0, 12, 5, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1450 */
52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0, /* 0x1460 */
12, 5, 0, 0, 0, 0, 0, 0, 16, 5, 0, 0, 76, 88, 77, 82, /* 0x1470 */
85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x1480 */
51, 0, 16, 5, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0, 18, /* 0x1490 */
5, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0, 19, 5, 0, 0, /* 0x14a0 */
77, 82, 85, 65, 82, 66, 52, 48, 0, 21, 5, 0, 0, 76, 88, 77, /* 0x14b0 */
82, 85, 48, 55, 48, 0, 25, 5, 0, 0, 0, 0, 0, 0, 30, 5, /* 0x14c0 */
0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, /* 0x14d0 */
82, 85, 66, 89, 84, 69, 52, 0, 33, 5, 0, 0, 77, 82, 85, 66, /* 0x14e0 */
73, 84, 83, 52, 0, 36, 5, 0, 0, 77, 82, 85, 65, 82, 66, 53, /* 0x14f0 */
48, 0, 38, 5, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0, 44, /* 0x1500 */
5, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0, 47, 5, 0, 0, /* 0x1510 */
77, 82, 85, 65, 82, 66, 54, 48, 0, 49, 5, 0, 0, 77, 82, 85, /* 0x1520 */
66, 73, 84, 83, 53, 0, 50, 5, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x1530 */
55, 48, 0, 52, 5, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, /* 0x1540 */
56, 5, 0, 0, 0, 0, 0, 0, 63, 5, 0, 0, 76, 88, 77, 82, /* 0x1550 */
85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x1560 */
54, 0, 67, 5, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 69, /* 0x1570 */
5, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 70, 5, 0, 0, /* 0x1580 */
77, 82, 85, 65, 82, 66, 57, 48, 0, 72, 5, 0, 0, 76, 88, 77, /* 0x1590 */
82, 85, 49, 48, 48, 0, 76, 5, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x15a0 */
52, 48, 0, 92, 5, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, /* 0x15b0 */
97, 5, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0,100, 5, 0, /* 0x15c0 */
0, 76, 88, 85, 78, 70, 48, 52, 49, 0,102, 5, 0, 0, 0, 0, /* 0x15d0 */
0, 0,109, 5, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, /* 0x15e0 */
0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0,109, 5, 0, 0, /* 0x15f0 */
76, 69, 88, 69, 67, 48, 49, 54, 0,109, 5, 0, 0, 0, 0, 0, /* 0x1600 */
0,111, 5, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, /* 0x1610 */
0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0,111, 5, 0, 0, 76, /* 0x1620 */
88, 74, 77, 80, 65, 48, 48, 0,112, 5, 0, 0, 76, 88, 67, 65, /* 0x1630 */
76, 76, 66, 48, 0,114, 5, 0, 0, 76, 88, 85, 78, 70, 48, 50, /* 0x1640 */
49, 0,116, 5, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0,122, /* 0x1650 */
5, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0,125, 5, 0, 0, /* 0x1660 */
76, 88, 67, 65, 76, 76, 66, 49, 0,127, 5, 0, 0, 77, 82, 85, /* 0x1670 */
66, 73, 84, 83, 49, 0,129, 5, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x1680 */
51, 48, 0,130, 5, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, /* 0x1690 */
132, 5, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0,134, 5, 0, /* 0x16a0 */
0, 76, 88, 77, 82, 85, 48, 52, 48, 0,135, 5, 0, 0, 0, 0, /* 0x16b0 */
0, 0,137, 5, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, /* 0x16c0 */
0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0,137, 5, 0, 0, /* 0x16d0 */
76, 88, 74, 67, 67, 48, 48, 48, 0,143, 5, 0, 0, 0, 0, 0, /* 0x16e0 */
0,151, 5, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, /* 0x16f0 */
0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,151, 5, 0, 0, 76, /* 0x1700 */
88, 67, 74, 49, 77, 82, 85, 0,153, 5, 0, 0, 76, 88, 67, 65, /* 0x1710 */
76, 74, 77, 80, 0,156, 5, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x1720 */
48, 0,159, 5, 0, 0, 0, 0, 0, 0,161, 5, 0, 0, 76, 88, /* 0x1730 */
85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, /* 0x1740 */
76, 48, 49, 0,161, 5, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, /* 0x1750 */
0,164, 5, 0, 0, 0, 0, 0, 0,166, 5, 0, 0, 76, 88, 85, /* 0x1760 */
78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, /* 0x1770 */
82, 85, 0,166, 5, 0, 0, 0, 0, 0, 0,168, 5, 0, 0, 76, /* 0x1780 */
88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x1790 */
54, 77, 82, 85, 0,168, 5, 0, 0, 0, 0, 0, 0,170, 5, 0, /* 0x17a0 */
0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x17b0 */
67, 74, 55, 77, 82, 85, 0,170, 5, 0, 0, 0, 0, 0, 0,172, /* 0x17c0 */
5, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, /* 0x17d0 */
76, 88, 67, 74, 56, 77, 82, 85, 0,172, 5, 0, 0, 0, 0, 0, /* 0x17e0 */
0,175, 5, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, /* 0x17f0 */
0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,175, 5, 0, 0, 0, /* 0x1800 */
0, 0, 0,180, 5, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, /* 0x1810 */
0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,180, 5, 0, /* 0x1820 */
0, 77, 82, 85, 66, 89, 84, 69, 50, 0,182, 5, 0, 0, 77, 82, /* 0x1830 */
85, 66, 73, 84, 83, 50, 0,187, 5, 0, 0, 77, 82, 85, 65, 82, /* 0x1840 */
66, 50, 48, 0,192, 5, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, /* 0x1850 */
0,197, 5, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,203, 5, /* 0x1860 */
0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,204, 5, 0, 0, 76, /* 0x1870 */
88, 80, 84, 73, 49, 52, 48, 0,210, 5, 0, 0, 76, 88, 80, 84, /* 0x1880 */
73, 49, 52, 49, 0,210, 5, 0, 0, 76, 88, 80, 84, 73, 49, 53, /* 0x1890 */
48, 0,210, 5, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0,223, /* 0x18a0 */
5, 0, 0, 0, 0, 0, 0,227, 5, 0, 0, 67, 75, 76, 76, 84, /* 0x18b0 */
82, 50, 48, 0, 30, 0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, /* 0x18c0 */
0,232, 5, 0, 0, 0, 0, 0, 0,246, 5, 0, 0, 67, 75, 76, /* 0x18d0 */
76, 84, 82, 50, 48, 0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x18e0 */
50, 48, 0,246, 5, 0, 0, 0, 0, 0, 0,252, 5, 0, 0, 67, /* 0x18f0 */
75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1900 */
0, 6, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, /* 0x1910 */
0, 67, 75, 76, 76, 84, 82, 51, 48, 0, 23, 6, 0, 0, 0, 0, /* 0x1920 */
0, 0, 30, 6, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, /* 0x1930 */
0, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 30, 6, 0, 0, /* 0x1940 */
0, 0, 0, 0, 35, 6, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, /* 0x1950 */
0, 4, 0, 0, 0, 76, 88, 80, 84, 73, 49, 54, 48, 0, 35, 6, /* 0x1960 */
0, 0, 76, 88, 80, 84, 73, 50, 48, 48, 0, 37, 6, 0, 0, 88, /* 0x1970 */
84, 72, 69, 69, 78, 68, 88, 0, 37, 6, 0, 0,255,255,255,255, /* 0x1980 */
37, 6 /* 0x1990 */
unsigned char linux_i386pti_loader[6542] = {
232, 28, 0, 0, 0,131,248, 70,185,209, 5, 0, 0,116, 15,131, /* 0x 0 */
248, 73,185,209, 5, 0, 0,116, 5,185, 32, 0, 0, 0,137,200, /* 0x 10 */
195,232, 0, 0, 0, 0,131,248, 2,185, 83, 0, 0, 0,116,238, /* 0x 20 */
131,248, 5,185, 83, 0, 0, 0,116,228,131,248, 8,185, 83, 0, /* 0x 30 */
0, 0,116,218,131,248, 11,185, 83, 0, 0, 0,116,208,233,198, /* 0x 40 */
255,255,255, 96,131,205,255,139,116, 36, 36,139,124, 36, 44,235, /* 0x 50 */
0,164,235, 0,138, 6, 70,136, 7, 71, 1,219,117, 7,139, 30, /* 0x 60 */
131,238,252, 17,219,114, 0, 49,192, 64,138, 7,114, 0,184, 1, /* 0x 70 */
0, 0, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192, /* 0x 80 */
1,219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, /* 0x 90 */
0,117, 9,139, 30,131,238,252, 17,219,115, 0, 49,201,131,232, /* 0x a0 */
3,114, 13,193,224, 8,138, 6, 70,131,240,255,116, 0,137,197, /* 0x b0 */
1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219,117, /* 0x c0 */
7,139, 30,131,238,252, 17,219, 17,201,117, 0, 65, 1,219,117, /* 0x d0 */
7,139, 30,131,238,252, 17,219, 17,201, 1,219,117, 7,139, 30, /* 0x e0 */
131,238,252, 17,219,115, 0, 1,219,115, 0,117, 9,139, 30,131, /* 0x f0 */
238,252, 17,219,115, 0, 65, 65,131,193, 2,129,253, 0,243,255, /* 0x 100 */
255,131,209, 1, 86,141, 52, 47,243,164, 94,233, 0, 0, 0, 0, /* 0x 110 */
141, 20, 47,131,253,252,138, 4, 15,118, 0,138, 2, 66,136, 7, /* 0x 120 */
71, 73,117,247,233, 0, 0, 0, 0,139, 2,131,194, 4,137, 7, /* 0x 130 */
131,199, 4,131,233, 4,119,241, 1,207,233, 0, 0, 0, 0,235, /* 0x 140 */
0,164,235, 0,138, 6, 70,136, 7, 71, 1,219,117, 7,139, 30, /* 0x 150 */
131,238,252, 17,219,114, 0, 49,192, 64,138, 7,114, 0,184, 1, /* 0x 160 */
0, 0, 0, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192, /* 0x 170 */
1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, 1,219,115, /* 0x 180 */
11,117, 0,139, 30,131,238,252, 17,219,114, 0, 72, 1,219,117, /* 0x 190 */
7,139, 30,131,238,252, 17,219, 17,192,235, 0, 49,201,131,232, /* 0x 1a0 */
3,114, 17,193,224, 8,138, 6, 70,131,240,255,116, 0,209,248, /* 0x 1b0 */
137,197,235, 11, 1,219,117, 7,139, 30,131,238,252, 17,219, 17, /* 0x 1c0 */
201, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,117, 0, /* 0x 1d0 */
65, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1,219, /* 0x 1e0 */
117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0,117, /* 0x 1f0 */
9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2,129, /* 0x 200 */
253, 0,251,255,255,131,209, 1, 86,141, 52, 47,243,164, 94,233, /* 0x 210 */
0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0,138, /* 0x 220 */
2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2,131, /* 0x 230 */
194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, 0, /* 0x 240 */
0, 0, 0,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 250 */
117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 260 */
114, 0,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131,238,252, /* 0x 270 */
17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17,219,114, /* 0x 280 */
0, 1,219,115, 11,117, 0,139, 30,131,238,252, 17,219,114, 0, /* 0x 290 */
72, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,192,235, 0, /* 0x 2a0 */
1,219,117, 7,139, 30,131,238,252, 17,219, 17,201,235, 0, 49, /* 0x 2b0 */
201,131,232, 3,114, 17,193,224, 8,138, 6, 70,131,240,255,116, /* 0x 2c0 */
0,209,248,137,197,235, 11, 1,219,117, 7,139, 30,131,238,252, /* 0x 2d0 */
17,219,114,204, 65, 1,219,117, 7,139, 30,131,238,252, 17,219, /* 0x 2e0 */
114,190, 1,219,117, 7,139, 30,131,238,252, 17,219, 17,201, 1, /* 0x 2f0 */
219,117, 7,139, 30,131,238,252, 17,219,115, 0, 1,219,115, 0, /* 0x 300 */
117, 9,139, 30,131,238,252, 17,219,115, 0, 65, 65,131,193, 2, /* 0x 310 */
129,253, 0,251,255,255,131,209, 2, 86,141, 52, 47,243,164, 94, /* 0x 320 */
233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15,118, 0, /* 0x 330 */
138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0,139, 2, /* 0x 340 */
131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1,207,233, /* 0x 350 */
0, 0, 0, 0,255,210, 1,219,117, 2,255,210,144,232, 0, 0, /* 0x 360 */
0, 0, 1,219,116, 0,195,139, 30,131,238,252, 17,219,195, 41, /* 0x 370 */
201, 17,201,114, 0, 17,201,114, 0, 17,201, 17,192, 72, 17,192, /* 0x 380 */
131,233, 1,115, 0,141, 72, 15, 61,240,255, 0, 0,114, 0,141, /* 0x 390 */
4, 14, 80,233, 0, 0, 0, 0, 17,201, 17,201,131,193, 13,235, /* 0x 3a0 */
0,133,201,116, 0, 65,131,193, 8,235, 0, 41,201, 90, 41,219, /* 0x 3b0 */
141, 65, 1,115, 0,114, 0,114, 0,114, 0,131,193, 2,114, 0, /* 0x 3c0 */
65,114, 5,233, 0, 0, 0, 0, 17,201,209,233,115, 1,164,209, /* 0x 3d0 */
233,115, 2,102,165,243,165,141, 65, 1,235, 3,164,164,164, 17, /* 0x 3e0 */
192,115, 0,131,232, 3,114, 11,193,224, 8,172,131,240,255,116, /* 0x 3f0 */
0,137,197, 17,201, 17,201,117, 0, 65, 17,201,115, 0,131,193, /* 0x 400 */
2,129,253, 0,243,255,255,131,209, 1, 86,141, 52, 47,131,253, /* 0x 410 */
252,119, 19,209,233,115, 1,164,209,233,115, 2,102,165,243,165, /* 0x 420 */
94,233, 0, 0, 0, 0,131,253,255,117, 5,172,243,170,235,240, /* 0x 430 */
243,164,235,236,233, 0, 0, 0, 0,139, 84, 36, 36, 3, 84, 36, /* 0x 440 */
40, 57,214,116, 1, 72, 43,124, 36, 44,139, 84, 36, 48,137, 58, /* 0x 450 */
137, 68, 36, 28, 97,195,185, 84, 69, 88, 76,138, 7, 71, 44,232, /* 0x 460 */
60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, 4,102,193, /* 0x 470 */
232, 8,134,196,193,192, 16,134,196, 41,248,128,235,232,137, 7, /* 0x 480 */
131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176,232,176,233, /* 0x 490 */
242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193,232, 8,134, /* 0x 4a0 */
196,193,192, 16,134,196, 41,248,171,235, 0,235, 0, 90, 88, 89, /* 0x 4b0 */
151, 96, 49,219,187, 78, 77, 82, 85,106, 15, 88,138,100, 36, 32, /* 0x 4c0 */
106, 15, 91,138,124, 36, 32,138, 84, 36, 32,233, 0, 0, 0, 0, /* 0x 4d0 */
15,183, 47, 43,110, 12, 41,221,117, 0,131,237, 1,115, 0,136, /* 0x 4e0 */
95,255, 73,136, 7, 71,139, 7,156,102,193,232, 8,193,192, 16, /* 0x 4f0 */
134,196,157,115, 0,176, 0, 15,200,115, 0,209,232,115, 0,254, /* 0x 500 */
203, 75, 35, 30,125, 2, 3, 30,137, 4,156,235, 0,141, 20, 24, /* 0x 510 */
15,182,210, 35, 22, 59, 22,114, 2, 43, 22,139, 4,148,254,203, /* 0x 520 */
75, 35, 30,125, 2, 3, 30,139, 44,156,133,237,117, 0, 80,139, /* 0x 530 */
70, 4,254,200, 72, 35, 6,125, 2, 3, 6, 49,237,137, 70, 4, /* 0x 540 */
135,108,132, 4, 88,137, 44,148,137, 4,156, 41,248,131,233, 4, /* 0x 550 */
3, 70, 16, 1,240,137, 7,131,199, 4,235, 0,235, 0, 80,176, /* 0x 560 */
233,176,232, 80,106, 0, 83,137,230, 94,137,218,178,233,178,232, /* 0x 570 */
67,106, 0,254,203, 75,117, 0, 15,183, 7,131,199, 1, 60,128, /* 0x 580 */
114, 4, 60,143,118, 0, 41,208, 43, 70, 8,131,232, 2,116, 0, /* 0x 590 */
131,232, 1,114, 0,115, 0,122, 0,123, 0,248,235, 0,131,233, /* 0x 5a0 */
1,127, 0,137,231,185, 4, 1, 0, 0,139, 14,131,193, 5,139, /* 0x 5b0 */
14,131,193, 4, 49,192,243,171,137,252, 86, 97,151, 81, 80, 82, /* 0x 5c0 */
195, 96,139,124, 36, 36,139, 76, 36, 40,139, 84, 36, 44,137,254, /* 0x 5d0 */
235, 0,138, 7,131,199, 1, 60,128,114, 10, 60,143,119, 6,128, /* 0x 5e0 */
127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23,117, 0,139, /* 0x 5f0 */
7,102,193,232, 8,193,192, 16,134,196, 41,248, 1,240,137, 7, /* 0x 600 */
131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0,131,233, 1, /* 0x 610 */
127, 0, 97,195, 76, 88, 80, 84, 73, 48, 48, 48, 0, 0, 0, 0, /* 0x 620 */
0, 0, 0, 0, 0, 38, 0, 0, 0, 76, 88, 80, 84, 73, 50, 48, /* 0x 630 */
48, 0, 0, 0, 0, 0, 76, 88, 80, 84, 73, 48, 52, 48, 0, 83, /* 0x 640 */
0, 0, 0, 76, 88, 80, 84, 73, 48, 52, 49, 0, 83, 0, 0, 0, /* 0x 650 */
76, 88, 80, 84, 73, 48, 52, 50, 0, 83, 0, 0, 0, 76, 88, 80, /* 0x 660 */
84, 73, 48, 52, 51, 0, 83, 0, 0, 0, 76, 88, 80, 84, 73, 48, /* 0x 670 */
53, 48, 0, 83, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, /* 0x 680 */
95, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 78, 50, 66, 68, /* 0x 690 */
69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, /* 0x 6a0 */
48, 0, 98, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 78, 50, /* 0x 6b0 */
66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 6c0 */
83, 49, 49, 0,100, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, /* 0x 6d0 */
0,106, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0,117, 0, /* 0x 6e0 */
0, 0, 0, 0, 0, 0,119, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 6f0 */
49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, 0, /* 0x 700 */
122, 0, 0, 0, 0, 0, 0, 0,126, 0, 0, 0, 78, 50, 66, 70, /* 0x 710 */
65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, /* 0x 720 */
48, 0,131, 0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0,144, /* 0x 730 */
0, 0, 0, 0, 0, 0, 0,157, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 740 */
67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, 48, /* 0x 750 */
0,157, 0, 0, 0, 0, 0, 0, 0,161, 0, 0, 0, 78, 50, 66, /* 0x 760 */
68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,172, 0, /* 0x 770 */
0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, /* 0x 780 */
50, 66, 68, 69, 67, 51, 48, 0,172, 0, 0, 0, 0, 0, 0, 0, /* 0x 790 */
190, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, 0, /* 0x 7a0 */
0, 0, 0, 0, 0,220, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, /* 0x 7b0 */
48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0,234, /* 0x 7c0 */
0, 0, 0, 0, 0, 0, 0,247, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 7d0 */
67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, 48, /* 0x 7e0 */
0,247, 0, 0, 0, 0, 0, 0, 0,251, 0, 0, 0, 78, 50, 66, /* 0x 7f0 */
68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 6, 1, /* 0x 800 */
0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, /* 0x 810 */
50, 66, 68, 85, 77, 77, 49, 0, 6, 1, 0, 0, 78, 50, 66, 83, /* 0x 820 */
77, 65, 53, 48, 0, 6, 1, 0, 0, 78, 50, 66, 70, 65, 83, 53, /* 0x 830 */
48, 0, 8, 1, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 11, /* 0x 840 */
1, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0, 20, 1, 0, 0, /* 0x 850 */
0, 0, 0, 0, 32, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, /* 0x 860 */
0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0, 32, 1, /* 0x 870 */
0, 0, 0, 0, 0, 0, 43, 1, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 880 */
54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 1, 0, 0, 78, /* 0x 890 */
50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, /* 0x 8a0 */
65, 83, 54, 49, 0, 57, 1, 0, 0, 0, 0, 0, 0, 79, 1, 0, /* 0x 8b0 */
0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x 8c0 */
66, 68, 69, 67, 54, 48, 0, 79, 1, 0, 0, 78, 82, 86, 50, 66, /* 0x 8d0 */
69, 78, 68, 0, 79, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, /* 0x 8e0 */
0, 79, 1, 0, 0, 0, 0, 0, 0, 81, 1, 0, 0, 78, 50, 68, /* 0x 8f0 */
68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 900 */
49, 48, 0, 82, 1, 0, 0, 0, 0, 0, 0, 84, 1, 0, 0, 78, /* 0x 910 */
50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, /* 0x 920 */
65, 83, 49, 49, 0, 84, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, /* 0x 930 */
48, 0, 90, 1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0,101, /* 0x 940 */
1, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 950 */
65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, 48, /* 0x 960 */
0,106, 1, 0, 0, 0, 0, 0, 0,110, 1, 0, 0, 78, 50, 68, /* 0x 970 */
70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 980 */
50, 48, 0,115, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, 0, /* 0x 990 */
128, 1, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 78, 50, 68, 68, /* 0x 9a0 */
69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, 51, /* 0x 9b0 */
48, 0,141, 1, 0, 0, 0, 0, 0, 0,147, 1, 0, 0, 78, 50, /* 0x 9c0 */
68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0,156, /* 0x 9d0 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, /* 0x 9e0 */
78, 50, 68, 68, 69, 67, 51, 48, 0,156, 1, 0, 0, 0, 0, 0, /* 0x 9f0 */
0,172, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, 0, /* 0x a00 */
0, 0, 0, 0, 0, 0,190, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x a10 */
54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 78, /* 0x a20 */
50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, 83, /* 0x a30 */
77, 65, 52, 48, 0,238, 1, 0, 0, 0, 0, 0, 0,251, 1, 0, /* 0x a40 */
0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, /* 0x a50 */
68, 70, 65, 83, 52, 48, 0,251, 1, 0, 0, 0, 0, 0, 0,255, /* 0x a60 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, /* 0x a70 */
0, 0, 0, 0, 10, 2, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x a80 */
0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0, 10, 2, /* 0x a90 */
0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0, 10, 2, 0, 0, 78, /* 0x aa0 */
50, 68, 70, 65, 83, 53, 48, 0, 12, 2, 0, 0, 78, 50, 68, 68, /* 0x ab0 */
69, 67, 53, 48, 0, 15, 2, 0, 0, 78, 50, 68, 83, 77, 65, 54, /* 0x ac0 */
48, 0, 24, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 78, 50, /* 0x ad0 */
68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x ae0 */
83, 54, 48, 0, 36, 2, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, /* 0x af0 */
78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x b00 */
0, 61, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x b10 */
0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 61, 2, 0, 0, 0, /* 0x b20 */
0, 0, 0, 83, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, /* 0x b30 */
0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 83, 2, 0, /* 0x b40 */
0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 83, 2, 0, 0, 78, 50, /* 0x b50 */
69, 83, 77, 65, 49, 48, 0, 83, 2, 0, 0, 0, 0, 0, 0, 85, /* 0x b60 */
2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x b70 */
78, 50, 69, 70, 65, 83, 49, 48, 0, 86, 2, 0, 0, 0, 0, 0, /* 0x b80 */
0, 88, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, /* 0x b90 */
0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 88, 2, 0, 0, 78, /* 0x ba0 */
50, 69, 68, 69, 67, 49, 48, 0, 94, 2, 0, 0, 78, 50, 69, 83, /* 0x bb0 */
77, 65, 50, 48, 0,105, 2, 0, 0, 0, 0, 0, 0,107, 2, 0, /* 0x bc0 */
0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, /* 0x bd0 */
69, 70, 65, 83, 50, 48, 0,110, 2, 0, 0, 0, 0, 0, 0,114, /* 0x be0 */
2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, /* 0x bf0 */
78, 50, 69, 68, 69, 67, 50, 48, 0,119, 2, 0, 0, 78, 50, 69, /* 0x c00 */
83, 77, 65, 51, 48, 0,132, 2, 0, 0, 0, 0, 0, 0,145, 2, /* 0x c10 */
0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, /* 0x c20 */
50, 69, 70, 65, 83, 51, 48, 0,145, 2, 0, 0, 0, 0, 0, 0, /* 0x c30 */
151, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, /* 0x c40 */
0, 0, 0, 0, 0,160, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, /* 0x c50 */
48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0,160, /* 0x c60 */
2, 0, 0, 0, 0, 0, 0,176, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x c70 */
67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, /* 0x c80 */
78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x c90 */
0,209, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, 0, /* 0x ca0 */
0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,255, 2, 0, 0, 0, /* 0x cb0 */
0, 0, 0, 12, 3, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x cc0 */
82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, 0, 12, 3, 0, /* 0x cd0 */
0, 0, 0, 0, 0, 16, 3, 0, 0, 78, 50, 69, 68, 69, 67, 51, /* 0x ce0 */
48, 0, 82, 0, 0, 0, 0, 0, 0, 0, 27, 3, 0, 0, 78, 50, /* 0x cf0 */
69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, 85, /* 0x d00 */
77, 77, 49, 0, 27, 3, 0, 0, 78, 50, 69, 83, 77, 65, 53, 48, /* 0x d10 */
0, 27, 3, 0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0, 29, 3, /* 0x d20 */
0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 32, 3, 0, 0, 78, /* 0x d30 */
50, 69, 83, 77, 65, 54, 48, 0, 41, 3, 0, 0, 0, 0, 0, 0, /* 0x d40 */
53, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x d50 */
0, 78, 50, 69, 70, 65, 83, 54, 48, 0, 53, 3, 0, 0, 0, 0, /* 0x d60 */
0, 0, 64, 3, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 0, /* 0x d70 */
0, 0, 0, 0, 0, 0, 0, 78, 3, 0, 0, 78, 50, 69, 68, 69, /* 0x d80 */
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, /* 0x d90 */
0, 78, 3, 0, 0, 0, 0, 0, 0,100, 3, 0, 0, 78, 50, 69, /* 0x da0 */
68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x db0 */
54, 48, 0,100, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, 0, /* 0x dc0 */
100, 3, 0, 0, 67, 76, 49, 83, 77, 65, 49, 66, 0,100, 3, 0, /* 0x dd0 */
0, 67, 76, 49, 70, 65, 83, 49, 66, 0,102, 3, 0, 0, 67, 76, /* 0x de0 */
49, 71, 69, 84, 49, 66, 0,108, 3, 0, 0, 67, 76, 49, 69, 78, /* 0x df0 */
84, 69, 82, 0,108, 3, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, /* 0x e00 */
67, 76, 49, 83, 84, 65, 82, 84, 0, 0, 0, 0, 0, 67, 76, 49, /* 0x e10 */
83, 77, 65, 49, 48, 0,114, 3, 0, 0, 0, 0, 0, 0,118, 3, /* 0x e20 */
0, 0, 67, 76, 49, 82, 76, 79, 65, 68, 0, 0, 0, 0, 0, 67, /* 0x e30 */
76, 49, 82, 76, 79, 65, 68, 0,119, 3, 0, 0, 67, 76, 49, 87, /* 0x e40 */
73, 68, 48, 49, 0,127, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, /* 0x e50 */
50, 0,129, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 51, 0,131, /* 0x e60 */
3, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 67, 76, 49, 87, 73, /* 0x e70 */
68, 49, 48, 0, 12, 0, 0, 0, 67, 76, 49, 87, 73, 68, 48, 52, /* 0x e80 */
0,133, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 53, 0,135, 3, /* 0x e90 */
0, 0, 0, 0, 0, 0,137, 3, 0, 0, 67, 76, 49, 87, 73, 68, /* 0x ea0 */
49, 48, 0, 7, 0, 0, 0, 67, 76, 49, 87, 73, 68, 48, 54, 0, /* 0x eb0 */
137, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 55, 0,139, 3, 0, /* 0x ec0 */
0, 67, 76, 49, 87, 73, 68, 48, 56, 0,142, 3, 0, 0, 0, 0, /* 0x ed0 */
0, 0,149, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 54, 0, 2, /* 0x ee0 */
0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 67, 76, 49, 87, 73, /* 0x ef0 */
68, 49, 48, 0, 15, 0, 0, 0, 0, 0, 0, 0,168, 3, 0, 0, /* 0x f00 */
67, 76, 49, 67, 79, 80, 89, 48, 0, 18, 0, 0, 0, 67, 76, 49, /* 0x f10 */
87, 73, 68, 48, 57, 0,168, 3, 0, 0, 67, 76, 49, 87, 73, 68, /* 0x f20 */
49, 48, 0,170, 3, 0, 0, 0, 0, 0, 0,177, 3, 0, 0, 67, /* 0x f30 */
76, 49, 84, 79, 80, 48, 55, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x f40 */
181, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 56, 0, 26, 0, 0, /* 0x f50 */
0, 0, 0, 0, 0,187, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, /* 0x f60 */
55, 0, 2, 0, 0, 0, 67, 76, 49, 83, 84, 65, 82, 84, 0,187, /* 0x f70 */
3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 48, 0,192, 3, 0, 0, /* 0x f80 */
67, 76, 49, 84, 79, 80, 48, 49, 0,195, 3, 0, 0, 0, 0, 0, /* 0x f90 */
0,197, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 55, 0, 23, 0, /* 0x fa0 */
0, 0, 67, 76, 49, 84, 79, 80, 48, 50, 0,197, 3, 0, 0, 0, /* 0x fb0 */
0, 0, 0,199, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 55, 0, /* 0x fc0 */
22, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 51, 0,199, 3, 0, /* 0x fd0 */
0, 0, 0, 0, 0,201, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, /* 0x fe0 */
55, 0, 21, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 52, 0,201, /* 0x ff0 */
3, 0, 0, 0, 0, 0, 0,203, 3, 0, 0, 67, 76, 49, 84, 79, /* 0x1000 */
80, 48, 55, 0, 20, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 53, /* 0x1010 */
0,206, 3, 0, 0, 0, 0, 0, 0,208, 3, 0, 0, 67, 76, 49, /* 0x1020 */
84, 79, 80, 48, 54, 0, 7, 0, 0, 0, 67, 76, 49, 84, 79, 80, /* 0x1030 */
48, 54, 0,209, 3, 0, 0, 0, 0, 0, 0,216, 3, 0, 0, 67, /* 0x1040 */
76, 49, 87, 73, 68, 48, 49, 0, 0, 0, 0, 0, 67, 76, 49, 84, /* 0x1050 */
79, 80, 48, 55, 0,216, 3, 0, 0, 67, 76, 49, 79, 70, 70, 48, /* 0x1060 */
49, 0,239, 3, 0, 0, 67, 76, 49, 79, 70, 70, 48, 50, 0,241, /* 0x1070 */
3, 0, 0, 0, 0, 0, 0,243, 3, 0, 0, 67, 76, 49, 84, 79, /* 0x1080 */
80, 48, 55, 0, 23, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, /* 0x1090 */
67, 76, 49, 67, 79, 80, 89, 48, 0, 51, 0, 0, 0, 67, 76, 49, /* 0x10a0 */
79, 70, 70, 48, 51, 0, 3, 4, 0, 0, 67, 76, 49, 79, 70, 70, /* 0x10b0 */
48, 52, 0, 5, 4, 0, 0, 0, 0, 0, 0, 9, 4, 0, 0, 67, /* 0x10c0 */
76, 49, 67, 79, 80, 89, 48, 0, 0, 0, 0, 0, 67, 76, 49, 76, /* 0x10d0 */
69, 78, 48, 48, 0, 9, 4, 0, 0, 67, 76, 49, 76, 69, 78, 48, /* 0x10e0 */
49, 0, 10, 4, 0, 0, 67, 76, 49, 76, 69, 78, 48, 50, 0, 12, /* 0x10f0 */
4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 67, 76, 49, 76, 69, /* 0x1100 */
78, 48, 48, 0, 1, 0, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, /* 0x1110 */
0, 17, 4, 0, 0, 0, 0, 0, 0, 54, 4, 0, 0, 67, 76, 49, /* 0x1120 */
84, 79, 80, 48, 48, 0, 0, 0, 0, 0, 67, 76, 49, 69, 78, 68, /* 0x1130 */
0, 68, 4, 0, 0, 76, 88, 80, 84, 73, 48, 57, 48, 0, 68, 4, /* 0x1140 */
0, 0, 0, 0, 0, 0, 73, 4, 0, 0, 76, 88, 80, 84, 73, 48, /* 0x1150 */
57, 49, 0, 0, 0, 0, 0, 76, 88, 80, 84, 73, 48, 57, 49, 0, /* 0x1160 */
73, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0,102, 4, 0, /* 0x1170 */
0, 67, 84, 67, 76, 69, 86, 69, 49, 0,116, 4, 0, 0, 0, 0, /* 0x1180 */
0, 0,121, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 5, /* 0x1190 */
0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0,121, 4, 0, 0, /* 0x11a0 */
67, 84, 68, 85, 77, 77, 89, 49, 0,126, 4, 0, 0, 67, 84, 66, /* 0x11b0 */
83, 72, 82, 48, 49, 0,126, 4, 0, 0, 67, 84, 66, 82, 79, 82, /* 0x11c0 */
48, 49, 0,130, 4, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, 0, /* 0x11d0 */
132, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, 0,137, 4, 0, /* 0x11e0 */
0, 0, 0, 0, 0,151, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x11f0 */
48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0,151, /* 0x1200 */
4, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0,156, 4, 0, 0, /* 0x1210 */
67, 65, 76, 76, 84, 82, 69, 57, 0,158, 4, 0, 0, 67, 65, 76, /* 0x1220 */
76, 84, 82, 49, 49, 0,160, 4, 0, 0, 0, 0, 0, 0,164, 4, /* 0x1230 */
0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 5, 0, 0, 0, 67, /* 0x1240 */
84, 67, 76, 69, 86, 69, 50, 0,164, 4, 0, 0, 0, 0, 0, 0, /* 0x1250 */
169, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, 0, /* 0x1260 */
0, 67, 65, 76, 76, 84, 82, 49, 50, 0,169, 4, 0, 0, 67, 84, /* 0x1270 */
68, 85, 77, 77, 89, 50, 0,171, 4, 0, 0, 67, 84, 66, 83, 72, /* 0x1280 */
82, 49, 49, 0,171, 4, 0, 0, 67, 84, 66, 82, 79, 82, 49, 49, /* 0x1290 */
0,175, 4, 0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0,177, 4, /* 0x12a0 */
0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,182, 4, 0, 0, 0, /* 0x12b0 */
0, 0, 0,187, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, /* 0x12c0 */
5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, 0,187, 4, 0, /* 0x12d0 */
0, 76, 88, 85, 78, 70, 48, 48, 48, 0,187, 4, 0, 0, 0, 0, /* 0x12e0 */
0, 0,189, 4, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0, 5, /* 0x12f0 */
0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0,189, 4, 0, 0, /* 0x1300 */
77, 82, 85, 66, 89, 84, 69, 48, 0,194, 4, 0, 0, 76, 88, 77, /* 0x1310 */
82, 85, 48, 48, 53, 0,196, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x1320 */
48, 54, 0,201, 4, 0, 0, 76, 88, 77, 82, 85, 48, 48, 55, 0, /* 0x1330 */
208, 4, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, 0,215, 4, 0, /* 0x1340 */
0, 76, 88, 85, 78, 70, 48, 49, 48, 0,219, 4, 0, 0, 0, 0, /* 0x1350 */
0, 0,224, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, /* 0x1360 */
0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0,224, 4, 0, 0, /* 0x1370 */
76, 88, 77, 82, 85, 48, 52, 53, 0,227, 4, 0, 0, 76, 88, 77, /* 0x1380 */
82, 85, 48, 52, 54, 0,230, 4, 0, 0, 76, 88, 74, 67, 67, 48, /* 0x1390 */
50, 48, 0,232, 4, 0, 0, 0, 0, 0, 0,234, 4, 0, 0, 76, /* 0x13a0 */
88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 74, 67, /* 0x13b0 */
67, 48, 50, 49, 0,234, 4, 0, 0, 0, 0, 0, 0,239, 4, 0, /* 0x13c0 */
0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x13d0 */
74, 67, 67, 48, 50, 51, 0,239, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x13e0 */
48, 51, 55, 0,246, 4, 0, 0, 76, 88, 85, 78, 70, 51, 56, 54, /* 0x13f0 */
0,248, 4, 0, 0, 76, 88, 85, 78, 70, 51, 56, 55, 0,249, 4, /* 0x1400 */
0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0, 2, 5, 0, 0, 0, /* 0x1410 */
0, 0, 0, 5, 5, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, /* 0x1420 */
0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, 0, 5, 5, 0, /* 0x1430 */
0, 76, 88, 85, 78, 70, 52, 56, 55, 0, 9, 5, 0, 0, 0, 0, /* 0x1440 */
0, 0, 11, 5, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, /* 0x1450 */
0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0, 11, 5, 0, 0, /* 0x1460 */
0, 0, 0, 0, 15, 5, 0, 0, 76, 88, 77, 82, 85, 48, 55, 48, /* 0x1470 */
0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 51, 0, 15, 5, /* 0x1480 */
0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0, 17, 5, 0, 0, 77, /* 0x1490 */
82, 85, 66, 73, 84, 83, 51, 0, 18, 5, 0, 0, 77, 82, 85, 65, /* 0x14a0 */
82, 66, 52, 48, 0, 20, 5, 0, 0, 76, 88, 77, 82, 85, 48, 55, /* 0x14b0 */
48, 0, 24, 5, 0, 0, 0, 0, 0, 0, 29, 5, 0, 0, 76, 88, /* 0x14c0 */
85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x14d0 */
84, 69, 52, 0, 32, 5, 0, 0, 77, 82, 85, 66, 73, 84, 83, 52, /* 0x14e0 */
0, 35, 5, 0, 0, 77, 82, 85, 65, 82, 66, 53, 48, 0, 37, 5, /* 0x14f0 */
0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0, 43, 5, 0, 0, 77, /* 0x1500 */
82, 85, 66, 89, 84, 69, 53, 0, 46, 5, 0, 0, 77, 82, 85, 65, /* 0x1510 */
82, 66, 54, 48, 0, 48, 5, 0, 0, 77, 82, 85, 66, 73, 84, 83, /* 0x1520 */
53, 0, 49, 5, 0, 0, 77, 82, 85, 65, 82, 66, 55, 48, 0, 51, /* 0x1530 */
5, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, 55, 5, 0, 0, /* 0x1540 */
0, 0, 0, 0, 62, 5, 0, 0, 76, 88, 77, 82, 85, 49, 48, 48, /* 0x1550 */
0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 54, 0, 66, 5, /* 0x1560 */
0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 68, 5, 0, 0, 77, /* 0x1570 */
82, 85, 66, 73, 84, 83, 54, 0, 69, 5, 0, 0, 77, 82, 85, 65, /* 0x1580 */
82, 66, 57, 48, 0, 71, 5, 0, 0, 76, 88, 77, 82, 85, 49, 48, /* 0x1590 */
48, 0, 75, 5, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 91, /* 0x15a0 */
5, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, 96, 5, 0, 0, /* 0x15b0 */
76, 88, 77, 82, 85, 49, 49, 49, 0, 99, 5, 0, 0, 76, 88, 85, /* 0x15c0 */
78, 70, 48, 52, 49, 0,101, 5, 0, 0, 0, 0, 0, 0,108, 5, /* 0x15d0 */
0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, /* 0x15e0 */
88, 85, 78, 70, 48, 52, 50, 0,108, 5, 0, 0, 76, 69, 88, 69, /* 0x15f0 */
67, 48, 49, 54, 0,108, 5, 0, 0, 0, 0, 0, 0,110, 5, 0, /* 0x1600 */
0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, /* 0x1610 */
77, 82, 85, 48, 49, 48, 0,110, 5, 0, 0, 76, 88, 74, 77, 80, /* 0x1620 */
65, 48, 48, 0,111, 5, 0, 0, 76, 88, 67, 65, 76, 76, 66, 48, /* 0x1630 */
0,113, 5, 0, 0, 76, 88, 85, 78, 70, 48, 50, 49, 0,115, 5, /* 0x1640 */
0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0,121, 5, 0, 0, 76, /* 0x1650 */
88, 74, 77, 80, 65, 48, 49, 0,124, 5, 0, 0, 76, 88, 67, 65, /* 0x1660 */
76, 76, 66, 49, 0,126, 5, 0, 0, 77, 82, 85, 66, 73, 84, 83, /* 0x1670 */
49, 0,128, 5, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0,129, /* 0x1680 */
5, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0,131, 5, 0, 0, /* 0x1690 */
77, 82, 85, 65, 82, 66, 49, 48, 0,133, 5, 0, 0, 76, 88, 77, /* 0x16a0 */
82, 85, 48, 52, 48, 0,134, 5, 0, 0, 0, 0, 0, 0,136, 5, /* 0x16b0 */
0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, 0, 0, 0, 76, /* 0x16c0 */
88, 85, 78, 70, 48, 51, 48, 0,136, 5, 0, 0, 76, 88, 74, 67, /* 0x16d0 */
67, 48, 48, 48, 0,142, 5, 0, 0, 0, 0, 0, 0,150, 5, 0, /* 0x16e0 */
0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, 0, 0, 76, 88, /* 0x16f0 */
67, 74, 48, 77, 82, 85, 0,150, 5, 0, 0, 76, 88, 67, 74, 49, /* 0x1700 */
77, 82, 85, 0,152, 5, 0, 0, 76, 88, 67, 65, 76, 74, 77, 80, /* 0x1710 */
0,155, 5, 0, 0, 76, 88, 67, 65, 76, 76, 48, 48, 0,158, 5, /* 0x1720 */
0, 0, 0, 0, 0, 0,160, 5, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1730 */
51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, 76, 48, 49, 0, /* 0x1740 */
160, 5, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, 0,163, 5, 0, /* 0x1750 */
0, 0, 0, 0, 0,165, 5, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x1760 */
55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, 82, 85, 0,165, /* 0x1770 */
5, 0, 0, 0, 0, 0, 0,167, 5, 0, 0, 76, 88, 85, 78, 70, /* 0x1780 */
48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, 54, 77, 82, 85, /* 0x1790 */
0,167, 5, 0, 0, 0, 0, 0, 0,169, 5, 0, 0, 76, 88, 67, /* 0x17a0 */
74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, 55, 77, /* 0x17b0 */
82, 85, 0,169, 5, 0, 0, 0, 0, 0, 0,171, 5, 0, 0, 76, /* 0x17c0 */
88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, /* 0x17d0 */
56, 77, 82, 85, 0,171, 5, 0, 0, 0, 0, 0, 0,174, 5, 0, /* 0x17e0 */
0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, /* 0x17f0 */
85, 78, 70, 48, 51, 52, 0,174, 5, 0, 0, 0, 0, 0, 0,179, /* 0x1800 */
5, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 0, 0, 0, 0, /* 0x1810 */
76, 88, 77, 82, 85, 48, 53, 53, 0,179, 5, 0, 0, 77, 82, 85, /* 0x1820 */
66, 89, 84, 69, 50, 0,181, 5, 0, 0, 77, 82, 85, 66, 73, 84, /* 0x1830 */
83, 50, 0,186, 5, 0, 0, 77, 82, 85, 65, 82, 66, 50, 48, 0, /* 0x1840 */
191, 5, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, 0,196, 5, 0, /* 0x1850 */
0, 76, 88, 77, 82, 85, 48, 53, 56, 0,202, 5, 0, 0, 76, 88, /* 0x1860 */
85, 78, 70, 48, 51, 53, 0,203, 5, 0, 0, 76, 88, 80, 84, 73, /* 0x1870 */
49, 52, 48, 0,209, 5, 0, 0, 76, 88, 80, 84, 73, 49, 52, 49, /* 0x1880 */
0,209, 5, 0, 0, 76, 88, 80, 84, 73, 49, 53, 48, 0,209, 5, /* 0x1890 */
0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0,222, 5, 0, 0, 0, /* 0x18a0 */
0, 0, 0,226, 5, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, /* 0x18b0 */
30, 0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,231, 5, 0, /* 0x18c0 */
0, 0, 0, 0, 0,245, 5, 0, 0, 67, 75, 76, 76, 84, 82, 50, /* 0x18d0 */
48, 0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,245, /* 0x18e0 */
5, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, 67, 75, 76, 76, 84, /* 0x18f0 */
82, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 5, 0, 0, /* 0x1900 */
67, 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, /* 0x1910 */
76, 84, 82, 51, 48, 0, 22, 6, 0, 0, 0, 0, 0, 0, 29, 6, /* 0x1920 */
0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, /* 0x1930 */
75, 76, 76, 84, 82, 52, 48, 0, 29, 6, 0, 0, 0, 0, 0, 0, /* 0x1940 */
34, 6, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, /* 0x1950 */
0, 76, 88, 80, 84, 73, 49, 54, 48, 0, 34, 6, 0, 0, 76, 88, /* 0x1960 */
80, 84, 73, 50, 48, 48, 0, 36, 6, 0, 0, 88, 84, 72, 69, 69, /* 0x1970 */
78, 68, 88, 0, 36, 6, 0, 0,255,255,255,255, 36, 6 /* 0x1980 */
};
+3 -11
View File
@@ -111,15 +111,6 @@ do_brk(void *addr)
return brk(addr);
}
static char *
__attribute_cdecl
do_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
(void)len; (void)prot; (void)flags; (void)fd; (void)offset;
return mmap((int *)&addr);
}
/*************************************************************************
// UPX & NRV stuff
**************************************************************************/
@@ -264,7 +255,7 @@ do_xmap(int fdi, Elf32_Ehdr const *const ehdr, f_expand *const f_decompress,
do_brk(haddr+OVERHEAD); // Also takes care of whole pages of .bss
}
// Decompressor can overrun the destination by 3 bytes.
if (addr != do_mmap(addr, mlen + (f_decompress ? 3 : 0), PROT_READ | PROT_WRITE,
if (addr != mmap(addr, mlen + (f_decompress ? 3 : 0), PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | (f_decompress ? MAP_ANONYMOUS : 0),
fdi, phdr->p_offset - frag) ) {
err_exit(8);
@@ -286,7 +277,7 @@ do_xmap(int fdi, Elf32_Ehdr const *const ehdr, f_expand *const f_decompress,
addr += frag + mlen;
mlen = haddr - addr;
if (0 < (int)mlen) { // need more pages, too
if (addr != do_mmap(addr, mlen, PROT_READ | PROT_WRITE,
if (addr != mmap(addr, mlen, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ) ) {
err_exit(9);
ERR_LAB
@@ -418,6 +409,7 @@ ERR_LAB
return (void *)entry;
}
/*
vi:ts=4:et:nowrap
*/
+5 -11
View File
@@ -93,14 +93,8 @@ do_brk(void *addr)
return brk(addr);
}
static char *
__attribute_cdecl
do_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
{
(void)len; (void)prot; (void)flags; (void)fd; (void)offset;
return mmap((void *)&addr);
}
extern char *mmap(void *addr, size_t len,
int prot, int flags, int fd, off_t offset);
/*************************************************************************
// UPX & NRV stuff
@@ -215,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 = do_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, 0, 0);
// Doing this may destroy the brk() that we set so carefully above.
// The munmap() is "needed" only for discontiguous PT_LOAD,
@@ -257,7 +251,7 @@ do_xmap(int const fdi, Elf32_Ehdr const *const ehdr, Elf32_auxv_t *const av)
haddr += reloc;
// Decompressor can overrun the destination by 3 bytes.
if (addr != do_mmap(addr, mlen, PROT_READ | PROT_WRITE,
if (addr != mmap(addr, mlen, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE,
fdi, phdr->p_offset - frag) ) {
err_exit(8);
@@ -271,7 +265,7 @@ ERR_LAB
}
addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss
if (addr != do_mmap(addr, haddr - addr, prot,
if (addr != mmap(addr, haddr - addr, prot,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ) ) {
err_exit(9);
}
+2
View File
@@ -85,6 +85,7 @@ decompress:
%include "n2b_d32.ash"
%include "n2d_d32.ash"
%include "n2e_d32.ash"
%include "cl1_d32.ash"
%include "macros.ash"
cjt32 0
@@ -106,6 +107,7 @@ decompress:
mov [edx], edi
mov [7*4 + esp], eax
;__LEXEC017__
popa
ret
+232 -163
View File
@@ -1,4 +1,4 @@
/* l_lx_sh86.h -- created from l_lx_sh86.bin, 3298 (0xce2) bytes
/* l_lx_sh86.h -- created from l_lx_sh86.bin, 4416 (0x1140) bytes
This file is part of the UPX executable compressor.
@@ -27,11 +27,11 @@
*/
#define LINUX_I386SH_LOADER_SIZE 3298
#define LINUX_I386SH_LOADER_ADLER32 0x7510019f
#define LINUX_I386SH_LOADER_CRC32 0x09311322
#define LINUX_I386SH_LOADER_SIZE 4416
#define LINUX_I386SH_LOADER_ADLER32 0x93e2f039
#define LINUX_I386SH_LOADER_CRC32 0x1614a613
unsigned char linux_i386sh_loader[3298] = {
unsigned char linux_i386sh_loader[4416] = {
232, 0, 0, 0, 0, 96,139,116, 36, 36,139,124, 36, 44,131,205, /* 0x 0 */
255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219,117, 7, /* 0x 10 */
139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7,114, 0, /* 0x 20 */
@@ -81,162 +81,231 @@ unsigned char linux_i386sh_loader[3298] = {
164, 94,233, 0, 0, 0, 0,141, 20, 47,131,253,252,138, 4, 15, /* 0x 2e0 */
118, 0,138, 2, 66,136, 7, 71, 73,117,247,233, 0, 0, 0, 0, /* 0x 2f0 */
139, 2,131,194, 4,137, 7,131,199, 4,131,233, 4,119,241, 1, /* 0x 300 */
207,233, 0, 0, 0, 0,185, 84, 69, 88, 76,138, 7, 71, 44,232, /* 0x 310 */
60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, 4,102,193, /* 0x 320 */
232, 8,134,196,193,192, 16,134,196, 41,248,128,235,232,137, 7, /* 0x 330 */
131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176,232,176,233, /* 0x 340 */
242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193,232, 8,134, /* 0x 350 */
196,193,192, 16,134,196, 41,248,171,235, 0,139, 84, 36, 36, 3, /* 0x 360 */
84, 36, 40, 57,214,116, 1, 72, 43,124, 36, 44,139, 84, 36, 48, /* 0x 370 */
137, 58,137, 68, 36, 28, 97,195, 94,252,173, 80, 84,186, 0, 0, /* 0x 380 */
64, 1,139, 66, 72, 1,208,131,194,116, 80,139, 74, 16,129,193, /* 0x 390 */
6, 16, 0, 0, 80, 80,106, 50,106, 7, 81, 80,137,227,106, 90, /* 0x 3a0 */
88,205,128,141,152, 3, 16, 0, 0,131,196, 24,173, 80,173, 86, /* 0x 3b0 */
255,213, 88, 88,195, 93,232,189,255,255,255, 0, 76, 69, 88, 69, /* 0x 3c0 */
67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, /* 0x 3d0 */
0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 61, 0, 0, 0, 76, 69, /* 0x 3e0 */
88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 3f0 */
65, 49, 48, 0, 17, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, /* 0x 400 */
78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, /* 0x 410 */
70, 65, 83, 49, 48, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, /* 0x 420 */
0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 430 */
50, 66, 70, 65, 83, 49, 49, 0, 22, 0, 0, 0, 78, 50, 66, 68, /* 0x 440 */
69, 67, 49, 48, 0, 28, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, /* 0x 450 */
48, 0, 39, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 78, 50, /* 0x 460 */
66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 470 */
83, 50, 48, 0, 44, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, /* 0x 480 */
78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 490 */
68, 69, 67, 50, 48, 0, 53, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 4a0 */
51, 48, 0, 66, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 78, /* 0x 4b0 */
50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, /* 0x 4c0 */
65, 83, 51, 48, 0, 79, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, /* 0x 4d0 */
0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x 4e0 */
0, 0, 94, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, /* 0x 4f0 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 94, 0, 0, 0, /* 0x 500 */
0, 0, 0, 0,112, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, /* 0x 510 */
0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 78, 50, 66, /* 0x 520 */
68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 530 */
52, 48, 0,156, 0, 0, 0, 0, 0, 0, 0,169, 0, 0, 0, 78, /* 0x 540 */
50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, /* 0x 550 */
65, 83, 52, 48, 0,169, 0, 0, 0, 0, 0, 0, 0,173, 0, 0, /* 0x 560 */
0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, /* 0x 570 */
0, 0,184, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, /* 0x 580 */
0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0,184, 0, 0, 0, /* 0x 590 */
78, 50, 66, 83, 77, 65, 53, 48, 0,184, 0, 0, 0, 78, 50, 66, /* 0x 5a0 */
70, 65, 83, 53, 48, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 5b0 */
53, 48, 0,189, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0, /* 0x 5c0 */
198, 0, 0, 0, 0, 0, 0, 0,210, 0, 0, 0, 78, 50, 66, 68, /* 0x 5d0 */
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x 5e0 */
48, 0,210, 0, 0, 0, 0, 0, 0, 0,221, 0, 0, 0, 78, 50, /* 0x 5f0 */
66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,235, /* 0x 600 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 610 */
78, 50, 66, 70, 65, 83, 54, 49, 0,235, 0, 0, 0, 0, 0, 0, /* 0x 620 */
0, 1, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x 630 */
0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 1, 1, 0, 0, 78, /* 0x 640 */
82, 86, 50, 66, 69, 78, 68, 0, 1, 1, 0, 0, 78, 50, 68, 83, /* 0x 650 */
77, 65, 49, 48, 0, 1, 1, 0, 0, 0, 0, 0, 0, 3, 1, 0, /* 0x 660 */
0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 670 */
68, 70, 65, 83, 49, 48, 0, 4, 1, 0, 0, 0, 0, 0, 0, 6, /* 0x 680 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 690 */
78, 50, 68, 70, 65, 83, 49, 49, 0, 6, 1, 0, 0, 78, 50, 68, /* 0x 6a0 */
68, 69, 67, 49, 48, 0, 12, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 6b0 */
50, 48, 0, 23, 1, 0, 0, 0, 0, 0, 0, 25, 1, 0, 0, 78, /* 0x 6c0 */
50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, /* 0x 6d0 */
65, 83, 50, 48, 0, 28, 1, 0, 0, 0, 0, 0, 0, 32, 1, 0, /* 0x 6e0 */
0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 6f0 */
68, 68, 69, 67, 50, 48, 0, 37, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 700 */
65, 51, 48, 0, 50, 1, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0, /* 0x 710 */
78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x 720 */
70, 65, 83, 51, 48, 0, 63, 1, 0, 0, 0, 0, 0, 0, 69, 1, /* 0x 730 */
0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, /* 0x 740 */
0, 0, 0, 78, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 750 */
16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 78, 1, 0, /* 0x 760 */
0, 0, 0, 0, 0, 94, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, /* 0x 770 */
48, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 1, 0, 0, 78, 50, /* 0x 780 */
68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, /* 0x 790 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, /* 0x 7a0 */
78, 50, 68, 83, 77, 65, 52, 48, 0,160, 1, 0, 0, 0, 0, 0, /* 0x 7b0 */
0,173, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x 7c0 */
0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,173, 1, 0, 0, 0, /* 0x 7d0 */
0, 0, 0,177, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 7e0 */
69, 0, 0, 0, 0, 0, 0, 0,188, 1, 0, 0, 78, 50, 68, 68, /* 0x 7f0 */
69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, /* 0x 800 */
49, 0,188, 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0,188, /* 0x 810 */
1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0,190, 1, 0, 0, /* 0x 820 */
78, 50, 68, 68, 69, 67, 53, 48, 0,193, 1, 0, 0, 78, 50, 68, /* 0x 830 */
83, 77, 65, 54, 48, 0,202, 1, 0, 0, 0, 0, 0, 0,214, 1, /* 0x 840 */
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 850 */
50, 68, 70, 65, 83, 54, 48, 0,214, 1, 0, 0, 0, 0, 0, 0, /* 0x 860 */
225, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, /* 0x 870 */
0, 0, 0, 0, 0,239, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, /* 0x 880 */
48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0,239, /* 0x 890 */
1, 0, 0, 0, 0, 0, 0, 5, 2, 0, 0, 78, 50, 68, 68, 69, /* 0x 8a0 */
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, /* 0x 8b0 */
0, 5, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 5, 2, /* 0x 8c0 */
0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 5, 2, 0, 0, 0, /* 0x 8d0 */
0, 0, 0, 7, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, /* 0x 8e0 */
4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 8, 2, 0, /* 0x 8f0 */
0, 0, 0, 0, 0, 10, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x 900 */
48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 10, /* 0x 910 */
2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 16, 2, 0, 0, /* 0x 920 */
78, 50, 69, 83, 77, 65, 50, 48, 0, 27, 2, 0, 0, 0, 0, 0, /* 0x 930 */
0, 29, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, /* 0x 940 */
0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, 32, 2, 0, 0, 0, /* 0x 950 */
0, 0, 0, 36, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x 960 */
0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 41, 2, 0, /* 0x 970 */
0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 54, 2, 0, 0, 0, 0, /* 0x 980 */
0, 0, 67, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x 990 */
0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0, 67, 2, 0, 0, /* 0x 9a0 */
0, 0, 0, 0, 73, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x 9b0 */
0, 31, 0, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 78, 50, 69, /* 0x 9c0 */
68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x 9d0 */
51, 48, 0, 82, 2, 0, 0, 0, 0, 0, 0, 98, 2, 0, 0, 78, /* 0x 9e0 */
50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 9f0 */
113, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x a00 */
0, 0, 0, 0, 0,131, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, /* 0x a10 */
48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,177, /* 0x a20 */
2, 0, 0, 0, 0, 0, 0,190, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x a30 */
67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, /* 0x a40 */
0,190, 2, 0, 0, 0, 0, 0, 0,194, 2, 0, 0, 78, 50, 69, /* 0x a50 */
68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,205, 2, /* 0x a60 */
0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, /* 0x a70 */
50, 69, 68, 85, 77, 77, 49, 0,205, 2, 0, 0, 78, 50, 69, 83, /* 0x a80 */
77, 65, 53, 48, 0,205, 2, 0, 0, 78, 50, 69, 70, 65, 83, 53, /* 0x a90 */
48, 0,207, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0,210, /* 0x aa0 */
2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0,219, 2, 0, 0, /* 0x ab0 */
0, 0, 0, 0,231, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x ac0 */
0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,231, 2, /* 0x ad0 */
0, 0, 0, 0, 0, 0,242, 2, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x ae0 */
54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 78, /* 0x af0 */
50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, /* 0x b00 */
65, 83, 54, 49, 0, 0, 3, 0, 0, 0, 0, 0, 0, 22, 3, 0, /* 0x b10 */
0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x b20 */
69, 68, 69, 67, 54, 48, 0, 22, 3, 0, 0, 78, 82, 86, 50, 69, /* 0x b30 */
69, 78, 68, 0, 22, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, /* 0x b40 */
0, 22, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 36, 3, /* 0x b50 */
0, 0, 0, 0, 0, 0, 41, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x b60 */
48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, /* 0x b70 */
41, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 46, 3, 0, /* 0x b80 */
0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 46, 3, 0, 0, 67, 84, /* 0x b90 */
66, 82, 79, 82, 48, 49, 0, 50, 3, 0, 0, 67, 84, 66, 83, 87, /* 0x ba0 */
65, 48, 49, 0, 52, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, /* 0x bb0 */
0, 57, 3, 0, 0, 0, 0, 0, 0, 71, 3, 0, 0, 67, 65, 76, /* 0x bc0 */
76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x bd0 */
49, 48, 0, 71, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0, /* 0x be0 */
76, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 78, 3, 0, /* 0x bf0 */
0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 80, 3, 0, 0, 0, 0, /* 0x c00 */
0, 0, 84, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 5, /* 0x c10 */
0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, 84, 3, 0, 0, /* 0x c20 */
0, 0, 0, 0, 89, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, /* 0x c30 */
0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 89, 3, /* 0x c40 */
0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, 91, 3, 0, 0, 67, /* 0x c50 */
84, 66, 83, 72, 82, 49, 49, 0, 91, 3, 0, 0, 67, 84, 66, 82, /* 0x c60 */
79, 82, 49, 49, 0, 95, 3, 0, 0, 67, 84, 66, 83, 87, 65, 49, /* 0x c70 */
49, 0, 97, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,102, /* 0x c80 */
3, 0, 0, 0, 0, 0, 0,107, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x c90 */
82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, /* 0x ca0 */
0,107, 3, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,107, 3, /* 0x cb0 */
0, 0, 76, 69, 88, 69, 67, 48, 50, 48, 0,136, 3, 0, 0, 88, /* 0x cc0 */
84, 72, 69, 69, 78, 68, 88, 0,203, 3, 0, 0,255,255,255,255, /* 0x cd0 */
203, 3 /* 0x ce0 */
207,233, 0, 0, 0, 0,255,210, 1,219,117, 2,255,210,144,232, /* 0x 310 */
0, 0, 0, 0, 1,219,116, 0,195,139, 30,131,238,252, 17,219, /* 0x 320 */
195, 41,201, 17,201,114, 0, 17,201,114, 0, 17,201, 17,192, 72, /* 0x 330 */
17,192,131,233, 1,115, 0,141, 72, 15, 61,240,255, 0, 0,114, /* 0x 340 */
0,141, 4, 14, 80,233, 0, 0, 0, 0, 17,201, 17,201,131,193, /* 0x 350 */
13,235, 0,133,201,116, 0, 65,131,193, 8,235, 0, 41,201, 90, /* 0x 360 */
41,219,141, 65, 1,115, 0,114, 0,114, 0,114, 0,131,193, 2, /* 0x 370 */
114, 0, 65,114, 5,233, 0, 0, 0, 0, 17,201,209,233,115, 1, /* 0x 380 */
164,209,233,115, 2,102,165,243,165,141, 65, 1,235, 3,164,164, /* 0x 390 */
164, 17,192,115, 0,131,232, 3,114, 11,193,224, 8,172,131,240, /* 0x 3a0 */
255,116, 0,137,197, 17,201, 17,201,117, 0, 65, 17,201,115, 0, /* 0x 3b0 */
131,193, 2,129,253, 0,243,255,255,131,209, 1, 86,141, 52, 47, /* 0x 3c0 */
131,253,252,119, 19,209,233,115, 1,164,209,233,115, 2,102,165, /* 0x 3d0 */
243,165, 94,233, 0, 0, 0, 0,131,253,255,117, 5,172,243,170, /* 0x 3e0 */
235,240,243,164,235,236,185, 84, 69, 88, 76,138, 7, 71, 44,232, /* 0x 3f0 */
60, 1,119,247,128, 63, 63,117, 0,139, 7,138, 95, 4,102,193, /* 0x 400 */
232, 8,134,196,193,192, 16,134,196, 41,248,128,235,232,137, 7, /* 0x 410 */
131,199, 5,136,216,226, 0,185, 84, 69, 88, 76,176,232,176,233, /* 0x 420 */
242,174,117, 0,128, 63, 63,117, 0,139, 7,102,193,232, 8,134, /* 0x 430 */
196,193,192, 16,134,196, 41,248,171,235, 0,139, 84, 36, 36, 3, /* 0x 440 */
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 */
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 */
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 */
70, 65, 83, 49, 48, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, /* 0x 500 */
0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 510 */
50, 66, 70, 65, 83, 49, 49, 0, 22, 0, 0, 0, 78, 50, 66, 68, /* 0x 520 */
69, 67, 49, 48, 0, 28, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, /* 0x 530 */
48, 0, 39, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 78, 50, /* 0x 540 */
66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 550 */
83, 50, 48, 0, 44, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, /* 0x 560 */
78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 570 */
68, 69, 67, 50, 48, 0, 53, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 580 */
51, 48, 0, 66, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 78, /* 0x 590 */
50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, /* 0x 5a0 */
65, 83, 51, 48, 0, 79, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, /* 0x 5b0 */
0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x 5c0 */
0, 0, 94, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, /* 0x 5d0 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 94, 0, 0, 0, /* 0x 5e0 */
0, 0, 0, 0,112, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, /* 0x 5f0 */
0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 78, 50, 66, /* 0x 600 */
68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 610 */
52, 48, 0,156, 0, 0, 0, 0, 0, 0, 0,169, 0, 0, 0, 78, /* 0x 620 */
50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, /* 0x 630 */
65, 83, 52, 48, 0,169, 0, 0, 0, 0, 0, 0, 0,173, 0, 0, /* 0x 640 */
0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, /* 0x 650 */
0, 0,184, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, /* 0x 660 */
0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0,184, 0, 0, 0, /* 0x 670 */
78, 50, 66, 83, 77, 65, 53, 48, 0,184, 0, 0, 0, 78, 50, 66, /* 0x 680 */
70, 65, 83, 53, 48, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 690 */
53, 48, 0,189, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0, /* 0x 6a0 */
198, 0, 0, 0, 0, 0, 0, 0,210, 0, 0, 0, 78, 50, 66, 68, /* 0x 6b0 */
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x 6c0 */
48, 0,210, 0, 0, 0, 0, 0, 0, 0,221, 0, 0, 0, 78, 50, /* 0x 6d0 */
66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,235, /* 0x 6e0 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 6f0 */
78, 50, 66, 70, 65, 83, 54, 49, 0,235, 0, 0, 0, 0, 0, 0, /* 0x 700 */
0, 1, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x 710 */
0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 1, 1, 0, 0, 78, /* 0x 720 */
82, 86, 50, 66, 69, 78, 68, 0, 1, 1, 0, 0, 78, 50, 68, 83, /* 0x 730 */
77, 65, 49, 48, 0, 1, 1, 0, 0, 0, 0, 0, 0, 3, 1, 0, /* 0x 740 */
0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 750 */
68, 70, 65, 83, 49, 48, 0, 4, 1, 0, 0, 0, 0, 0, 0, 6, /* 0x 760 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 770 */
78, 50, 68, 70, 65, 83, 49, 49, 0, 6, 1, 0, 0, 78, 50, 68, /* 0x 780 */
68, 69, 67, 49, 48, 0, 12, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 790 */
50, 48, 0, 23, 1, 0, 0, 0, 0, 0, 0, 25, 1, 0, 0, 78, /* 0x 7a0 */
50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, /* 0x 7b0 */
65, 83, 50, 48, 0, 28, 1, 0, 0, 0, 0, 0, 0, 32, 1, 0, /* 0x 7c0 */
0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 7d0 */
68, 68, 69, 67, 50, 48, 0, 37, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 7e0 */
65, 51, 48, 0, 50, 1, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0, /* 0x 7f0 */
78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x 800 */
70, 65, 83, 51, 48, 0, 63, 1, 0, 0, 0, 0, 0, 0, 69, 1, /* 0x 810 */
0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, /* 0x 820 */
0, 0, 0, 78, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 830 */
16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 78, 1, 0, /* 0x 840 */
0, 0, 0, 0, 0, 94, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, /* 0x 850 */
48, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 1, 0, 0, 78, 50, /* 0x 860 */
68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, /* 0x 870 */
1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, /* 0x 880 */
78, 50, 68, 83, 77, 65, 52, 48, 0,160, 1, 0, 0, 0, 0, 0, /* 0x 890 */
0,173, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x 8a0 */
0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,173, 1, 0, 0, 0, /* 0x 8b0 */
0, 0, 0,177, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 8c0 */
69, 0, 0, 0, 0, 0, 0, 0,188, 1, 0, 0, 78, 50, 68, 68, /* 0x 8d0 */
69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, /* 0x 8e0 */
49, 0,188, 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0,188, /* 0x 8f0 */
1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0,190, 1, 0, 0, /* 0x 900 */
78, 50, 68, 68, 69, 67, 53, 48, 0,193, 1, 0, 0, 78, 50, 68, /* 0x 910 */
83, 77, 65, 54, 48, 0,202, 1, 0, 0, 0, 0, 0, 0,214, 1, /* 0x 920 */
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 930 */
50, 68, 70, 65, 83, 54, 48, 0,214, 1, 0, 0, 0, 0, 0, 0, /* 0x 940 */
225, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, /* 0x 950 */
0, 0, 0, 0, 0,239, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, /* 0x 960 */
48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0,239, /* 0x 970 */
1, 0, 0, 0, 0, 0, 0, 5, 2, 0, 0, 78, 50, 68, 68, 69, /* 0x 980 */
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, /* 0x 990 */
0, 5, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 5, 2, /* 0x 9a0 */
0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 5, 2, 0, 0, 0, /* 0x 9b0 */
0, 0, 0, 7, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, /* 0x 9c0 */
4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 8, 2, 0, /* 0x 9d0 */
0, 0, 0, 0, 0, 10, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x 9e0 */
48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 10, /* 0x 9f0 */
2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 16, 2, 0, 0, /* 0x a00 */
78, 50, 69, 83, 77, 65, 50, 48, 0, 27, 2, 0, 0, 0, 0, 0, /* 0x a10 */
0, 29, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, /* 0x a20 */
0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, 32, 2, 0, 0, 0, /* 0x a30 */
0, 0, 0, 36, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x a40 */
0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 41, 2, 0, /* 0x a50 */
0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 54, 2, 0, 0, 0, 0, /* 0x a60 */
0, 0, 67, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x a70 */
0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0, 67, 2, 0, 0, /* 0x a80 */
0, 0, 0, 0, 73, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x a90 */
0, 31, 0, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 78, 50, 69, /* 0x aa0 */
68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x ab0 */
51, 48, 0, 82, 2, 0, 0, 0, 0, 0, 0, 98, 2, 0, 0, 78, /* 0x ac0 */
50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x ad0 */
113, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x ae0 */
0, 0, 0, 0, 0,131, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, /* 0x af0 */
48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,177, /* 0x b00 */
2, 0, 0, 0, 0, 0, 0,190, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x b10 */
67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, /* 0x b20 */
0,190, 2, 0, 0, 0, 0, 0, 0,194, 2, 0, 0, 78, 50, 69, /* 0x b30 */
68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,205, 2, /* 0x b40 */
0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, /* 0x b50 */
50, 69, 68, 85, 77, 77, 49, 0,205, 2, 0, 0, 78, 50, 69, 83, /* 0x b60 */
77, 65, 53, 48, 0,205, 2, 0, 0, 78, 50, 69, 70, 65, 83, 53, /* 0x b70 */
48, 0,207, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0,210, /* 0x b80 */
2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0,219, 2, 0, 0, /* 0x b90 */
0, 0, 0, 0,231, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x ba0 */
0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,231, 2, /* 0x bb0 */
0, 0, 0, 0, 0, 0,242, 2, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x bc0 */
54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 78, /* 0x bd0 */
50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, /* 0x be0 */
65, 83, 54, 49, 0, 0, 3, 0, 0, 0, 0, 0, 0, 22, 3, 0, /* 0x bf0 */
0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x c00 */
69, 68, 69, 67, 54, 48, 0, 22, 3, 0, 0, 78, 82, 86, 50, 69, /* 0x c10 */
69, 78, 68, 0, 22, 3, 0, 0, 67, 76, 49, 83, 77, 65, 49, 66, /* 0x c20 */
0, 22, 3, 0, 0, 67, 76, 49, 70, 65, 83, 49, 66, 0, 24, 3, /* 0x c30 */
0, 0, 67, 76, 49, 71, 69, 84, 49, 66, 0, 30, 3, 0, 0, 67, /* 0x c40 */
76, 49, 69, 78, 84, 69, 82, 0, 30, 3, 0, 0, 0, 0, 0, 0, /* 0x c50 */
36, 3, 0, 0, 67, 76, 49, 83, 84, 65, 82, 84, 0, 0, 0, 0, /* 0x c60 */
0, 67, 76, 49, 83, 77, 65, 49, 48, 0, 36, 3, 0, 0, 0, 0, /* 0x c70 */
0, 0, 40, 3, 0, 0, 67, 76, 49, 82, 76, 79, 65, 68, 0, 0, /* 0x c80 */
0, 0, 0, 67, 76, 49, 82, 76, 79, 65, 68, 0, 41, 3, 0, 0, /* 0x c90 */
67, 76, 49, 87, 73, 68, 48, 49, 0, 49, 3, 0, 0, 67, 76, 49, /* 0x ca0 */
87, 73, 68, 48, 50, 0, 51, 3, 0, 0, 67, 76, 49, 87, 73, 68, /* 0x cb0 */
48, 51, 0, 53, 3, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 67, /* 0x cc0 */
76, 49, 87, 73, 68, 49, 48, 0, 12, 0, 0, 0, 67, 76, 49, 87, /* 0x cd0 */
73, 68, 48, 52, 0, 55, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, /* 0x ce0 */
53, 0, 57, 3, 0, 0, 0, 0, 0, 0, 59, 3, 0, 0, 67, 76, /* 0x cf0 */
49, 87, 73, 68, 49, 48, 0, 7, 0, 0, 0, 67, 76, 49, 87, 73, /* 0x d00 */
68, 48, 54, 0, 59, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 55, /* 0x d10 */
0, 61, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 56, 0, 64, 3, /* 0x d20 */
0, 0, 0, 0, 0, 0, 71, 3, 0, 0, 67, 76, 49, 87, 73, 68, /* 0x d30 */
48, 54, 0, 2, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0, 67, /* 0x d40 */
76, 49, 87, 73, 68, 49, 48, 0, 15, 0, 0, 0, 0, 0, 0, 0, /* 0x d50 */
90, 3, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, 0, 18, 0, 0, /* 0x d60 */
0, 67, 76, 49, 87, 73, 68, 48, 57, 0, 90, 3, 0, 0, 67, 76, /* 0x d70 */
49, 87, 73, 68, 49, 48, 0, 92, 3, 0, 0, 0, 0, 0, 0, 99, /* 0x d80 */
3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 55, 0, 2, 0, 0, 0, /* 0x d90 */
0, 0, 0, 0,103, 3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 56, /* 0x da0 */
0, 26, 0, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, 67, 76, 49, /* 0x db0 */
84, 79, 80, 48, 55, 0, 2, 0, 0, 0, 67, 76, 49, 83, 84, 65, /* 0x dc0 */
82, 84, 0,109, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 48, 0, /* 0x dd0 */
114, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, 49, 0,117, 3, 0, /* 0x de0 */
0, 0, 0, 0, 0,119, 3, 0, 0, 67, 76, 49, 84, 79, 80, 48, /* 0x df0 */
55, 0, 23, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 50, 0,119, /* 0x e00 */
3, 0, 0, 0, 0, 0, 0,121, 3, 0, 0, 67, 76, 49, 84, 79, /* 0x e10 */
80, 48, 55, 0, 22, 0, 0, 0, 67, 76, 49, 84, 79, 80, 48, 51, /* 0x e20 */
0,121, 3, 0, 0, 0, 0, 0, 0,123, 3, 0, 0, 67, 76, 49, /* 0x e30 */
84, 79, 80, 48, 55, 0, 21, 0, 0, 0, 67, 76, 49, 84, 79, 80, /* 0x e40 */
48, 52, 0,123, 3, 0, 0, 0, 0, 0, 0,125, 3, 0, 0, 67, /* 0x e50 */
76, 49, 84, 79, 80, 48, 55, 0, 20, 0, 0, 0, 67, 76, 49, 84, /* 0x e60 */
79, 80, 48, 53, 0,128, 3, 0, 0, 0, 0, 0, 0,130, 3, 0, /* 0x e70 */
0, 67, 76, 49, 84, 79, 80, 48, 54, 0, 7, 0, 0, 0, 67, 76, /* 0x e80 */
49, 84, 79, 80, 48, 54, 0,131, 3, 0, 0, 0, 0, 0, 0,138, /* 0x e90 */
3, 0, 0, 67, 76, 49, 87, 73, 68, 48, 49, 0, 0, 0, 0, 0, /* 0x ea0 */
67, 76, 49, 84, 79, 80, 48, 55, 0,138, 3, 0, 0, 67, 76, 49, /* 0x eb0 */
79, 70, 70, 48, 49, 0,161, 3, 0, 0, 67, 76, 49, 79, 70, 70, /* 0x ec0 */
48, 50, 0,163, 3, 0, 0, 0, 0, 0, 0,165, 3, 0, 0, 67, /* 0x ed0 */
76, 49, 84, 79, 80, 48, 55, 0, 23, 0, 0, 0, 0, 0, 0, 0, /* 0x ee0 */
179, 3, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, 0, 51, 0, 0, /* 0x ef0 */
0, 67, 76, 49, 79, 70, 70, 48, 51, 0,181, 3, 0, 0, 67, 76, /* 0x f00 */
49, 79, 70, 70, 48, 52, 0,183, 3, 0, 0, 0, 0, 0, 0,187, /* 0x f10 */
3, 0, 0, 67, 76, 49, 67, 79, 80, 89, 48, 0, 0, 0, 0, 0, /* 0x f20 */
67, 76, 49, 76, 69, 78, 48, 48, 0,187, 3, 0, 0, 67, 76, 49, /* 0x f30 */
76, 69, 78, 48, 49, 0,188, 3, 0, 0, 67, 76, 49, 76, 69, 78, /* 0x f40 */
48, 50, 0,190, 3, 0, 0, 0, 0, 0, 0,192, 3, 0, 0, 67, /* 0x f50 */
76, 49, 76, 69, 78, 48, 48, 0, 1, 0, 0, 0, 67, 76, 49, 67, /* 0x f60 */
79, 80, 89, 48, 0,195, 3, 0, 0, 0, 0, 0, 0,232, 3, 0, /* 0x f70 */
0, 67, 76, 49, 84, 79, 80, 48, 48, 0, 0, 0, 0, 0, 67, 76, /* 0x f80 */
49, 69, 78, 68, 0,246, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x f90 */
48, 0,246, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 4, /* 0x fa0 */
4, 0, 0, 0, 0, 0, 0, 9, 4, 0, 0, 67, 65, 76, 76, 84, /* 0x fb0 */
82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, /* 0x fc0 */
0, 9, 4, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 14, 4, /* 0x fd0 */
0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 14, 4, 0, 0, 67, /* 0x fe0 */
84, 66, 82, 79, 82, 48, 49, 0, 18, 4, 0, 0, 67, 84, 66, 83, /* 0x ff0 */
87, 65, 48, 49, 0, 20, 4, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x1000 */
50, 0, 25, 4, 0, 0, 0, 0, 0, 0, 39, 4, 0, 0, 67, 65, /* 0x1010 */
76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, /* 0x1020 */
82, 49, 48, 0, 39, 4, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, /* 0x1030 */
0, 44, 4, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 46, 4, /* 0x1040 */
0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 48, 4, 0, 0, 0, /* 0x1050 */
0, 0, 0, 52, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x1060 */
5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, 52, 4, 0, /* 0x1070 */
0, 0, 0, 0, 0, 57, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, /* 0x1080 */
49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 57, /* 0x1090 */
4, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, 59, 4, 0, 0, /* 0x10a0 */
67, 84, 66, 83, 72, 82, 49, 49, 0, 59, 4, 0, 0, 67, 84, 66, /* 0x10b0 */
82, 79, 82, 49, 49, 0, 63, 4, 0, 0, 67, 84, 66, 83, 87, 65, /* 0x10c0 */
49, 49, 0, 65, 4, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x10d0 */
70, 4, 0, 0, 0, 0, 0, 0, 75, 4, 0, 0, 67, 65, 76, 76, /* 0x10e0 */
84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, /* 0x10f0 */
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 */
};
+4 -2
View File
@@ -203,7 +203,7 @@ relhi0:
%ifdef __PEDEPHAK__
mov ebp, [esi + 'VPRO'] ; VirtualProtect
lea edi, [esi + 'IMGB']
mov ebx, 0x1000
mov ebx, 'IMGL' ; 0x1000 or 0x2000
push eax ; provide 4 bytes stack
@@ -218,7 +218,9 @@ relhi0:
jz pedep9 ; VirtualProtect failed
%endif
and byte [edi + 'SWRI'], 0x7f
lea eax, [edi + 'SWRI']
and byte [eax], 0x7f ; marks UPX0 non writeable
and byte [eax + 0x28], 0x7f ; marks UPX1 non writeable
%if 0
push esp
+207 -207
View File
@@ -1,4 +1,4 @@
/* l_w32pe.h -- created from l_w32pe.bin, 4361 (0x1109) bytes
/* l_w32pe.h -- created from l_w32pe.bin, 4365 (0x110d) bytes
This file is part of the UPX executable compressor.
@@ -27,11 +27,11 @@
*/
#define NRV_LOADER_SIZE 4361
#define NRV_LOADER_ADLER32 0x709f14e3
#define NRV_LOADER_CRC32 0x4fed4b58
#define NRV_LOADER_SIZE 4365
#define NRV_LOADER_ADLER32 0xf651185e
#define NRV_LOADER_CRC32 0x6461513e
unsigned char nrv_loader[4361] = {
unsigned char nrv_loader[4365] = {
128,124, 36, 8, 1, 15,133, 0, 0, 0, 0, 96,190, 69, 83, 73, /* 0x 0 */
48,141,190, 69, 68, 73, 48,102,255,135, 73, 67, 79, 78,102,129, /* 0x 10 */
135, 73, 67, 79, 78, 68, 82,199,135, 84, 76, 83, 65, 84, 76, 83, /* 0x 20 */
@@ -102,207 +102,207 @@ unsigned char nrv_loader[4361] = {
224, 16,102,139, 7,131,199, 2, 9,192,117, 0,139, 7,131,199, /* 0x 430 */
4,235, 0,135,254,141,143, 68, 69, 76, 84,169,102, 1, 12, 7, /* 0x 440 */
173, 9,192,117,247,193,233, 16,169,102, 1, 12, 7,173, 9,192, /* 0x 450 */
117,247,139,174, 86, 80, 82, 79,141,190, 73, 77, 71, 66,187, 0, /* 0x 460 */
16, 0, 0, 80, 84,106, 4, 83, 87,255,213,128,167, 83, 87, 82, /* 0x 470 */
73,127, 88, 80, 84, 80, 83, 87,255,213, 88, 97,141, 68, 36,128, /* 0x 480 */
106, 0, 57,196,117,250,131,236,128,141, 68, 36,128,106, 0, 57, /* 0x 490 */
196,117,250,131,236,128, 49,192, 64,194, 12, 0,233, 74, 77, 80, /* 0x 4a0 */
79, 85, 80, 88, 33,161,216,208,213, 0, 0, 0, 0, 0, 0, 0, /* 0x 4b0 */
117,247,139,174, 86, 80, 82, 79,141,190, 73, 77, 71, 66,187, 73, /* 0x 460 */
77, 71, 76, 80, 84,106, 4, 83, 87,255,213,141,135, 83, 87, 82, /* 0x 470 */
73,128, 32,127,128, 96, 40,127, 88, 80, 84, 80, 83, 87,255,213, /* 0x 480 */
88, 97,141, 68, 36,128,106, 0, 57,196,117,250,131,236,128,141, /* 0x 490 */
68, 36,128,106, 0, 57,196,117,250,131,236,128, 49,192, 64,194, /* 0x 4a0 */
12, 0,233, 74, 77, 80, 79, 85, 80, 88, 33,161,216,208,213, 0, /* 0x 4b0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 4c0 */
45, 0, 0, 0, 80, 69, 73, 83, 68, 76, 76, 49, 0, 0, 0, 0, /* 0x 4d0 */
0, 0, 0, 0, 0, 11, 0, 0, 0, 80, 69, 77, 65, 73, 78, 50, /* 0x 4e0 */
49, 0, 0, 0, 0, 0, 80, 69, 77, 65, 73, 78, 48, 49, 0, 11, /* 0x 4f0 */
0, 0, 0, 80, 69, 73, 67, 79, 78, 83, 49, 0, 23, 0, 0, 0, /* 0x 500 */
80, 69, 73, 67, 79, 78, 83, 50, 0, 30, 0, 0, 0, 80, 69, 73, /* 0x 510 */
67, 79, 78, 83, 90, 0, 39, 0, 0, 0, 80, 69, 84, 76, 83, 72, /* 0x 520 */
65, 75, 0, 39, 0, 0, 0, 80, 69, 77, 65, 73, 78, 48, 50, 0, /* 0x 530 */
49, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 53, 0, 0, /* 0x 540 */
0, 0, 0, 0, 0, 55, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 550 */
48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 56, /* 0x 560 */
0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 570 */
67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, /* 0x 580 */
0, 58, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 64, 0, /* 0x 590 */
0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 75, 0, 0, 0, 0, /* 0x 5a0 */
0, 0, 0, 77, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, /* 0x 5b0 */
2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, 0, 80, 0, 0, /* 0x 5c0 */
0, 0, 0, 0, 0, 82, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, /* 0x 5d0 */
49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 87, /* 0x 5e0 */
0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0,100, 0, 0, 0, /* 0x 5f0 */
0, 0, 0, 0,113, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, /* 0x 600 */
0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, 48, 0,113, 0, /* 0x 610 */
0, 0, 0, 0, 0, 0,117, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 620 */
50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 78, /* 0x 630 */
50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, /* 0x 640 */
69, 67, 51, 48, 0,128, 0, 0, 0, 0, 0, 0, 0,146, 0, 0, /* 0x 650 */
0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x 660 */
0, 0,176, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, /* 0x 670 */
0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0,190, 0, 0, 0, /* 0x 680 */
0, 0, 0, 0,203, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x 690 */
0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, 48, 0,203, 0, /* 0x 6a0 */
0, 0, 0, 0, 0, 0,207, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 6b0 */
51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,218, 0, 0, 0, 78, /* 0x 6c0 */
50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, /* 0x 6d0 */
85, 77, 77, 49, 0,218, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, /* 0x 6e0 */
48, 0,218, 0, 0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,220, /* 0x 6f0 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0,223, 0, 0, 0, /* 0x 700 */
78, 50, 66, 83, 77, 65, 54, 48, 0,232, 0, 0, 0, 0, 0, 0, /* 0x 710 */
0,246, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x 720 */
0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,246, 0, 0, 0, 0, /* 0x 730 */
0, 0, 0,254, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, /* 0x 740 */
0, 0, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 78, 50, 66, 68, /* 0x 750 */
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x 760 */
49, 0, 12, 1, 0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 78, 50, /* 0x 770 */
66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 780 */
67, 54, 48, 0, 34, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, /* 0x 790 */
0, 34, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 34, 1, /* 0x 7a0 */
0, 0, 0, 0, 0, 0, 36, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 7b0 */
49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, /* 0x 7c0 */
37, 1, 0, 0, 0, 0, 0, 0, 39, 1, 0, 0, 78, 50, 68, 68, /* 0x 7d0 */
69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, /* 0x 7e0 */
49, 0, 39, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 45, /* 0x 7f0 */
1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, 56, 1, 0, 0, /* 0x 800 */
0, 0, 0, 0, 58, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, /* 0x 810 */
0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 61, 1, /* 0x 820 */
0, 0, 0, 0, 0, 0, 63, 1, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 830 */
49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, /* 0x 840 */
68, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, 0, 81, 1, 0, /* 0x 850 */
0, 0, 0, 0, 0, 94, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 860 */
48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 94, /* 0x 870 */
1, 0, 0, 0, 0, 0, 0,100, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 880 */
67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0,109, 1, 0, 0, /* 0x 890 */
78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x 8a0 */
68, 69, 67, 51, 48, 0,109, 1, 0, 0, 0, 0, 0, 0,125, 1, /* 0x 8b0 */
0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 8c0 */
0, 0, 0,143, 1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, /* 0x 8d0 */
0, 0, 0, 0, 0, 0, 0, 0,177, 1, 0, 0, 78, 50, 68, 68, /* 0x 8e0 */
69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, /* 0x 8f0 */
48, 0,191, 1, 0, 0, 0, 0, 0, 0,204, 1, 0, 0, 78, 50, /* 0x 900 */
68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 910 */
83, 52, 48, 0,204, 1, 0, 0, 0, 0, 0, 0,208, 1, 0, 0, /* 0x 920 */
78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, /* 0x 930 */
0,219, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x 940 */
0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,219, 1, 0, 0, 78, /* 0x 950 */
50, 68, 83, 77, 65, 53, 48, 0,219, 1, 0, 0, 78, 50, 68, 70, /* 0x 960 */
65, 83, 53, 48, 0,221, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, /* 0x 970 */
48, 0,224, 1, 0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,233, /* 0x 980 */
1, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 990 */
67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, /* 0x 9a0 */
0,247, 1, 0, 0, 0, 0, 0, 0,255, 1, 0, 0, 78, 50, 68, /* 0x 9b0 */
70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 2, /* 0x 9c0 */
0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 9d0 */
50, 68, 70, 65, 83, 54, 49, 0, 13, 2, 0, 0, 0, 0, 0, 0, /* 0x 9e0 */
35, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x 9f0 */
0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 35, 2, 0, 0, 78, 82, /* 0x a00 */
86, 50, 68, 69, 78, 68, 0, 35, 2, 0, 0, 78, 50, 69, 83, 77, /* 0x a10 */
65, 49, 48, 0, 35, 2, 0, 0, 0, 0, 0, 0, 37, 2, 0, 0, /* 0x a20 */
78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, /* 0x a30 */
70, 65, 83, 49, 48, 0, 38, 2, 0, 0, 0, 0, 0, 0, 40, 2, /* 0x a40 */
0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x a50 */
50, 69, 70, 65, 83, 49, 49, 0, 40, 2, 0, 0, 78, 50, 69, 68, /* 0x a60 */
69, 67, 49, 48, 0, 46, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, /* 0x a70 */
48, 0, 57, 2, 0, 0, 0, 0, 0, 0, 59, 2, 0, 0, 78, 50, /* 0x a80 */
69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x a90 */
83, 50, 48, 0, 62, 2, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, /* 0x aa0 */
78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x ab0 */
68, 69, 67, 50, 48, 0, 69, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x ac0 */
51, 48, 0, 82, 2, 0, 0, 0, 0, 0, 0, 95, 2, 0, 0, 78, /* 0x ad0 */
50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, /* 0x ae0 */
65, 83, 51, 48, 0, 95, 2, 0, 0, 0, 0, 0, 0,101, 2, 0, /* 0x af0 */
0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, /* 0x b00 */
0, 0,110, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x b10 */
0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0,110, 2, 0, 0, /* 0x b20 */
0, 0, 0, 0,126, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, /* 0x b30 */
0, 0, 0, 0, 0, 0, 0, 0, 0,141, 2, 0, 0, 78, 50, 69, /* 0x b40 */
68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, /* 0x b50 */
0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, /* 0x b60 */
50, 69, 83, 77, 65, 52, 48, 0,205, 2, 0, 0, 0, 0, 0, 0, /* 0x b70 */
218, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, /* 0x b80 */
0, 78, 50, 69, 70, 65, 83, 52, 48, 0,218, 2, 0, 0, 0, 0, /* 0x b90 */
0, 0,222, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, /* 0x ba0 */
0, 0, 0, 0, 0, 0, 0,233, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x bb0 */
67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, /* 0x bc0 */
0,233, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, 48, 0,233, 2, /* 0x bd0 */
0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,235, 2, 0, 0, 78, /* 0x be0 */
50, 69, 68, 69, 67, 53, 48, 0,238, 2, 0, 0, 78, 50, 69, 83, /* 0x bf0 */
77, 65, 54, 48, 0,247, 2, 0, 0, 0, 0, 0, 0, 5, 3, 0, /* 0x c00 */
0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x c10 */
69, 70, 65, 83, 54, 48, 0, 5, 3, 0, 0, 0, 0, 0, 0, 13, /* 0x c20 */
3, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x c30 */
0, 0, 0, 0, 27, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x c40 */
0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 27, 3, /* 0x c50 */
0, 0, 0, 0, 0, 0, 49, 3, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x c60 */
49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, /* 0x c70 */
49, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, 0, 49, 3, 0, /* 0x c80 */
0, 80, 69, 77, 85, 76, 84, 73, 80, 0, 49, 3, 0, 0, 0, 0, /* 0x c90 */
0, 0, 58, 3, 0, 0, 80, 69, 77, 65, 73, 78, 48, 50, 0, 1, /* 0x ca0 */
0, 0, 0, 80, 69, 77, 65, 73, 78, 49, 48, 0, 58, 3, 0, 0, /* 0x cb0 */
80, 69, 67, 65, 76, 76, 84, 82, 0, 59, 3, 0, 0, 80, 69, 67, /* 0x cc0 */
84, 84, 80, 79, 83, 0, 59, 3, 0, 0, 80, 69, 67, 84, 84, 78, /* 0x cd0 */
85, 76, 0, 65, 3, 0, 0, 80, 69, 68, 85, 77, 77, 89, 48, 0, /* 0x ce0 */
67, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 67, 3, 0, /* 0x cf0 */
0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 81, 3, 0, 0, 0, 0, /* 0x d00 */
0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 5, /* 0x d10 */
0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, 86, 3, 0, 0, /* 0x d20 */
67, 84, 68, 85, 77, 77, 89, 49, 0, 91, 3, 0, 0, 67, 84, 66, /* 0x d30 */
83, 72, 82, 48, 49, 0, 91, 3, 0, 0, 67, 84, 66, 82, 79, 82, /* 0x d40 */
48, 49, 0, 95, 3, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, 0, /* 0x d50 */
97, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, 0,102, 3, 0, /* 0x d60 */
0, 0, 0, 0, 0,118, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x d70 */
48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0,118, /* 0x d80 */
3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0,123, 3, 0, 0, /* 0x d90 */
67, 65, 76, 76, 84, 82, 69, 57, 0,125, 3, 0, 0, 67, 65, 76, /* 0x da0 */
76, 84, 82, 49, 49, 0,127, 3, 0, 0, 0, 0, 0, 0,131, 3, /* 0x db0 */
0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 7, 0, 0, 0, 67, /* 0x dc0 */
84, 67, 76, 69, 86, 69, 50, 0,131, 3, 0, 0, 0, 0, 0, 0, /* 0x dd0 */
136, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, 0, /* 0x de0 */
0, 67, 65, 76, 76, 84, 82, 49, 50, 0,136, 3, 0, 0, 67, 84, /* 0x df0 */
68, 85, 77, 77, 89, 50, 0,138, 3, 0, 0, 67, 84, 66, 83, 72, /* 0x e00 */
82, 49, 49, 0,138, 3, 0, 0, 67, 84, 66, 82, 79, 82, 49, 49, /* 0x e10 */
0,142, 3, 0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0,144, 3, /* 0x e20 */
0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,149, 3, 0, 0, 0, /* 0x e30 */
0, 0, 0,156, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, /* 0x e40 */
5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, 0,156, 3, 0, /* 0x e50 */
0, 80, 69, 68, 85, 77, 77, 89, 49, 0,156, 3, 0, 0, 80, 69, /* 0x e60 */
73, 77, 80, 79, 82, 84, 0,156, 3, 0, 0, 0, 0, 0, 0,168, /* 0x e70 */
3, 0, 0, 80, 69, 73, 77, 68, 79, 78, 69, 0, 0, 0, 0, 0, /* 0x e80 */
80, 69, 73, 66, 89, 79, 82, 68, 0,200, 3, 0, 0, 0, 0, 0, /* 0x e90 */
0,202, 3, 0, 0, 80, 69, 73, 77, 79, 82, 68, 49, 0, 7, 0, /* 0x ea0 */
0, 0, 80, 69, 75, 51, 50, 79, 82, 68, 0,202, 3, 0, 0, 0, /* 0x eb0 */
0, 0, 0,218, 3, 0, 0, 80, 69, 73, 77, 80, 79, 82, 50, 0, /* 0x ec0 */
15, 0, 0, 0, 80, 69, 73, 77, 79, 82, 68, 49, 0,218, 3, 0, /* 0x ed0 */
0, 80, 69, 73, 77, 80, 79, 82, 50, 0,225, 3, 0, 0, 0, 0, /* 0x ee0 */
0, 0,247, 3, 0, 0, 80, 69, 73, 77, 80, 79, 82, 84, 0, 35, /* 0x ef0 */
0, 0, 0, 80, 69, 73, 69, 82, 68, 76, 76, 0,247, 3, 0, 0, /* 0x f00 */
80, 69, 73, 69, 82, 69, 88, 69, 0,253, 3, 0, 0, 80, 69, 73, /* 0x f10 */
77, 68, 79, 78, 69, 0, 3, 4, 0, 0, 80, 69, 73, 77, 80, 79, /* 0x f20 */
82, 57, 0, 3, 4, 0, 0, 80, 69, 82, 69, 76, 79, 67, 49, 0, /* 0x f30 */
3, 4, 0, 0, 80, 69, 82, 69, 76, 79, 67, 50, 0, 9, 4, 0, /* 0x f40 */
0, 80, 69, 82, 69, 76, 79, 67, 51, 0, 12, 4, 0, 0, 82, 69, /* 0x f50 */
76, 79, 67, 51, 50, 48, 0, 15, 4, 0, 0, 0, 0, 0, 0, 24, /* 0x f60 */
4, 0, 0, 82, 69, 76, 79, 67, 51, 50, 74, 0, 2, 0, 0, 0, /* 0x f70 */
82, 69, 76, 51, 50, 66, 73, 71, 0, 56, 4, 0, 0, 0, 0, 0, /* 0x f80 */
0, 60, 4, 0, 0, 82, 69, 76, 79, 67, 51, 50, 48, 0, 13, 0, /* 0x f90 */
0, 0, 82, 69, 76, 79, 67, 51, 50, 74, 0, 65, 4, 0, 0, 0, /* 0x fa0 */
0, 0, 0, 67, 4, 0, 0, 82, 69, 76, 79, 67, 51, 50, 48, 0, /* 0x fb0 */
13, 0, 0, 0, 82, 69, 76, 51, 50, 69, 78, 68, 0, 67, 4, 0, /* 0x fc0 */
0, 80, 69, 82, 69, 76, 79, 67, 57, 0, 67, 4, 0, 0, 80, 69, /* 0x fd0 */
82, 76, 79, 72, 73, 48, 0, 67, 4, 0, 0, 80, 69, 82, 76, 79, /* 0x fe0 */
72, 73, 90, 0, 75, 4, 0, 0, 80, 69, 82, 69, 76, 76, 79, 48, /* 0x ff0 */
0, 75, 4, 0, 0, 80, 69, 82, 69, 76, 76, 79, 90, 0, 85, 4, /* 0x1000 */
0, 0, 80, 69, 82, 69, 76, 72, 73, 48, 0, 85, 4, 0, 0, 80, /* 0x1010 */
69, 82, 69, 76, 72, 73, 90, 0, 98, 4, 0, 0, 80, 69, 68, 69, /* 0x1020 */
80, 72, 65, 75, 0, 98, 4, 0, 0, 80, 69, 68, 69, 80, 72, 65, /* 0x1030 */
88, 0,139, 4, 0, 0, 80, 69, 77, 65, 73, 78, 50, 48, 0,139, /* 0x1040 */
4, 0, 0, 80, 69, 82, 69, 84, 85, 82, 78, 95, 67, 76, 69, 65, /* 0x1050 */
82, 83, 84, 65, 67, 75, 0,140, 4, 0, 0, 80, 69, 82, 69, 84, /* 0x1060 */
85, 82, 78, 95, 67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 57, 0, /* 0x1070 */
153, 4, 0, 0, 80, 69, 68, 79, 74, 85, 77, 80, 95, 67, 76, 69, /* 0x1080 */
65, 82, 83, 84, 65, 67, 75, 0,153, 4, 0, 0, 80, 69, 68, 79, /* 0x1090 */
74, 85, 77, 80, 95, 67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 57, /* 0x10a0 */
0,166, 4, 0, 0, 80, 69, 77, 65, 73, 78, 50, 49, 0,166, 4, /* 0x10b0 */
0, 0, 80, 69, 82, 69, 84, 85, 82, 78, 0,166, 4, 0, 0, 80, /* 0x10c0 */
69, 68, 79, 74, 85, 77, 80, 0,172, 4, 0, 0, 80, 69, 68, 85, /* 0x10d0 */
77, 77, 89, 51, 0,177, 4, 0, 0, 85, 80, 88, 49, 72, 69, 65, /* 0x10e0 */
68, 0,177, 4, 0, 0, 80, 69, 84, 72, 69, 69, 78, 68, 0,209, /* 0x10f0 */
4, 0, 0,255,255,255,255,209, 4 /* 0x1100 */
0, 0, 0, 0, 0, 0, 45, 0, 80, 69, 73, 83, 68, 76, 76, 49, /* 0x 4d0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 80, 69, 77, /* 0x 4e0 */
65, 73, 78, 50, 49, 0, 0, 0, 0, 0, 80, 69, 77, 65, 73, 78, /* 0x 4f0 */
48, 49, 0, 11, 0, 0, 0, 80, 69, 73, 67, 79, 78, 83, 49, 0, /* 0x 500 */
23, 0, 0, 0, 80, 69, 73, 67, 79, 78, 83, 50, 0, 30, 0, 0, /* 0x 510 */
0, 80, 69, 73, 67, 79, 78, 83, 90, 0, 39, 0, 0, 0, 80, 69, /* 0x 520 */
84, 76, 83, 72, 65, 75, 0, 39, 0, 0, 0, 80, 69, 77, 65, 73, /* 0x 530 */
78, 48, 50, 0, 49, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, /* 0x 540 */
0, 53, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 78, 50, 66, /* 0x 550 */
68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 560 */
49, 48, 0, 56, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 78, /* 0x 570 */
50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, /* 0x 580 */
65, 83, 49, 49, 0, 58, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 590 */
48, 0, 64, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 75, /* 0x 5a0 */
0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 5b0 */
65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, /* 0x 5c0 */
0, 80, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 78, 50, 66, /* 0x 5d0 */
70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 5e0 */
50, 48, 0, 87, 0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, /* 0x 5f0 */
100, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0, 78, 50, 66, 68, /* 0x 600 */
69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, /* 0x 610 */
48, 0,113, 0, 0, 0, 0, 0, 0, 0,117, 0, 0, 0, 78, 50, /* 0x 620 */
66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, /* 0x 630 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, /* 0x 640 */
78, 50, 66, 68, 69, 67, 51, 48, 0,128, 0, 0, 0, 0, 0, 0, /* 0x 650 */
0,146, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, /* 0x 660 */
0, 0, 0, 0, 0, 0,176, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 670 */
53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0, /* 0x 680 */
190, 0, 0, 0, 0, 0, 0, 0,203, 0, 0, 0, 78, 50, 66, 68, /* 0x 690 */
69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, /* 0x 6a0 */
48, 0,203, 0, 0, 0, 0, 0, 0, 0,207, 0, 0, 0, 78, 50, /* 0x 6b0 */
66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,218, /* 0x 6c0 */
0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, /* 0x 6d0 */
78, 50, 66, 68, 85, 77, 77, 49, 0,218, 0, 0, 0, 78, 50, 66, /* 0x 6e0 */
83, 77, 65, 53, 48, 0,218, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 6f0 */
53, 48, 0,220, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, /* 0x 700 */
223, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0,232, 0, 0, /* 0x 710 */
0, 0, 0, 0, 0,246, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 720 */
48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,246, /* 0x 730 */
0, 0, 0, 0, 0, 0, 0,254, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 740 */
83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, /* 0x 750 */
78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 760 */
70, 65, 83, 54, 49, 0, 12, 1, 0, 0, 0, 0, 0, 0, 34, 1, /* 0x 770 */
0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 780 */
50, 66, 68, 69, 67, 54, 48, 0, 34, 1, 0, 0, 78, 82, 86, 50, /* 0x 790 */
66, 69, 78, 68, 0, 34, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, /* 0x 7a0 */
48, 0, 34, 1, 0, 0, 0, 0, 0, 0, 36, 1, 0, 0, 78, 50, /* 0x 7b0 */
68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 7c0 */
83, 49, 48, 0, 37, 1, 0, 0, 0, 0, 0, 0, 39, 1, 0, 0, /* 0x 7d0 */
78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, /* 0x 7e0 */
70, 65, 83, 49, 49, 0, 39, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 7f0 */
49, 48, 0, 45, 1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, /* 0x 800 */
56, 1, 0, 0, 0, 0, 0, 0, 58, 1, 0, 0, 78, 50, 68, 83, /* 0x 810 */
77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, /* 0x 820 */
48, 0, 61, 1, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0, 78, 50, /* 0x 830 */
68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, /* 0x 840 */
67, 50, 48, 0, 68, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, /* 0x 850 */
0, 81, 1, 0, 0, 0, 0, 0, 0, 94, 1, 0, 0, 78, 50, 68, /* 0x 860 */
68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 870 */
51, 48, 0, 94, 1, 0, 0, 0, 0, 0, 0,100, 1, 0, 0, 78, /* 0x 880 */
50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, /* 0x 890 */
109, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, /* 0x 8a0 */
0, 78, 50, 68, 68, 69, 67, 51, 48, 0,109, 1, 0, 0, 0, 0, /* 0x 8b0 */
0, 0,125, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, /* 0x 8c0 */
0, 0, 0, 0, 0, 0, 0,143, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 8d0 */
67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,177, 1, 0, 0, /* 0x 8e0 */
78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x 8f0 */
83, 77, 65, 52, 48, 0,191, 1, 0, 0, 0, 0, 0, 0,204, 1, /* 0x 900 */
0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, /* 0x 910 */
50, 68, 70, 65, 83, 52, 48, 0,204, 1, 0, 0, 0, 0, 0, 0, /* 0x 920 */
208, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, /* 0x 930 */
0, 0, 0, 0, 0,219, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 940 */
48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,219, /* 0x 950 */
1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0,219, 1, 0, 0, /* 0x 960 */
78, 50, 68, 70, 65, 83, 53, 48, 0,221, 1, 0, 0, 78, 50, 68, /* 0x 970 */
68, 69, 67, 53, 48, 0,224, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 980 */
54, 48, 0,233, 1, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 78, /* 0x 990 */
50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, /* 0x 9a0 */
65, 83, 54, 48, 0,247, 1, 0, 0, 0, 0, 0, 0,255, 1, 0, /* 0x 9b0 */
0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, /* 0x 9c0 */
0, 0, 13, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, /* 0x 9d0 */
0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 13, 2, 0, 0, /* 0x 9e0 */
0, 0, 0, 0, 35, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x 9f0 */
0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 35, 2, /* 0x a00 */
0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 35, 2, 0, 0, 78, /* 0x a10 */
50, 69, 83, 77, 65, 49, 48, 0, 35, 2, 0, 0, 0, 0, 0, 0, /* 0x a20 */
37, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x a30 */
0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 38, 2, 0, 0, 0, 0, /* 0x a40 */
0, 0, 40, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, /* 0x a50 */
0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 40, 2, 0, 0, /* 0x a60 */
78, 50, 69, 68, 69, 67, 49, 48, 0, 46, 2, 0, 0, 78, 50, 69, /* 0x a70 */
83, 77, 65, 50, 48, 0, 57, 2, 0, 0, 0, 0, 0, 0, 59, 2, /* 0x a80 */
0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, /* 0x a90 */
50, 69, 70, 65, 83, 50, 48, 0, 62, 2, 0, 0, 0, 0, 0, 0, /* 0x aa0 */
64, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, /* 0x ab0 */
0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 69, 2, 0, 0, 78, 50, /* 0x ac0 */
69, 83, 77, 65, 51, 48, 0, 82, 2, 0, 0, 0, 0, 0, 0, 95, /* 0x ad0 */
2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, /* 0x ae0 */
78, 50, 69, 70, 65, 83, 51, 48, 0, 95, 2, 0, 0, 0, 0, 0, /* 0x af0 */
0,101, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, /* 0x b00 */
0, 0, 0, 0, 0, 0,110, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b10 */
51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b20 */
110, 2, 0, 0, 0, 0, 0, 0,126, 2, 0, 0, 78, 50, 69, 68, /* 0x b30 */
69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 2, 0, /* 0x b40 */
0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x b50 */
0, 0,159, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, /* 0x b60 */
0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,205, 2, 0, 0, /* 0x b70 */
0, 0, 0, 0,218, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x b80 */
0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, 0,218, 2, /* 0x b90 */
0, 0, 0, 0, 0, 0,222, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x ba0 */
51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,233, 2, 0, 0, 78, /* 0x bb0 */
50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, /* 0x bc0 */
85, 77, 77, 49, 0,233, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, /* 0x bd0 */
48, 0,233, 2, 0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,235, /* 0x be0 */
2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0,238, 2, 0, 0, /* 0x bf0 */
78, 50, 69, 83, 77, 65, 54, 48, 0,247, 2, 0, 0, 0, 0, 0, /* 0x c00 */
0, 5, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x c10 */
0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0, 5, 3, 0, 0, 0, /* 0x c20 */
0, 0, 0, 13, 3, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, /* 0x c30 */
0, 0, 0, 0, 0, 0, 0, 0, 27, 3, 0, 0, 78, 50, 69, 68, /* 0x c40 */
69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, /* 0x c50 */
49, 0, 27, 3, 0, 0, 0, 0, 0, 0, 49, 3, 0, 0, 78, 50, /* 0x c60 */
69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x c70 */
67, 54, 48, 0, 49, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, /* 0x c80 */
0, 49, 3, 0, 0, 80, 69, 77, 85, 76, 84, 73, 80, 0, 49, 3, /* 0x c90 */
0, 0, 0, 0, 0, 0, 58, 3, 0, 0, 80, 69, 77, 65, 73, 78, /* 0x ca0 */
48, 50, 0, 1, 0, 0, 0, 80, 69, 77, 65, 73, 78, 49, 48, 0, /* 0x cb0 */
58, 3, 0, 0, 80, 69, 67, 65, 76, 76, 84, 82, 0, 59, 3, 0, /* 0x cc0 */
0, 80, 69, 67, 84, 84, 80, 79, 83, 0, 59, 3, 0, 0, 80, 69, /* 0x cd0 */
67, 84, 84, 78, 85, 76, 0, 65, 3, 0, 0, 80, 69, 68, 85, 77, /* 0x ce0 */
77, 89, 48, 0, 67, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, /* 0x cf0 */
0, 67, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 81, 3, /* 0x d00 */
0, 0, 0, 0, 0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d10 */
48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, /* 0x d20 */
86, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 91, 3, 0, /* 0x d30 */
0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 91, 3, 0, 0, 67, 84, /* 0x d40 */
66, 82, 79, 82, 48, 49, 0, 95, 3, 0, 0, 67, 84, 66, 83, 87, /* 0x d50 */
65, 48, 49, 0, 97, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, /* 0x d60 */
0,102, 3, 0, 0, 0, 0, 0, 0,118, 3, 0, 0, 67, 65, 76, /* 0x d70 */
76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d80 */
49, 48, 0,118, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0, /* 0x d90 */
123, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0,125, 3, 0, /* 0x da0 */
0, 67, 65, 76, 76, 84, 82, 49, 49, 0,127, 3, 0, 0, 0, 0, /* 0x db0 */
0, 0,131, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 7, /* 0x dc0 */
0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0,131, 3, 0, 0, /* 0x dd0 */
0, 0, 0, 0,136, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, /* 0x de0 */
0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0,136, 3, /* 0x df0 */
0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0,138, 3, 0, 0, 67, /* 0x e00 */
84, 66, 83, 72, 82, 49, 49, 0,138, 3, 0, 0, 67, 84, 66, 82, /* 0x e10 */
79, 82, 49, 49, 0,142, 3, 0, 0, 67, 84, 66, 83, 87, 65, 49, /* 0x e20 */
49, 0,144, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,149, /* 0x e30 */
3, 0, 0, 0, 0, 0, 0,156, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x e40 */
82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, /* 0x e50 */
0,156, 3, 0, 0, 80, 69, 68, 85, 77, 77, 89, 49, 0,156, 3, /* 0x e60 */
0, 0, 80, 69, 73, 77, 80, 79, 82, 84, 0,156, 3, 0, 0, 0, /* 0x e70 */
0, 0, 0,168, 3, 0, 0, 80, 69, 73, 77, 68, 79, 78, 69, 0, /* 0x e80 */
0, 0, 0, 0, 80, 69, 73, 66, 89, 79, 82, 68, 0,200, 3, 0, /* 0x e90 */
0, 0, 0, 0, 0,202, 3, 0, 0, 80, 69, 73, 77, 79, 82, 68, /* 0x ea0 */
49, 0, 7, 0, 0, 0, 80, 69, 75, 51, 50, 79, 82, 68, 0,202, /* 0x eb0 */
3, 0, 0, 0, 0, 0, 0,218, 3, 0, 0, 80, 69, 73, 77, 80, /* 0x ec0 */
79, 82, 50, 0, 15, 0, 0, 0, 80, 69, 73, 77, 79, 82, 68, 49, /* 0x ed0 */
0,218, 3, 0, 0, 80, 69, 73, 77, 80, 79, 82, 50, 0,225, 3, /* 0x ee0 */
0, 0, 0, 0, 0, 0,247, 3, 0, 0, 80, 69, 73, 77, 80, 79, /* 0x ef0 */
82, 84, 0, 35, 0, 0, 0, 80, 69, 73, 69, 82, 68, 76, 76, 0, /* 0x f00 */
247, 3, 0, 0, 80, 69, 73, 69, 82, 69, 88, 69, 0,253, 3, 0, /* 0x f10 */
0, 80, 69, 73, 77, 68, 79, 78, 69, 0, 3, 4, 0, 0, 80, 69, /* 0x f20 */
73, 77, 80, 79, 82, 57, 0, 3, 4, 0, 0, 80, 69, 82, 69, 76, /* 0x f30 */
79, 67, 49, 0, 3, 4, 0, 0, 80, 69, 82, 69, 76, 79, 67, 50, /* 0x f40 */
0, 9, 4, 0, 0, 80, 69, 82, 69, 76, 79, 67, 51, 0, 12, 4, /* 0x f50 */
0, 0, 82, 69, 76, 79, 67, 51, 50, 48, 0, 15, 4, 0, 0, 0, /* 0x f60 */
0, 0, 0, 24, 4, 0, 0, 82, 69, 76, 79, 67, 51, 50, 74, 0, /* 0x f70 */
2, 0, 0, 0, 82, 69, 76, 51, 50, 66, 73, 71, 0, 56, 4, 0, /* 0x f80 */
0, 0, 0, 0, 0, 60, 4, 0, 0, 82, 69, 76, 79, 67, 51, 50, /* 0x f90 */
48, 0, 13, 0, 0, 0, 82, 69, 76, 79, 67, 51, 50, 74, 0, 65, /* 0x fa0 */
4, 0, 0, 0, 0, 0, 0, 67, 4, 0, 0, 82, 69, 76, 79, 67, /* 0x fb0 */
51, 50, 48, 0, 13, 0, 0, 0, 82, 69, 76, 51, 50, 69, 78, 68, /* 0x fc0 */
0, 67, 4, 0, 0, 80, 69, 82, 69, 76, 79, 67, 57, 0, 67, 4, /* 0x fd0 */
0, 0, 80, 69, 82, 76, 79, 72, 73, 48, 0, 67, 4, 0, 0, 80, /* 0x fe0 */
69, 82, 76, 79, 72, 73, 90, 0, 75, 4, 0, 0, 80, 69, 82, 69, /* 0x ff0 */
76, 76, 79, 48, 0, 75, 4, 0, 0, 80, 69, 82, 69, 76, 76, 79, /* 0x1000 */
90, 0, 85, 4, 0, 0, 80, 69, 82, 69, 76, 72, 73, 48, 0, 85, /* 0x1010 */
4, 0, 0, 80, 69, 82, 69, 76, 72, 73, 90, 0, 98, 4, 0, 0, /* 0x1020 */
80, 69, 68, 69, 80, 72, 65, 75, 0, 98, 4, 0, 0, 80, 69, 68, /* 0x1030 */
69, 80, 72, 65, 88, 0,145, 4, 0, 0, 80, 69, 77, 65, 73, 78, /* 0x1040 */
50, 48, 0,145, 4, 0, 0, 80, 69, 82, 69, 84, 85, 82, 78, 95, /* 0x1050 */
67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 0,146, 4, 0, 0, 80, /* 0x1060 */
69, 82, 69, 84, 85, 82, 78, 95, 67, 76, 69, 65, 82, 83, 84, 65, /* 0x1070 */
67, 75, 57, 0,159, 4, 0, 0, 80, 69, 68, 79, 74, 85, 77, 80, /* 0x1080 */
95, 67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 0,159, 4, 0, 0, /* 0x1090 */
80, 69, 68, 79, 74, 85, 77, 80, 95, 67, 76, 69, 65, 82, 83, 84, /* 0x10a0 */
65, 67, 75, 57, 0,172, 4, 0, 0, 80, 69, 77, 65, 73, 78, 50, /* 0x10b0 */
49, 0,172, 4, 0, 0, 80, 69, 82, 69, 84, 85, 82, 78, 0,172, /* 0x10c0 */
4, 0, 0, 80, 69, 68, 79, 74, 85, 77, 80, 0,178, 4, 0, 0, /* 0x10d0 */
80, 69, 68, 85, 77, 77, 89, 51, 0,183, 4, 0, 0, 85, 80, 88, /* 0x10e0 */
49, 72, 69, 65, 68, 0,183, 4, 0, 0, 80, 69, 84, 72, 69, 69, /* 0x10f0 */
78, 68, 0,215, 4, 0, 0,255,255,255,255,215, 4 /* 0x1100 */
};
+58 -36
View File
@@ -31,19 +31,33 @@
// section is now completely freestanding
#if defined(__GNUC__)
# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
# define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
# elif defined(__GNUC_MINOR__)
# define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
# else
# define ACC_CC_GNUC (__GNUC__ * 0x10000L)
# endif
#endif
#define ACC_UNUSED(var) ((void) var)
/*************************************************************************
//
**************************************************************************/
// <stddef.h>
typedef long ptrdiff_t;
typedef long ssize_t;
typedef unsigned long size_t;
// <stdint.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned uint32_t;
#if defined(__GNUC__)
#if (ACC_CC_GNUC >= 0x020800ul)
__extension__ typedef long long int64_t;
__extension__ typedef unsigned long long uint64_t;
#elif defined(_WIN32)
@@ -119,6 +133,16 @@ struct timespec {
#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
/*************************************************************************
// i386 syscalls
//
// Because of different <asm/unistd.h> versions and subtle bugs
// in both gcc and egcs we define all syscalls manually.
//
// Also, errno conversion is not necessary in our case, and we
// use optimized assembly statements to further decrease the size.
**************************************************************************/
#if defined(__i386__) /*{*/
// <asm/unistd.h>
@@ -148,17 +172,6 @@ struct timespec {
#define __NR_nanosleep 162
#define __NR_getcwd 183
/*************************************************************************
// syscalls
//
// Because of different <asm/unistd.h> versions and subtle bugs
// in both gcc and egcs we define all syscalls manually.
//
// Also, errno conversion is not necessary in our case, and we
// use optimized assembly statements to further decrease the size.
**************************************************************************/
#undef _syscall0
#undef _syscall1
#undef _syscall2
@@ -214,6 +227,27 @@ type name(type1 arg1) \
return (type) __res; \
}
#define _syscall1nr(name,type1,arg1) \
void __attribute__((__noreturn__)) name(type1 arg1) \
{ \
if (Z1(__NR_##name)) { \
if (Z0(arg1)) { \
__asm__ __volatile__ ("xorl %%ebx,%%ebx; push %0; popl %%eax; int $0x80" \
: : "g" (__NR_##name) ); \
} else if (Z1(arg1)) { \
__asm__ __volatile__ ("push %1; popl %%ebx; push %0; popl %%eax; int $0x80" \
: : "g" (__NR_##name),"g" ((long)(arg1)) ); \
} else { \
__asm__ __volatile__ ("push %0; popl %%eax; int $0x80" \
: : "g" (__NR_##name),"b" ((long)(arg1))); \
} \
} else { \
__asm__ __volatile__ ("int $0x80" \
: : "a" (__NR_##name),"b" ((long)(arg1))); \
} \
for(;;) ; \
}
// special for mmap; somehow Z0(arg1) and Z1(arg1) do not work
#define _syscall1m(type,name,type1,arg1) \
type name(type1 arg1) \
@@ -310,7 +344,7 @@ static inline _syscall1(int,adjtimex,struct timex *,ntx)
static inline _syscall1(void *,brk,void *,high)
static inline _syscall1(int,close,int,fd)
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
static inline _syscall1(int,_exit,int,exitcode)
static inline _syscall1nr(_exit,int,exitcode)
static inline _syscall3(int,fcntl,int,fd,int,cmd,long,arg)
static inline _syscall2(int,ftruncate,int,fd,size_t,len)
static inline _syscall0(pid_t,fork)
@@ -319,31 +353,29 @@ static inline _syscall0(pid_t,getpid)
static inline _syscall2(int,getrusage,int,who,struct rusage *,usage);
static inline _syscall2(int,gettimeofday,struct timeval *,tv,void *,tz)
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,whence)
static inline _syscall1m(caddr_t,mmap,const int *,args)
static inline _syscall3(int,mprotect,void *,addr,size_t,len,int,prot)
static inline _syscall3(int,msync,const void *,start,size_t,length,int,flags)
static inline _syscall2(int,munmap,void *,start,size_t,length)
static inline _syscall2(int,nanosleep,const struct timespec *,rqtp,struct timespec *,rmtp)
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
static inline _syscall1(int,personality,unsigned long,persona)
static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
static inline _syscall3(ssize_t,read,int,fd,void *,buf,size_t,count)
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
static inline _syscall3(ssize_t,write,int,fd,const void *,buf,size_t,count)
static inline _syscall1(int,unlink,const char *,file)
#undef Z0
#undef Z1
#else /*}{ generic */
extern void *brk(void *);
extern int close(int);
extern void *mmap(void *, size_t, int, int, int, off_t);
extern int munmap(void *, size_t);
extern int mprotect(void const *, size_t, int);
extern int open(char const *, unsigned, unsigned);
extern size_t read(int, void *, size_t);
void *brk(void *);
int close(int);
void *mmap(void *, size_t, int, int, int, off_t);
int munmap(void *, size_t);
int mprotect(void const *, size_t, int);
int open(char const *, unsigned, unsigned);
ssize_t read(int, void *, size_t);
#endif /*}*/
@@ -499,8 +531,8 @@ typedef unsigned int nrv_uint32;
// From ../p_unix.h
struct b_info { // 12-byte header before each compressed block
unsigned sz_unc; // uncompressed_size
unsigned sz_cpr; // compressed_size
uint32_t sz_unc; // uncompressed_size
uint32_t sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
@@ -528,16 +560,6 @@ struct p_info // 12-byte packed program header follows stub loader
((type) ((uintptr_t) (var)))
#if defined(__GNUC__)
# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
# define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
# elif defined(__GNUC_MINOR__)
# define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
# else
# define ACC_CC_GNUC (__GNUC__ * 0x10000L)
# endif
#endif
#if (ACC_CC_GNUC >= 0x030300)
# define __attribute_cdecl __attribute__((__cdecl__, __used__))
#elif (ACC_CC_GNUC >= 0x020700)
+4 -2
View File
@@ -168,7 +168,7 @@ upx_bzero(char *p, size_t len)
static void
auxv_up(Elf32_auxv_t *av, int const type, unsigned const value)
auxv_up(Elf32_auxv_t *av, unsigned type, unsigned const value)
{
if (av)
for (;; ++av) {
@@ -306,12 +306,14 @@ void *upx_main(
Elf32_Addr entry;
Extent xi, xo, xi0;
xi.buf = (char *)(1+ (struct p_info const *)(1+ li)); // &b_info
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));
xo.buf = (char *)ehdr;
xo.size = ((struct b_info const *)xi.buf)->sz_unc;
xi0 = xi;
ACC_UNUSED(sz_ehdr);
// ehdr = Uncompress Ehdr and Phdrs
unpackExtent(&xi, &xo, f_decompress, 0); // never filtered?
+17 -7
View File
@@ -29,8 +29,10 @@
<jreiser@users.sourceforge.net>
*/
typedef unsigned int size_t;
typedef unsigned long long off_t;
typedef long ssize_t;
typedef unsigned long size_t;
typedef size_t uintptr_t;
__extension__ typedef unsigned long long off_t;
typedef unsigned char nrv_byte;
typedef unsigned int nrv_uint;
@@ -39,7 +41,15 @@ typedef unsigned int nrv_uint;
#define PAGE_SIZE -PAGE_MASK
#define O_RDONLY 0
/*extern int exit(int) __attribute__ ((__noreturn__));*/
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);
#define CONST_CAST(type, var) \
((type) ((uintptr_t) (var)))
/*************************************************************************
// configuration section
@@ -318,7 +328,7 @@ do_xmap(
{
Mach_segment_command const *sc = (Mach_segment_command const *)(1+ mhdr);
Mach_ppc_thread_state const *entry = 0;
int j;
unsigned j;
for ( j=0; j < mhdr->ncmds; ++j,
(sc = (Mach_segment_command const *)(sc->cmdsize + (char const *)sc))
@@ -387,7 +397,7 @@ upx_main(
{
Mach_ppc_thread_state const *entry;
Extent xi, xo, xi0;
xi.buf = (char *)(1+ (struct p_info const *)(1+ li)); // &b_info
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));
xo.buf = (char *)mhdr;
xo.size = ((struct b_info const *)xi.buf)->sz_unc;
@@ -400,7 +410,7 @@ upx_main(
{ // Map dyld dynamic loader
Mach_load_command const *lc = (Mach_load_command const *)(1+ mhdr);
int j;
unsigned j;
for (j=0; j < mhdr->ncmds; ++j,
(lc = (Mach_load_command const *)(lc->cmdsize + (char const *)lc))
@@ -411,7 +421,7 @@ upx_main(
if (0 > fdi) {
err_exit(18);
}
if (sz_mhdr!=read(fdi, (void *)mhdr, sz_mhdr)) {
if ((ssize_t)sz_mhdr!=read(fdi, (void *)mhdr, sz_mhdr)) {
ERR_LAB
err_exit(19);
}
+9 -3
View File
@@ -9,10 +9,10 @@
#define r30 30
#define r31 31
/* Stack pointer */
/* Stack pointer */
#define sp 1
/* Subroutine arguments; not saved by callee */
/* Subroutine arguments; not saved by callee */
#define a0 3
#define a1 4
#define a2 5
@@ -22,7 +22,7 @@
#define a6 9
#define a7 10
/* Scratch (temporary) registers; not saved by callee */
/* Scratch (temporary) registers; not saved by callee */
#define t0 2
#define t1 11
#define t2 12
@@ -38,3 +38,9 @@
#define movr mr
#endif /*} __PPC_REGS__ */
/*
vi:ts=4:et:nowrap
*/
View File
+4
View File
@@ -0,0 +1,4 @@
amd64-linux-sstrip
i386-linux-sstrip
sstrip
sstrip.exe
+5 -5
View File
@@ -1,6 +1,6 @@
#define UPX_VERSION_HEX 0x019400 /* 01.94.00 */
#define UPX_VERSION_STRING "1.94 beta"
#define UPX_VERSION_STRING4 "1.94"
#define UPX_VERSION_DATE "Mar 11th 2006"
#define UPX_VERSION_DATE_ISO "2006-03-11"
#define UPX_VERSION_HEX 0x019600 /* 01.96.00 */
#define UPX_VERSION_STRING "1.96"
#define UPX_VERSION_STRING4 "1.96"
#define UPX_VERSION_DATE "Apr 13th 2006"
#define UPX_VERSION_DATE_ISO "2006-04-13"
#define UPX_VERSION_YEAR "2006"