Compare commits

...

194 Commits

Author SHA1 Message Date
Markus F.X.J. Oberhumer ace2359e7b Bump tentative release date. 2007-07-31 15:06:53 +02:00
Markus F.X.J. Oberhumer 617e6510a5 docs: mention a workaround for --exact option. 2007-07-31 15:00:38 +02:00
Markus F.X.J. Oberhumer 26024770b8 For the moment we always throwCantPack() for arm/pe and win32/pe. 2007-07-30 17:47:42 +02:00
Markus F.X.J. Oberhumer d556f58e34 Fix screen problems by not relying on pass number in startCallback(). 2007-07-30 17:27:43 +02:00
Markus F.X.J. Oberhumer b6f302dfc0 Makefile: use /bin/echo for better portability. 2007-07-30 12:56:35 +02:00
Markus F.X.J. Oberhumer 8e9b5f14af Small Makefile updates. 2007-07-11 07:03:05 +02:00
Markus F.X.J. Oberhumer 3635c00143 Added support for LZMA SDK 4.49. Compiles, but pretty much untested. 2007-07-08 13:58:08 +02:00
Markus F.X.J. Oberhumer abc71baaa6 Avoid some warnings. 2007-07-08 11:42:45 +02:00
John Reiser 959aaebede bvmlinuz piggy.o need not be last in bzImage 2007-07-02 14:27:31 -07:00
John Reiser d17f8c5049 linux-2.6.21.5 CONFIG_PARAVIRT 2007-07-02 12:48:14 -07:00
Markus F.X.J. Oberhumer 42a7201a70 Updated README.1ST. 2007-06-19 15:26:02 +02:00
Markus F.X.J. Oberhumer 1f1744a49a Added new options --no-mode, --no-owner and --no-time. 2007-06-19 15:14:12 +02:00
Markus F.X.J. Oberhumer fd7dbe5bd9 Update docs of --exact option. 2007-06-19 14:49:53 +02:00
Markus F.X.J. Oberhumer 984549400d Clean up various names in getFullName(). 2007-06-12 14:25:00 +02:00
Markus F.X.J. Oberhumer cf0c49277e Add processing instructions to gpp_inc.py. 2007-06-12 13:40:35 +02:00
Markus F.X.J. Oberhumer 16c3f9fa9c Small Makefile updates. 2007-06-12 12:46:56 +02:00
John Reiser 2f2539cf34 workaround weak python script gpp_inc.py 2007-06-10 06:54:10 -07:00
John Reiser e66823d017 mipsel.r3000-linux: flush cache for NRV, fix stub copying when big 2007-06-09 17:13:50 -07:00
John Reiser 881c32a3df fix NRV_HEAD and NRV_TAIL in stub for mipsel.r3000-linux 2007-06-09 13:52:56 -07:00
John Reiser ea0a361c35 fix argv[0] on PowerPC with --lzma 2007-06-04 10:13:14 -07:00
László Molnár dc60f8bb7b merge 2007-05-18 16:11:11 +02:00
László Molnár 9e92c9ea12 pe: added a check for too small object alignment 2007-05-17 18:02:50 +02:00
John Reiser a503a54240 mipsel remember /proc/self/exe in environment 2007-05-16 15:37:22 -07:00
John Reiser 265957712a merge 2007-05-16 13:56:37 -07:00
John Reiser c26962bb71 fix build glitch 2007-05-16 13:53:17 -07:00
John Reiser a428eddf93 catch up automatically-generated files 2007-05-16 13:51:44 -07:00
John Reiser dc4f7eb2f9 mipsel close() 2007-05-16 13:51:00 -07:00
John Reiser d54ac1ba91 use register $25 for trampoline 2007-05-16 13:50:16 -07:00
John Reiser a3d46b18ac cacheflush 2007-05-16 13:49:54 -07:00
John Reiser e81dd05666 bug in make_hatch_*(); simplify xfind_pages() when MAP_FIXED; update AT_BASE 2007-05-16 13:48:44 -07:00
Markus F.X.J. Oberhumer 29394935e3 Use -Wstrict-prototypes CFLAGS in stub/Makefile. 2007-05-16 04:34:30 +02:00
Markus F.X.J. Oberhumer df8acc4ed7 Added .NOTPARALLEL to stub/Makefile. 2007-05-14 11:30:40 +02:00
John Reiser 81928d4ab1 mipsel stub escape hatch for munmap 2007-05-10 13:13:11 -07:00
John Reiser 3ebf93e03d mipsel syscall read+write of same register 2007-05-09 22:17:09 -07:00
John Reiser 59e4032f1f mipsel stub syscall registers 2007-05-08 13:33:00 -07:00
John Reiser 8f15777427 merge 2007-05-08 10:43:50 -07:00
John Reiser 748c4bf780 mipsel stub system calls 2007-05-08 10:41:13 -07:00
László Molnár befcf6d2b3 merge 2007-05-08 18:25:00 +02:00
László Molnár 48236ecd3c fixed an incorrect error message caused by a bug in relocation handling 2007-05-08 18:23:41 +02:00
Markus F.X.J. Oberhumer f340f84de7 Avoid warnings. 2007-05-08 16:12:42 +02:00
Markus F.X.J. Oberhumer 40e19293f9 Added throwOutOfMemoryException(). 2007-05-08 15:28:35 +02:00
John Reiser f252f824a4 mipsel conditional stub/src/i386-linux.elf-main.c 2007-05-08 05:48:15 -07:00
John Reiser 1d7e5a8130 typedef struct Extent 2007-05-08 05:18:41 -07:00
John Reiser cb2ff92c2f mipsel hack stub 2007-05-07 21:03:58 -07:00
John Reiser ef373ab54f mipsel hacking 2007-05-07 19:20:25 -07:00
John Reiser 9141a78c29 mipsel stub for mmap on Linux (not NetBSD); and subroutine arg[4..6]
in t0..t2 instead of on stack, to match LMZA_DEC20
2007-05-07 07:02:16 -07:00
John Reiser 10a6370738 hacking UPX_F_LINUX_ELF32_MIPSEL 2007-05-06 14:21:25 -07:00
John Reiser 573009eeb6 new format UPX_F_LINUX_ELF32_MIPSEL [work in progress] 2007-05-06 06:17:49 -07:00
John Reiser c3363712d9 PackVmlinuxBase<T>::pack() EM_PPC filter only contiguous instruction sections 2007-05-01 19:12:55 -07:00
John Reiser faa33d89a2 Documentation: UPX_F_VMLINUX_PPC32 changes to arch/powerpc/boot/main.c 2007-04-30 13:48:50 -07:00
John Reiser f347458c53 new format UPX_F_VMLINUX_PPC32 Linux kernel for PowerPC (32-bit) 2007-04-30 13:34:06 -07:00
Markus F.X.J. Oberhumer 530e6d9196 Bump version for next release. 2007-04-30 19:34:26 +02:00
Markus F.X.J. Oberhumer b398e18e12 Added tag for RELEASE_300. 2007-04-30 19:32:35 +02:00
Markus F.X.J. Oberhumer 747e8370e0 Remove debug leftover. 2007-04-26 16:20:01 +02:00
Markus F.X.J. Oberhumer 2c67875781 Pass and verify original data in all xxx_test_overlap() functions. 2007-04-26 16:15:49 +02:00
Markus F.X.J. Oberhumer c96e8a8c19 Better underflow and overflow handling in Packer::findOverlapOverhead(). 2007-04-26 13:59:01 +02:00
Markus F.X.J. Oberhumer 5f203fc082 Avoid warnings. 2007-04-26 13:13:26 +02:00
John Reiser b943c9b471 fix upx_zlib_test_overlap 2007-04-25 20:24:30 -07:00
John Reiser 1a90a1daa8 Implement upx_zlib_test_overlap() following upx_lzma_test_overlap() 2007-04-25 20:19:40 -07:00
John Reiser 72dfc743fd upx_lzma_test_overlap cleanup 2007-04-25 20:11:04 -07:00
John Reiser 465307655b Implement real upx_lzma_test_overlap().
Also make Packer::findOverlapOverhead() more pessimistic in worst case.
2007-04-25 16:11:33 -07:00
John Reiser 6ce71e6694 upx_lzma_test_overlap revert to 256 [FIXME] 2007-04-25 10:54:00 -07:00
John Reiser 7f01b3b92a upx_lzma_test_overlap() heuristic overlap_overhead up to 0xA00 2007-04-25 09:19:29 -07:00
John Reiser 76950d56b9 PackUnix::canPack allow incompressible extents in getPackHeader() 2007-04-25 09:18:31 -07:00
Markus F.X.J. Oberhumer c11e0d02b3 Added parm "allow_incompressible" to Packer::{get,read}PackHeader(). 2007-04-25 17:33:39 +02:00
Markus F.X.J. Oberhumer 4c798c1718 Use official name "armeb" instead of "armbe". 2007-04-25 16:50:51 +02:00
Markus F.X.J. Oberhumer 450d7e9ad4 Merge. 2007-04-25 16:42:41 +02:00
Markus F.X.J. Oberhumer b8ab79c83e Use offical name "arm" instead of "armel". 2007-04-25 16:42:08 +02:00
John Reiser 6934bdd533 allow unpack of incompressible extents, such as
http://www.equi4.com/pub/tk/8.4.13/tclkit-linux-x86.gz
2007-04-25 07:34:24 -07:00
John Reiser 84dedb73a5 propagate changes arm*-linux.elf-fold.h 2007-04-24 16:08:34 -07:00
John Reiser 8964aa5221 fix endian issue with .b_method (arm-linux.elf-entry.S) 2007-04-24 12:05:53 -07:00
Markus F.X.J. Oberhumer 3481ae236c Added missing armeb generated files. 2007-04-23 18:11:24 +02:00
John Reiser 46adc5f8a4 armeb-linux.kernel.vmlinux.S 2007-04-23 09:00:28 -07:00
John Reiser 5296df5899 add armeb-linux.kernel.vmlinux-head.S 2007-04-23 08:53:53 -07:00
John Reiser 13dad4be16 merge 2007-04-23 07:22:36 -07:00
John Reiser b5d0c343b4 sync src/Makefile with Markus bfb3d24c1fe7 2007-04-23 07:15:42 -07:00
Markus F.X.J. Oberhumer b00b945264 src/Makefile: avoid rebuilding .depend file on clean targets 2007-04-23 08:23:01 +02:00
John Reiser 3bda09e105 more cleanup armel etc 2007-04-22 20:04:13 -07:00
John Reiser 32d32c4e4a cleanup ARMEL etc. 2007-04-22 19:52:23 -07:00
John Reiser 497441b54e merge 2007-04-22 16:19:13 -07:00
John Reiser 9c564fd4c7 Add file formst UPX_F_LINUX_ELF32_ARMEB and normalize spelling
of ARMEL, ARMEB, armel, armeb.
2007-04-22 16:09:18 -07:00
John Reiser 0c2263d0e9 fix O_INP etc because cto8 is not pushed.
This change should have paralleled 1382:367eb149f29c
(Sun Aug 20 11:19:37 2006 -0700)
2007-04-22 15:50:24 -07:00
John Reiser 3d4d30766d merge 2007-04-22 15:24:17 -07:00
John Reiser 99d84d44fc propagate change to O_INP 2007-04-22 14:50:58 -07:00
John Reiser 41ba7077ad propagate change to O_INP 2007-04-22 14:50:58 -07:00
John Reiser 8a929a91c3 Fix O_INP etc because calling sequence changed to omit cto8.
This parallel change was forgotten at:
   changeset:   1382:367eb149f29c
   date:        Sun Aug 20 11:19:37 2006 -0700
   summary:     i386-linux.elf decompress does not need cto8
2007-04-22 14:47:08 -07:00
Markus F.X.J. Oberhumer 0604f06841 Backed out changeset 1b7b0715e0ab0d3b2e8afc96ac95d46d44bf3618 2007-04-23 07:36:46 +02:00
John Reiser 229924adf9 Fix O_INP etc because calling sequence changed to omit cto8.
This parallel change was forgotten at:
   changeset:   1382:367eb149f29c
   date:        Sun Aug 20 11:19:37 2006 -0700
   summary:     i386-linux.elf decompress does not need cto8
2007-04-22 14:47:08 -07:00
Markus F.X.J. Oberhumer df988b7c69 Bump tentative release date. 2007-04-22 16:55:41 +02:00
John Reiser e8106e2e34 propagate change to 'loadcon8' macro 2007-04-18 09:55:15 -07:00
John Reiser c21d3e24f8 fix 'loadcon8'; was bad for big-endian vmlinux ARM 2007-04-18 09:52:52 -07:00
Markus F.X.J. Oberhumer 2d87aa0753 Better ctok32 fix. 2007-04-02 18:57:42 +02:00
László Molnár b2ad4dc9a0 another fix for ctok32 2007-04-02 14:12:16 +02:00
László Molnár 370f2ea98f tmt/adam: fixed a ctok32 related bug 2007-04-01 17:31:48 +02:00
László Molnár a05ca565ff fixed a bug in ctok32 2007-04-01 17:07:43 +02:00
László Molnár 52255637f2 give an error for x86/wince files 2007-03-22 13:45:03 +01:00
Markus F.X.J. Oberhumer 0fcaa3a2f5 Work around broken scanf() implementations. 2007-03-22 07:30:16 +01:00
László Molnár 0e2fa6eb9d no need to warn for x86 wince files 2007-03-20 09:30:30 +01:00
Markus F.X.J. Oberhumer 1aac462c83 Remove trailing whitespace. 2007-03-15 07:36:58 +01:00
Markus F.X.J. Oberhumer 2a0edfd8f7 Small update from Jens. 2007-03-15 01:41:07 +01:00
László Molnár 1f59a9f846 more PS1 updates from Jens 2007-03-12 12:11:17 +01:00
László Molnár 80c20a90ea PS1 updates from Jens 2007-03-12 11:56:16 +01:00
Markus F.X.J. Oberhumer 56a35649fe Update Makefiles. 2007-03-09 07:59:50 +01:00
Markus F.X.J. Oberhumer f07cea0b79 Update help string. 2007-03-09 07:59:36 +01:00
Markus F.X.J. Oberhumer 4c1b08a281 Bump version for next release. 2007-03-08 08:26:28 +01:00
Markus F.X.J. Oberhumer 117f9eddcd src/Makefile: use an explicit .depend file. 2007-03-08 08:19:27 +01:00
Markus F.X.J. Oberhumer 7bbbfce482 Added tag for RELEASE_293. 2007-03-08 06:16:24 +01:00
Markus F.X.J. Oberhumer f37a7811f9 Merge. 2007-03-08 03:00:00 +01:00
László Molnár 9173c10239 yet another spelling fix 2007-03-07 17:00:18 +01:00
László Molnár 318b31550d spelling fixes 2007-03-07 14:22:37 +01:00
Markus F.X.J. Oberhumer c18ebc63a6 dos/exe: enable optimized code paths. 2007-03-06 18:14:32 +01:00
Markus F.X.J. Oberhumer d704694272 Merge. 2007-03-06 15:57:13 +01:00
Markus F.X.J. Oberhumer 1cfec3bdf7 dos/exe: enable one small optimization. 2007-03-06 15:56:51 +01:00
John Reiser fe6ea6bc10 merge 2007-03-06 06:44:26 -08:00
Markus F.X.J. Oberhumer d29c8df45e dos/exe improvements, not enabled yet. 2007-03-06 15:08:24 +01:00
John Reiser 71f996af95 spelling 2007-03-05 21:26:36 -08:00
Markus F.X.J. Oberhumer d9722ad6b3 dos/exe: make sure minsp is even. 2007-03-04 19:27:04 +01:00
Markus F.X.J. Oberhumer 398fd8028c Spelling fixes. 2007-03-04 17:39:21 +01:00
Markus F.X.J. Oberhumer 1345a3cfd3 Bump tentative release date. 2007-03-04 17:13:11 +01:00
Markus F.X.J. Oberhumer 7eb0b195b8 dos/exe: don't clear the dirty stack - DOS does not do this either 2007-03-04 17:10:32 +01:00
Markus F.X.J. Oberhumer 009caee82d docs: typo fixes. 2007-03-04 17:01:50 +01:00
Markus F.X.J. Oberhumer 3bdc805a22 dos/exe: only use bx_magic when needed. 2007-03-04 17:01:32 +01:00
Markus F.X.J. Oberhumer ac457792b4 Minor dos/exe stub optimizations. 2007-03-04 16:47:13 +01:00
Markus F.X.J. Oberhumer 1377b54b9e dos/exe: optimize M_PIA_small. 2007-03-04 15:20:09 +01:00
Markus F.X.J. Oberhumer 66418ffc8c Reorganize dos/exe. No stub changes. 2007-03-04 15:14:44 +01:00
László Molnár b4c4b1fb70 dos/exe: fixed a bug in relocation handling 2007-03-01 16:57:12 +01:00
Markus F.X.J. Oberhumer ffe4a4b047 dos/exe: clear the dirty stack. 2007-02-26 13:55:12 +01:00
László Molnár 753ce45310 dos/exe: better minsp approximation 2007-02-26 12:54:49 +01:00
Markus F.X.J. Oberhumer fece0d73e7 Update NEWS. Bump version date. 2007-02-26 01:37:03 +01:00
Markus F.X.J. Oberhumer edce076e68 Minor Makefile updates. 2007-02-26 01:33:08 +01:00
Markus F.X.J. Oberhumer 675d0a009a Use M_IS_LZMA. 2007-02-26 01:32:36 +01:00
Markus F.X.J. Oberhumer 5d41b5a4db Fix shld macro. 2007-02-26 00:52:18 +01:00
László Molnár fe53b135eb pe: better icon compression handling 2007-02-24 23:25:11 +01:00
László Molnár 5b1c154ee2 NEWS update 2007-02-23 13:46:52 +01:00
László Molnár 816d882611 dos/exe: nrv2b compressed lzma decompressor added 2007-02-23 13:34:12 +01:00
Markus F.X.J. Oberhumer 12bcb09051 Small Makefile updates. 2007-02-21 17:11:42 +01:00
László Molnár c59c69a85f p_exe.cpp: added some comments 2007-02-20 13:49:18 +01:00
Markus F.X.J. Oberhumer bdd0daaf6f Added ElfLinker::addLoaderVA(). 2007-02-20 07:36:34 +01:00
Markus F.X.J. Oberhumer cfad7c8356 Small cleanups. 2007-02-19 03:52:33 +01:00
John Reiser b2b8a128d0 merge 2007-02-18 10:10:17 -08:00
Markus F.X.J. Oberhumer 1cfad80ca2 Introduce a special "ignore_reloc_overflow" section. 2007-02-18 18:29:26 +01:00
John Reiser a5a80e41b8 merge 2007-02-18 09:09:17 -08:00
Markus F.X.J. Oberhumer 152f8e92bf Yet some more Watcom optimizations. 2007-02-18 05:43:31 +01:00
Markus F.X.J. Oberhumer 0323560b49 More Watcom optimizations. 2007-02-18 04:41:33 +01:00
Markus F.X.J. Oberhumer d3bc84a2f7 Some Watcom optimizations. 2007-02-18 03:55:46 +01:00
Markus F.X.J. Oberhumer 8a82c259bd Switching back to using Watcom C - this seems to work. 2007-02-18 03:02:00 +01:00
Markus F.X.J. Oberhumer 46009c7658 i086 Makefile.extra update. 2007-02-18 02:32:47 +01:00
Markus F.X.J. Oberhumer 6f760308bd Some cleanasm.py updates. 2007-02-18 01:32:30 +01:00
John Reiser c346f8f17d merge 2007-02-16 08:06:37 -08:00
John Reiser af1d059fff PackUnix::getLoader() result is not 'const' 2007-02-16 08:05:10 -08:00
John Reiser 5562b21a20 PackMach* checkAlreadyPacked() 2007-02-16 08:02:59 -08:00
Markus F.X.J. Oberhumer 8f68f31877 Use Wine + Digital Mars C/C++ in small model. Does not work yet. 2007-02-16 15:22:01 +01:00
Markus F.X.J. Oberhumer ce7e94030c Added i086/l_test.c. Cleanups. 2007-02-16 08:52:31 +01:00
Markus F.X.J. Oberhumer ccf5a1b972 Add some more funcs to cc_test.c. 2007-02-13 09:48:37 +01:00
Markus F.X.J. Oberhumer 0d5ae77efc Some more dos/exe updates. 2007-02-13 02:25:32 +01:00
Markus F.X.J. Oberhumer 1695096d18 Commit rebuilt files as well. 2007-02-13 00:39:43 +01:00
Markus F.X.J. Oberhumer 6db0b7cf18 lzma for dos/exe works! 2007-02-13 00:39:15 +01:00
John Reiser 575b43b0d4 NEWS: Mach/i386 and Mach/fat 2007-02-12 15:22:22 -08:00
László Molnár 7b39b05894 lzma for dos/exe seems to work with tainted watcom macros 2007-02-12 18:28:24 +01:00
László Molnár 8bea9e0a5e fixed some watcom support macros 2007-02-12 15:38:47 +01:00
László Molnár 2255b32e45 LZMA for dos/exe integration work. Does not work yet. 2007-02-12 15:12:36 +01:00
Markus F.X.J. Oberhumer b62573ae8f More work on lzma for dos/exe. 2007-02-11 21:20:00 +01:00
Markus F.X.J. Oberhumer 44ed84f5cf Added lzma for dos/exe. Glue code and integration is still missing. 2007-02-11 07:54:16 +01:00
Markus F.X.J. Oberhumer d008c834be Merge. 2007-02-11 04:52:53 +01:00
Markus F.X.J. Oberhumer 2d3a914aee Some i086 updates. 2007-02-11 04:52:33 +01:00
John Reiser 7324f4c3d1 PackMach* filters only the [1st] largest executable LC_SEGMNET 2007-02-10 17:47:04 -08:00
Markus F.X.J. Oberhumer 50c8860a50 Added first version of a clean-room wcc support library implementation. 2007-02-11 01:06:37 +01:00
Markus F.X.J. Oberhumer 6456de7188 i086: added cc_test for examining internal compiler library calls. 2007-02-11 01:02:36 +01:00
John Reiser 23c629f2aa i386-darwin.macho works! 2007-02-10 13:14:27 -08:00
John Reiser 2bf154f74f i386-darwin.macho: decompressor overrun, bswap Mach_fat_header 2007-02-10 10:57:02 -08:00
John Reiser b598ad1bc0 i386-darwin.macho runtime stub 2007-02-10 09:16:49 -08:00
Markus F.X.J. Oberhumer ace24ad68e Minor portability fixes. 2007-02-08 16:17:32 +01:00
Markus F.X.J. Oberhumer 750c1a0f27 Avoid compiler warnings. 2007-02-08 15:00:42 +01:00
John Reiser 52d89bd66b PackMachFat has trouble with --fileinfo 2007-02-07 22:24:42 -08:00
John Reiser 8cfb9d35e9 fix ui report after PackMachFat::unpack 2007-02-07 22:03:15 -08:00
John Reiser 2f529158a0 OutputFile::unset_extent() sets bytes_written 2007-02-07 22:02:28 -08:00
John Reiser 6e68ab6d9e canUnpack() and unpack() for PackMachBase, PackMachFat 2007-02-07 21:30:18 -08:00
John Reiser 7a3c55af35 fix SEEK_END when set_extent() 2007-02-07 21:21:19 -08:00
John Reiser fb39d6304a Enable --lzma for PackMach*. 2007-02-07 11:23:21 -08:00
John Reiser 4cb57d9059 OutputFile::unset_extent(); endianness in Mach_fat_* and PackMachBase::b_info 2007-02-06 13:11:31 -08:00
John Reiser 42d69bd0e5 debug PackMachFat 2007-02-05 22:34:23 -08:00
John Reiser f27b399f81 PackMachFat 2007-02-05 14:00:41 -08:00
John Reiser a545a3938f FileBase::set_extent(offset, length) constrains seek() and tell() 2007-02-03 13:31:44 -08:00
John Reiser d1e352c9ee PackMachI386 2007-02-03 11:40:25 -08:00
John Reiser 99be1e798b PackMachPPC32 2007-02-03 11:04:57 -08:00
John Reiser 2132a28a17 UPX_F_MACH_i386 and skeleton stub. (Much of PackMachI386 is incomplete.) 2007-02-02 13:51:51 -08:00
John Reiser 8b1cc28783 templates to prepare for Mach-O i386 and Universal ("fat") executables 2007-01-31 20:25:13 -08:00
Markus F.X.J. Oberhumer 78364ac830 Small Watcom updates. 2007-01-31 14:28:15 +01:00
Markus F.X.J. Oberhumer 6e5f5732b5 brandelf.py: do not write "Linux" any longer as newer ldd's (e.g.
from glibc-common-2.5-10.fc6) do not like this.
2007-01-31 05:58:17 +01:00
Markus F.X.J. Oberhumer 87844254d1 Minor Makefile updates. 2007-01-31 05:53:38 +01:00
Markus F.X.J. Oberhumer 08ef9f69fb Very minor portability fixes. 2007-01-30 20:36:59 +01:00
Markus F.X.J. Oberhumer 5fbd1b78e7 Added non-working experimental infrastructure for using OpenWatcom 1.6
to support i086 + lzma.
2007-01-30 20:25:20 +01:00
Markus F.X.J. Oberhumer 39f5eb753f Bump version for next release. 2007-01-23 22:17:02 +01:00
Markus F.X.J. Oberhumer f4cbe3f300 Added tag for RELEASE_292. 2007-01-23 22:13:01 +01:00
158 changed files with 20288 additions and 3922 deletions
+4
View File
@@ -2,11 +2,15 @@ syntax: regexp
^\.bzr ^\.bzr
^ChangeLog ^ChangeLog
^Makevars.global
^build ^build
^maint ^maint
syntax: glob syntax: glob
.depend
Makevars.local
*.a *.a
*.dll *.dll
*.lib *.lib
+3
View File
@@ -4,6 +4,7 @@
2ee65b77f9117651e2e5517b2edede23698d73ca RELEASE_196 2ee65b77f9117651e2e5517b2edede23698d73ca RELEASE_196
396983c065fc743cb5b9703e266ca87eeff8a6ee RELEASE_291 396983c065fc743cb5b9703e266ca87eeff8a6ee RELEASE_291
70402aeee6e0e4fc2889658ed8cee44461c0b0a8 RELEASE_200 70402aeee6e0e4fc2889658ed8cee44461c0b0a8 RELEASE_200
a1c61174f54aac714f59ac20fcba839d71e64c5c RELEASE_292
a916a2fe22de45167d25abcb40008315f415221c RELEASE_201 a916a2fe22de45167d25abcb40008315f415221c RELEASE_201
a935d577fc7dd9c2c87761c9c702805da6ce1e51 RELEASE_193 a935d577fc7dd9c2c87761c9c702805da6ce1e51 RELEASE_193
b0353253b0b3d062eb5adb50d4b665a96620da45 RELEASE_195 b0353253b0b3d062eb5adb50d4b665a96620da45 RELEASE_195
@@ -12,3 +13,5 @@ c2e0cd4d621b047f254f2def42132a03683ff52c RELEASE_192
d276aa09033c24d0981bc3f4fee5628aecc988ad RELEASE_290 d276aa09033c24d0981bc3f4fee5628aecc988ad RELEASE_290
eb1ce56dce7dd1835964362470610925963b9043 RELEASE_110 eb1ce56dce7dd1835964362470610925963b9043 RELEASE_110
ed96891ef795bceec6b7ff3ca1ca7764431bfb39 RELEASE_191 ed96891ef795bceec6b7ff3ca1ca7764431bfb39 RELEASE_191
ef9c7f2c9658d73a9b5ab2ed291483d2bbcd8bc7 RELEASE_300
efa52753e366300c0e0ebe20631adcb24ed3c15b RELEASE_293
+11 -10
View File
@@ -1,16 +1,21 @@
# #
# UPX toplevel Makefile - needs GNU make 3.80 or better # UPX toplevel Makefile - needs GNU make 3.81 or better
# #
MAKEFLAGS += -rR MAKEFLAGS += -rR
.SUFFIXES: .SUFFIXES:
export SHELL = /bin/sh export SHELL = /bin/sh
ifneq ($(findstring $(firstword $(MAKE_VERSION)),3.77 3.78 3.78.1 3.79 3.79.1 3.80),)
$(error GNU make 3.81 or better is required)
endif
srcdir = . srcdir = .
top_srcdir = . top_srcdir = .
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
# info: src/stub needs GNU make 3.81 and special build tools # info: src/stub needs special build tools
BUILD_STUB = 0 BUILD_STUB = 0
ifneq ($(wildcard $(HOME)/local/bin/bin-upx/.),) ifneq ($(wildcard $(HOME)/local/bin/bin-upx/.),)
BUILD_STUB = 1 BUILD_STUB = 1
@@ -18,9 +23,6 @@ endif
ifneq ($(wildcard $(HOME)/bin/bin-upx/.),) ifneq ($(wildcard $(HOME)/bin/bin-upx/.),)
BUILD_STUB = 1 BUILD_STUB = 1
endif endif
ifneq ($(findstring $(firstword $(MAKE_VERSION)),3.79 3.79.1 3.80),)
BUILD_STUB = 0
endif
default: default:
@@ -33,15 +35,14 @@ endif
$(MAKE) -C src $@ $(MAKE) -C src $@
$(MAKE) -C doc $@ $(MAKE) -C doc $@
# automatically generate ChangeLog from Mercurial repo
ChangeLog:
ifneq ($(wildcard .hg/data/.),) ifneq ($(wildcard .hg/data/.),)
# automatically generate ChangeLog from local Mercurial repo
ChangeLog:
hg log --style=changelog > $@ hg log --style=changelog > $@
else .PHONY: ChangeLog
@echo "UPX info: no hg repo found"
endif endif
.PHONY: default all mostlyclean clean distclean maintainer-clean .PHONY: default all mostlyclean clean distclean maintainer-clean
.PHONY: ChangeLog
+27 -3
View File
@@ -2,6 +2,28 @@
User visible changes for UPX User visible changes for UPX
================================================================== ==================================================================
Changes in 3.01 (31 Jul 2007):
* new options --no-mode, --no-owner and --no-time to disable preservation
of mode (file permissions), file ownership and timestamps.
* dos/exe: fixed an incorrect error message caused by a bug in
relocation handling
* new format linux/mipsel supports ELF on [32-bit] R3000
* fix argv[0] on PowerPC with --lzma
* bug fixes
Changes in 3.00 (27 Apr 2007):
* watcom/le & tmt/adam: fixed a problem when using certain filters
Changes in 2.93 beta (08 Mar 2007):
* new formats Mach/i386 and Mach/fat support Mac OS X i686 and
Universal binaries [i686 and PowerPC only]
* dos/exe: LZMA is now also supported for 16-bit dos/exe. Please note that
you have to explicitly use '--lzma' even for '--ultra-brute' here
because runtime decompression is about 30 times slower than NRV -
which is really noticeable on old machines.
* dos/exe: fixed a rarely occuring bug in relocation handling
* win32/pe & arm/pe: better icon compression handling
Changes in 2.92 beta (23 Jan 2007): Changes in 2.92 beta (23 Jan 2007):
* new option '--ultra-brute' which tries even more variants * new option '--ultra-brute' which tries even more variants
* slightly improved compression ratio for some files when * slightly improved compression ratio for some files when
@@ -302,8 +324,8 @@ Changes in 0.80 (03 Aug 1999)
* win32/pe: even better TLS support * win32/pe: even better TLS support
* win32/pe: versioninfo works on NT * win32/pe: versioninfo works on NT
* win32/pe: import by ordinal from kernel32.dll works * win32/pe: import by ordinal from kernel32.dll works
* win32/pe: other import improvements: importing a nonexistant DLL * win32/pe: other import improvements: importing a nonexistent DLL
results in a usual Windows message, importing a nonexistant function results in a usual Windows message, importing a nonexistent function
results in program exit (instead of crash ;-) results in program exit (instead of crash ;-)
* win32/pe: new option: '--compress-resources=0' * win32/pe: new option: '--compress-resources=0'
* win32/pe: reduced memory requirement during uncompression, some * win32/pe: reduced memory requirement during uncompression, some
@@ -355,7 +377,7 @@ Changes in 0.60 (06 Mar 1999)
* win32/pe: fixed file corruption when the size of the export data is invalid * win32/pe: fixed file corruption when the size of the export data is invalid
* win32/pe: fixed a problem with empty resource data * win32/pe: fixed a problem with empty resource data
* win32/pe: compressed file alignment set to minimum value * win32/pe: compressed file alignment set to minimum value
* win32/pe: made all compressed sections writeable * win32/pe: made all compressed sections writable
* fixed some other win32/pe bugs * fixed some other win32/pe bugs
* fixed an address optimization problem for some not Watcom LE files * fixed an address optimization problem for some not Watcom LE files
* fixed a bug which could make UPX hang when an exe header contained * fixed a bug which could make UPX hang when an exe header contained
@@ -396,3 +418,5 @@ Changes in 0.20 (05 Jul 1998)
Changes in 0.05 (26 May 1998) Changes in 0.05 (26 May 1998)
* first public beta release * first public beta release
# vim:set syntax=off tw=0 ts=4 sw=4 et: -*- coding: utf-8 -*-
+1 -1
View File
@@ -96,7 +96,7 @@ THE FUTURE
- We will *NOT* add any sort of protection and/or encryption. - We will *NOT* add any sort of protection and/or encryption.
This only gives people a false feeling of security because This only gives people a false feeling of security because
by definition all protectors/compressors can be broken. by definition all protectors/compressors can be broken.
And don't trust any advertisment of authors of other executable And don't trust any advertisement of authors of other executable
compressors about this topic - just do a websearch on "unpackers"... compressors about this topic - just do a websearch on "unpackers"...
- Fix all remaining bugs - keep your reports coming ;-) - Fix all remaining bugs - keep your reports coming ;-)
-8
View File
@@ -12,14 +12,6 @@
http://upx.sourceforge.net http://upx.sourceforge.net
WARNING - UNSTABLE BETA VERSION
===============================
The current stable release is 2.02, and the next stable release
will be called version 3.00.
MAJOR NEWS IN UPX 3 MAJOR NEWS IN UPX 3
=================== ===================
+1 -1
View File
@@ -57,7 +57,7 @@ Subroutine do_xmap() of src/stub/l_lx_elf.c performs the
"virtual execve()" using the compressed data as source, and stores "virtual execve()" using the compressed data as source, and stores
the decompressed bytes directly into the appropriate virtual addresses. the decompressed bytes directly into the appropriate virtual addresses.
Before transfering control to the PT_INTERP "program interpreter", Before transferring control to the PT_INTERP "program interpreter",
minor tricks are required to setup the Elf32_auxv_t entries, minor tricks are required to setup the Elf32_auxv_t entries,
clear the free portion of the stack (to compensate for ld-linux.so.2 clear the free portion of the stack (to compensate for ld-linux.so.2
assuming that its automatic stack variables are initialized to zero), assuming that its automatic stack variables are initialized to zero),
+1 -1
View File
@@ -45,6 +45,6 @@ These symbols can be defined later in C++ using
linker->defineSymbol("xx", yy) linker->defineSymbol("xx", yy)
This functionality (we could say it's a simple linker) is achived by This functionality (we could say it's a simple linker) is achieved by
compiling the assembly into an ELF object file which a little C++ compiling the assembly into an ELF object file which a little C++
module (src/linker.cpp) can interpret and work with. module (src/linker.cpp) can interpret and work with.
+27 -20
View File
@@ -139,7 +139,11 @@ B<--help>: prints the help
B<--version>: print the version of B<UPX> B<--version>: print the version of B<UPX>
B<--exact>: when compressing, require to be able to get a byte-identical file B<--exact>: when compressing, require to be able to get a byte-identical file
after decompression with option B<-d> after decompression with option B<-d>. [NOTE: this is work in progress and is
not supported for all formats yet. If you do care, as a workaround you can
compress and then decompress your program a first time - any further
compress-decompress steps should then yield byte-identical results
as compared to the first decompressed version.]
[ ...to be written... - type `B<upx --help>' for now ] [ ...to be written... - type `B<upx --help>' for now ]
@@ -197,7 +201,7 @@ For win32/pe programs there's B<--strip-relocs=0>. See notes below.
=head1 OVERLAY HANDLING OPTIONS =head1 OVERLAY HANDLING OPTIONS
Info: An "overlay" means auxillary data atached after the logical end of Info: An "overlay" means auxiliary data attached after the logical end of
an executable, and it often contains application specific data an executable, and it often contains application specific data
(this is a common practice to avoid an extra data file, though (this is a common practice to avoid an extra data file, though
it would be better to use resource sections). it would be better to use resource sections).
@@ -345,7 +349,7 @@ Extra options available for this executable format:
First of all, it is recommended to use B<UPX> *instead* of B<strip>. strip has First of all, it is recommended to use B<UPX> *instead* of B<strip>. strip has
the very bad habit of replacing your stub with its own (outdated) version. the very bad habit of replacing your stub with its own (outdated) version.
Additionally B<UPX> corrects a bug/feature in strip v2.8.x: it Additionally B<UPX> corrects a bug/feature in strip v2.8.x: it
will fix the 4 KByte aligment of the stub. will fix the 4 KByte alignment of the stub.
B<UPX> includes the full functionality of stubify. This means it will B<UPX> includes the full functionality of stubify. This means it will
automatically stubify your COFF files. Use the option B<--coff> to automatically stubify your COFF files. Use the option B<--coff> to
@@ -380,7 +384,7 @@ Extra options available for this executable format:
Introduction Introduction
Linux/386 support in UPX consists of 3 different executable formats, Linux/386 support in UPX consists of 3 different executable formats,
one optimized for ELF excutables ("linux/elf386"), one optimized one optimized for ELF executables ("linux/elf386"), one optimized
for shell scripts ("linux/sh386"), and one generic format for shell scripts ("linux/sh386"), and one generic format
("linux/386"). ("linux/386").
@@ -408,14 +412,14 @@ General user's overview
or network I/O. or network I/O.
Depending on the statistics of usage and access, and the relative Depending on the statistics of usage and access, and the relative
speeds of CPU, RAM, swap space, /tmp, and filesystem storage, then speeds of CPU, RAM, swap space, /tmp, and file system storage, then
invoking and running a compressed executable can be faster than invoking and running a compressed executable can be faster than
directly running the corresponding uncompressed program. directly running the corresponding uncompressed program.
The operating system might perfrom fewer expensive I/O operations The operating system might perform fewer expensive I/O operations
to invoke the compressed program. Paging to or from swap space to invoke the compressed program. Paging to or from swap space
or /tmp might be faster than paging from the general filesystem. or /tmp might be faster than paging from the general file system.
``Medium-sized'' programs which access about 1/3 to 1/2 of their ``Medium-sized'' programs which access about 1/3 to 1/2 of their
stored program bytes can do particulary well with compression. stored program bytes can do particularly well with compression.
Small programs tend not to benefit as much because the absolute Small programs tend not to benefit as much because the absolute
savings is less. Big programs tend not to benefit proportionally savings is less. Big programs tend not to benefit proportionally
because each invocation may use only a small fraction of the program, because each invocation may use only a small fraction of the program,
@@ -424,7 +428,7 @@ General user's overview
then compression may win anyway. then compression may win anyway.
Currently, executables compressed by UPX do not share RAM at runtime Currently, executables compressed by UPX do not share RAM at runtime
in the way that executables mapped from a filesystem do. As a in the way that executables mapped from a file system do. As a
result, if the same program is run simultaneously by more than one result, if the same program is run simultaneously by more than one
process, then using the compressed version will require more RAM and/or process, then using the compressed version will require more RAM and/or
swap space. So, shell programs (bash, csh, etc.) and ``make'' swap space. So, shell programs (bash, csh, etc.) and ``make''
@@ -513,7 +517,7 @@ The linux/elf386 format decompresses directly into RAM,
uses only one exec, does not use space in /tmp, uses only one exec, does not use space in /tmp,
and does not use /proc. and does not use /proc.
Linux/elf386 is automatically selected for Linux ELF exectuables. Linux/elf386 is automatically selected for Linux ELF executables.
Packed programs will be byte-identical to the original after uncompression. Packed programs will be byte-identical to the original after uncompression.
@@ -602,7 +606,7 @@ Extra options available for this executable format:
Please read the general Linux description first. Please read the general Linux description first.
The generic linux/386 format decompresses to /tmp and needs The generic linux/386 format decompresses to /tmp and needs
/proc filesystem support. It starts the decompressed program /proc file system support. It starts the decompressed program
via the execve() syscall. via the execve() syscall.
Linux/386 is only selected if the specialized linux/elf386 Linux/386 is only selected if the specialized linux/elf386
@@ -614,11 +618,11 @@ How it works:
For files which are not ELF and not a script for a known "-c" shell, For files which are not ELF and not a script for a known "-c" shell,
UPX uses kernel execve(), which first requires decompressing to a UPX uses kernel execve(), which first requires decompressing to a
temporary file in the filesystem. Interestingly - temporary file in the file system. Interestingly -
because of the good memory management of the Linux kernel - this because of the good memory management of the Linux kernel - this
often does not introduce a noticable delay, and in fact there often does not introduce a noticeable delay, and in fact there
will be no disk access at all if you have enough free memory as will be no disk access at all if you have enough free memory as
the entire process takes places within the filesystem buffers. the entire process takes places within the file system buffers.
A compressed executable consists of the UPX stub and an overlay A compressed executable consists of the UPX stub and an overlay
which contains the original program in a compressed form. which contains the original program in a compressed form.
@@ -644,7 +648,7 @@ Specific drawbacks:
decompression, but you still need it for the full execution time decompression, but you still need it for the full execution time
of the program. of the program.
- You must have /proc filesystem support as the stub wants to open - You must have /proc file system support as the stub wants to open
/proc/<pid>/exe and needs /proc/<pid>/fd/X. This also means that you /proc/<pid>/exe and needs /proc/<pid>/fd/X. This also means that you
cannot compress programs that are used during the boot sequence cannot compress programs that are used during the boot sequence
before /proc is mounted. before /proc is mounted.
@@ -656,7 +660,7 @@ Specific drawbacks:
- Because of temporary decompression to disk the decompression speed - Because of temporary decompression to disk the decompression speed
is not as fast as with the other executable formats. Still, I can see is not as fast as with the other executable formats. Still, I can see
no noticable delay when starting programs like my ~3 MB emacs (which no noticeable delay when starting programs like my ~3 MB emacs (which
is less than 1 MB when compressed :-). is less than 1 MB when compressed :-).
Extra options available for this executable format: Extra options available for this executable format:
@@ -683,7 +687,10 @@ Notes:
- UPX creates as default a suitable executable for CD-Mastering - UPX creates as default a suitable executable for CD-Mastering
and console transfer. For a CD-Master main executable you could also try and console transfer. For a CD-Master main executable you could also try
the special option "--boot-only" as descriped below. the special option "--boot-only" as described below.
It has been reported that upx packed executables are fully compatible with
the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
Sony PlayStation (PSone) emulation mode.
- Normally the packed files use the same memory areas like the uncompressed - Normally the packed files use the same memory areas like the uncompressed
versions, so they will not override other memory areas while unpacking. versions, so they will not override other memory areas while unpacking.
@@ -759,7 +766,7 @@ Benefits:
- Better compression (but note that the kernel was already compressed, - Better compression (but note that the kernel was already compressed,
so the improvement is not as large as with other formats). so the improvement is not as large as with other formats).
Still, the bytes saved may be essential for special needs like Still, the bytes saved may be essential for special needs like
bootdisks. boot disks.
For example, this is what I get for my 2.2.16 kernel: For example, this is what I get for my 2.2.16 kernel:
1589708 vmlinux 1589708 vmlinux
@@ -806,13 +813,13 @@ Extra options available for this executable format:
=head2 NOTES FOR WIN32/PE =head2 NOTES FOR WIN32/PE
The PE support in B<UPX> is quite stable now, but probably there are The PE support in B<UPX> is quite stable now, but probably there are
still some incompabilities with some files. still some incompatibilities with some files.
Because of the way B<UPX> (and other packers for this format) works, you Because of the way B<UPX> (and other packers for this format) works, you
can see increased memory usage of your compressed files because the whole can see increased memory usage of your compressed files because the whole
program is loaded into memory at startup. program is loaded into memory at startup.
If you start several instances of huge compressed programs you're If you start several instances of huge compressed programs you're
wasting memory because the common segements of the program won't wasting memory because the common segments of the program won't
get shared across the instances. get shared across the instances.
On the other hand if you're compressing only smaller programs, or On the other hand if you're compressing only smaller programs, or
running only one instance of larger programs, then this penalty is running only one instance of larger programs, then this penalty is
+44 -15
View File
@@ -1,5 +1,5 @@
# #
# UPX Makefile - needs GNU make 3.80 or better # UPX Makefile - needs GNU make 3.81 or better
# #
MAKEFLAGS += -rR MAKEFLAGS += -rR
@@ -7,9 +7,19 @@ MAKEFLAGS += -rR
export SHELL = /bin/sh export SHELL = /bin/sh
override e = $($1) $(EXTRA_$1) $(upx_$1) $($(basename $(notdir $@)).$1) override e = $($1) $(EXTRA_$1) $(upx_$1) $($(basename $(notdir $@)).$1)
srcdir ?= $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) ifneq ($(findstring $(firstword $(MAKE_VERSION)),3.77 3.78 3.78.1 3.79 3.79.1 3.80),)
ifneq ($(srcdir),./) $(error GNU make 3.81 or better is required)
endif
ifndef srcdir
srcdir := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
srcdir := $(shell echo '$(srcdir)' | sed 's,/*$$,,') srcdir := $(shell echo '$(srcdir)' | sed 's,/*$$,,')
endif
ifndef top_srcdir
top_srcdir := $(srcdir)/..
endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
ifneq ($(srcdir),.)
##$(info Info: using VPATH . $(srcdir)) ##$(info Info: using VPATH . $(srcdir))
VPATH := . $(srcdir) VPATH := . $(srcdir)
endif endif
@@ -17,11 +27,10 @@ endif
ifeq ($(CXX),) ifeq ($(CXX),)
CXX = g++ CXX = g++
endif endif
ifeq ($(firstword $(CXX)),g++) ifneq ($(findstring $(firstword $(CXX)),g++),)
USE_GNUC ?= 1 USE_GNUC ?= 1
endif endif
ifeq ($(USE_GNUC),1) ifeq ($(USE_GNUC),1)
CXXFLAGS += -MMD
ifeq ($(DEBUG),1) ifeq ($(DEBUG),1)
CXXFLAGS += -O0 -g CXXFLAGS += -O0 -g
else else
@@ -46,37 +55,57 @@ INCLUDES += -I$(UPX_UCLDIR)/include
LIBS += $(addprefix -L,$(dir $(wildcard $(UPX_UCLDIR)/libucl$(libext) $(UPX_UCLDIR)/src/.libs/libucl$(libext)))) LIBS += $(addprefix -L,$(dir $(wildcard $(UPX_UCLDIR)/libucl$(libext) $(UPX_UCLDIR)/src/.libs/libucl$(libext))))
endif endif
LIBS += -lucl -lz LIBS += -lucl -lz
# you should set envvar UPX_LZMADIR to point to your unpacked lzma443.tar.bz2 # you should set envvar UPX_LZMADIR to point to your unpacked LZMA SDK
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),) include $(top_srcdir)/src/stub/src/c/Makevars.lzma
DEFS += -DWITH_LZMA ifneq ($(UPX_LZMA_VERSION),)
DEFS += -DWITH_LZMA=$(UPX_LZMA_VERSION)
INCLUDES += -I$(UPX_LZMADIR) INCLUDES += -I$(UPX_LZMADIR)
endif endif
all: upx$(exeext) all: upx$(exeext) | .depend
.DELETE_ON_ERROR: upx$(exeext) $(upx_OBJECTS) .DELETE_ON_ERROR: upx$(exeext) $(upx_OBJECTS) .depend
upx$(exeext): $(upx_OBJECTS) $(upx_DEPENDENCIES) upx$(exeext): $(upx_OBJECTS) $(upx_DEPENDENCIES)
$($(notdir $@).PRE_LINK_STEP) $($(notdir $@).PRE_LINK_STEP)
$(strip $(CXXLD) $(call e,CPPFLAGS) $(call e,CXXFLAGS) $(call e,LDFLAGS) -o $@ $(upx_OBJECTS) $(call e,LDADD) $(call e,LIBS)) $(strip $(CXXLD) $(call e,CPPFLAGS) $(call e,CXXFLAGS) $(call e,LDFLAGS) -o $@ $(upx_OBJECTS) $(call e,LDADD) $(call e,LIBS))
$($(notdir $@).POST_LINK_STEP) $($(notdir $@).POST_LINK_STEP)
%.o : %.cpp %.o : %.cpp | .depend
$(strip $(CXX) $(call e,CPPFLAGS) $(call e,CXXFLAGS) -o $@ -c $<) $(strip $(CXX) $(call e,CPPFLAGS) $(call e,CXXFLAGS) -o $@ -c $<)
.depend: $(wildcard $(srcdir)/*.cpp $(srcdir)/*.h) $(MAKEFILE_LIST)
@rm -f $@
ifeq ($(USE_GNUC),1)
@echo "Updating $@"
@$(strip $(CXX) $(call e,CPPFLAGS) -MM) $(filter %.cpp,$^) > $@
else
touch $@
endif
ifeq ($(USE_GNUC),1) ifeq ($(USE_GNUC),1)
##compress_lzma$(objext) : CXXFLAGS += -O3 -fomit-frame-pointer ##compress_lzma$(objext) : CXXFLAGS += -O3 -fomit-frame-pointer
compress_lzma$(objext) : CXXFLAGS += -Wno-cast-qual compress_lzma$(objext) : CXXFLAGS += -Wno-cast-qual
compress_lzma$(objext) : CXXFLAGS += -Wno-non-virtual-dtor
compress_lzma$(objext) : CXXFLAGS += -Wno-shadow compress_lzma$(objext) : CXXFLAGS += -Wno-shadow
ifeq ($(UPX_LZMA_VERSION),0x443)
compress_lzma$(objext) : CXXFLAGS += -Wno-non-virtual-dtor
compress_lzma$(objext) : CXXFLAGS += -Wno-unused compress_lzma$(objext) : CXXFLAGS += -Wno-unused
##compress_lzma$(objext) : CXXFLAGS += -Wno-error endif
# needed for gcc-4.3:
compress_lzma$(objext) : CXXFLAGS += -Wno-error
endif endif
mostlyclean clean distclean maintainer-clean: mostlyclean clean distclean maintainer-clean:
rm -f *.d *.map *.o *.obj *.res upx.exe upx.out upx.ttp upx$(exeext) rm -f *.d *.map *.o *.obj *.res .depend upx.exe upx.out upx.ttp upx$(exeext)
-include *.d
.PHONY: all mostlyclean clean distclean maintainer-clean .PHONY: all mostlyclean clean distclean maintainer-clean
ifeq ($(MAKECMDGOALS),mostlyclean)
else ifeq ($(MAKECMDGOALS),clean)
else ifeq ($(MAKECMDGOALS),distclean)
else ifeq ($(MAKECMDGOALS),maintainer-clean)
else
-include .depend
endif
+7 -5
View File
@@ -182,8 +182,10 @@ int upx_decompress ( const upx_bytep src, unsigned src_len,
// //
**************************************************************************/ **************************************************************************/
int upx_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ) const upx_compress_result_t *cresult )
{ {
@@ -201,15 +203,15 @@ int upx_test_overlap ( const upx_bytep buf, unsigned src_off,
} }
#if defined(WITH_LZMA) #if defined(WITH_LZMA)
else if (M_IS_LZMA(method)) else if (M_IS_LZMA(method))
r = upx_lzma_test_overlap(buf, src_off, src_len, dst_len, method, cresult); r = upx_lzma_test_overlap(buf, tbuf, src_off, src_len, dst_len, method, cresult);
#endif #endif
#if defined(WITH_NRV) #if defined(WITH_NRV)
else if (M_IS_NRV2B(method) || M_IS_NRV2D(method) || M_IS_NRV2E(method)) else if (M_IS_NRV2B(method) || M_IS_NRV2D(method) || M_IS_NRV2E(method))
r = upx_nrv_test_overlap(buf, src_off, src_len, dst_len, method, cresult); r = upx_nrv_test_overlap(buf, tbuf, src_off, src_len, dst_len, method, cresult);
#endif #endif
#if defined(WITH_UCL) #if defined(WITH_UCL)
else if (M_IS_NRV2B(method) || M_IS_NRV2D(method) || M_IS_NRV2E(method)) else if (M_IS_NRV2B(method) || M_IS_NRV2D(method) || M_IS_NRV2E(method))
r = upx_ucl_test_overlap(buf, src_off, src_len, dst_len, method, cresult); r = upx_ucl_test_overlap(buf, tbuf, src_off, src_len, dst_len, method, cresult);
#endif #endif
else { else {
throwInternalError("unknown decompression method"); throwInternalError("unknown decompression method");
+16 -8
View File
@@ -46,8 +46,10 @@ int upx_lzma_decompress ( const upx_bytep src, unsigned src_len,
upx_bytep dst, unsigned* dst_len, upx_bytep dst, unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
int upx_lzma_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_lzma_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
#endif #endif
@@ -65,8 +67,10 @@ int upx_nrv_decompress ( const upx_bytep src, unsigned src_len,
upx_bytep dst, unsigned* dst_len, upx_bytep dst, unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
int upx_nrv_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_nrv_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
#endif #endif
@@ -84,8 +88,10 @@ int upx_ucl_decompress ( const upx_bytep src, unsigned src_len,
upx_bytep dst, unsigned* dst_len, upx_bytep dst, unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
int upx_ucl_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_ucl_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
#endif #endif
@@ -102,8 +108,10 @@ int upx_zlib_decompress ( const upx_bytep src, unsigned src_len,
upx_bytep dst, unsigned* dst_len, upx_bytep dst, unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
int upx_zlib_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_zlib_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
#endif #endif
+72 -36
View File
@@ -28,6 +28,7 @@
#include "conf.h" #include "conf.h"
#include "compress.h" #include "compress.h"
#include "mem.h"
void lzma_compress_config_t::reset() void lzma_compress_config_t::reset()
@@ -101,9 +102,15 @@ int compress_lzma_dummy = 0;
#undef _WIN32_WCE #undef _WIN32_WCE
#undef COMPRESS_MF_MT #undef COMPRESS_MF_MT
#undef _NO_EXCEPTIONS #undef _NO_EXCEPTIONS
#include "C/Common/MyInitGuid.h" #if (WITH_LZMA >= 0x449)
//#include "C/7zip/Compress/LZMA/LZMADecoder.h" # define INITGUID 1
#include "C/7zip/Compress/LZMA/LZMAEncoder.h" //# include "CPP/7zip/Compress/LZMA/LZMADecoder.h"
# include "CPP/7zip/Compress/LZMA/LZMAEncoder.h"
#else
# include "C/Common/MyInitGuid.h"
//# include "C/7zip/Compress/LZMA/LZMADecoder.h"
# include "C/7zip/Compress/LZMA/LZMAEncoder.h"
#endif
namespace MyLzma { namespace MyLzma {
@@ -173,16 +180,29 @@ STDMETHODIMP ProgressInfo::SetRatioInfo(const UInt64 *inSize, const UInt64 *outS
# pragma warning(disable: 424) // #424: extra ";" ignored # pragma warning(disable: 424) // #424: extra ";" ignored
#endif #endif
#include "C/Common/Alloc.cpp" #if (WITH_LZMA >= 0x449)
#include "C/Common/CRC.cpp" # include "C/Alloc.c"
//#include "C/7zip/Common/InBuffer.cpp" # include "C/7zCrc.c"
#include "C/7zip/Common/OutBuffer.cpp" # include "C/Compress/Lz/MatchFinder.c"
#include "C/7zip/Common/StreamUtils.cpp" //# include "CPP/7zip/Common/InBuffer.cpp"
#include "C/7zip/Compress/LZ/LZInWindow.cpp" # include "CPP/7zip/Common/OutBuffer.cpp"
//#include "C/7zip/Compress/LZ/LZOutWindow.cpp" # include "CPP/7zip/Common/StreamUtils.cpp"
//#include "C/7zip/Compress/LZMA/LZMADecoder.cpp" //# include "CPP/7zip/Compress/LZ/LZOutWindow.cpp"
#include "C/7zip/Compress/LZMA/LZMAEncoder.cpp" //# include "CPP/7zip/Compress/LZMA/LZMADecoder.cpp"
#include "C/7zip/Compress/RangeCoder/RangeCoderBit.cpp" # include "CPP/7zip/Compress/LZMA/LZMAEncoder.cpp"
# include "CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp"
#else
# include "C/Common/Alloc.cpp"
# include "C/Common/CRC.cpp"
//# include "C/7zip/Common/InBuffer.cpp"
# include "C/7zip/Common/OutBuffer.cpp"
# include "C/7zip/Common/StreamUtils.cpp"
# include "C/7zip/Compress/LZ/LZInWindow.cpp"
//# include "C/7zip/Compress/LZ/LZOutWindow.cpp"
//# include "C/7zip/Compress/LZMA/LZMADecoder.cpp"
# include "C/7zip/Compress/LZMA/LZMAEncoder.cpp"
# include "C/7zip/Compress/RangeCoder/RangeCoderBit.cpp"
#endif
#undef RC_NORMALIZE #undef RC_NORMALIZE
@@ -223,7 +243,7 @@ int upx_lzma_compress ( const upx_bytep src, unsigned src_len,
PROPVARIANT pr[8]; PROPVARIANT pr[8];
pr[0].vt = pr[1].vt = pr[2].vt = pr[3].vt = VT_UI4; pr[0].vt = pr[1].vt = pr[2].vt = pr[3].vt = VT_UI4;
pr[4].vt = pr[5].vt = pr[6].vt = VT_UI4; pr[4].vt = pr[5].vt = pr[6].vt = VT_UI4;
pr[7].vt = VT_BSTR; unsigned nprops = 7;
// setup defaults // setup defaults
pr[0].uintVal = 2; // 0 .. 4 pr[0].uintVal = 2; // 0 .. 4
@@ -235,9 +255,11 @@ int upx_lzma_compress ( const upx_bytep src, unsigned src_len,
pr[6].uintVal = 0; pr[6].uintVal = 0;
#ifdef COMPRESS_MF_BT4 #ifdef COMPRESS_MF_BT4
static wchar_t matchfinder[] = L"BT4"; static wchar_t matchfinder[] = L"BT4";
#endif
assert(NCompress::NLZMA::FindMatchFinder(matchfinder) >= 0); assert(NCompress::NLZMA::FindMatchFinder(matchfinder) >= 0);
pr[7].bstrVal = matchfinder; pr[nprops].vt = VT_BSTR;
pr[nprops].bstrVal = matchfinder;
nprops++;
#endif
#if 1 #if 1
pr[0].uintVal = lzma_compress_config_t::pos_bits_t::default_value_c; pr[0].uintVal = lzma_compress_config_t::pos_bits_t::default_value_c;
pr[1].uintVal = lzma_compress_config_t::lit_pos_bits_t::default_value_c; pr[1].uintVal = lzma_compress_config_t::lit_pos_bits_t::default_value_c;
@@ -348,7 +370,7 @@ int upx_lzma_compress ( const upx_bytep src, unsigned src_len,
# error # error
#endif #endif
if (enc.SetCoderProperties(propIDs, pr, 8) != S_OK) if (enc.SetCoderProperties(propIDs, pr, nprops) != S_OK)
goto error; goto error;
if (enc.WriteCoderProperties(&os) != S_OK) if (enc.WriteCoderProperties(&os) != S_OK)
goto error; goto error;
@@ -406,8 +428,13 @@ error:
#undef _LZMA_OUT_READ #undef _LZMA_OUT_READ
#undef _LZMA_PROB32 #undef _LZMA_PROB32
#undef _LZMA_LOC_OPT #undef _LZMA_LOC_OPT
#include "C/7zip/Compress/LZMA_C/LzmaDecode.h" #if (WITH_LZMA >= 0x449)
#include "C/7zip/Compress/LZMA_C/LzmaDecode.c" # include "C/Compress/Lzma/LzmaDecode.h"
# include "C/Compress/Lzma/LzmaDecode.c"
#else
# include "C/7zip/Compress/LZMA_C/LzmaDecode.h"
# include "C/7zip/Compress/LZMA_C/LzmaDecode.c"
#endif
int upx_lzma_decompress ( const upx_bytep src, unsigned src_len, int upx_lzma_decompress ( const upx_bytep src, unsigned src_len,
upx_bytep dst, unsigned* dst_len, upx_bytep dst, unsigned* dst_len,
@@ -483,28 +510,32 @@ error:
/************************************************************************* /*************************************************************************
// test_overlap // test_overlap - see <ucl/ucl.h> for semantics
**************************************************************************/ **************************************************************************/
int upx_lzma_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_lzma_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ) const upx_compress_result_t *cresult )
{ {
assert(M_IS_LZMA(method)); assert(M_IS_LZMA(method));
// FIXME - implement this MemBuffer b(src_off + src_len);
// Note that Packer::verifyOverlappingDecompression() will memcpy(b + src_off, buf + src_off, src_len);
// verify the final result in any case. unsigned saved_dst_len = *dst_len;
UNUSED(buf); int r = upx_lzma_decompress(b + src_off, src_len, b, dst_len, method, cresult);
if (r != UPX_E_OK)
unsigned overlap_overhead = src_off + src_len - *dst_len; return r;
//printf("upx_lzma_test_overlap: %d\n", overlap_overhead); if (*dst_len != saved_dst_len)
if ((int)overlap_overhead >= 256) return UPX_E_ERROR;
return UPX_E_OK; // NOTE: there is a very tiny possibility that decompression has
// succeeded but the data is not restored correctly because of
UNUSED(cresult); // in-place buffer overlapping.
return UPX_E_ERROR; if (tbuf != NULL && memcmp(tbuf, b, *dst_len) != 0)
return UPX_E_ERROR;
return UPX_E_OK;
} }
@@ -514,9 +545,14 @@ int upx_lzma_test_overlap ( const upx_bytep buf, unsigned src_off,
const char *upx_lzma_version_string(void) const char *upx_lzma_version_string(void)
{ {
// FIXME #if (WITH_LZMA == 0x449)
// return NULL; return "4.49";
#elif (WITH_LZMA == 0x443)
return "4.43"; return "4.43";
#else
# error "unknown version"
return NULL;
#endif
} }
+5 -2
View File
@@ -228,12 +228,15 @@ int upx_ucl_decompress ( const upx_bytep src, unsigned src_len,
// //
**************************************************************************/ **************************************************************************/
int upx_ucl_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_ucl_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ) const upx_compress_result_t *cresult )
{ {
int r; int r;
UNUSED(tbuf); // not needed for UCL
switch (method) switch (method)
{ {
+20 -15
View File
@@ -28,6 +28,7 @@
#include "conf.h" #include "conf.h"
#include "compress.h" #include "compress.h"
#include "mem.h"
void zlib_compress_config_t::reset() void zlib_compress_config_t::reset()
@@ -188,28 +189,32 @@ done:
/************************************************************************* /*************************************************************************
// test_overlap // test_overlap - see <ucl/ucl.h> for semantics
**************************************************************************/ **************************************************************************/
int upx_zlib_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_zlib_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ) const upx_compress_result_t *cresult )
{ {
assert(method == M_DEFLATE); assert(method == M_DEFLATE);
// FIXME - implement this MemBuffer b(src_off + src_len);
// Note that Packer::verifyOverlappingDecompression() will memcpy(b + src_off, buf + src_off, src_len);
// verify the final result in any case. unsigned saved_dst_len = *dst_len;
UNUSED(buf); int r = upx_zlib_decompress(b + src_off, src_len, b, dst_len, method, cresult);
if (r != UPX_E_OK)
unsigned overlap_overhead = src_off + src_len - *dst_len; return r;
//printf("upx_zlib_test_overlap: %d\n", overlap_overhead); if (*dst_len != saved_dst_len)
if ((int)overlap_overhead >= 256) return UPX_E_ERROR;
return UPX_E_OK; // NOTE: there is a very tiny possibility that decompression has
// succeeded but the data is not restored correctly because of
UNUSED(cresult); // in-place buffer overlapping.
return UPX_E_ERROR; if (tbuf != NULL && memcmp(tbuf, b, *dst_len) != 0)
return UPX_E_ERROR;
return UPX_E_OK;
} }
+14 -7
View File
@@ -303,8 +303,8 @@
#undef __attribute_packed #undef __attribute_packed
#if (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE) #if (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE)
# if (0 && (ACC_ARCH_AMD64 || ACC_ARCH_I386)) # if (ACC_ARCH_I386) && (ACC_CC_INTELC && (__INTEL_COMPILER < 800))
# define __attribute_packed # elif (0 && (ACC_ARCH_AMD64 || ACC_ARCH_I386))
# else # else
# define __attribute_packed __attribute__((__packed__,__aligned__(1))) # define __attribute_packed __attribute__((__packed__,__aligned__(1)))
# endif # endif
@@ -448,13 +448,15 @@ private:
#define UPX_F_LINUX_ELFI_i386 20 #define UPX_F_LINUX_ELFI_i386 20
#define UPX_F_WINCE_ARM_PE 21 #define UPX_F_WINCE_ARM_PE 21
#define UPX_F_LINUX_ELF64_AMD 22 #define UPX_F_LINUX_ELF64_AMD 22
#define UPX_F_LINUX_ELF32_ARMLE 23 #define UPX_F_LINUX_ELF32_ARMEL 23
#define UPX_F_BSD_i386 24 #define UPX_F_BSD_i386 24
#define UPX_F_BSD_ELF_i386 25 #define UPX_F_BSD_ELF_i386 25
#define UPX_F_BSD_SH_i386 26 #define UPX_F_BSD_SH_i386 26
#define UPX_F_VMLINUX_AMD64 27 #define UPX_F_VMLINUX_AMD64 27
#define UPX_F_VMLINUX_ARM 28 #define UPX_F_VMLINUX_ARMEL 28
#define UPX_F_MACH_i386 29
#define UPX_F_LINUX_ELF32_MIPSEL 30
#define UPX_F_PLAIN_TEXT 127 #define UPX_F_PLAIN_TEXT 127
@@ -462,7 +464,10 @@ private:
#define UPX_F_SOLARIS_SPARC 130 #define UPX_F_SOLARIS_SPARC 130
#define UPX_F_MACH_PPC32 131 #define UPX_F_MACH_PPC32 131
#define UPX_F_LINUX_ELFPPC32 132 #define UPX_F_LINUX_ELFPPC32 132
#define UPX_F_LINUX_ELF32_ARMBE 133 #define UPX_F_LINUX_ELF32_ARMEB 133
#define UPX_F_MACH_FAT 134
#define UPX_F_VMLINUX_ARMEB 135
#define UPX_F_VMLINUX_PPC32 136
// compression methods // compression methods
@@ -776,8 +781,10 @@ int upx_decompress ( const upx_bytep src, unsigned src_len,
upx_bytep dst, unsigned* dst_len, upx_bytep dst, unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
int upx_test_overlap ( const upx_bytep buf, unsigned src_off, int upx_test_overlap ( const upx_bytep buf,
unsigned src_len, unsigned* dst_len, const upx_bytep tbuf,
unsigned src_off, unsigned src_len,
unsigned* dst_len,
int method, int method,
const upx_compress_result_t *cresult ); const upx_compress_result_t *cresult );
+8
View File
@@ -161,6 +161,14 @@ void throwBadLoader()
} }
void throwOutOfMemoryException(const char *msg)
{
if (msg == NULL)
msg = "out of memory";
throw OutOfMemoryException(msg);
}
void throwIOException(const char *msg, int e) void throwIOException(const char *msg, int e)
{ {
throw IOException(msg, e); throw IOException(msg, e);
+1
View File
@@ -220,6 +220,7 @@ void throwBadLoader() NORET;
void throwChecksumError() NORET; void throwChecksumError() NORET;
void throwCompressedDataViolation() NORET; void throwCompressedDataViolation() NORET;
void throwInternalError(const char *msg) NORET; void throwInternalError(const char *msg) NORET;
void throwOutOfMemoryException(const char *msg = NULL) NORET;
void throwIOException(const char *msg = NULL, int e = 0) NORET; void throwIOException(const char *msg = NULL, int e = 0) NORET;
void throwEOFException(const char *msg = NULL, int e = 0) NORET; void throwEOFException(const char *msg = NULL, int e = 0) NORET;
+77 -6
View File
@@ -69,7 +69,7 @@ void File::unlink(const char *name)
**************************************************************************/ **************************************************************************/
FileBase::FileBase() : FileBase::FileBase() :
_fd(-1), _flags(0), _shflags(0), _mode(0), _name(NULL) _fd(-1), _flags(0), _shflags(0), _mode(0), _name(NULL), _offset(0), _length(0)
{ {
memset(&st,0,sizeof(st)); memset(&st,0,sizeof(st));
} }
@@ -104,6 +104,10 @@ void FileBase::sopen()
assert(0); assert(0);
#endif #endif
} }
if (!(_fd < 0)) {
::fstat(_fd, &st);
_length = st.st_size;
}
} }
@@ -117,6 +121,8 @@ bool FileBase::close()
_flags = 0; _flags = 0;
_mode = 0; _mode = 0;
_name = NULL; _name = NULL;
_offset = 0;
_length = 0;
return ok; return ok;
} }
@@ -164,10 +170,17 @@ void FileBase::seek(off_t off, int whence)
{ {
if (!isOpen()) if (!isOpen())
throwIOException("bad seek 1"); throwIOException("bad seek 1");
if (whence == SEEK_SET && off < 0) if (whence == SEEK_SET) {
throwIOException("bad seek 2"); if (off < 0)
if (whence == SEEK_END && off > 0) throwIOException("bad seek 2");
throwIOException("bad seek 3"); off += _offset;
}
if (whence == SEEK_END) {
if (off > 0)
throwIOException("bad seek 3");
off += _offset + _length;
whence = SEEK_SET;
}
if (::lseek(_fd,off,whence) < 0) if (::lseek(_fd,off,whence) < 0)
throwIOException("seek error",errno); throwIOException("seek error",errno);
} }
@@ -180,7 +193,19 @@ off_t FileBase::tell() const
off_t l = ::lseek(_fd, 0, SEEK_CUR); off_t l = ::lseek(_fd, 0, SEEK_CUR);
if (l < 0) if (l < 0)
throwIOException("tell error",errno); throwIOException("tell error",errno);
return l; return l - _offset;
}
void FileBase::set_extent(off_t offset, off_t length)
{
_offset = offset;
_length = length;
}
off_t FileBase::st_size() const
{
return _length;
} }
@@ -205,6 +230,8 @@ void InputFile::sopen(const char *name, int flags, int shflags)
_flags = flags; _flags = flags;
_shflags = shflags; _shflags = shflags;
_mode = 0; _mode = 0;
_offset = 0;
_length = 0;
FileBase::sopen(); FileBase::sopen();
if (!isOpen()) if (!isOpen())
{ {
@@ -289,6 +316,8 @@ void OutputFile::sopen(const char *name, int flags, int shflags, int mode)
_flags = flags; _flags = flags;
_shflags = shflags; _shflags = shflags;
_mode = mode; _mode = mode;
_offset = 0;
_length = 0;
FileBase::sopen(); FileBase::sopen();
if (!isOpen()) if (!isOpen())
{ {
@@ -316,6 +345,8 @@ bool OutputFile::openStdout(int flags, bool force)
_flags = flags; _flags = flags;
_shflags = -1; _shflags = -1;
_mode = 0; _mode = 0;
_offset = 0;
_length = 0;
if (flags && acc_set_binmode(fd, 1) == -1) if (flags && acc_set_binmode(fd, 1) == -1)
throwIOException(_name, errno); throwIOException(_name, errno);
_fd = fd; _fd = fd;
@@ -329,6 +360,16 @@ void OutputFile::write(const void *buf, int len)
bytes_written += len; bytes_written += len;
} }
off_t OutputFile::st_size() const
{
if (opt->to_stdout) { // might be a pipe ==> .st_size is invalid
return bytes_written; // too big if seek()+write() instead of rewrite()
}
struct stat my_st;
::fstat(_fd, &my_st);
return my_st.st_size;
}
void OutputFile::write(const MemBuffer *buf, int len) void OutputFile::write(const MemBuffer *buf, int len)
{ {
@@ -343,6 +384,36 @@ void OutputFile::write(const MemBuffer &buf, int len)
write(&buf, len); write(&buf, len);
} }
void OutputFile::rewrite(const void *buf, int len)
{
assert(!opt->to_stdout);
write(buf, len);
bytes_written -= len; // restore
}
void OutputFile::seek(off_t off, int whence)
{
assert(!opt->to_stdout);
super::seek(off,whence);
}
void OutputFile::set_extent(off_t offset, off_t length)
{
super::set_extent(offset, length);
bytes_written = 0;
if (0==offset && (off_t)~0u==length) {
::fstat(_fd, &st);
_length = st.st_size - offset;
}
}
off_t OutputFile::unset_extent()
{
_offset = 0;
_length = ::lseek(_fd, 0, SEEK_END);
bytes_written = _length;
return _length;
}
void OutputFile::dump(const char *name, const void *buf, int len, int flags) void OutputFile::dump(const char *name, const void *buf, int len, int flags)
{ {
+9 -11
View File
@@ -59,6 +59,8 @@ public:
virtual bool isOpen() const { return _fd >= 0; } virtual bool isOpen() const { return _fd >= 0; }
int getFd() const { return _fd; } int getFd() const { return _fd; }
const char *getName() const { return _name; } const char *getName() const { return _name; }
virtual off_t st_size() const; // { return _length; }
virtual void set_extent(off_t offset, off_t length);
protected: protected:
void sopen(); void sopen();
@@ -73,6 +75,8 @@ protected:
int _shflags; int _shflags;
int _mode; int _mode;
const char *_name; const char *_name;
off_t _offset;
off_t _length;
public: public:
struct stat st; struct stat st;
}; };
@@ -128,21 +132,15 @@ public:
virtual void write(const void *buf, int len); virtual void write(const void *buf, int len);
virtual void write(const MemBuffer *buf, int len); virtual void write(const MemBuffer *buf, int len);
virtual void write(const MemBuffer &buf, int len); virtual void write(const MemBuffer &buf, int len);
virtual void set_extent(off_t offset, off_t length);
virtual off_t unset_extent(); // returns actual length
off_t getBytesWritten() const { return bytes_written; } off_t getBytesWritten() const { return bytes_written; }
virtual off_t st_size() const; // { return _length; }
// FIXME - these won't work when using the '--stdout' option // FIXME - these won't work when using the '--stdout' option
virtual void seek(off_t off, int whence) virtual void seek(off_t off, int whence);
{ virtual void rewrite(const void *buf, int len);
assert(!opt->to_stdout);
super::seek(off,whence);
}
virtual void rewrite(const void *buf, int len)
{
assert(!opt->to_stdout);
write(buf, len);
bytes_written -= len; // restore
}
// util // util
static void dump(const char *name, const void *buf, int len, int flags=-1); static void dump(const char *name, const void *buf, int len, int flags=-1);
+1 -1
View File
@@ -106,7 +106,7 @@ static int F(Filter *f)
f->noncalls = noncalls; f->noncalls = noncalls;
f->lastcall = lastcall; f->lastcall = lastcall;
#if 0 #if 1
printf("\ncalls=%d noncalls=%d text_size=%x calltrickoffset=%x\n", printf("\ncalls=%d noncalls=%d text_size=%x calltrickoffset=%x\n",
calls,noncalls,size,cto8); calls,noncalls,size,cto8);
#endif #endif
+4 -4
View File
@@ -97,14 +97,14 @@ struct PackerNames
const char* fname; const char* fname;
const char* sname; const char* sname;
}; };
Entry names[32]; Entry names[64];
size_t names_count; size_t names_count;
const options_t *o; const options_t *o;
PackerNames() : names_count(0), o(NULL) { } PackerNames() : names_count(0), o(NULL) { }
void add(const Packer *p) void add(const Packer *p)
{ {
p->assertPacker(); p->assertPacker();
assert(names_count < 32); assert(names_count < 64);
names[names_count].fname = p->getFullName(o); names[names_count].fname = p->getFullName(o);
names[names_count].sname = p->getName(); names[names_count].sname = p->getName();
names_count++; names_count++;
@@ -205,8 +205,8 @@ void show_help(int verbose)
con_fprintf(f,"\nCompression tuning options:\n"); con_fprintf(f,"\nCompression tuning options:\n");
fg = con_fg(f,fg); fg = con_fg(f,fg);
con_fprintf(f, con_fprintf(f,
" --brute try all available compression methods & filters\n" " --brute try all available compression methods & filters [slow]\n"
" --ultra-brute try even more compression variants\n" " --ultra-brute try even more compression variants [very slow]\n"
"\n"); "\n");
fg = con_fg(f,FG_YELLOW); fg = con_fg(f,FG_YELLOW);
con_fprintf(f,"Backup options:\n"); con_fprintf(f,"Backup options:\n");
+34 -3
View File
@@ -159,7 +159,9 @@ void ElfLinker::init(const void *pdata_v, int plen)
input = new upx_byte[inputlen + 1]; input = new upx_byte[inputlen + 1];
unsigned new_len = u_len; unsigned new_len = u_len;
int r = upx_decompress(pdata, c_len, input, &new_len, method, NULL); int r = upx_decompress(pdata, c_len, input, &new_len, method, NULL);
if (r != 0 || new_len != u_len) if (r == UPX_E_OUT_OF_MEMORY)
throwOutOfMemoryException();
if (r != UPX_E_OK || new_len != u_len)
throwBadLoader(); throwBadLoader();
} }
else else
@@ -228,15 +230,20 @@ void ElfLinker::preprocessSymbols(char *start, char *end)
assert(nextl != NULL); assert(nextl != NULL);
if (sscanf(start, "%x g *ABS* %x %1023s", if (sscanf(start, "%x g *ABS* %x %1023s",
&value, &offset, symbol) == 3) &value, &offset, symbol) == 3)
{ {
char *s = strstr(start, symbol); char *s = strstr(start, symbol);
s[strlen(symbol)] = 0; s[strlen(symbol)] = 0;
addSymbol(s, "*ABS*", value); addSymbol(s, "*ABS*", value);
assert(offset == 0); assert(offset == 0);
} }
#if 0
else if (sscanf(start, "%x%*8c %1023s %*x %1023s", else if (sscanf(start, "%x%*8c %1023s %*x %1023s",
&offset, section, symbol) == 3) #else
// work around broken scanf implementations
else if (sscanf(start, "%x%*c%*c%*c%*c%*c%*c%*c%*c %1023s %*x %1023s",
#endif
&offset, section, symbol) == 3)
{ {
char *s = strstr(start, symbol); char *s = strstr(start, symbol);
s[strlen(symbol)] = 0; s[strlen(symbol)] = 0;
@@ -439,6 +446,23 @@ int ElfLinker::addLoader(const char *sname)
return outputlen; return outputlen;
} }
void ElfLinker::addLoader(const char *s, va_list ap)
{
while (s != NULL)
{
addLoader(s);
s = va_arg(ap, const char *);
}
}
void __acc_cdecl_va ElfLinker::addLoaderVA(const char *s, ...)
{
va_list ap;
va_start(ap, s);
addLoader(s, ap);
va_end(ap);
}
int ElfLinker::getSection(const char *sname, int *slen) const int ElfLinker::getSection(const char *sname, int *slen) const
{ {
const Section *section = findSection(sname); const Section *section = findSection(sname);
@@ -585,6 +609,7 @@ void ElfLinker::relocate1(const Relocation *rel, upx_byte *,
/************************************************************************* /*************************************************************************
// ElfLinker arch subclasses // ElfLinker arch subclasses
// FIXME: add more displacment overflow checks // FIXME: add more displacment overflow checks
// FIXME: add support for our special "ignore_reloc_overflow" section
**************************************************************************/ **************************************************************************/
#if 0 // FIXME #if 0 // FIXME
@@ -778,6 +803,12 @@ void ElfLinkerPpc32::relocate1(const Relocation *rel, upx_byte *location,
return super::relocate1(rel, location, value, type); return super::relocate1(rel, location, value, type);
type += 6; type += 6;
if (strcmp(type, "ADDR32") == 0)
{
set_be32(location, get_be32(location) + value);
return;
}
if (strncmp(type, "REL", 3) == 0) if (strncmp(type, "REL", 3) == 0)
{ {
value -= rel->section->offset + rel->offset; value -= rel->section->offset + rel->offset;
+6
View File
@@ -83,6 +83,12 @@ public:
virtual void init(const void *pdata, int plen); virtual void init(const void *pdata, int plen);
//virtual void setLoaderAlignOffset(int phase); //virtual void setLoaderAlignOffset(int phase);
virtual int addLoader(const char *sname); virtual int addLoader(const char *sname);
void addLoader(const char *s, va_list ap);
#if 1 && (ACC_CC_GNUC >= 0x040100)
void __acc_cdecl_va addLoaderVA(const char *s, ...) __attribute__((__sentinel__));
#else
void __acc_cdecl_va addLoaderVA(const char *s, ...);
#endif
virtual Section *addSection(const char *sname, const void *sdata, int slen, unsigned p2align); virtual Section *addSection(const char *sname, const void *sdata, int slen, unsigned p2align);
virtual int getSection(const char *sname, int *slen=NULL) const; virtual int getSection(const char *sname, int *slen=NULL) const;
virtual int getSectionSize(const char *sname) const; virtual int getSectionSize(const char *sname) const;
+20
View File
@@ -56,6 +56,9 @@ void options_t::reset()
o->backup = -1; o->backup = -1;
o->overlay = -1; o->overlay = -1;
o->preserve_mode = true;
o->preserve_ownership = true;
o->preserve_timestamp = true;
o->console = CON_FILE; o->console = CON_FILE;
#if defined(__DJGPP__) #if defined(__DJGPP__)
@@ -553,23 +556,28 @@ static int do_option(int optc, const char *arg)
// method // method
case 702: case 702:
opt->method_nrv2b_seen = true;
if (!set_method(M_NRV2B_LE32, -1)) if (!set_method(M_NRV2B_LE32, -1))
e_method(M_NRV2B_LE32, opt->level); e_method(M_NRV2B_LE32, opt->level);
break; break;
case 704: case 704:
opt->method_nrv2d_seen = true;
if (!set_method(M_NRV2D_LE32, -1)) if (!set_method(M_NRV2D_LE32, -1))
e_method(M_NRV2D_LE32, opt->level); e_method(M_NRV2D_LE32, opt->level);
break; break;
case 705: case 705:
opt->method_nrv2e_seen = true;
if (!set_method(M_NRV2E_LE32, -1)) if (!set_method(M_NRV2E_LE32, -1))
e_method(M_NRV2E_LE32, opt->level); e_method(M_NRV2E_LE32, opt->level);
break; break;
case 721: case 721:
opt->method_lzma_seen = true;
opt->all_methods_use_lzma = true; opt->all_methods_use_lzma = true;
if (!set_method(M_LZMA, -1)) if (!set_method(M_LZMA, -1))
e_method(M_LZMA, opt->level); e_method(M_LZMA, opt->level);
break; break;
case 722: case 722:
opt->method_lzma_seen = false;
opt->all_methods_use_lzma = false; opt->all_methods_use_lzma = false;
if (M_IS_LZMA(opt->method)) if (M_IS_LZMA(opt->method))
opt->method = -1; opt->method = -1;
@@ -641,6 +649,15 @@ static int do_option(int optc, const char *arg)
case 519: case 519:
opt->no_env = true; opt->no_env = true;
break; break;
case 526:
opt->preserve_mode = false;
break;
case 527:
opt->preserve_ownership = false;
break;
case 528:
opt->preserve_timestamp = false;
break;
// compression settings // compression settings
case 520: // --small case 520: // --small
if (opt->small < 0) if (opt->small < 0)
@@ -895,7 +912,10 @@ static const struct mfx_option longopts[] =
{"force-compress", 0, 0, 'f'}, // and compression of suspicious files {"force-compress", 0, 0, 'f'}, // and compression of suspicious files
{"info", 0, 0, 'i'}, // info mode {"info", 0, 0, 'i'}, // info mode
{"no-env", 0x10, 0, 519}, // no environment var {"no-env", 0x10, 0, 519}, // no environment var
{"no-mode", 0x10, 0, 526}, // do not preserve mode (permissions)
{"no-owner", 0x10, 0, 527}, // do not preserve ownership
{"no-progress", 0, 0, 516}, // no progress bar {"no-progress", 0, 0, 516}, // no progress bar
{"no-time", 0x10, 0, 528}, // do not preserve timestamp
{"output", 0x21, 0, 'o'}, {"output", 0x21, 0, 'o'},
{"quiet", 0, 0, 'q'}, // quiet mode {"quiet", 0, 0, 'q'}, // quiet mode
{"silent", 0, 0, 'q'}, // quiet mode {"silent", 0, 0, 'q'}, // quiet mode
+1 -5
View File
@@ -192,11 +192,7 @@ void MemBuffer::alloc(unsigned size)
assert((int)total > 0); assert((int)total > 0);
unsigned char *p = (unsigned char *) malloc(total); unsigned char *p = (unsigned char *) malloc(total);
if (!p) if (!p)
{ throwOutOfMemoryException();
//throw bad_alloc();
throw OutOfMemoryException("out of memory");
//exit(1);
}
b_size = size; b_size = size;
if (use_mcheck) if (use_mcheck)
{ {
+2 -2
View File
@@ -38,7 +38,7 @@
#ifndef __ACC_H_INCLUDED #ifndef __ACC_H_INCLUDED
#define __ACC_H_INCLUDED 1 #define __ACC_H_INCLUDED 1
#define ACC_VERSION 20070112L #define ACC_VERSION 20070113L
#if defined(__CYGWIN32__) && !defined(__CYGWIN__) #if defined(__CYGWIN32__) && !defined(__CYGWIN__)
# define __CYGWIN__ __CYGWIN32__ # define __CYGWIN__ __CYGWIN32__
#endif #endif
@@ -1302,7 +1302,7 @@ extern "C" {
#elif !defined(ACC_ABI_BIG_ENDIAN) && !defined(ACC_ABI_LITTLE_ENDIAN) #elif !defined(ACC_ABI_BIG_ENDIAN) && !defined(ACC_ABI_LITTLE_ENDIAN)
#if (ACC_ARCH_ALPHA) && (ACC_ARCH_CRAY_MPP) #if (ACC_ARCH_ALPHA) && (ACC_ARCH_CRAY_MPP)
# define ACC_ABI_BIG_ENDIAN 1 # define ACC_ABI_BIG_ENDIAN 1
#elif (ACC_ARCH_ALPHA || ACC_ARCH_AMD64 || ACC_ARCH_CRIS || ACC_ARCH_I086 || ACC_ARCH_I386 || ACC_ARCH_MSP430) #elif (ACC_ARCH_ALPHA || ACC_ARCH_AMD64 || ACC_ARCH_BLACKFIN || ACC_ARCH_CRIS || ACC_ARCH_I086 || ACC_ARCH_I386 || ACC_ARCH_MSP430)
# define ACC_ABI_LITTLE_ENDIAN 1 # define ACC_ABI_LITTLE_ENDIAN 1
#elif (ACC_ARCH_M68K || ACC_ARCH_S390) #elif (ACC_ARCH_M68K || ACC_ARCH_S390)
# define ACC_ABI_BIG_ENDIAN 1 # define ACC_ABI_BIG_ENDIAN 1
+7
View File
@@ -47,6 +47,10 @@ struct options_t {
// compression options // compression options
int method; int method;
bool method_lzma_seen;
bool method_nrv2b_seen;
bool method_nrv2d_seen;
bool method_nrv2e_seen;
int level; // compression level 1..10 int level; // compression level 1..10
int filter; // preferred filter from Packer::getFilters() int filter; // preferred filter from Packer::getFilters()
bool ultra_brute; bool ultra_brute;
@@ -65,6 +69,9 @@ struct options_t {
bool no_env; bool no_env;
bool no_progress; bool no_progress;
const char *output_name; const char *output_name;
bool preserve_mode;
bool preserve_ownership;
bool preserve_timestamp;
int small; int small;
int verbose; int verbose;
bool to_stdout; bool to_stdout;
+9 -1
View File
@@ -507,6 +507,10 @@ void PackArmPe::buildLoader(const Filter *ft)
void PackArmPe::pack(OutputFile *fo) void PackArmPe::pack(OutputFile *fo)
{ {
// FIXME: we need to think about better support for --exact
if (opt->exact)
throwCantPackExact();
const unsigned objs = ih.objects; const unsigned objs = ih.objects;
isection = new pe_section_t[objs]; isection = new pe_section_t[objs];
fi->seek(pe_offset+sizeof(ih),SEEK_SET); fi->seek(pe_offset+sizeof(ih),SEEK_SET);
@@ -542,10 +546,12 @@ void PackArmPe::pack(OutputFile *fo)
else if (opt->win32_pe.strip_relocs < 0) else if (opt->win32_pe.strip_relocs < 0)
opt->win32_pe.strip_relocs = (ih.imagebase >= 0x10000); opt->win32_pe.strip_relocs = (ih.imagebase >= 0x10000);
if (opt->win32_pe.strip_relocs) if (opt->win32_pe.strip_relocs)
{
if (ih.imagebase < 0x10000) if (ih.imagebase < 0x10000)
throwCantPack("--strip-relocs is not allowed when imagebase < 0x10000"); throwCantPack("--strip-relocs is not allowed when imagebase < 0x10000");
else else
ih.flags |= RELOCS_STRIPPED; ih.flags |= RELOCS_STRIPPED;
}
if (memcmp(isection[0].name,"UPX",3) == 0) if (memcmp(isection[0].name,"UPX",3) == 0)
throwAlreadyPackedByUPX(); throwAlreadyPackedByUPX();
@@ -632,7 +638,7 @@ void PackArmPe::pack(OutputFile *fo)
//OutputFile::dump("x1", ibuf, usize); //OutputFile::dump("x1", ibuf, usize);
// some checks for broken linkers - disable filter if neccessary // some checks for broken linkers - disable filter if necessary
bool allow_filter = true; bool allow_filter = true;
if (ih.codebase == ih.database if (ih.codebase == ih.database
|| ih.codebase + ih.codesize > ih.imagesize || ih.codebase + ih.codesize > ih.imagesize
@@ -882,6 +888,8 @@ void PackArmPe::pack(OutputFile *fo)
oh.codesize = osection[1].vsize; oh.codesize = osection[1].vsize;
oh.codebase = osection[1].vaddr; oh.codebase = osection[1].vaddr;
oh.headersize = osection[1].rawdataptr; oh.headersize = osection[1].rawdataptr;
if (rvamin < osection[0].rawdataptr)
throwCantPack("object alignment too small");
if (opt->win32_pe.strip_relocs && !isdll) if (opt->win32_pe.strip_relocs && !isdll)
oh.flags |= RELOCS_STRIPPED; oh.flags |= RELOCS_STRIPPED;
+2 -1
View File
@@ -42,7 +42,8 @@ public:
virtual int getVersion() const { return 13; } virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_DOS_COM; } virtual int getFormat() const { return UPX_F_DOS_COM; }
virtual const char *getName() const { return "dos/com"; } virtual const char *getName() const { return "dos/com"; }
virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.com" : "i286-dos16.com"; } //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.com" : "i286-dos16.com"; }
virtual const char *getFullName(const options_t *) const { return "i086-dos16.com"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
+2 -1
View File
@@ -76,10 +76,11 @@ const int *PackDjgpp2::getFilters() const
unsigned PackDjgpp2::findOverlapOverhead(const upx_bytep buf, unsigned PackDjgpp2::findOverlapOverhead(const upx_bytep buf,
const upx_bytep tbuf,
unsigned range, unsigned range,
unsigned upper_limit) const unsigned upper_limit) const
{ {
unsigned o = super::findOverlapOverhead(buf, range, upper_limit); unsigned o = super::findOverlapOverhead(buf, tbuf, range, upper_limit);
o = (o + 0x3ff) &~ 0x1ff; o = (o + 0x3ff) &~ 0x1ff;
return o; return o;
} }
+2 -1
View File
@@ -43,7 +43,7 @@ public:
virtual int getVersion() const { return 14; } virtual int getVersion() const { return 14; }
virtual int getFormat() const { return UPX_F_DJGPP2_COFF; } virtual int getFormat() const { return UPX_F_DJGPP2_COFF; }
virtual const char *getName() const { return "djgpp2/coff"; } virtual const char *getName() const { return "djgpp2/coff"; }
virtual const char *getFullName(const options_t *) const { return "i386-dos32.djgpp2"; } virtual const char *getFullName(const options_t *) const { return "i386-dos32.djgpp2.coff"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
@@ -58,6 +58,7 @@ protected:
virtual int readFileHeader(); virtual int readFileHeader();
virtual unsigned findOverlapOverhead(const upx_bytep buf, virtual unsigned findOverlapOverhead(const upx_bytep buf,
const upx_bytep tbuf,
unsigned range = 0, unsigned range = 0,
unsigned upper_limit = ~0u) const; unsigned upper_limit = ~0u) const;
virtual void buildLoader(const Filter *ft); virtual void buildLoader(const Filter *ft);
+4 -1
View File
@@ -29,7 +29,7 @@
/************************************************************************* /*************************************************************************
// Use the preprocessor to work around // Use the preprocessor to work around
// - that the types embedding these enums have to be PODs, and // - that the types embedding these enums have to be PODs, and
// deriving from an empty base class (which is the ususal C++ way // deriving from an empty base class (which is the usual C++ way
// of "importing" enums) does not yield a POD any more // of "importing" enums) does not yield a POD any more
// - that older compilers do not correctly perform EBCO // - that older compilers do not correctly perform EBCO
**************************************************************************/ **************************************************************************/
@@ -68,10 +68,13 @@
}; };
enum { // e_machine enum { // e_machine
EM_386 = 3, EM_386 = 3,
EM_MIPS = 8,
EM_MIPS_RS3_LE = 10, /* MIPS R3000 little-endian */
EM_PPC = 20, EM_PPC = 20,
EM_PPC64 = 21, EM_PPC64 = 21,
EM_ARM = 40, EM_ARM = 40,
EM_X86_64 = 62 EM_X86_64 = 62
}; };
enum { // e_version enum { // e_version
EV_CURRENT = 1 EV_CURRENT = 1
+202 -59
View File
@@ -53,24 +53,19 @@ PackExe::PackExe(InputFile *f) :
bele = &N_BELE_RTP::le_policy; bele = &N_BELE_RTP::le_policy;
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 32); COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 32);
ih_exesize = ih_imagesize = ih_overlay = 0; ih_exesize = ih_imagesize = ih_overlay = 0;
stack_for_lzma = 0;
use_clear_dirty_stack = false;
// disable lzma for "--brute" unless explicitly given "--lzma"
if (opt->all_methods_use_lzma && !opt->method_lzma_seen)
opt->all_methods_use_lzma = false;
} }
const int *PackExe::getCompressionMethods(int method, int level) const const int *PackExe::getCompressionMethods(int method, int level) const
{ {
static const int m_all[] = { M_NRV2B_8, M_NRV2D_8, M_NRV2E_8, M_END };
static const int m_nrv2b[] = { M_NRV2B_8, M_END };
static const int m_nrv2d[] = { M_NRV2D_8, M_END };
static const int m_nrv2e[] = { M_NRV2E_8, M_END };
if (method == M_ALL) return m_all;
if (M_IS_NRV2B(method)) return m_nrv2b;
if (M_IS_NRV2D(method)) return m_nrv2d;
if (M_IS_NRV2E(method)) return m_nrv2e;
bool small = ih_imagesize <= 256*1024; bool small = ih_imagesize <= 256*1024;
if (level == 1 || small) return Packer::getDefaultCompressionMethods_8(method, level, small);
return m_nrv2b;
return m_nrv2e;
} }
@@ -85,7 +80,7 @@ int PackExe::fillExeHeader(struct exe_header_t *eh) const
#define oh (*eh) #define oh (*eh)
// fill new exe header // fill new exe header
int flag = 0; int flag = 0;
if (!opt->dos_exe.no_reloc) if (!opt->dos_exe.no_reloc && !M_IS_LZMA(ph.method))
flag |= USEJUMP; flag |= USEJUMP;
if (ih.relocs == 0) if (ih.relocs == 0)
flag |= NORELOC; flag |= NORELOC;
@@ -94,7 +89,16 @@ int PackExe::fillExeHeader(struct exe_header_t *eh) const
oh.ident = 'M' + 'Z' * 256; oh.ident = 'M' + 'Z' * 256;
oh.headsize16 = 2; oh.headsize16 = 2;
oh.sp = ih.sp > 0x200 ? (unsigned) ih.sp : 0x200; unsigned minsp = 0x200;
if (M_IS_LZMA(ph.method))
minsp = stack_for_lzma;
minsp = ALIGN_UP(minsp, 16u);
assert(minsp < 0xff00);
if (oh.sp > minsp)
minsp = oh.sp;
if (minsp < 0xff00 - 2)
minsp = ALIGN_UP(minsp, 2u);
oh.sp = minsp;
unsigned destpara = (ph.u_len + ph.overlap_overhead - ph.c_len + 31) / 16; unsigned destpara = (ph.u_len + ph.overlap_overhead - ph.c_len + 31) / 16;
oh.ss = ph.c_len/16 + destpara; oh.ss = ph.c_len/16 + destpara;
@@ -106,27 +110,118 @@ int PackExe::fillExeHeader(struct exe_header_t *eh) const
if (oh.ss != ih.ss) if (oh.ss != ih.ss)
flag |= SS; flag |= SS;
if (oh.sp != ih.sp) if (oh.sp != ih.sp || M_IS_LZMA(ph.method))
flag |= SP; flag |= SP;
return flag; return flag;
#undef oh #undef oh
} }
void PackExe::addLoaderEpilogue(int flag)
{
addLoader("EXEMAIN5", NULL);
if (relocsize)
addLoader(ph.u_len <= DI_LIMIT || (ph.u_len & 0x7fff) >= relocsize ? "EXENOADJ" : "EXEADJUS",
"EXERELO1",
has_9a ? "EXEREL9A" : "",
"EXERELO2",
ih_exesize > 0xFE00 ? "EXEREBIG" : "",
"EXERELO3",
NULL
);
addLoader("EXEMAIN8",
device_driver ? "DEVICEEND" : "",
(flag & SS) ? "EXESTACK" : "",
(flag & SP) ? "EXESTASP" : "",
(flag & USEJUMP) ? "EXEJUMPF" : "",
NULL
);
if (!(flag & USEJUMP))
addLoader(ih.cs ? "EXERCSPO" : "",
"EXERETIP",
NULL
);
linker->defineSymbol("original_cs", ih.cs);
linker->defineSymbol("original_ip", ih.ip);
linker->defineSymbol("original_sp", ih.sp);
linker->defineSymbol("original_ss", ih.ss);
linker->defineSymbol("reloc_size",
(ph.u_len <= DI_LIMIT || (ph.u_len & 0x7fff)
>= relocsize ? 0 : MAXRELOCS) - relocsize);
}
void PackExe::buildLoader(const Filter *) void PackExe::buildLoader(const Filter *)
{ {
struct exe_header_t tmp_oh; // get flag
int flag = fillExeHeader(&tmp_oh); exe_header_t dummy_oh;
int flag = fillExeHeader(&dummy_oh);
// prepare loader
initLoader(stub_i086_dos16_exe, sizeof(stub_i086_dos16_exe)); initLoader(stub_i086_dos16_exe, sizeof(stub_i086_dos16_exe));
if (device_driver)
addLoader("DEVICEENTRY", NULL); if (M_IS_LZMA(ph.method))
{
addLoader("LZMA_DEC00",
opt->small ? "LZMA_DEC10" : "LZMA_DEC20",
"LZMA_DEC30",
use_clear_dirty_stack ? "LZMA_DEC31" : "",
"LZMA_DEC32",
ph.u_len > 0xffff ? "LZMA_DEC33" : "",
NULL
);
addLoaderEpilogue(flag);
defineDecompressorSymbols();
const unsigned lsize0 = getLoaderSize();
// Lzma decompression code starts at ss:0x10, and its size is
// lsize bytes. It also needs getDecompressorWrkmemSize() bytes
// during uncompression. It also uses some stack, so 0x100
// more bytes are allocated
stack_for_lzma = 0x10 + lsize0 + getDecompressorWrkmemSize() + 0x100;
stack_for_lzma = ALIGN_UP(stack_for_lzma, 16u);
unsigned clear_dirty_stack_low = 0x10 + lsize0;
clear_dirty_stack_low = ALIGN_UP(clear_dirty_stack_low, 2u);
if (use_clear_dirty_stack)
linker->defineSymbol("clear_dirty_stack_low", clear_dirty_stack_low);
relocateLoader();
const unsigned lsize = getLoaderSize();
assert(lsize0 == lsize);
MemBuffer loader(lsize);
memcpy(loader, getLoader(), lsize);
MemBuffer compressed_lzma;
compressed_lzma.allocForCompression(lsize);
unsigned c_len_lzma = MemBuffer::getSizeForCompression(lsize);
int r = upx_compress(loader, lsize, compressed_lzma, &c_len_lzma,
NULL, M_NRV2B_LE16, 9, NULL, NULL);
assert(r == UPX_E_OK); assert(c_len_lzma < lsize);
info("lzma+relocator code compressed: %u -> %u", lsize, c_len_lzma);
// reinit the loader
initLoader(stub_i086_dos16_exe, sizeof(stub_i086_dos16_exe));
// prepare loader
if (device_driver)
addLoader("DEVICEENTRY,LZMADEVICE,DEVICEENTRY2", NULL);
linker->addSection("COMPRESSED_LZMA", compressed_lzma, c_len_lzma, 0);
addLoader("LZMAENTRY,NRV2B160,NRVDDONE,NRVDECO1,NRVGTD00,NRVDECO2",
NULL);
}
else if (device_driver)
addLoader("DEVICEENTRY,DEVICEENTRY2", NULL);
addLoader("EXEENTRY", addLoader("EXEENTRY",
device_driver ? "DEVICESUB" : "EXESUB", M_IS_LZMA(ph.method) && device_driver ? "LONGSUB" : "SHORTSUB",
"JNCDOCOPY", "JNCDOCOPY",
relocsize ? "EXERELPU" : "", relocsize ? "EXERELPU" : "",
"EXEMAIN4,+G5DXXXX,UPX1HEAD,EXECUTPO", "EXEMAIN4",
M_IS_LZMA(ph.method) ? "" : "EXEMAIN4B",
"EXEMAIN4C",
M_IS_LZMA(ph.method) ? "COMPRESSED_LZMA_START,COMPRESSED_LZMA" : "",
"+G5DXXXX,UPX1HEAD,EXECUTPO",
NULL NULL
); );
if (ph.method == M_NRV2B_8) if (ph.method == M_NRV2B_8)
@@ -165,30 +260,12 @@ void PackExe::buildLoader(const Filter *)
"NRV2EEX9", "NRV2EEX9",
NULL NULL
); );
else if M_IS_LZMA(ph.method)
return;
else else
throwInternalError("unknown compression method"); throwInternalError("unknown compression method");
addLoader("EXEMAIN5", NULL);
if (relocsize) addLoaderEpilogue(flag);
addLoader(ph.u_len <= DI_LIMIT || (ph.u_len & 0x7fff) >= relocsize ? "EXENOADJ" : "EXEADJUS",
"EXERELO1",
has_9a ? "EXEREL9A" : "",
"EXERELO2",
ih_exesize > 0xFE00 ? "EXEREBIG" : "",
"EXERELO3",
NULL
);
addLoader("EXEMAIN8",
device_driver ? "DEVICEEND" : "",
(flag & SS) ? "EXESTACK" : "",
(flag & SP) ? "EXESTASP" : "",
(flag & USEJUMP) ? "EXEJUMPF" : "",
NULL
);
if (!(flag & USEJUMP))
addLoader(ih.cs ? "EXERCSPO" : "",
"EXERETIP",
NULL
);
} }
@@ -324,7 +401,7 @@ unsigned optimize_relocs(upx_byte *b, const unsigned size,
break; break;
} }
unsigned offs = addr - es*16; unsigned offs = addr - es*16;
if (offs >= 3 && b[es*16 + offs-3] == 0x9a) if (offs >= 3 && b[es*16 + offs-3] == 0x9a && offs > di + 3)
{ {
for (t = di; t < offs-3; t++) for (t = di; t < offs-3; t++)
if (b[es*16+t] == 0x9a && get_le16(b+es*16+t+3) <= seg_high) if (b[es*16+t] == 0x9a && get_le16(b+es*16+t+3) <= seg_high)
@@ -401,7 +478,7 @@ void PackExe::pack(OutputFile *fo)
for (ic = 0; ic < ih.relocs; ic++) for (ic = 0; ic < ih.relocs; ic++)
{ {
unsigned jc = get_le32(wr+4*ic); unsigned jc = get_le32(wr+4*ic);
set_le32(wr+4*ic, (jc>>16)*16+(jc&0xffff)); set_le32(wr+4*ic, ((jc>>16)*16+(jc&0xffff)) & 0xfffff);
} }
qsort(wr,ih.relocs,4,le32_compare); qsort(wr,ih.relocs,4,le32_compare);
relocsize = optimize_relocs(ibuf, ih_imagesize, wr, ih.relocs, w, &has_9a); relocsize = optimize_relocs(ibuf, ih_imagesize, wr, ih.relocs, w, &has_9a);
@@ -429,9 +506,12 @@ void PackExe::pack(OutputFile *fo)
// compress (max_match = 8192) // compress (max_match = 8192)
upx_compress_config_t cconf; cconf.reset(); upx_compress_config_t cconf; cconf.reset();
cconf.conf_ucl.max_match = MAXMATCH; cconf.conf_ucl.max_match = MAXMATCH;
cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28KB stack
compressWithFilters(&ft, 32, &cconf); compressWithFilters(&ft, 32, &cconf);
if (ph.max_run_found + ph.max_match_found > 0x8000)
throwCantPack("decompressor limit exceeded, send a bugreport"); if (M_IS_NRV2B(ph.method) || M_IS_NRV2D(ph.method) || M_IS_NRV2E(ph.method))
if (ph.max_run_found + ph.max_match_found > 0x8000)
throwCantPack("decompressor limit exceeded, send a bugreport");
#ifdef TESTING #ifdef TESTING
if (opt->debug.debug_level) if (opt->debug.debug_level)
@@ -497,15 +577,13 @@ void PackExe::pack(OutputFile *fo)
} }
extra_info[eisize++] = (unsigned char) flag; extra_info[eisize++] = (unsigned char) flag;
linker->defineSymbol("original_cs", ih.cs); if (M_IS_NRV2B(ph.method) || M_IS_NRV2D(ph.method) || M_IS_NRV2E(ph.method))
linker->defineSymbol("original_ip", ih.ip); linker->defineSymbol("bx_magic", 0x7FFF + 0x10 * ((packedsize & 15) + 1));
linker->defineSymbol("original_sp", ih.sp);
linker->defineSymbol("original_ss", ih.ss); unsigned decompressor_entry = 1 + (packedsize & 15);
linker->defineSymbol("reloc_size", if (M_IS_LZMA(ph.method))
(ph.u_len <= DI_LIMIT || (ph.u_len & 0x7fff) decompressor_entry = 0x10;
>= relocsize ? 0 : MAXRELOCS) - relocsize); linker->defineSymbol("decompressor_entry", decompressor_entry);
linker->defineSymbol("bx_magic", 0x7FFF + 0x10 * ((packedsize & 15) + 1));
linker->defineSymbol("decompressor_entry", (packedsize & 15) + 1);
// patch loader // patch loader
if (flag & USEJUMP) if (flag & USEJUMP)
@@ -541,8 +619,10 @@ void PackExe::pack(OutputFile *fo)
oh.m512 = outputlen & 511; oh.m512 = outputlen & 511;
oh.p512 = (outputlen + 511) >> 9; oh.p512 = (outputlen + 511) >> 9;
oh.ip = device_driver ? getLoaderSection("EXEENTRY") - 2 : 0; const char *exeentry = M_IS_LZMA(ph.method) ? "LZMAENTRY" : "EXEENTRY";
oh.ip = device_driver ? getLoaderSection(exeentry) - 2 : 0;
defineDecompressorSymbols();
relocateLoader(); relocateLoader();
memcpy(loader, getLoader(), lsize); memcpy(loader, getLoader(), lsize);
patchPackHeader(loader,e_len); patchPackHeader(loader,e_len);
@@ -591,7 +671,7 @@ int PackExe::canUnpack()
return false; return false;
const off_t off = ih.headsize16 * 16; const off_t off = ih.headsize16 * 16;
fi->seek(off, SEEK_SET); fi->seek(off, SEEK_SET);
bool b = readPackHeader(256); bool b = readPackHeader(4096);
return b && (off + (off_t) ph.c_len <= file_size); return b && (off + (off_t) ph.c_len <= file_size);
} }
@@ -726,6 +806,69 @@ Linker* PackExe::newLinker() const
return new ElfLinkerX86(); return new ElfLinkerX86();
} }
/*
memory layout at decompression time
===================================
normal exe
----------
a, at load time
(e - copying code, C - compressed data, d - decompressor+relocator,
x - not specified, U - uncompressed code+data, R uncompressed relocation)
eeCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdddd
^ CS:0 ^ SS:0
b, after copying
xxxxxxxxxxxxxxxCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdddd
^ES:DI=0 ^ DS:SI=0 ^ CS=SS, IP in range 0..0xf
c, after uncompression
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURRdddd
^ ES:DI
device driver
-------------
the file has 2 entry points, CS:0 in device driver mode, and
CS:exe_as_device_entry in normal mode. the code in section DEVICEENTRY
sets up the same environment for section EXEENTRY, as it would see in normal
execution mode.
lzma uncompression for normal exes
----------------------------------
(n - nrv2b uncompressor, l - nrv2b compressed lzma + relocator code)
a, at load time
nneelllCCCCCCCCCCCCCCCCCCCCCCCCC
^ CS:0 ^ SS:0
b, after nrv2b
nneelllCCCCCCCCCCCCCCCCCCCCCCCCC dddd
^ CS:0 ^ SS:0x10
after this, normal ee code runs
lzma + device driver
--------------------
(D - device driver adapter)
a, at load time
DDnneelllCCCCCCCCCCCCCCCCCCCCCCCCC
*/
/* /*
vi:ts=4:et vi:ts=4:et
+6 -1
View File
@@ -42,7 +42,8 @@ public:
virtual int getVersion() const { return 13; } virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_DOS_EXE; } virtual int getFormat() const { return UPX_F_DOS_EXE; }
virtual const char *getName() const { return "dos/exe"; } virtual const char *getName() const { return "dos/exe"; }
virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.exe" : "i286-dos16.exe"; } //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.exe" : "i286-dos16.exe"; }
virtual const char *getFullName(const options_t *) const { return "i086-dos16.exe"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
@@ -71,6 +72,7 @@ protected:
virtual int fillExeHeader(struct exe_header_t *) const; virtual int fillExeHeader(struct exe_header_t *) const;
virtual void buildLoader(const Filter *ft); virtual void buildLoader(const Filter *ft);
virtual Linker* newLinker() const; virtual Linker* newLinker() const;
void addLoaderEpilogue(int flag);
struct exe_header_t struct exe_header_t
{ {
@@ -110,6 +112,9 @@ protected:
MINMEM = 16, MINMEM = 16,
MAXMEM = 32 MAXMEM = 32
}; };
unsigned stack_for_lzma; // stack size required for lzma
bool use_clear_dirty_stack;
}; };
+189 -40
View File
@@ -141,6 +141,7 @@ PackLinuxElf64::checkEhdr(Elf64_Ehdr const *ehdr) const
PackLinuxElf::PackLinuxElf(InputFile *f) PackLinuxElf::PackLinuxElf(InputFile *f)
: super(f), file_image(NULL), dynstr(NULL), : super(f), file_image(NULL), dynstr(NULL),
sz_phdrs(0), sz_elf_hdrs(0), sz_pack2(0), sz_phdrs(0), sz_elf_hdrs(0), sz_pack2(0),
lg2_page(12), page_size(1u<<lg2_page),
e_machine(0), ei_class(0), ei_data(0), ei_osabi(0), osabi_note(NULL) e_machine(0), ei_class(0), ei_data(0), ei_osabi(0), osabi_note(NULL)
{ {
} }
@@ -201,7 +202,7 @@ void PackLinuxElf::defineSymbols(Filter const *)
} }
PackLinuxElf32::PackLinuxElf32(InputFile *f) PackLinuxElf32::PackLinuxElf32(InputFile *f)
: super(f), phdri(NULL), : super(f), phdri(NULL), page_mask(~0u<<lg2_page),
dynseg(NULL), hashtab(NULL), dynsym(NULL) dynseg(NULL), hashtab(NULL), dynsym(NULL)
{ {
} }
@@ -212,7 +213,7 @@ PackLinuxElf32::~PackLinuxElf32()
} }
PackLinuxElf64::PackLinuxElf64(InputFile *f) PackLinuxElf64::PackLinuxElf64(InputFile *f)
: super(f), phdri(NULL) : super(f), phdri(NULL), page_mask(~0ull<<lg2_page)
{ {
} }
@@ -245,6 +246,12 @@ PackLinuxElf32armBe::getCompressionMethods(int method, int level) const
return Packer::getDefaultCompressionMethods_8(method, level); return Packer::getDefaultCompressionMethods_8(method, level);
} }
int const *
PackLinuxElf32mipsel::getCompressionMethods(int method, int level) const
{
return Packer::getDefaultCompressionMethods_le32(method, level);
}
int const * int const *
PackLinuxElf32ppc::getFilters() const PackLinuxElf32ppc::getFilters() const
{ {
@@ -288,6 +295,11 @@ void PackLinuxElf32armBe::updateLoader(OutputFile *fo)
ARM_updateLoader(fo); ARM_updateLoader(fo);
} }
void PackLinuxElf32mipsel::updateLoader(OutputFile *fo)
{
ARM_updateLoader(fo); // not ARM specific; (no 32-bit immediates)
}
void PackLinuxElf32::updateLoader(OutputFile *fo) void PackLinuxElf32::updateLoader(OutputFile *fo)
{ {
set_native32(&elfout.ehdr.e_entry, fo->getBytesWritten() + set_native32(&elfout.ehdr.e_entry, fo->getBytesWritten() +
@@ -469,6 +481,8 @@ PackLinuxElf32::buildLinuxLoader(
unsigned char *tmp = new unsigned char[tmp_len]; unsigned char *tmp = new unsigned char[tmp_len];
memset(tmp, 0, tmp_len); memset(tmp, 0, tmp_len);
r = upx_decompress(sizeof(h) + cprLoader, h.sz_cpr, tmp, &tmp_len, h.b_method, NULL); r = upx_decompress(sizeof(h) + cprLoader, h.sz_cpr, tmp, &tmp_len, h.b_method, NULL);
if (r == UPX_E_OUT_OF_MEMORY)
throwOutOfMemoryException();
printf("\n%d %d: %d %d %d\n", h.b_method, r, h.sz_cpr, h.sz_unc, tmp_len); printf("\n%d %d: %d %d %d\n", h.b_method, r, h.sz_cpr, h.sz_unc, tmp_len);
for (unsigned j=0; j < h.sz_unc; ++j) if (tmp[j]!=uncLoader[j]) { for (unsigned j=0; j < h.sz_unc; ++j) if (tmp[j]!=uncLoader[j]) {
printf("%d: %x %x\n", j, tmp[j], uncLoader[j]); printf("%d: %x %x\n", j, tmp[j], uncLoader[j]);
@@ -560,9 +574,7 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
} }
} }
} }
#define PAGE_MASK (~0u<<12) lsize = /*getLoaderSize()*/ 64 * 1024; // XXX: upper bound; avoid circularity
#define PAGE_SIZE (-PAGE_MASK)
lsize = /*getLoaderSize()*/ 64 * 1024; // upper bound; avoid circularity
acc_uint64l_t lo_va_stub = get_native64(&elfout.phdr[0].p_vaddr); acc_uint64l_t lo_va_stub = get_native64(&elfout.phdr[0].p_vaddr);
acc_uint64l_t adrc; acc_uint64l_t adrc;
acc_uint64l_t adrm; acc_uint64l_t adrm;
@@ -572,7 +584,7 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
unsigned lenm; unsigned lenm;
unsigned lenu; unsigned lenu;
len += (7&-lsize) + lsize; len += (7&-lsize) + lsize;
bool const is_big = (lo_va_user < (lo_va_stub + len + 2*PAGE_SIZE)); bool const is_big = (lo_va_user < (lo_va_stub + len + 2*page_size));
if (is_big) { if (is_big) {
set_native64( &elfout.ehdr.e_entry, set_native64( &elfout.ehdr.e_entry,
get_native64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub); get_native64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
@@ -581,10 +593,10 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
lo_va_stub = lo_va_user; lo_va_stub = lo_va_user;
adrc = lo_va_stub; adrc = lo_va_stub;
adrm = getbrk(phdri, get_native16(&ehdri.e_phnum)); adrm = getbrk(phdri, get_native16(&ehdri.e_phnum));
adru = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary adru = page_mask & (~page_mask + adrm); // round up to page boundary
adrx = adru + hlen; adrx = adru + hlen;
lenm = PAGE_SIZE + len; lenm = page_size + len;
lenu = PAGE_SIZE + len; lenu = page_size + len;
cntc = len >> 3; // over-estimate; corrected at runtime cntc = len >> 3; // over-estimate; corrected at runtime
} }
else { else {
@@ -592,12 +604,12 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
adrc = adrm; adrc = adrm;
adru = lo_va_stub; adru = lo_va_stub;
adrx = lo_va_stub + hlen; adrx = lo_va_stub + hlen;
lenm = PAGE_SIZE; lenm = page_size;
lenu = PAGE_SIZE + len; lenu = page_size + len;
cntc = 0; cntc = 0;
} }
adrm = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary adrm = page_mask & (~page_mask + adrm); // round up to page boundary
adrc = PAGE_MASK & (~PAGE_MASK + adrc); // round up to page boundary adrc = page_mask & (~page_mask + adrc); // round up to page boundary
linker->defineSymbol("ADRX", adrx); // compressed input for eXpansion linker->defineSymbol("ADRX", adrx); // compressed input for eXpansion
@@ -614,8 +626,6 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
#undef EI_NIDENT #undef EI_NIDENT
linker->defineSymbol("LENM", lenm); // len for map linker->defineSymbol("LENM", lenm); // len for map
linker->defineSymbol("ADRM", adrm); // addr for map linker->defineSymbol("ADRM", adrm); // addr for map
#undef PAGE_SIZE
#undef PAGE_MASK
//linker->dumpSymbols(); // debug //linker->dumpSymbols(); // debug
} }
@@ -734,6 +744,19 @@ PackLinuxElf32armLe::buildLoader(Filter const *ft)
stub_arm_linux_elf_fold, sizeof(stub_arm_linux_elf_fold), ft); stub_arm_linux_elf_fold, sizeof(stub_arm_linux_elf_fold), ft);
} }
static const
#include "stub/mipsel.r3000-linux.elf-entry.h"
static const
#include "stub/mipsel.r3000-linux.elf-fold.h"
void
PackLinuxElf32mipsel::buildLoader(Filter const *ft)
{
buildLinuxLoader(
stub_mipsel_r3000_linux_elf_entry, sizeof(stub_mipsel_r3000_linux_elf_entry),
stub_mipsel_r3000_linux_elf_fold, sizeof(stub_mipsel_r3000_linux_elf_fold), ft);
}
static const static const
#include "stub/powerpc-linux.elf-entry.h" #include "stub/powerpc-linux.elf-entry.h"
static const static const
@@ -993,6 +1016,10 @@ PackLinuxElf32::generateElfHdr(
cprElfHdr3 *const h3 = (cprElfHdr3 *)&elfout; cprElfHdr3 *const h3 = (cprElfHdr3 *)&elfout;
memcpy(h3, proto, sizeof(*h3)); // reads beyond, but OK memcpy(h3, proto, sizeof(*h3)); // reads beyond, but OK
h3->ehdr.e_ident[Elf32_Ehdr::EI_OSABI] = ei_osabi; h3->ehdr.e_ident[Elf32_Ehdr::EI_OSABI] = ei_osabi;
if (Elf32_Ehdr::EM_MIPS==e_machine) { // MIPS R3000 FIXME
h3->ehdr.e_ident[Elf32_Ehdr::EI_OSABI] = Elf32_Ehdr::ELFOSABI_NONE;
h3->ehdr.e_flags = ehdri.e_flags;
}
assert(get_native32(&h2->ehdr.e_phoff) == sizeof(Elf32_Ehdr)); assert(get_native32(&h2->ehdr.e_phoff) == sizeof(Elf32_Ehdr));
h2->ehdr.e_shoff = 0; h2->ehdr.e_shoff = 0;
@@ -1006,19 +1033,33 @@ PackLinuxElf32::generateElfHdr(
set_native32(&h2->phdr[0].p_filesz, sizeof(*h2)); // + identsize; set_native32(&h2->phdr[0].p_filesz, sizeof(*h2)); // + identsize;
h2->phdr[0].p_memsz = h2->phdr[0].p_filesz; h2->phdr[0].p_memsz = h2->phdr[0].p_filesz;
unsigned const e_phnum = get_native16(&ehdri.e_phnum);
Elf32_Phdr const *phdr = phdri;
for (unsigned j=0; j < e_phnum; ++phdr, ++j) {
if (phdr->PT_LOAD32 == get_native32(&phdr->p_type)) {
unsigned x = phdr->p_align >> lg2_page;
while (x>>=1) {
++lg2_page;
}
}
}
page_size = 1u<<lg2_page;
page_mask = ~0u<<lg2_page;
for (unsigned j=0; j < 3; ++j) {
set_native32(&h3->phdr[j].p_align, page_size);
}
// Info for OS kernel to set the brk() // Info for OS kernel to set the brk()
if (brka) { if (brka) {
#define PAGE_MASK (~0u<<12)
// linux-2.6.14 binfmt_elf.c: SIGKILL if (0==.p_memsz) on a page boundary // 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); 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_type, PT_LOAD32); // be sure
set_native32(&h2->phdr[1].p_offset, ~PAGE_MASK & brkb); set_native32(&h2->phdr[1].p_offset, ~page_mask & brkb);
set_native32(&h2->phdr[1].p_vaddr, brkb); set_native32(&h2->phdr[1].p_vaddr, brkb);
set_native32(&h2->phdr[1].p_paddr, brkb); set_native32(&h2->phdr[1].p_paddr, brkb);
h2->phdr[1].p_filesz = 0; h2->phdr[1].p_filesz = 0;
h2->phdr[1].p_memsz = 0; h2->phdr[1].p_memsz = 0;
set_native32(&h2->phdr[1].p_flags, Elf32_Phdr::PF_R | Elf32_Phdr::PF_W); set_native32(&h2->phdr[1].p_flags, Elf32_Phdr::PF_R | Elf32_Phdr::PF_W);
#undef PAGE_MASK
} }
if (ph.format==getFormat()) { if (ph.format==getFormat()) {
assert(2==get_native16(&h2->ehdr.e_phnum)); assert(2==get_native16(&h2->ehdr.e_phnum));
@@ -1057,16 +1098,14 @@ PackOpenBSDElf32x86::generateElfHdr(
set_native32(&h3->phdr[0].p_filesz, sizeof(*h3)+sizeof(elfnote)); // + identsize; set_native32(&h3->phdr[0].p_filesz, sizeof(*h3)+sizeof(elfnote)); // + identsize;
h3->phdr[0].p_memsz = h3->phdr[0].p_filesz; h3->phdr[0].p_memsz = h3->phdr[0].p_filesz;
#define PAGE_MASK (~0u<<12) unsigned const brkb = brka | ((0==(~page_mask & brka)) ? 0x20 : 0);
unsigned const brkb = brka | ((0==(~PAGE_MASK & brka)) ? 0x20 : 0);
set_native32(&h3->phdr[1].p_type, PT_LOAD32); // be sure set_native32(&h3->phdr[1].p_type, PT_LOAD32); // be sure
set_native32(&h3->phdr[1].p_offset, ~PAGE_MASK & brkb); set_native32(&h3->phdr[1].p_offset, ~page_mask & brkb);
set_native32(&h3->phdr[1].p_vaddr, brkb); set_native32(&h3->phdr[1].p_vaddr, brkb);
set_native32(&h3->phdr[1].p_paddr, brkb); set_native32(&h3->phdr[1].p_paddr, brkb);
h3->phdr[1].p_filesz = 0; h3->phdr[1].p_filesz = 0;
h3->phdr[1].p_memsz = 0; h3->phdr[1].p_memsz = 0;
set_native32(&h3->phdr[1].p_flags, Elf32_Phdr::PF_R | Elf32_Phdr::PF_W); set_native32(&h3->phdr[1].p_flags, Elf32_Phdr::PF_R | Elf32_Phdr::PF_W);
#undef PAGE_MASK
set_native32(&h3->phdr[2].p_type, Elf32_Phdr::PT_NOTE); set_native32(&h3->phdr[2].p_type, Elf32_Phdr::PT_NOTE);
set_native32(&h3->phdr[2].p_offset, note_offset); set_native32(&h3->phdr[2].p_offset, note_offset);
@@ -1118,19 +1157,33 @@ PackLinuxElf64::generateElfHdr(
set_native64(&h2->phdr[0].p_filesz, sizeof(*h2)); // + identsize; set_native64(&h2->phdr[0].p_filesz, sizeof(*h2)); // + identsize;
h2->phdr[0].p_memsz = h2->phdr[0].p_filesz; h2->phdr[0].p_memsz = h2->phdr[0].p_filesz;
unsigned const e_phnum = get_native16(&ehdri.e_phnum);
Elf64_Phdr const *phdr = phdri;
for (unsigned j=0; j < e_phnum; ++phdr, ++j) {
if (phdr->PT_LOAD64 == get_native64(&phdr->p_type)) {
unsigned x = phdr->p_align >> lg2_page;
while (x>>=1) {
++lg2_page;
}
}
}
page_size = 1u <<lg2_page;
page_mask = ~0ull<<lg2_page;
for (unsigned j=0; j < 3; ++j) {
set_native64(&h3->phdr[j].p_align, page_size);
}
// Info for OS kernel to set the brk() // Info for OS kernel to set the brk()
if (brka) { if (brka) {
#define PAGE_MASK (~0ul<<12)
// linux-2.6.14 binfmt_elf.c: SIGKILL if (0==.p_memsz) on a page boundary // 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); 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_type, PT_LOAD32); // be sure
set_native64(&h2->phdr[1].p_offset, ~PAGE_MASK & brkb); set_native64(&h2->phdr[1].p_offset, ~page_mask & brkb);
set_native64(&h2->phdr[1].p_vaddr, brkb); set_native64(&h2->phdr[1].p_vaddr, brkb);
set_native64(&h2->phdr[1].p_paddr, brkb); set_native64(&h2->phdr[1].p_paddr, brkb);
h2->phdr[1].p_filesz = 0; h2->phdr[1].p_filesz = 0;
h2->phdr[1].p_memsz = 0; h2->phdr[1].p_memsz = 0;
set_native32(&h2->phdr[1].p_flags, Elf64_Phdr::PF_R | Elf64_Phdr::PF_W); set_native32(&h2->phdr[1].p_flags, Elf64_Phdr::PF_R | Elf64_Phdr::PF_W);
#undef PAGE_MASK
} }
if (ph.format==getFormat()) { if (ph.format==getFormat()) {
assert(2==get_native16(&h2->ehdr.e_phnum)); assert(2==get_native16(&h2->ehdr.e_phnum));
@@ -1187,6 +1240,14 @@ void PackLinuxElf32armBe::pack1(OutputFile *fo, Filter &ft)
generateElfHdr(fo, &h3, getbrk(phdri, get_native16(&ehdri.e_phnum)) ); generateElfHdr(fo, &h3, getbrk(phdri, get_native16(&ehdri.e_phnum)) );
} }
void PackLinuxElf32mipsel::pack1(OutputFile *fo, Filter &ft)
{
super::pack1(fo, ft);
cprElfHdr3 h3;
memcpy(&h3, stub_mipsel_r3000_linux_elf_fold, sizeof(Elf32_Ehdr) + 2*sizeof(Elf32_Phdr));
generateElfHdr(fo, &h3, getbrk(phdri, get_native16(&ehdri.e_phnum)) );
}
void PackLinuxElf32ppc::pack1(OutputFile *fo, Filter &ft) void PackLinuxElf32ppc::pack1(OutputFile *fo, Filter &ft)
{ {
super::pack1(fo, ft); super::pack1(fo, ft);
@@ -1443,12 +1504,17 @@ PackLinuxElf32armLe::getFilters() const
return ARM_getFilters(false); return ARM_getFilters(false);
} }
const int *
PackLinuxElf32mipsel::getFilters() const
{
static const int f_none[] = { FT_END };
return f_none;
}
void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/) void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/)
{ {
unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info); unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info);
#define PAGE_MASK (~0u<<12)
#define PAGE_SIZE (-PAGE_MASK)
lsize = /*getLoaderSize()*/ 4 * 1024; // upper bound; avoid circularity lsize = /*getLoaderSize()*/ 4 * 1024; // upper bound; avoid circularity
unsigned const lo_va_user = 0x8000; // XXX unsigned const lo_va_user = 0x8000; // XXX
unsigned lo_va_stub = get_native32(&elfout.phdr[0].p_vaddr); unsigned lo_va_stub = get_native32(&elfout.phdr[0].p_vaddr);
@@ -1465,17 +1531,15 @@ void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/)
lo_va_stub = lo_va_user; lo_va_stub = lo_va_user;
adrc = lo_va_stub; adrc = lo_va_stub;
adrm = getbrk(phdri, get_native16(&ehdri.e_phnum)); adrm = getbrk(phdri, get_native16(&ehdri.e_phnum));
adrx = hlen + (PAGE_MASK & (~PAGE_MASK + adrm)); // round up to page boundary adrx = hlen + (page_mask & (~page_mask + adrm)); // round up to page boundary
} }
adrm = PAGE_MASK & (~PAGE_MASK + adrm); // round up to page boundary adrm = page_mask & (~page_mask + adrm); // round up to page boundary
adrc = PAGE_MASK & (~PAGE_MASK + adrc); // round up to page boundary adrc = page_mask & (~page_mask + adrc); // round up to page boundary
linker->defineSymbol("CPR0", 4+ linker->getSymbolOffset("cpr0")); linker->defineSymbol("CPR0", 4+ linker->getSymbolOffset("cpr0"));
linker->defineSymbol("LENF", 4+ linker->getSymbolOffset("end_decompress")); linker->defineSymbol("LENF", 4+ linker->getSymbolOffset("end_decompress"));
linker->defineSymbol("ADRM", adrm); // addr for map linker->defineSymbol("ADRM", adrm); // addr for map
#undef PAGE_SIZE
#undef PAGE_MASK
} }
void PackLinuxElf32armLe::defineSymbols(Filter const *ft) void PackLinuxElf32armLe::defineSymbols(Filter const *ft)
@@ -1488,6 +1552,78 @@ void PackLinuxElf32armBe::defineSymbols(Filter const *ft)
ARM_defineSymbols(ft); ARM_defineSymbols(ft);
} }
void PackLinuxElf32mipsel::defineSymbols(Filter const * /*ft*/)
{
unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info);
// We want to know if compressed data, plus stub, plus a couple pages,
// will fit below the uncompressed program in memory. But we don't
// know the final total compressed size yet, so use the uncompressed
// size (total over all PT_LOAD32) as an upper bound.
unsigned len = 0;
unsigned lo_va_user = ~0u; // infinity
for (int j= get_native16(&ehdri.e_phnum); --j>=0; ) {
if (PT_LOAD32 == get_native32(&phdri[j].p_type)) {
len += (unsigned)get_native32(&phdri[j].p_filesz);
unsigned const va = get_native32(&phdri[j].p_vaddr);
if (va < lo_va_user) {
lo_va_user = va;
}
}
}
lsize = /*getLoaderSize()*/ 64 * 1024; // XXX: upper bound; avoid circularity
unsigned lo_va_stub = get_native32(&elfout.phdr[0].p_vaddr);
unsigned adrc;
unsigned adrm;
unsigned adru;
unsigned adrx;
unsigned cntc;
unsigned lenm;
unsigned lenu;
len += (7&-lsize) + lsize;
bool const is_big = (lo_va_user < (lo_va_stub + len + 2*page_size));
if (is_big) {
set_native32( &elfout.ehdr.e_entry,
get_native32(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
set_native32(&elfout.phdr[0].p_vaddr, lo_va_user);
set_native32(&elfout.phdr[0].p_paddr, lo_va_user);
lo_va_stub = lo_va_user;
adrc = lo_va_stub;
adrm = getbrk(phdri, get_native16(&ehdri.e_phnum));
adru = page_mask & (~page_mask + adrm); // round up to page boundary
adrx = adru + hlen;
lenm = page_size + len;
lenu = page_size + len;
cntc = len >> 3; // over-estimate; corrected at runtime
}
else {
adrm = lo_va_stub + len;
adrc = adrm;
adru = lo_va_stub;
adrx = lo_va_stub + hlen;
lenm = page_size;
lenu = page_size + len;
cntc = 0;
}
adrm = page_mask & (~page_mask + adrm); // round up to page boundary
adrc = page_mask & (~page_mask + adrc); // round up to page boundary
linker->defineSymbol("ADRX", adrx); // compressed input for eXpansion
// For actual moving, we need the true count, which depends on sz_pack2
// and is not yet known. So the runtime stub detects "no move"
// if adrm==adrc, and otherwise uses actual sz_pack2 to compute cntc.
//linker->defineSymbol("CNTC", cntc); // count for copy
linker->defineSymbol("ADRC", adrc); // addr for copy
linker->defineSymbol("LENU", lenu); // len for unmap
linker->defineSymbol("ADRU", adru); // addr for unmap
linker->defineSymbol("LENM", lenm); // len for map
linker->defineSymbol("ADRM", adrm); // addr for map
//linker->dumpSymbols(); // debug
}
void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft) void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft)
{ {
overlay_offset = sz_elf_hdrs + sizeof(linfo); overlay_offset = sz_elf_hdrs + sizeof(linfo);
@@ -1502,10 +1638,8 @@ void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft)
// tries to make .bss, which requires PF_W. // tries to make .bss, which requires PF_W.
// But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X.
#if 0 /*{*/ #if 0 /*{*/
#define PAGE_MASK (~0u<<12)
// pre-calculate for benefit of runtime disappearing act via munmap() // pre-calculate for benefit of runtime disappearing act via munmap()
set_native32(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len)); set_native32(&elfout.phdr[0].p_memsz, page_mask & (~page_mask + len));
#undef PAGE_MASK
#else /*}{*/ #else /*}{*/
set_native32(&elfout.phdr[0].p_memsz, len); set_native32(&elfout.phdr[0].p_memsz, len);
#endif /*}*/ #endif /*}*/
@@ -1552,10 +1686,8 @@ void PackLinuxElf64::pack4(OutputFile *fo, Filter &ft)
// tries to make .bss, which requires PF_W. // tries to make .bss, which requires PF_W.
// But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X.
#if 0 /*{*/ #if 0 /*{*/
#define PAGE_MASK (~0u<<12)
// pre-calculate for benefit of runtime disappearing act via munmap() // pre-calculate for benefit of runtime disappearing act via munmap()
set_native64(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len)); set_native64(&elfout.phdr[0].p_memsz, page_mask & (~page_mask + len));
#undef PAGE_MASK
#else /*}{*/ #else /*}{*/
set_native64(&elfout.phdr[0].p_memsz, len); set_native64(&elfout.phdr[0].p_memsz, len);
#endif /*}*/ #endif /*}*/
@@ -1873,11 +2005,28 @@ PackLinuxElf32armLe::~PackLinuxElf32armLe()
{ {
} }
PackLinuxElf32mipsel::PackLinuxElf32mipsel(InputFile *f) : super(f)
{
e_machine = Elf32_Ehdr::EM_MIPS;
ei_class = Elf32_Ehdr::ELFCLASS32;
ei_data = Elf32_Ehdr::ELFDATA2LSB;
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
}
PackLinuxElf32mipsel::~PackLinuxElf32mipsel()
{
}
Linker* PackLinuxElf32armLe::newLinker() const Linker* PackLinuxElf32armLe::newLinker() const
{ {
return new ElfLinkerArmLE(); return new ElfLinkerArmLE();
} }
Linker* PackLinuxElf32mipsel::newLinker() const
{
return new ElfLinkerMipsLE();
}
PackLinuxElf32armBe::PackLinuxElf32armBe(InputFile *f) : super(f) PackLinuxElf32armBe::PackLinuxElf32armBe(InputFile *f) : super(f)
{ {
e_machine = Elf32_Ehdr::EM_ARM; e_machine = Elf32_Ehdr::EM_ARM;
+28 -4
View File
@@ -70,6 +70,8 @@ protected:
unsigned sz_phdrs; // sizeof Phdr[] unsigned sz_phdrs; // sizeof Phdr[]
unsigned sz_elf_hdrs; // all Elf headers unsigned sz_elf_hdrs; // all Elf headers
unsigned sz_pack2; // after pack2(), before loader unsigned sz_pack2; // after pack2(), before loader
unsigned lg2_page; // log2(PAGE_SIZE)
unsigned page_size; // 1u<<lg2_page
unsigned short e_machine; unsigned short e_machine;
unsigned char ei_class; unsigned char ei_class;
@@ -126,6 +128,7 @@ protected:
protected: protected:
Elf32_Ehdr ehdri; // from input file Elf32_Ehdr ehdri; // from input file
Elf32_Phdr *phdri; // for input file Elf32_Phdr *phdri; // for input file
unsigned page_mask; // AND clears the offset-within-page
Elf32_Dyn const *dynseg; // from PT_DYNAMIC Elf32_Dyn const *dynseg; // from PT_DYNAMIC
unsigned int const *hashtab; // from DT_HASH unsigned int const *hashtab; // from DT_HASH
@@ -211,6 +214,7 @@ protected:
protected: protected:
Elf64_Ehdr ehdri; // from input file Elf64_Ehdr ehdri; // from input file
Elf64_Phdr *phdri; // for input file Elf64_Phdr *phdri; // for input file
acc_uint64l_t page_mask; // AND clears the offset-within-page
struct cprElfHdr1 { struct cprElfHdr1 {
Elf64_Ehdr ehdr; Elf64_Ehdr ehdr;
@@ -416,8 +420,8 @@ class PackLinuxElf32armLe : public PackLinuxElf32Le
public: public:
PackLinuxElf32armLe(InputFile *f); PackLinuxElf32armLe(InputFile *f);
virtual ~PackLinuxElf32armLe(); virtual ~PackLinuxElf32armLe();
virtual int getFormat() const { return UPX_F_LINUX_ELF32_ARMLE; } virtual int getFormat() const { return UPX_F_LINUX_ELF32_ARMEL; }
virtual const char *getName() const { return "linux/armLE"; } virtual const char *getName() const { return "linux/armel"; }
virtual const char *getFullName(const options_t *) const { return "arm-linux.elf"; } virtual const char *getFullName(const options_t *) const { return "arm-linux.elf"; }
virtual const int *getFilters() const; virtual const int *getFilters() const;
@@ -436,8 +440,8 @@ class PackLinuxElf32armBe : public PackLinuxElf32Be
public: public:
PackLinuxElf32armBe(InputFile *f); PackLinuxElf32armBe(InputFile *f);
virtual ~PackLinuxElf32armBe(); virtual ~PackLinuxElf32armBe();
virtual int getFormat() const { return UPX_F_LINUX_ELF32_ARMBE; } virtual int getFormat() const { return UPX_F_LINUX_ELF32_ARMEB; }
virtual const char *getName() const { return "linux/armBE"; } virtual const char *getName() const { return "linux/armeb"; }
virtual const char *getFullName(const options_t *) const { return "armeb-linux.elf"; } virtual const char *getFullName(const options_t *) const { return "armeb-linux.elf"; }
virtual const int *getFilters() const; virtual const int *getFilters() const;
@@ -450,6 +454,26 @@ protected:
virtual void defineSymbols(Filter const *); virtual void defineSymbols(Filter const *);
}; };
class PackLinuxElf32mipsel : public PackLinuxElf32Le
{
typedef PackLinuxElf32Le super;
public:
PackLinuxElf32mipsel(InputFile *f);
virtual ~PackLinuxElf32mipsel();
virtual int getFormat() const { return UPX_F_LINUX_ELF32_MIPSEL; }
virtual const char *getName() const { return "linux/mipsel"; }
virtual const char *getFullName(const options_t *) const { return "mipsel-linux.elf"; }
virtual const int *getFilters() const;
protected:
virtual const int *getCompressionMethods(int method, int level) const;
virtual Linker* newLinker() const;
virtual void pack1(OutputFile *, Filter &); // generate executable header
virtual void buildLoader(const Filter *);
virtual void updateLoader(OutputFile *);
virtual void defineSymbols(Filter const *);
};
#endif /*} already included */ #endif /*} already included */
+1 -1
View File
@@ -138,7 +138,7 @@ class PackBSDI386 : public PackLinuxI386
public: public:
PackBSDI386(InputFile *f); PackBSDI386(InputFile *f);
virtual int getFormat() const { return UPX_F_BSD_i386; } virtual int getFormat() const { return UPX_F_BSD_i386; }
virtual const char *getName() const { return "*BSD/386"; } virtual const char *getName() const { return "BSD/386"; }
virtual const char *getFullName(const options_t *) const { return "i386-bsd.elf.execve"; } virtual const char *getFullName(const options_t *) const { return "i386-bsd.elf.execve"; }
protected: protected:
+416 -51
View File
@@ -39,22 +39,34 @@ static const
static const static const
#include "stub/powerpc-darwin.macho-fold.h" #include "stub/powerpc-darwin.macho-fold.h"
PackMachPPC32::PackMachPPC32(InputFile *f) : static const
super(f), n_segment(0), rawmseg(0), msegcmd(0) #include "stub/i386-darwin.macho-entry.h"
static const
#include "stub/i386-darwin.macho-fold.h"
template <class T>
PackMachBase<T>::PackMachBase(InputFile *f, unsigned cputype, unsigned flavor,
unsigned count, unsigned size) :
super(f), my_cputype(cputype), my_thread_flavor(flavor),
my_thread_state_word_count(count), my_thread_command_size(size),
n_segment(0), rawmseg(NULL), msegcmd(NULL)
{ {
MachClass::compileTimeAssertions();
bele = N_BELE_CTP::getRTP<BeLePolicy>();
} }
PackMachPPC32::~PackMachPPC32() template <class T>
PackMachBase<T>::~PackMachBase()
{ {
delete [] msegcmd;
delete [] rawmseg; delete [] rawmseg;
delete [] msegcmd;
} }
const int *PackMachPPC32::getCompressionMethods(int /*method*/, int /*level*/) const template <class T>
const int *PackMachBase<T>::getCompressionMethods(int method, int level) const
{ {
// There really is no LE bias in M_NRV2E_LE32. // There really is no LE bias.
static const int m_nrv2e[] = { M_NRV2E_LE32, M_END }; return Packer::getDefaultCompressionMethods_le32(method, level);
return m_nrv2e;
} }
@@ -64,13 +76,25 @@ const int *PackMachPPC32::getFilters() const
return filters; return filters;
} }
int const *PackMachI386::getFilters() const
{
static const int filters[] = { 0x49, FT_END };
return filters;
}
Linker *PackMachPPC32::newLinker() const Linker *PackMachPPC32::newLinker() const
{ {
return new ElfLinkerPpc32; return new ElfLinkerPpc32;
} }
Linker *PackMachI386::newLinker() const
{
return new ElfLinkerX86;
}
template <class T>
void void
PackMachPPC32::addStubEntrySections(Filter const *) PackMachBase<T>::addStubEntrySections(Filter const *)
{ {
addLoader("MACOS000", NULL); addLoader("MACOS000", NULL);
//addLoader(getDecompressorSections(), NULL); //addLoader(getDecompressorSections(), NULL);
@@ -83,15 +107,79 @@ PackMachPPC32::addStubEntrySections(Filter const *)
addLoader("ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL); addLoader("ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL);
} }
void PackMachI386::addStubEntrySections(Filter const *ft)
{
int const n_mru = ft->n_mru; // FIXME: belongs to filter? packerf?
void PackMachPPC32::defineSymbols(Filter const *) // entry to stub
addLoader("LEXEC000", NULL);
if (ft->id) {
{ // decompr, unfilter are separate
addLoader("LXUNF000", NULL);
addLoader("LXUNF002", NULL);
if (0x80==(ft->id & 0xF0)) {
if (256==n_mru) {
addLoader("MRUBYTE0", NULL);
}
else if (n_mru) {
addLoader("LXMRU005", NULL);
}
if (n_mru) {
addLoader("LXMRU006", NULL);
}
else {
addLoader("LXMRU007", NULL);
}
}
else if (0x40==(ft->id & 0xF0)) {
addLoader("LXUNF008", NULL);
}
addLoader("LXUNF010", NULL);
}
if (n_mru) {
addLoader("LEXEC009", NULL);
}
}
addLoader("LEXEC010", NULL);
addLoader(getDecompressorSections(), NULL);
addLoader("LEXEC015", NULL);
if (ft->id) {
{ // decompr, unfilter are separate
if (0x80!=(ft->id & 0xF0)) {
addLoader("LXUNF042", NULL);
}
}
addFilter32(ft->id);
{ // decompr, unfilter are separate
if (0x80==(ft->id & 0xF0)) {
if (0==n_mru) {
addLoader("LXMRU058", NULL);
}
}
addLoader("LXUNF035", NULL);
}
}
else {
addLoader("LEXEC017", NULL);
}
addLoader("IDENTSTR", NULL);
addLoader("LEXEC020", NULL);
addLoader("FOLDEXEC", NULL);
}
template <class T>
void PackMachBase<T>::defineSymbols(Filter const *)
{ {
// empty // empty
} }
template <class T>
void void
PackMachPPC32::buildMachLoader( PackMachBase<T>::buildMachLoader(
upx_byte const *const proto, upx_byte const *const proto,
unsigned const szproto, unsigned const szproto,
upx_byte const *const fold, upx_byte const *const fold,
@@ -142,11 +230,23 @@ PackMachPPC32::buildLoader(const Filter *ft)
stub_powerpc_darwin_macho_entry, sizeof(stub_powerpc_darwin_macho_entry), stub_powerpc_darwin_macho_entry, sizeof(stub_powerpc_darwin_macho_entry),
stub_powerpc_darwin_macho_fold, sizeof(stub_powerpc_darwin_macho_fold), ft ); stub_powerpc_darwin_macho_fold, sizeof(stub_powerpc_darwin_macho_fold), ft );
} }
void PackMachPPC32::patchLoader() { }
void PackMachPPC32::updateLoader(OutputFile *) {}
void void
PackMachPPC32::patchLoaderChecksum() PackMachI386::buildLoader(const Filter *ft)
{
buildMachLoader(
stub_i386_darwin_macho_entry, sizeof(stub_i386_darwin_macho_entry),
stub_i386_darwin_macho_fold, sizeof(stub_i386_darwin_macho_fold), ft );
}
template <class T>
void PackMachBase<T>::patchLoader() { }
template <class T>
void PackMachBase<T>::updateLoader(OutputFile *) {}
template <class T>
void PackMachBase<T>::patchLoaderChecksum()
{ {
unsigned char *const ptr = getLoader(); unsigned char *const ptr = getLoader();
l_info *const lp = &linfo; l_info *const lp = &linfo;
@@ -160,8 +260,9 @@ PackMachPPC32::patchLoaderChecksum()
lp->l_checksum = upx_adler32(ptr, lsize); lp->l_checksum = upx_adler32(ptr, lsize);
} }
static int __acc_cdecl_qsort template <class T>
compare_segment_command(void const *const aa, void const *const bb) int __acc_cdecl_qsort
PackMachBase<T>::compare_segment_command(void const *const aa, void const *const bb)
{ {
Mach_segment_command const *const a = (Mach_segment_command const *)aa; Mach_segment_command const *const a = (Mach_segment_command const *)aa;
Mach_segment_command const *const b = (Mach_segment_command const *)bb; Mach_segment_command const *const b = (Mach_segment_command const *)bb;
@@ -174,8 +275,7 @@ compare_segment_command(void const *const aa, void const *const bb)
return 0; return 0;
} }
void void PackMachPPC32::pack4(OutputFile *fo, Filter &ft) // append PackHeader
PackMachPPC32::pack4(OutputFile *fo, Filter &ft) // append PackHeader
{ {
// offset of p_info in compressed file // offset of p_info in compressed file
overlay_offset = sizeof(mhdro) + sizeof(segcmdo) + sizeof(threado) + sizeof(linfo); overlay_offset = sizeof(mhdro) + sizeof(segcmdo) + sizeof(threado) + sizeof(linfo);
@@ -184,31 +284,59 @@ PackMachPPC32::pack4(OutputFile *fo, Filter &ft) // append PackHeader
segcmdo.filesize = fo->getBytesWritten(); segcmdo.filesize = fo->getBytesWritten();
segcmdo.vmsize += segcmdo.filesize; segcmdo.vmsize += segcmdo.filesize;
fo->seek(sizeof(mhdro), SEEK_SET); fo->seek(sizeof(mhdro), SEEK_SET);
fo->write(&segcmdo, sizeof(segcmdo)); fo->rewrite(&segcmdo, sizeof(segcmdo));
fo->write(&threado, sizeof(threado)); fo->rewrite(&threado, sizeof(threado));
fo->write(&linfo, sizeof(linfo)); fo->rewrite(&linfo, sizeof(linfo));
} }
void void PackMachI386::pack4(OutputFile *fo, Filter &ft) // append PackHeader
PackMachPPC32::pack3(OutputFile *fo, Filter &ft) // append loader {
// offset of p_info in compressed file
overlay_offset = sizeof(mhdro) + sizeof(segcmdo) + sizeof(threado) + sizeof(linfo);
super::pack4(fo, ft);
segcmdo.filesize = fo->getBytesWritten();
segcmdo.vmsize += segcmdo.filesize;
fo->seek(sizeof(mhdro), SEEK_SET);
fo->rewrite(&segcmdo, sizeof(segcmdo));
fo->rewrite(&threado, sizeof(threado));
fo->rewrite(&linfo, sizeof(linfo));
}
void PackMachPPC32::pack3(OutputFile *fo, Filter &ft) // append loader
{ {
BE32 disp; BE32 disp;
unsigned const zero = 0; unsigned const zero = 0;
unsigned len = fo->getBytesWritten(); unsigned len = fo->getBytesWritten();
fo->write(&zero, 3& (0u-len)); fo->write(&zero, 3& (0u-len));
len += (3& (0u-len)) + sizeof(disp); len += (3& (0u-len)) + sizeof(disp);
set_be32(&disp, 4+ len - sz_mach_headers); // 4: sizeof(instruction) disp = 4+ len - sz_mach_headers; // 4: sizeof(instruction)
fo->write(&disp, sizeof(disp)); fo->write(&disp, sizeof(disp));
threado.state.srr0 = len + segcmdo.vmaddr; /* entry address */ threado.state.srr0 = len + segcmdo.vmaddr; /* entry address */
super::pack3(fo, ft); super::pack3(fo, ft);
} }
void PackMachI386::pack3(OutputFile *fo, Filter &ft) // append loader
{
LE32 disp;
unsigned const zero = 0;
unsigned len = fo->getBytesWritten();
fo->write(&zero, 3& (0u-len));
len += (3& (0u-len));
disp = len - sz_mach_headers;
fo->write(&disp, sizeof(disp));
threado.state.eip = len + sizeof(disp) + segcmdo.vmaddr; /* entry address */
super::pack3(fo, ft);
}
// Determine length of gap between PT_LOAD phdri[k] and closest PT_LOAD // 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 // 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. // where the PT_LOAD are adjacent ascending by .p_offset. Assume no overlap.
unsigned PackMachPPC32::find_SEGMENT_gap( template <class T>
unsigned PackMachBase<T>::find_SEGMENT_gap(
unsigned const k unsigned const k
) )
{ {
@@ -216,8 +344,7 @@ unsigned PackMachPPC32::find_SEGMENT_gap(
|| 0==msegcmd[k].filesize ) { || 0==msegcmd[k].filesize ) {
return 0; return 0;
} }
unsigned const hi = get_native32(&msegcmd[k].fileoff) + unsigned const hi = msegcmd[k].fileoff + msegcmd[k].filesize;
get_native32(&msegcmd[k].filesize);
unsigned lo = ph.u_file_size; unsigned lo = ph.u_file_size;
unsigned j = k; unsigned j = k;
for (;;) { // circular search, optimize for adjacent ascending for (;;) { // circular search, optimize for adjacent ascending
@@ -230,7 +357,7 @@ unsigned PackMachPPC32::find_SEGMENT_gap(
} }
if (Mach_segment_command::LC_SEGMENT==msegcmd[j].cmd if (Mach_segment_command::LC_SEGMENT==msegcmd[j].cmd
&& 0!=msegcmd[j].filesize ) { && 0!=msegcmd[j].filesize ) {
unsigned const t = get_native32(&msegcmd[j].fileoff); unsigned const t = msegcmd[j].fileoff;
if ((t - hi) < (lo - hi)) { if ((t - hi) < (lo - hi)) {
lo = t; lo = t;
if (hi==lo) { if (hi==lo) {
@@ -242,8 +369,20 @@ unsigned PackMachPPC32::find_SEGMENT_gap(
return lo - hi; return lo - hi;
} }
void template <class T>
PackMachPPC32::pack2(OutputFile *fo, Filter &ft) // append compressed body void PackMachBase<T>::pack4(OutputFile *fo, Filter &ft)
{
PackUnix::pack4(fo, ft); // FIXME super() does not work?
}
template <class T>
void PackMachBase<T>::pack3(OutputFile *fo, Filter &ft)
{
PackUnix::pack3(fo, ft); // FIXME super() does not work?
}
template <class T>
void PackMachBase<T>::pack2(OutputFile *fo, Filter &ft) // append compressed body
{ {
Extent x; Extent x;
unsigned k; unsigned k;
@@ -269,6 +408,17 @@ PackMachPPC32::pack2(OutputFile *fo, Filter &ft) // append compressed body
uip->ui_pass = 0; uip->ui_pass = 0;
ft.addvalue = 0; ft.addvalue = 0;
// Packer::compressWithFilters chooses a filter for us, and the stubs
// can handle only one filter, and most filters are for executable
// instructions. So filter only the largest executable segment.
unsigned exe_filesize_max = 0;
for (k = 0; k < n_segment; ++k)
if (Mach_segment_command::LC_SEGMENT==msegcmd[k].cmd
&& 0!=(Mach_segment_command::VM_PROT_EXECUTE & msegcmd[k].initprot)
&& exe_filesize_max < msegcmd[k].filesize) {
exe_filesize_max = msegcmd[k].filesize;
}
int nx = 0; int nx = 0;
for (k = 0; k < n_segment; ++k) for (k = 0; k < n_segment; ++k)
if (Mach_segment_command::LC_SEGMENT==msegcmd[k].cmd if (Mach_segment_command::LC_SEGMENT==msegcmd[k].cmd
@@ -280,17 +430,20 @@ PackMachPPC32::pack2(OutputFile *fo, Filter &ft) // append compressed body
x.offset += delta; x.offset += delta;
x.size -= delta; x.size -= delta;
} }
bool const do_filter = (msegcmd[k].filesize==exe_filesize_max)
&& 0!=(Mach_segment_command::VM_PROT_EXECUTE & msegcmd[k].initprot);
packExtent(x, total_in, total_out, packExtent(x, total_in, total_out,
((Mach_segment_command::VM_PROT_EXECUTE & msegcmd[k].initprot) (do_filter ? &ft : 0 ), fo, hdr_u_len );
? &ft : 0 ), fo, hdr_u_len ); if (do_filter) {
exe_filesize_max = 0;
}
hdr_u_len = 0; hdr_u_len = 0;
++nx; ++nx;
} }
for (k = 0; k < n_segment; ++k) { for (k = 0; k < n_segment; ++k) {
x.size = find_SEGMENT_gap(k); x.size = find_SEGMENT_gap(k);
if (x.size) { if (x.size) {
x.offset = get_native32(&msegcmd[k].fileoff) + x.offset = msegcmd[k].fileoff +msegcmd[k].filesize;
get_native32(&msegcmd[k].filesize);
packExtent(x, total_in, total_out, 0, fo); packExtent(x, total_in, total_out, 0, fo);
} }
} }
@@ -304,12 +457,33 @@ PackMachPPC32::pack2(OutputFile *fo, Filter &ft) // append compressed body
#undef PAGE_SIZE #undef PAGE_SIZE
#define PAGE_MASK (~0u<<12) #define PAGE_MASK (~0u<<12)
#define PAGE_SIZE -PAGE_MASK #define PAGE_SIZE -PAGE_MASK
void
PackMachPPC32::pack1(OutputFile *fo, Filter &/*ft*/) // generate executable header void PackMachPPC32::pack1_setup_threado(OutputFile *const fo)
{
threado.cmd = Mach_segment_command::LC_UNIXTHREAD;
threado.cmdsize = sizeof(threado);
threado.flavor = my_thread_flavor;
threado.count = my_thread_state_word_count;
memset(&threado.state, 0, sizeof(threado.state));
fo->write(&threado, sizeof(threado));
}
void PackMachI386::pack1_setup_threado(OutputFile *const fo)
{
threado.cmd = Mach_segment_command::LC_UNIXTHREAD;
threado.cmdsize = sizeof(threado);
threado.flavor = my_thread_flavor;
threado.count = my_thread_state_word_count;
memset(&threado.state, 0, sizeof(threado.state));
fo->write(&threado, sizeof(threado));
}
template <class T>
void PackMachBase<T>::pack1(OutputFile *const fo, Filter &/*ft*/) // generate executable header
{ {
mhdro = mhdri; mhdro = mhdri;
mhdro.ncmds = 2; mhdro.ncmds = 2;
mhdro.sizeofcmds = sizeof(segcmdo) + sizeof(threado); mhdro.sizeofcmds = sizeof(segcmdo) + my_thread_command_size;
mhdro.flags = Mach_header::MH_NOUNDEFS; mhdro.flags = Mach_header::MH_NOUNDEFS;
fo->write(&mhdro, sizeof(mhdro)); fo->write(&mhdro, sizeof(mhdro));
@@ -329,12 +503,7 @@ PackMachPPC32::pack1(OutputFile *fo, Filter &/*ft*/) // generate executable hea
segcmdo.flags = 0; segcmdo.flags = 0;
fo->write(&segcmdo, sizeof(segcmdo)); fo->write(&segcmdo, sizeof(segcmdo));
threado.cmd = Mach_segment_command::LC_UNIXTHREAD; pack1_setup_threado(fo);
threado.cmdsize = sizeof(threado);
threado.flavor = Mach_thread_command::PPC_THREAD_STATE;
threado.count = Mach_thread_command::PPC_THREAD_STATE_COUNT;
memset(&threado.state, 0, sizeof(threado.state));
fo->write(&threado, sizeof(threado));
sz_mach_headers = fo->getBytesWritten(); sz_mach_headers = fo->getBytesWritten();
memset((char *)&linfo, 0, sizeof(linfo)); memset((char *)&linfo, 0, sizeof(linfo));
@@ -343,9 +512,11 @@ PackMachPPC32::pack1(OutputFile *fo, Filter &/*ft*/) // generate executable hea
return; return;
} }
void template <class T>
PackMachPPC32::unpack(OutputFile *fo) void PackMachBase<T>::unpack(OutputFile *fo)
{ {
overlay_offset = sizeof(mhdro) + sizeof(segcmdo) +
my_thread_command_size + sizeof(linfo);
fi->seek(overlay_offset, SEEK_SET); fi->seek(overlay_offset, SEEK_SET);
p_info hbuf; p_info hbuf;
fi->readx(&hbuf, sizeof(hbuf)); fi->readx(&hbuf, sizeof(hbuf));
@@ -359,6 +530,8 @@ PackMachPPC32::unpack(OutputFile *fo)
fi->readx(&bhdr, sizeof(bhdr)); fi->readx(&bhdr, sizeof(bhdr));
ph.u_len = get_native32(&bhdr.sz_unc); ph.u_len = get_native32(&bhdr.sz_unc);
ph.c_len = get_native32(&bhdr.sz_cpr); ph.c_len = get_native32(&bhdr.sz_cpr);
ph.method = bhdr.b_method;
ph.filter = bhdr.b_ftid;
ph.filter_cto = bhdr.b_cto8; ph.filter_cto = bhdr.b_cto8;
// Uncompress Macho headers // Uncompress Macho headers
@@ -396,15 +569,14 @@ PackMachPPC32::unpack(OutputFile *fo)
) { ) {
if (Mach_segment_command::LC_SEGMENT==sc->cmd if (Mach_segment_command::LC_SEGMENT==sc->cmd
&& 0!=sc->filesize ) { && 0!=sc->filesize ) {
unsigned filesize = get_be32(&sc->filesize); unsigned filesize = sc->filesize;
unpackExtent(filesize, fo, total_in, total_out, c_adler, u_adler, false, sizeof(bhdr)); unpackExtent(filesize, fo, total_in, total_out, c_adler, u_adler, false, sizeof(bhdr));
} }
} }
for (unsigned j = 0; j < ncmds; ++j) { for (unsigned j = 0; j < ncmds; ++j) {
unsigned const size = find_SEGMENT_gap(j); unsigned const size = find_SEGMENT_gap(j);
if (size) { if (size) {
unsigned const where = get_native32(&msegcmd[k].fileoff) + unsigned const where = msegcmd[k].fileoff +msegcmd[k].filesize;
get_native32(&msegcmd[k].filesize);
if (fo) if (fo)
fo->seek(where, SEEK_SET); fo->seek(where, SEEK_SET);
unpackExtent(size, fo, total_in, total_out, unpackExtent(size, fo, total_in, total_out,
@@ -414,14 +586,14 @@ PackMachPPC32::unpack(OutputFile *fo)
} }
bool template <class T>
PackMachPPC32::canPack() bool PackMachBase<T>::canPack()
{ {
fi->seek(0, SEEK_SET); fi->seek(0, SEEK_SET);
fi->readx(&mhdri, sizeof(mhdri)); fi->readx(&mhdri, sizeof(mhdri));
if (Mach_header::MH_MAGIC !=mhdri.magic if (Mach_header::MH_MAGIC !=mhdri.magic
|| Mach_header::CPU_TYPE_POWERPC !=mhdri.cputype || my_cputype !=mhdri.cputype
|| Mach_header::MH_EXECUTE !=mhdri.filetype || Mach_header::MH_EXECUTE !=mhdri.filetype
) )
return false; return false;
@@ -457,11 +629,204 @@ PackMachPPC32::canPack()
sz_segment = msegcmd[j].filesize + msegcmd[j].fileoff - msegcmd[0].fileoff; sz_segment = msegcmd[j].filesize + msegcmd[j].fileoff - msegcmd[0].fileoff;
} }
} }
// info: currently the header is 36 (32+4) bytes before EOF
unsigned char buf[256];
fi->seek(-(off_t)sizeof(buf), SEEK_END);
fi->readx(buf, sizeof(buf));
checkAlreadyPacked(buf, sizeof(buf));
// set options // set options
opt->o_unix.blocksize = file_size; opt->o_unix.blocksize = file_size;
return 0 < n_segment; return 0 < n_segment;
} }
template class PackMachBase<MachClass_BE32>;
template class PackMachBase<MachClass_LE32>;
PackMachFat::PackMachFat(InputFile *f) : super(f)
{
bele = &N_BELE_RTP::le_policy; // sham
}
PackMachFat::~PackMachFat()
{
}
const int *PackMachFat::getCompressionMethods(int /*method*/, int /*level*/) const
{
static const int m_nrv2e[] = { M_NRV2E_LE32, M_END };
return m_nrv2e; // sham
}
const int *PackMachFat::getFilters() const
{
static const int filters[] = { 0x49, FT_END };
return filters; // sham
}
void PackMachFat::pack(OutputFile *fo)
{
unsigned const in_size = this->file_size;
fo->write(&fat_head, sizeof(fat_head.fat) +
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
unsigned length = 0;
for (unsigned j=0; j < fat_head.fat.nfat_arch; ++j) {
unsigned base = fo->unset_extent(); // actual length
base += ~(~0u<<fat_head.arch[j].align) & (0-base); // align up
fo->seek(base, SEEK_SET);
fo->set_extent(base, ~0u);
ph.u_file_size = fat_head.arch[j].size;
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
switch (fat_head.arch[j].cputype) {
case PackMachFat::CPU_TYPE_I386: {
PackMachI386 packer(fi);
packer.initPackHeader();
packer.canPack();
packer.updatePackHeader();
packer.pack(fo);
} break;
case PackMachFat::CPU_TYPE_POWERPC: {
PackMachPPC32 packer(fi);
packer.initPackHeader();
packer.canPack();
packer.updatePackHeader();
packer.pack(fo);
} break;
} // switch cputype
fat_head.arch[j].offset = base;
length = fo->unset_extent();
fat_head.arch[j].size = length - base;
}
ph.u_file_size = in_size;
fi->set_extent(0, in_size);
fo->seek(0, SEEK_SET);
fo->rewrite(&fat_head, sizeof(fat_head.fat) +
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
fo->set_extent(0, length);
}
void PackMachFat::unpack(OutputFile *fo)
{
fo->seek(0, SEEK_SET);
fo->write(&fat_head, sizeof(fat_head.fat) +
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
unsigned length;
for (unsigned j=0; j < fat_head.fat.nfat_arch; ++j) {
unsigned base = fo->unset_extent(); // actual length
base += ~(~0u<<fat_head.arch[j].align) & (0-base); // align up
fo->seek(base, SEEK_SET);
fo->set_extent(base, ~0u);
ph.u_file_size = fat_head.arch[j].size;
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
switch (fat_head.arch[j].cputype) {
case PackMachFat::CPU_TYPE_I386: {
PackMachI386 packer(fi);
packer.initPackHeader();
packer.canUnpack();
packer.unpack(fo);
} break;
case PackMachFat::CPU_TYPE_POWERPC: {
PackMachPPC32 packer(fi);
packer.initPackHeader();
packer.canUnpack();
packer.unpack(fo);
} break;
} // switch cputype
fat_head.arch[j].offset = base;
length = fo->unset_extent();
fat_head.arch[j].size = length - base;
}
fo->unset_extent();
fo->seek(0, SEEK_SET);
fo->rewrite(&fat_head, sizeof(fat_head.fat) +
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
}
bool PackMachFat::canPack()
{
struct Mach_fat_arch *arch = &fat_head.arch[0];
fi->readx(&fat_head, sizeof(fat_head));
if (Mach_fat_header::FAT_MAGIC!=fat_head.fat.magic
|| N_FAT_ARCH < fat_head.fat.nfat_arch) {
return false;
}
for (unsigned j=0; j < fat_head.fat.nfat_arch; ++j) {
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
switch (arch[j].cputype) {
default: return false;
case PackMachFat::CPU_TYPE_I386: {
PackMachI386 packer(fi);
if (!packer.canPack())
return false;
} break;
case PackMachFat::CPU_TYPE_POWERPC: {
PackMachPPC32 packer(fi);
if (!packer.canPack())
return false;
} break;
} // switch cputype
}
// info: currently the header is 36 (32+4) bytes before EOF
unsigned char buf[256];
fi->seek(-(off_t)sizeof(buf), SEEK_END);
fi->readx(buf, sizeof(buf));
checkAlreadyPacked(buf, sizeof(buf));
return true;
}
int PackMachFat::canUnpack()
{
struct Mach_fat_arch *arch = &fat_head.arch[0];
fi->readx(&fat_head, sizeof(fat_head));
if (Mach_fat_header::FAT_MAGIC!=fat_head.fat.magic
|| N_FAT_ARCH < fat_head.fat.nfat_arch) {
return false;
}
for (unsigned j=0; j < fat_head.fat.nfat_arch; ++j) {
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
switch (arch[j].cputype) {
default: return false;
case PackMachFat::CPU_TYPE_I386: {
PackMachI386 packer(fi);
if (!packer.canUnpack())
return 0;
ph.format = packer.getFormat(); // FIXME: copy entire PackHeader
} break;
case PackMachFat::CPU_TYPE_POWERPC: {
PackMachPPC32 packer(fi);
if (!packer.canUnpack())
return 0;
ph.format = packer.getFormat(); // FIXME: copy entire PackHeader
} break;
} // switch cputype
}
return 1;
}
void PackMachFat::buildLoader(const Filter */*ft*/)
{
assert(false);
}
Linker* PackMachFat::newLinker() const
{
return new ElfLinkerX86; // sham
}
void PackMachFat::list()
{
assert(false);
}
/* /*
vi:ts=4:et vi:ts=4:et
*/ */
+449 -114
View File
@@ -29,161 +29,328 @@
#ifndef __UPX_P_MACHO_H #ifndef __UPX_P_MACHO_H
#define __UPX_P_MACHO_H #define __UPX_P_MACHO_H
struct Mach_fat_header {
BE32 magic;
enum { // note conflict with java bytecode PackLinuxI386
FAT_MAGIC = 0xcafebabe,
FAT_MAGIC_SWAB = 0xbebafeca
};
BE32 nfat_arch; // Number of Mach_fat_arch which follow.
}
__attribute_packed;
struct Mach_fat_arch {
BE32 cputype;
BE32 cpusubtype;
BE32 offset;
BE32 size;
BE32 align; /* shift count; log base 2 */
}
__attribute_packed;
/************************************************************************* /*************************************************************************
// Mach Mach Object executable // Mach Mach Object executable; all structures are target-endian
// 'otool' is the Mach analog of 'readelf' (convert executable file to ASCII).
**************************************************************************/ **************************************************************************/
struct Mach_header { namespace N_Mach {
BE32 magic;
enum { // integral types
MH_MAGIC = 0xfeedface template <class TWord, class TXword, class TAddr, class TOff>
}; struct MachITypes
BE32 cputype; {
enum { typedef TWord Word;
CPU_TYPE_POWERPC = 18 typedef TXword Xword;
}; typedef TAddr Addr;
BE32 cpysubtype; typedef TOff Off;
BE32 filetype; };
enum {
MH_EXECUTE = 2 template <class TMachITypes>
}; struct Mach_header
BE32 ncmds; {
BE32 sizeofcmds; typedef typename TMachITypes::Word Word;
BE32 flags;
enum { Word magic;
MH_NOUNDEFS = 1 Word cputype;
}; Word cpysubtype;
Word filetype;
Word ncmds;
Word sizeofcmds;
Word flags;
#define WANT_MACH_HEADER_ENUM 1
#include "p_mach_enum.h"
} }
__attribute_packed; __attribute_packed;
struct Mach_segment_command { template <class TMachITypes>
BE32 cmd; struct Mach_header64
enum { { // only difference is padding to 0 mod 8
LC_SEGMENT = 0x1, typedef typename TMachITypes::Word Word;
LC_THREAD = 0x4,
LC_UNIXTHREAD = 0x5, Word magic;
LC_LOAD_DYLINKER = 0xe Word cputype;
}; Word cpysubtype;
BE32 cmdsize; Word filetype;
Word ncmds;
Word sizeofcmds;
Word flags;
Word reserved; // pad to 0 mod 8
#define WANT_MACH_HEADER_ENUM 1
#include "p_mach_enum.h"
}
__attribute_packed;
template <class TMachITypes>
struct Mach_segment_command
{
typedef typename TMachITypes::Word Word;
typedef typename TMachITypes::Addr Addr;
typedef typename TMachITypes::Off Off;
Word cmd;
Word cmdsize;
char segname[16]; char segname[16];
BE32 vmaddr; Addr vmaddr;
BE32 vmsize; Addr vmsize;
BE32 fileoff; Off fileoff;
BE32 filesize; Off filesize;
BE32 maxprot; Word maxprot;
enum { Word initprot;
VM_PROT_READ = 1, Word nsects;
VM_PROT_WRITE = 2, Word flags;
VM_PROT_EXECUTE = 4 #define WANT_MACH_SEGMENT_ENUM 1
}; #include "p_mach_enum.h"
BE32 initprot;
BE32 nsects;
BE32 flags;
} }
__attribute_packed; __attribute_packed;
struct Mach_section { template <class TMachITypes>
struct Mach_section_command
{
typedef typename TMachITypes::Word Word;
typedef typename TMachITypes::Addr Addr;
typedef typename TMachITypes::Off Off;
char sectname[16]; char sectname[16];
char segname[16]; char segname[16];
BE32 addr; /* memory address */ Addr addr; /* memory address */
BE32 size; /* size in bytes */ Addr size; /* size in bytes */
BE32 offset; /* file offset */ Word offset; /* file offset */ // FIXME: 64 bit?
BE32 align; /* power of 2 */ Word align; /* power of 2 */
BE32 reloff; /* file offset of relocation entries */ Word reloff; /* file offset of relocation entries */
BE32 nreloc; /* number of relocation entries */ Word nreloc; /* number of relocation entries */
BE32 flags; /* section type and attributes */ Word flags; /* section type and attributes */
enum { Word reserved1;
S_REGULAR = 0, Word reserved2;
S_ZEROFILL, #define WANT_MACH_SECTION_ENUM 1
S_CSTRING_LITERALS, #include "p_mach_enum.h"
S_4BYTE_LITERALS,
S_8BYTE_LITERALS,
S_LITERAL_POINTERS,
S_NON_LAZY_SYMBOL_POINTERS,
S_LAZY_SYMBOL_POINTERS,
S_SYMBOL_STUBS,
S_MOD_INIT_FUNC_POINTERS,
S_MOD_TERM_FNC_POINTERS,
S_COALESCED
};
enum {
S_ATTR_PURE_INSTRUCTIONS = 0x80000000,
S_ATTR_NO_TOC = 0x40000000,
S_ATTR_STRIP_STATIC_SYMS = 0x20000000,
S_ATTR_SOME_INSTRUCTIONS = 0x00000400,
S_ATTR_EXT_RELOC = 0x00000200,
S_ATTR_LOC_RELOC = 0x00000100
};
BE32 reserved1;
BE32 reserved2;
} }
__attribute_packed; __attribute_packed;
struct Mach_ppc_thread_state { template <class TMachITypes>
BE32 srr0; /* Instruction address register (PC; entry addr) */ struct Mach_ppc_thread_state
BE32 srr1; /* Machine state register (supervisor) */ {
BE32 r0, r1, r2, r3, r4, r5, r6, r7; typedef typename TMachITypes::Addr Addr;
BE32 r8, r9,r10,r11,r12,r13,r14,r15;
BE32 r16,r17,r18,r19,r20,r21,r22,r23;
BE32 r24,r25,r26,r27,r28,r29,r30,r31;
BE32 cr; /* Condition register */ Addr srr0; /* Instruction address register (PC; entry addr) */
BE32 xer; /* User's integer exception register */ Addr srr1; /* Machine state register (supervisor) */
BE32 lr; /* Link register */ Addr r0, r1, r2, r3, r4, r5, r6, r7;
BE32 ctr; /* Count register */ Addr r8, r9,r10,r11,r12,r13,r14,r15;
BE32 mq; /* MQ register (601 only) */ Addr r16,r17,r18,r19,r20,r21,r22,r23;
Addr r24,r25,r26,r27,r28,r29,r30,r31;
BE32 vrsave; /* Vector Save Register */ Addr cr; /* Condition register */ // FIXME: Word?
Addr xer; /* User's integer exception register */
Addr lr; /* Link register */
Addr ctr; /* Count register */
Addr mq; /* MQ register (601 only) */
Addr vrsave; /* Vector Save Register */
} }
__attribute_packed; __attribute_packed;
struct Mach_thread_command { template <class TMachITypes>
BE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */ struct Mach_i386_thread_state
BE32 cmdsize; /* total size of this command */ {
BE32 flavor; typedef typename TMachITypes::Word Word;
enum {
PPC_THREAD_STATE = 1 Word eax, ebx, ecx, edx;
}; Word edi, esi, ebp;
BE32 count; /* sizeof(following_thread_state)/4 */ Word esp, ss;
enum { Word eflags;
PPC_THREAD_STATE_COUNT = sizeof(struct Mach_ppc_thread_state)/4 Word eip, cs;
}; Word ds, es, fs, gs;
struct Mach_ppc_thread_state state;
} }
__attribute_packed; __attribute_packed;
template <class TMachITypes>
struct Mach_i386_new_thread_state
{
typedef typename TMachITypes::Word Word;
Word gs, fs, es, ds;
Word edi, esi, ebp, esp;
Word ebx, edx, ecx, eax;
Word eip, cs, efl;
Word uesp, ss;
}
__attribute_packed;
} // namespace N_Mach
namespace N_Mach32 {
} // namespace N_Mach32
namespace N_Mach64 {
template <class TMachITypes>
struct Mach_ppc_thread_state64
{
typedef typename TMachITypes::Word Word;
typedef typename TMachITypes::Xword Xword;
Xword srr0; /* Instruction address register (PC; entry addr) */
Xword srr1; /* Machine state register (supervisor) */
Xword r0, r1, r2, r3, r4, r5, r6, r7;
Xword r8, r9,r10,r11,r12,r13,r14,r15;
Xword r16,r17,r18,r19,r20,r21,r22,r23;
Xword r24,r25,r26,r27,r28,r29,r30,r31;
Word cr; /* Condition register */ // FIXME: Xword?
Xword xer; /* User's integer exception register */
Xword lr; /* Link register */
Xword ctr; /* Count register */
Word vrsave; /* Vector Save Register */
}
__attribute_packed;
} // namespace N_Mach64
namespace N_Mach {
template <class TP>
struct MachClass_32
{
typedef TP BeLePolicy;
// integral types
typedef typename TP::U16 U16;
typedef typename TP::U32 U32;
typedef typename TP::U64 U64;
typedef N_Mach::MachITypes<U32, U64, U32, U32> MachITypes;
#if (ACC_CC_BORLANDC)
typedef U32 Addr;
#else
typedef typename MachITypes::Addr Addr;
#endif
// Mach types
typedef N_Mach::Mach_header<MachITypes> Mach_header;
typedef N_Mach::Mach_segment_command<MachITypes> Mach_segment_command;
typedef N_Mach::Mach_section_command<MachITypes> Mach_section_command;
typedef N_Mach::Mach_ppc_thread_state<MachITypes> Mach_ppc_thread_state;
typedef N_Mach::Mach_i386_thread_state<MachITypes> Mach_i386_thread_state;
static void compileTimeAssertions() {
BeLePolicy::compileTimeAssertions();
COMPILE_TIME_ASSERT(sizeof(Addr) == 4)
}
};
template <class TP>
struct MachClass_64
{
typedef TP BeLePolicy;
// integral types
typedef typename TP::U16 U16;
typedef typename TP::U32 U32;
typedef typename TP::U64 U64;
typedef N_Mach::MachITypes<U32, U64, U64, U64> MachITypes;
// Mach types
typedef N_Mach::Mach_header64<MachITypes> Mach_header;
typedef N_Mach::Mach_segment_command<MachITypes> Mach_segment_command;
typedef N_Mach::Mach_section_command<MachITypes> Mach_section_command;
static void compileTimeAssertions() {
BeLePolicy::compileTimeAssertions();
}
};
} // namespace N_Mach
typedef N_Mach::MachClass_32<N_BELE_CTP::HostPolicy> MachClass_Host32;
typedef N_Mach::MachClass_64<N_BELE_CTP::HostPolicy> MachClass_Host64;
typedef N_Mach::MachClass_32<N_BELE_CTP::BEPolicy> MachClass_BE32;
typedef N_Mach::MachClass_64<N_BELE_CTP::BEPolicy> MachClass_BE64;
typedef N_Mach::MachClass_32<N_BELE_CTP::LEPolicy> MachClass_LE32;
typedef N_Mach::MachClass_64<N_BELE_CTP::LEPolicy> MachClass_LE64;
// shortcuts
typedef MachClass_Host32::Mach_segment_command Mach32_segment_command;
typedef MachClass_Host32::Mach_section_command Mach32_section_command;
typedef MachClass_Host64::Mach_segment_command Mach64_segment_command;
typedef MachClass_Host64::Mach_section_command Mach64_section_command;
typedef MachClass_BE32::Mach_segment_command MachBE32_segment_command;
typedef MachClass_BE32::Mach_section_command MachBE32_section_command;
typedef MachClass_BE64::Mach_segment_command MachBE64_segment_command;
typedef MachClass_BE64::Mach_section_command MachBE64_section_command;
typedef MachClass_LE32::Mach_segment_command MachLE32_segment_command;
typedef MachClass_LE32::Mach_section_command MachLE32_section_command;
typedef MachClass_LE64::Mach_segment_command MachLE64_segment_command;
typedef MachClass_LE64::Mach_section_command MachLE64_section_command;
typedef MachClass_BE32::Mach_ppc_thread_state Mach_ppc_thread_state;
typedef MachClass_LE32::Mach_i386_thread_state Mach_i386_thread_state;
#include "p_unix.h" #include "p_unix.h"
class PackMachPPC32 : public PackUnixBe32 template <class TMachClass>
class PackMachBase : public PackUnix
{ {
typedef PackUnixBe32 super; typedef PackUnix super;
protected:
typedef TMachClass MachClass;
typedef typename MachClass::BeLePolicy BeLePolicy;
typedef typename MachClass::MachITypes MachITypes;
// integral types
typedef typename MachClass::U16 U16;
typedef typename MachClass::U32 U32;
typedef typename MachClass::U64 U64;
typedef typename MachClass::Addr Addr;
// Mach types
typedef typename MachClass::Mach_header Mach_header;
typedef typename MachClass::Mach_segment_command Mach_segment_command;
typedef typename MachClass::Mach_section_command Mach_section_command;
public: public:
PackMachPPC32(InputFile *f); PackMachBase(InputFile *, unsigned cpuid, unsigned t_flavor, unsigned ts_word_cnt, unsigned tc_size);
virtual ~PackMachPPC32(); virtual ~PackMachBase();
virtual int getVersion() const { return 13; } virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_MACH_PPC32; }
virtual const char *getName() const { return "Mach/ppc32"; }
virtual const char *getFullName(const options_t *) const { return "powerpc-darwin.macho"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
// called by the generic pack() // called by the generic pack()
virtual void pack1(OutputFile *, Filter &); // generate executable header virtual void pack1(OutputFile *, Filter &); // generate executable header
virtual void pack2(OutputFile *, Filter &); // append compressed data virtual void pack2(OutputFile *, Filter &); // append compressed data
virtual void pack3(OutputFile *, Filter &); // append loader virtual void pack3(OutputFile *, Filter &) = 0; // append loader
virtual void pack4(OutputFile *, Filter &); // append PackHeader virtual void pack4(OutputFile *, Filter &) = 0; // append PackHeader
virtual void pack1_setup_threado(OutputFile *const fo) = 0;
virtual void unpack(OutputFile *fo); virtual void unpack(OutputFile *fo);
virtual bool canPack(); virtual bool canPack();
virtual unsigned find_SEGMENT_gap(unsigned const k); virtual unsigned find_SEGMENT_gap(unsigned const k);
protected: protected:
virtual void buildLoader(const Filter *ft);
virtual Linker* newLinker() const;
virtual void patchLoader(); virtual void patchLoader();
virtual void patchLoaderChecksum(); virtual void patchLoaderChecksum();
virtual void updateLoader(OutputFile *); virtual void updateLoader(OutputFile *);
@@ -196,6 +363,13 @@ protected:
virtual void defineSymbols(Filter const *); virtual void defineSymbols(Filter const *);
virtual void addStubEntrySections(Filter const *); virtual void addStubEntrySections(Filter const *);
static int __acc_cdecl_qsort compare_segment_command(void const *aa, void const *bb);
unsigned my_cputype;
unsigned my_thread_flavor;
unsigned my_thread_state_word_count;
unsigned my_thread_command_size;
unsigned n_segment; unsigned n_segment;
unsigned sz_segment; unsigned sz_segment;
unsigned sz_mach_headers; unsigned sz_mach_headers;
@@ -205,11 +379,172 @@ protected:
Mach_header mhdro; Mach_header mhdro;
Mach_segment_command segcmdo; Mach_segment_command segcmdo;
Mach_thread_command threado;
struct b_info { // 12-byte header before each compressed block
U32 sz_unc; // uncompressed_size
U32 sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
unsigned char b_unused;
}
__attribute_packed;
struct l_info { // 12-byte trailer in header for loader
U32 l_checksum;
LE32 l_magic;
U16 l_lsize;
unsigned char l_version;
unsigned char l_format;
}
__attribute_packed;
struct p_info { // 12-byte packed program header
U32 p_progid;
U32 p_filesize;
U32 p_blocksize;
}
__attribute_packed;
struct l_info linfo; struct l_info linfo;
}; };
class PackMachPPC32 : public PackMachBase<MachClass_BE32>
{
typedef PackMachBase<MachClass_BE32> super;
public:
PackMachPPC32(InputFile *f) : super(f, Mach_header::CPU_TYPE_POWERPC,
Mach_thread_command::PPC_THREAD_STATE,
sizeof(Mach_ppc_thread_state)>>2, sizeof(threado)) { }
virtual int getFormat() const { return UPX_F_MACH_PPC32; }
virtual const char *getName() const { return "Mach/ppc32"; }
virtual const char *getFullName(const options_t *) const { return "powerpc-darwin.macho"; }
virtual acc_uint64l_t get_native64(const void *b) const { return get_be64(b); }
virtual unsigned get_native32(const void *b) const { return get_be32(b); }
virtual unsigned get_native16(const void *b) const { return get_be16(b); }
virtual void set_native64(void *b, acc_uint64l_t v) const { set_be64(b, v); }
virtual void set_native32(void *b, unsigned v) const { set_be32(b, v); }
virtual void set_native16(void *b, unsigned v) const { set_be16(b, v); }
protected:
virtual const int *getFilters() const;
virtual void pack1_setup_threado(OutputFile *const fo);
virtual void pack3(OutputFile *, Filter &); // append loader
virtual void pack4(OutputFile *, Filter &); // append PackHeader
virtual Linker* newLinker() const;
virtual void buildLoader(const Filter *ft);
struct Mach_thread_command
{
BE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */
BE32 cmdsize; /* total size of this command */
BE32 flavor;
BE32 count; /* sizeof(following_thread_state)/4 */
Mach_ppc_thread_state state;
#define WANT_MACH_THREAD_ENUM
#include "p_mach_enum.h"
}
__attribute_packed;
Mach_thread_command threado;
};
class PackMachI386 : public PackMachBase<MachClass_LE32>
{
typedef PackMachBase<MachClass_LE32> super;
public:
PackMachI386(InputFile *f) : super(f, Mach_header::CPU_TYPE_I386,
(unsigned)Mach_thread_command::i386_THREAD_STATE,
sizeof(Mach_i386_thread_state)>>2, sizeof(threado)) { }
virtual int getFormat() const { return UPX_F_MACH_i386; }
virtual const char *getName() const { return "Mach/i386"; }
virtual const char *getFullName(const options_t *) const { return "i386-darwin.macho"; }
protected:
virtual const int *getFilters() const;
virtual acc_uint64l_t get_native64(const void *b) const { return get_le64(b); }
virtual unsigned get_native32(const void *b) const { return get_le32(b); }
virtual unsigned get_native16(const void *b) const { return get_le16(b); }
virtual void set_native64(void *b, acc_uint64l_t v) const { set_le64(b, v); }
virtual void set_native32(void *b, unsigned v) const { set_le32(b, v); }
virtual void set_native16(void *b, unsigned v) const { set_le16(b, v); }
virtual void pack1_setup_threado(OutputFile *const fo);
virtual void pack3(OutputFile *, Filter &); // append loader
virtual void pack4(OutputFile *, Filter &); // append PackHeader
virtual Linker* newLinker() const;
virtual void buildLoader(const Filter *ft);
virtual void addStubEntrySections(Filter const *);
struct Mach_thread_command
{
LE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */
LE32 cmdsize; /* total size of this command */
LE32 flavor;
LE32 count; /* sizeof(following_thread_state)/4 */
Mach_i386_thread_state state;
#define WANT_MACH_THREAD_ENUM
#include "p_mach_enum.h"
}
__attribute_packed;
Mach_thread_command threado;
};
class PackMachFat : public Packer
{
typedef Packer super;
public:
PackMachFat(InputFile *f);
virtual ~PackMachFat();
virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_MACH_FAT; }
virtual const char *getName() const { return "Mach/fat"; }
virtual const char *getFullName(const options_t *) const { return "fat-darwin.macho"; }
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
protected:
// implementation
virtual void pack(OutputFile *fo);
virtual void unpack(OutputFile *fo);
virtual void list();
public:
virtual bool canPack();
virtual int canUnpack();
protected:
// loader core
virtual void buildLoader(const Filter *ft);
virtual Linker* newLinker() const;
#if (ACC_CC_BORLANDC)
public:
#endif
enum { N_FAT_ARCH = 5 };
protected:
struct Fat_head {
struct Mach_fat_header fat;
struct Mach_fat_arch arch[N_FAT_ARCH];
}
__attribute_packed;
Fat_head fat_head;
// UI handler
UiPacker *uip;
// linker
Linker *linker;
#define WANT_MACH_HEADER_ENUM
#include "p_mach_enum.h"
};
#endif /* already included */ #endif /* already included */
+108
View File
@@ -0,0 +1,108 @@
/* p_mach_enum.h --
This file is part of the UPX executable compressor.
Copyright (C) 2007 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.
John F. Reiser
<jreiser@users.sourceforge.net>
*/
/*************************************************************************
// Use the preprocessor to work around
// - that the types embedding these enums have to be PODs, and
// deriving from an empty base class (which is the usual C++ way
// of "importing" enums) does not yield a POD any more
// - that older compilers do not correctly perform EBCO
**************************************************************************/
#ifdef WANT_MACH_HEADER_ENUM /*{*/
#undef WANT_MACH_HEADER_ENUM
enum { // magic
MH_MAGIC = 0xfeedface
};
enum { // cputype
CPU_TYPE_I386 = 7,
CPU_TYPE_POWERPC = 0x00000012,
CPU_TYPE_POWERPC64 = 0x01000012
};
enum { // filetype
MH_EXECUTE = 2
};
enum { // flags
MH_NOUNDEFS = 1
};
#endif /*}*/
#ifdef WANT_MACH_SEGMENT_ENUM /*{*/
#undef WANT_MACH_SEGMENT_ENUM
enum { // cmd
LC_SEGMENT = 0x1,
LC_THREAD = 0x4,
LC_UNIXTHREAD = 0x5,
LC_LOAD_DYLINKER = 0xe,
LC_SEGMENT_64 = 0x19
};
enum { // maxprot
VM_PROT_READ = 1,
VM_PROT_WRITE = 2,
VM_PROT_EXECUTE = 4
};
#endif /*}*/
#ifdef WANT_MACH_SECTION_ENUM /*{*/
#undef WANT_MACH_SECTION_ENUM
enum { // section flags
S_REGULAR = 0,
S_ZEROFILL,
S_CSTRING_LITERALS,
S_4BYTE_LITERALS,
S_8BYTE_LITERALS,
S_LITERAL_POINTERS,
S_NON_LAZY_SYMBOL_POINTERS,
S_LAZY_SYMBOL_POINTERS,
S_SYMBOL_STUBS,
S_MOD_INIT_FUNC_POINTERS,
S_MOD_TERM_FNC_POINTERS,
S_COALESCED
};
enum {
S_ATTR_PURE_INSTRUCTIONS = 0x80000000,
S_ATTR_NO_TOC = 0x40000000,
S_ATTR_STRIP_STATIC_SYMS = 0x20000000,
S_ATTR_SOME_INSTRUCTIONS = 0x00000400,
S_ATTR_EXT_RELOC = 0x00000200,
S_ATTR_LOC_RELOC = 0x00000100
};
#endif /*}*/
#ifdef WANT_MACH_THREAD_ENUM /*{*/
#undef WANT_MACH_THREAD_ENUM
enum { // thread flavor
PPC_THREAD_STATE = 1,
i386_THREAD_STATE = 1,
i386_OLD_THREAD_STATE = -1
};
#endif /*}*/
/*
vi:ts=4:et
*/
+26 -9
View File
@@ -194,6 +194,8 @@ bool PackPs1::getBkupHeader(unsigned char *p, unsigned char *dst)
unsigned sz_bh = SZ_IH_BKUP; unsigned sz_bh = SZ_IH_BKUP;
int r = upx_decompress((const unsigned char *)&src->ih_bkup, src->len, int r = upx_decompress((const unsigned char *)&src->ih_bkup, src->len,
unc_bh, &sz_bh, M_NRV2E_8, NULL ); unc_bh, &sz_bh, M_NRV2E_8, NULL );
if (r == UPX_E_OUT_OF_MEMORY)
throwOutOfMemoryException();
if (r != UPX_E_OK || sz_bh != SZ_IH_BKUP) if (r != UPX_E_OK || sz_bh != SZ_IH_BKUP)
throwInternalError("header decompression failed"); throwInternalError("header decompression failed");
unsigned ad = upx_adler32(unc_bh, SZ_IH_BKUP); unsigned ad = upx_adler32(unc_bh, SZ_IH_BKUP);
@@ -254,8 +256,9 @@ bool PackPs1::canPack()
fi->readx(buf, sizeof(buf)); fi->readx(buf, sizeof(buf));
checkAlreadyPacked(buf, sizeof(buf)); checkAlreadyPacked(buf, sizeof(buf));
for (unsigned i = 0; i < sizeof(buf); i++) for (size_t i = 0; i < sizeof(buf); i++)
if (buf[i] != 0) if (buf[i] != 0)
{
if (!opt->force) if (!opt->force)
throwCantPack("unknown data in header (try --force)"); throwCantPack("unknown data in header (try --force)");
else else
@@ -265,6 +268,7 @@ bool PackPs1::canPack()
opt->backup = 1; opt->backup = 1;
break; break;
} }
}
if (!checkFileHeader()) if (!checkFileHeader())
throwCantPack("unsupported header flags (try --force)"); throwCantPack("unsupported header flags (try --force)");
if (!opt->force && file_size < PS_MIN_SIZE) if (!opt->force && file_size < PS_MIN_SIZE)
@@ -318,7 +322,8 @@ void PackPs1::buildLoader(const Filter *)
sa_tmp += overlap = ALIGN_UP((ph.overlap_overhead - sa_tmp), 4u); sa_tmp += overlap = ALIGN_UP((ph.overlap_overhead - sa_tmp), 4u);
} }
foundBss = findBssSection(); if (isCon || M_IS_LZMA(ph.method))
foundBss = findBssSection();
if (M_IS_LZMA(ph.method) && !buildPart2) if (M_IS_LZMA(ph.method) && !buildPart2)
{ {
@@ -370,16 +375,20 @@ void PackPs1::buildLoader(const Filter *)
else else
{ {
if (M_IS_LZMA(ph.method)) if (M_IS_LZMA(ph.method))
addLoader("cdb.start.lzma", "pad.code", "cdb.entry.lzma", method, "cdb.lzma.cpr", addLoader(!foundBss ? "cdb.start.lzma" : "bss.cdb.start.lzma", "pad.code",
!foundBss ? "cdb.entry.lzma" : "bss.cdb.entry.lzma",
method, "cdb.lzma.cpr",
ih.tx_ptr & 0xffff ? "dec.ptr" : "dec.ptr.hi", ih.tx_ptr & 0xffff ? "dec.ptr" : "dec.ptr.hi",
"lzma.exec", NULL); "lzma.exec", NULL);
else else
{
assert(foundBss != true);
addLoader("cdb.start", "pad.code", "cdb.entry", addLoader("cdb.start", "pad.code", "cdb.entry",
ih.tx_ptr & 0xffff ? "cdb.dec.ptr" : "cdb.dec.ptr.hi", ih.tx_ptr & 0xffff ? "cdb.dec.ptr" : "cdb.dec.ptr.hi",
method, method,
sa_cnt ? sa_cnt > (0x10000 << 2) ? "memset.long" : "memset.short" : "", sa_cnt ? sa_cnt > (0x10000 << 2) ? "memset.long" : "memset.short" : "",
!foundBss ? "cdb.exit" : "bss.exit", "cdb.exit", NULL);
"pad.code", NULL); }
} }
addLoader("UPX1HEAD", "IDENTSTR", NULL); addLoader("UPX1HEAD", "IDENTSTR", NULL);
} }
@@ -554,7 +563,9 @@ void PackPs1::pack(OutputFile *fo)
} }
else else
{ {
d_len = (lsize - h_len) - getLoaderSectionStart(M_IS_LZMA(ph.method) ? "cdb.entry.lzma" : "cdb.entry"); const char* entry_lzma = !foundBss ? "cdb.entry.lzma" : "bss.cdb.entry.lzma";
d_len = (lsize - h_len) - getLoaderSectionStart(M_IS_LZMA(ph.method) ? entry_lzma : "cdb.entry");
e_len = (lsize - d_len) - h_len; e_len = (lsize - d_len) - h_len;
} }
@@ -565,11 +576,13 @@ void PackPs1::pack(OutputFile *fo)
linker->defineSymbol("ldr_sz", M_IS_LZMA(ph.method) ? sz_lunc + 16 : (d_len-pad_code)); linker->defineSymbol("ldr_sz", M_IS_LZMA(ph.method) ? sz_lunc + 16 : (d_len-pad_code));
if (foundBss) if (foundBss)
{
if (M_IS_LZMA(ph.method)) if (M_IS_LZMA(ph.method))
linker->defineSymbol("wrkmem", bss_end - 160 - getDecompressorWrkmemSize() linker->defineSymbol("wrkmem", bss_end - 160 - getDecompressorWrkmemSize()
- (sz_lunc + 16)); - (sz_lunc + 16));
else else
linker->defineSymbol("wrkmem", bss_end - 16 - (d_len - pad_code)); linker->defineSymbol("wrkmem", bss_end - 16 - (d_len - pad_code));
}
const unsigned entry = comp_data_start - e_len; const unsigned entry = comp_data_start - e_len;
@@ -578,7 +591,7 @@ void PackPs1::pack(OutputFile *fo)
unsigned pad = 0; unsigned pad = 0;
if (!opt->ps1_exe.no_align) if (!opt->ps1_exe.no_align || !isCon)
{ {
pad = oh.tx_len; pad = oh.tx_len;
oh.tx_len = ALIGN_UP(oh.tx_len, CD_SEC); oh.tx_len = ALIGN_UP(oh.tx_len, CD_SEC);
@@ -611,8 +624,12 @@ void PackPs1::pack(OutputFile *fo)
linker->defineSymbol("PSVR", FIX_PSVR); linker->defineSymbol("PSVR", FIX_PSVR);
linker->defineSymbol("CPDO", comp_data_start); linker->defineSymbol("CPDO", comp_data_start);
if (M_IS_LZMA(ph.method)) if (M_IS_LZMA(ph.method))
linker->defineSymbol("lzma_cpr", getLoaderSectionStart("lzma.exec") {
- getLoaderSectionStart("cdb.entry.lzma")); unsigned entry_lzma = getLoaderSectionStart( !foundBss ? "cdb.entry.lzma" :
"bss.cdb.entry.lzma");
linker->defineSymbol("lzma_cpr", getLoaderSectionStart("lzma.exec") - entry_lzma);
}
} }
relocateLoader(); relocateLoader();
+2 -1
View File
@@ -42,7 +42,8 @@ public:
virtual int getVersion() const { return 13; } virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_DOS_SYS; } virtual int getFormat() const { return UPX_F_DOS_SYS; }
virtual const char *getName() const { return "dos/sys"; } virtual const char *getName() const { return "dos/sys"; }
virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.sys" : "i286-dos16.sys"; } //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.sys" : "i286-dos16.sys"; }
virtual const char *getFullName(const options_t *) const { return "i086-dos16.sys"; }
virtual bool canPack(); virtual bool canPack();
+2 -1
View File
@@ -67,11 +67,12 @@ const int *PackTmt::getFilters() const
unsigned PackTmt::findOverlapOverhead(const upx_bytep buf, unsigned PackTmt::findOverlapOverhead(const upx_bytep buf,
const upx_bytep tbuf,
unsigned range, unsigned range,
unsigned upper_limit) const unsigned upper_limit) const
{ {
// make sure the decompressor will be paragraph aligned // make sure the decompressor will be paragraph aligned
unsigned o = super::findOverlapOverhead(buf, range, upper_limit); unsigned o = super::findOverlapOverhead(buf, tbuf, range, upper_limit);
o = ((o + 0x20) &~ 0xf) - (ph.u_len & 0xf); o = ((o + 0x20) &~ 0xf) - (ph.u_len & 0xf);
return o; return o;
} }
+2 -1
View File
@@ -42,7 +42,7 @@ public:
virtual int getVersion() const { return 13; } virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_TMT_ADAM; } virtual int getFormat() const { return UPX_F_TMT_ADAM; }
virtual const char *getName() const { return "tmt/adam"; } virtual const char *getName() const { return "tmt/adam"; }
virtual const char *getFullName(const options_t *) const { return "i386-dos32.tmt"; } virtual const char *getFullName(const options_t *) const { return "i386-dos32.tmt.adam"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
@@ -56,6 +56,7 @@ protected:
virtual int readFileHeader(); virtual int readFileHeader();
virtual unsigned findOverlapOverhead(const upx_bytep buf, virtual unsigned findOverlapOverhead(const upx_bytep buf,
const upx_bytep tbuf,
unsigned range = 0, unsigned range = 0,
unsigned upper_limit = ~0u) const; unsigned upper_limit = ~0u) const;
virtual void buildLoader(const Filter *ft); virtual void buildLoader(const Filter *ft);
+7 -3
View File
@@ -173,8 +173,10 @@ void PackUnix::pack2(OutputFile *fo, Filter &ft)
compressWithFilters(&ft, OVERHEAD, NULL_cconf, filter_strategy); compressWithFilters(&ft, OVERHEAD, NULL_cconf, filter_strategy);
if (ph.c_len < ph.u_len) { if (ph.c_len < ph.u_len) {
const upx_bytep tbuf = NULL;
if (ft.id == 0) tbuf = ibuf;
ph.overlap_overhead = OVERHEAD; ph.overlap_overhead = OVERHEAD;
if (!testOverlappingDecompression(obuf, ph.overlap_overhead)) { if (!testOverlappingDecompression(obuf, tbuf, ph.overlap_overhead)) {
// not in-place compressible // not in-place compressible
ph.c_len = ph.u_len; ph.c_len = ph.u_len;
} }
@@ -353,8 +355,10 @@ void PackUnix::packExtent(
} }
if (ph.c_len < ph.u_len) { if (ph.c_len < ph.u_len) {
const upx_bytep tbuf = NULL;
if (ft == NULL || ft->id == 0) tbuf = ibuf;
ph.overlap_overhead = OVERHEAD; ph.overlap_overhead = OVERHEAD;
if (!testOverlappingDecompression(obuf, ph.overlap_overhead)) { if (!testOverlappingDecompression(obuf, tbuf, ph.overlap_overhead)) {
// not in-place compressible // not in-place compressible
ph.c_len = ph.u_len; ph.c_len = ph.u_len;
} }
@@ -499,7 +503,7 @@ int PackUnix::canUnpack()
fi->seek(-bufsize, SEEK_END); fi->seek(-bufsize, SEEK_END);
fi->readx(buf, bufsize); fi->readx(buf, bufsize);
if (!getPackHeader(buf, bufsize)) if (!getPackHeader(buf, bufsize, true)) // allow incompressible extents
return false; return false;
int l = ph.buf_offset + ph.getPackHeaderSize(); int l = ph.buf_offset + ph.getPackHeaderSize();
+1 -1
View File
@@ -235,7 +235,7 @@ public:
virtual bool canPack(); virtual bool canPack();
protected: protected:
virtual const upx_byte *getLoader() const; virtual upx_byte *getLoader() const;
virtual int getLoaderSize() const; virtual int getLoaderSize() const;
virtual void patchLoader(); virtual void patchLoader();
+414 -17
View File
@@ -44,6 +44,10 @@ static const
#include "stub/amd64-linux.kernel.vmlinux.h" #include "stub/amd64-linux.kernel.vmlinux.h"
static const static const
#include "stub/arm-linux.kernel.vmlinux.h" #include "stub/arm-linux.kernel.vmlinux.h"
static const
#include "stub/armeb-linux.kernel.vmlinux.h"
static const
#include "stub/powerpc-linux.kernel.vmlinux.h"
/************************************************************************* /*************************************************************************
@@ -66,9 +70,9 @@ PackVmlinuxBase<T>::PackVmlinuxBase(InputFile *f,
template <class T> template <class T>
PackVmlinuxBase<T>::~PackVmlinuxBase() PackVmlinuxBase<T>::~PackVmlinuxBase()
{ {
delete [] shstrtab;
delete [] phdri; delete [] phdri;
delete [] shdri; delete [] shdri;
delete [] shstrtab;
} }
template <class T> template <class T>
@@ -201,6 +205,7 @@ bool PackVmlinuxBase<T>::canPack()
return 0 < n_ptload; return 0 < n_ptload;
} }
#include "p_elf.h"
template <class T> template <class T>
void PackVmlinuxBase<T>::pack(OutputFile *fo) void PackVmlinuxBase<T>::pack(OutputFile *fo)
@@ -265,13 +270,224 @@ void PackVmlinuxBase<T>::pack(OutputFile *fo)
upx_compress_config_t cconf; cconf.reset(); upx_compress_config_t cconf; cconf.reset();
// limit stack size needed for runtime decompression // limit stack size needed for runtime decompression
cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28KB stack cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28KB stack
compressWithFilters(&ft, 512, &cconf, getStrategy(ft));
unsigned ppc32_extra = 0;
if (Ehdr::EM_PPC==my_e_machine) {
// output layout:
// .long UPX_MAGIC_LE32
// .long L20 - L10
// L10:
// b_info for Ehdr; compressed Ehdr; .balign 4 // one block only
// b_info for LOAD; compressed LOAD; .balign 4 // possibly many blocks
// // This allows per-block filters!
// L20:
// b f_decompress
// +4: f_unfilter(char *buf, unsigned len, unsigned cto8, unsigned ftid)
// // Code for multiple filters can "daisy chain" on ftid.
// f_decompress(char const *src, unsigned src_len,
// char *dst, unsigned *dst_len, int method)
unsigned tmp;
tmp = UPX_MAGIC_LE32; fo->write(&tmp, sizeof(tmp)); fo_off += sizeof(tmp);
tmp = 0; fo->write(&tmp, sizeof(tmp)); fo_off += sizeof(tmp);
ppc32_extra += 2*sizeof(tmp);
unsigned const len_unc = sizeof(ehdri) + sizeof(Phdr) * ehdri.e_phnum;
MemBuffer unc_hdr(len_unc);
MemBuffer cpr_hdr; cpr_hdr.allocForCompression(len_unc);
memcpy(&unc_hdr[0], &ehdri, sizeof(ehdri));
memcpy(&unc_hdr[sizeof(ehdri)], phdri, sizeof(Phdr) * ehdri.e_phnum);
unsigned len_cpr = 0;
int const r = upx_compress(unc_hdr, len_unc, cpr_hdr, &len_cpr,
NULL, ph.method, 10, NULL, NULL );
if (UPX_E_OK!=r || len_unc<=len_cpr) // FIXME: allow no compression
throwInternalError("Ehdr compression failed");
struct b_info { // 12-byte header before each compressed block
unsigned sz_unc; // uncompressed_size
unsigned sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
unsigned char b_unused; // FIXME: !=0 for partial-block unfilter
// unsigned f_offset, f_len; // only if partial-block unfilter
}
__attribute_packed;
struct b_info hdr_info;
set_be32(&hdr_info.sz_unc, len_unc);
set_be32(&hdr_info.sz_cpr, len_cpr);
hdr_info.b_method = ph.method;
hdr_info.b_ftid = 0;
hdr_info.b_cto8 = 0;
hdr_info.b_unused = 0;
fo->write(&hdr_info, sizeof(hdr_info)); fo_off += sizeof(hdr_info);
unsigned const frag = (3& (0u-len_cpr));
ppc32_extra += sizeof(hdr_info) + len_cpr + frag;
fo_off += len_cpr + frag;
fo->write(cpr_hdr, len_cpr + frag);
// Partial filter: .text and following contiguous SHF_EXECINSTR
upx_bytep f_ptr = ibuf;
unsigned f_len = 0;
Shdr const *shdr = 1+ shdri; // skip empty shdr[0]
if (ft.buf_len==0 // not specified yet FIXME: was set near construction
&& (Shdr::SHF_ALLOC & shdr->sh_flags)
&& (Shdr::SHF_EXECINSTR & shdr->sh_flags)) {
// shdr[1] is instructions (probably .text)
f_ptr = ibuf + (unsigned) (shdr->sh_offset - phdri[0].p_offset);
f_len = shdr->sh_size;
++shdr;
for (int j= ehdri.e_shnum - 2; --j>=0; ++shdr) {
unsigned prev_end = shdr[-1].sh_size + shdr[-1].sh_offset;
prev_end += ~(0u-shdr[0].sh_addralign) & (0u-prev_end); // align_up
if ((Shdr::SHF_ALLOC & shdr->sh_flags)
&& (Shdr::SHF_EXECINSTR & shdr->sh_flags)
&& shdr[0].sh_offset==prev_end) {
f_len += shdr->sh_size;
}
else {
break;
}
}
}
else { // ft.buf_len already specified, or Shdr[1] not instructions
f_ptr = ibuf;
f_len = ph.u_len;
}
compressWithFilters(ibuf, ph.u_len, obuf,
f_ptr, f_len, // filter range
NULL, 0, // hdr_ptr, hdr_len
&ft, 512, &cconf, getStrategy(ft));
set_be32(&hdr_info.sz_unc, ph.u_len);
set_be32(&hdr_info.sz_cpr, ph.c_len);
hdr_info.b_ftid = ft.id;
hdr_info.b_cto8 = ft.cto;
if (ph.u_len!=f_len) {
hdr_info.b_unused = 1; // flag for partial filter
}
fo->write(&hdr_info, sizeof(hdr_info)); fo_off += sizeof(hdr_info);
ppc32_extra += sizeof(hdr_info);
if (ph.u_len!=f_len) {
set_be32(&hdr_info.sz_unc, f_ptr - (upx_bytep) ibuf);
set_be32(&hdr_info.sz_cpr, f_len);
fo->write(&hdr_info, 2*sizeof(unsigned)); fo_off += 2*sizeof(unsigned);
ppc32_extra += 2*sizeof(unsigned);
}
#if 0 /*{ Documentation: changes to arch/powerpc/boot/main.c */
struct b_info {
unsigned sz_unc;
unsigned sz_cpr;
unsigned char b_method;
unsigned char b_ftid;
unsigned char b_cto8;
unsigned char b_unused;
};
typedef int (*upx_f_unc)( /* uncompress */
unsigned char const *src, unsigned src_len,
unsigned char *dst, unsigned *dst_len,
int method
);
typedef int (*upx_f_unf)( /* unfilter */
unsigned char *buf,
unsigned len,
unsigned cto8,
unsigned ftid
);
unsigned char const *upx_expand( // return updated src [aligned, too]
unsigned char const *src,
unsigned char *dst,
unsigned *const dst_len,
upx_f_unc const f_unc
)
{
if (0==*dst_len) {
*dst_len = ((struct b_info const *)src)->sz_unc;
}
upx_f_unf const f_unf = (upx_f_unf)(sizeof(int) + (char *)f_unc);
unsigned total_len = 0;
unsigned need = *dst_len;
while (0 < need) {
struct b_info const *const b_hdr = (struct b_info const *)src;
src = (unsigned char const *)(1+ b_hdr);
unsigned blk_len = b_hdr->sz_unc;
int const rv = (*f_unc)(src, b_hdr->sz_cpr, dst, &blk_len, b_hdr->b_method);
if (0!=rv) {
printf("decompress error %d\n\r", rv);
exit();
}
if (b_hdr->b_ftid) {
(*f_unf)(dst, b_hdr->sz_unc, b_hdr->b_cto8, b_hdr->b_ftid);
}
src += b_hdr->sz_cpr;
src += (3& -(int)src); // 4-byte align
dst += b_hdr->sz_unc;
total_len += b_hdr->sz_unc;
need -= b_hdr->sz_unc;
}
*dst_len = total_len;
return src;
}
void prep_kernel(unsigned long a1, unsigned long a2)
{
upx_f_unc f_unc = (upx_f_unc)0;
vmlinuz.addr = (unsigned long)_vmlinux_start;
vmlinuz.size = (unsigned long)(_vmlinux_end - _vmlinux_start);
if (0x55505821 == *(unsigned *)vmlinuz.addr) {
/* was compressed by upx */
/* Uncompress elfheader */
unsigned const *const fwa = (unsigned *)vmlinuz.addr;
f_unc = (upx_f_unc)((char *)&fwa[2] + fwa[1]);
unsigned dst_len = 0;
unsigned char const *src = (unsigned char const *)&fwa[2];
src = upx_expand(src, (unsigned char *)elfheader, &dst_len, f_unc);
unsigned const src_len = src - (unsigned char const *)&fwa[0];
vmlinuz.addr += src_len;
vmlinuz.size -= src_len;
} else {
memcpy(elfheader, (const void *)vmlinuz.addr,
sizeof(elfheader));
}
=====
/* Eventually gunzip the kernel */
if (f_unc) {
/* was compressed by upx */
printf("upx_expand (0x%lx <- 0x%lx:0x%0lx)...",
vmlinux.addr, vmlinuz.addr, vmlinuz.addr+vmlinuz.size);
unsigned dst_len = vmlinux.size - elfoffset;
upx_expand((unsigned char const *)vmlinuz.addr,
(unsigned char *)vmlinux.addr, &dst_len, f_unc);
printf("done 0x%lx bytes\n\r", len);
} else {
memmove((void *)vmlinux.addr,(void *)vmlinuz.addr,
vmlinuz.size);
/* Skip over the ELF header */
#ifdef DEBUG
printf("... skipping 0x%lx bytes of ELF header\n\r",
elfoffset);
#endif
vmlinux.addr += elfoffset;
}
=====
}
#endif /*}*/
}
else {
compressWithFilters(&ft, 512, &cconf, getStrategy(ft));
}
unsigned const txt_c_len = ph.c_len; unsigned const txt_c_len = ph.c_len;
const unsigned lsize = getLoaderSize(); const unsigned lsize = getLoaderSize();
defineDecompressorSymbols(); defineDecompressorSymbols();
defineFilterSymbols(&ft); if (ft.id!=0) {
defineFilterSymbols(&ft);
}
relocateLoader(); relocateLoader();
MemBuffer loader(lsize); MemBuffer loader(lsize);
@@ -285,13 +501,13 @@ void PackVmlinuxBase<T>::pack(OutputFile *fo)
shdro[1].sh_name = ptr_diff(p, shstrtab); shdro[1].sh_name = ptr_diff(p, shstrtab);
shdro[1].sh_type = Shdr::SHT_PROGBITS; shdro[1].sh_type = Shdr::SHT_PROGBITS;
shdro[1].sh_flags = Shdr::SHF_ALLOC | Shdr::SHF_EXECINSTR; shdro[1].sh_flags = Shdr::SHF_ALLOC | Shdr::SHF_EXECINSTR;
shdro[1].sh_offset = fo_off; shdro[1].sh_offset = fo_off - ppc32_extra;
shdro[1].sh_size = txt_c_len + lsize; // plus more ... shdro[1].sh_size = ppc32_extra + txt_c_len + lsize; // plus more ...
shdro[1].sh_addralign = 1; // default shdro[1].sh_addralign = 1; // default
fo_off += write_vmlinux_head(fo, &shdro[1]); fo_off += write_vmlinux_head(fo, &shdro[1]);
fo->write(obuf, txt_c_len); fo_off += txt_c_len; fo->write(obuf, txt_c_len); fo_off += txt_c_len;
unsigned const a = (shdro[1].sh_addralign -1) & (0u-txt_c_len); unsigned const a = (shdro[1].sh_addralign -1) & (0u-(ppc32_extra + txt_c_len));
if (0!=a) { // align if (0!=a) { // align
fo_off += a; fo_off += a;
shdro[1].sh_size += a; shdro[1].sh_size += a;
@@ -359,7 +575,7 @@ void PackVmlinuxBase<T>::pack(OutputFile *fo)
shdro[5].sh_name = ptr_diff(p, shstrtab); shdro[5].sh_name = ptr_diff(p, shstrtab);
shdro[5].sh_type = Shdr::SHT_SYMTAB; shdro[5].sh_type = Shdr::SHT_SYMTAB;
shdro[5].sh_offset = fo_off; shdro[5].sh_offset = fo_off;
shdro[5].sh_size = 5*sizeof(Sym); shdro[5].sh_size = ((Ehdr::EM_PPC==my_e_machine) + 5)*sizeof(Sym);
//shdro[5].sh_flags = Shdr::SHF_INFO_LINK; //shdro[5].sh_flags = Shdr::SHF_INFO_LINK;
shdro[5].sh_link = 6; // to .strtab for symbols shdro[5].sh_link = 6; // to .strtab for symbols
shdro[5].sh_info = 1+3; // number of non-global symbols [binutils/bfd/elf.c] shdro[5].sh_info = 1+3; // number of non-global symbols [binutils/bfd/elf.c]
@@ -386,26 +602,40 @@ void PackVmlinuxBase<T>::pack(OutputFile *fo)
Sym unc_ker; Sym unc_ker;
unc_ker.st_name = 1; // 1 byte into strtab unc_ker.st_name = 1; // 1 byte into strtab
unc_ker.st_value = 0; unc_ker.st_value = 0;
unc_ker.st_size = txt_c_len; unc_ker.st_size = ppc32_extra + txt_c_len;
unc_ker.st_info = unc_ker.make_st_info(Sym::STB_GLOBAL, Sym::STT_FUNC); unc_ker.st_info = unc_ker.make_st_info(Sym::STB_GLOBAL, Sym::STT_FUNC);
unc_ker.st_other = Sym::STV_DEFAULT; unc_ker.st_other = Sym::STV_DEFAULT;
unc_ker.st_shndx = 1; // .text unc_ker.st_shndx = 1; // .text
fo->write(&unc_ker, sizeof(unc_ker)); fo_off += sizeof(unc_ker); fo->write(&unc_ker, sizeof(unc_ker)); fo_off += sizeof(unc_ker);
unsigned const lablen = strlen(my_boot_label); unsigned const lablen = strlen(my_boot_label);
if (Ehdr::EM_PPC==my_e_machine) {
unc_ker.st_name += 1+ lablen;
unc_ker.st_value = unc_ker.st_size;
unc_ker.st_size = 0;
fo->write(&unc_ker, sizeof(unc_ker)); fo_off += sizeof(unc_ker);
}
while (0!=*p++) ; while (0!=*p++) ;
shdro[6].sh_name = ptr_diff(p, shstrtab); shdro[6].sh_name = ptr_diff(p, shstrtab);
shdro[6].sh_type = Shdr::SHT_STRTAB; shdro[6].sh_type = Shdr::SHT_STRTAB;
shdro[6].sh_offset = fo_off; shdro[6].sh_offset = fo_off;
shdro[6].sh_size = 2+ lablen; // '\0' before and after shdro[6].sh_size = 2+ lablen + (Ehdr::EM_PPC==my_e_machine)*(1+ 12); // '\0' before and after
shdro[6].sh_addralign = 1; shdro[6].sh_addralign = 1;
fo->seek(1, SEEK_CUR); // the '\0' before fo->seek(1, SEEK_CUR); // the '\0' before
fo->write(my_boot_label, 1+ lablen); // include the '\0' terminator fo->write(my_boot_label, 1+ lablen); // include the '\0' terminator
if (Ehdr::EM_PPC==my_e_machine) {
fo->write("_vmlinux_end", 1+ 12); fo_off += 1+ 12;
}
fo_off += 2+ lablen; fo_off += 2+ lablen;
fo->seek(0, SEEK_SET); fo->seek(0, SEEK_SET);
fo->write(&ehdro, sizeof(ehdro)); fo->write(&ehdro, sizeof(ehdro));
fo->write(&shdro, sizeof(shdro)); fo->write(&shdro, sizeof(shdro));
if (Ehdr::EM_PPC==my_e_machine) {
fo->seek(sizeof(unsigned), SEEK_CUR);
set_be32(&ppc32_extra, ppc32_extra - 2*sizeof(unsigned) + txt_c_len);
fo->write(&ppc32_extra, sizeof(ppc32_extra));
}
if (!checkFinalCompressionRatio(fo)) if (!checkFinalCompressionRatio(fo))
throwNotCompressible(); throwNotCompressible();
@@ -547,18 +777,41 @@ const int *PackVmlinuxI386::getFilters() const
return filters; return filters;
} }
const int *PackVmlinuxARM::getCompressionMethods(int method, int level) const const int *PackVmlinuxARMEL::getCompressionMethods(int method, int level) const
{ {
return Packer::getDefaultCompressionMethods_8(method, level); return Packer::getDefaultCompressionMethods_8(method, level);
} }
const int *PackVmlinuxARMEB::getCompressionMethods(int method, int level) const
{
return Packer::getDefaultCompressionMethods_8(method, level);
}
const int *PackVmlinuxARM::getFilters() const const int *PackVmlinuxPPC32::getCompressionMethods(int method, int level) const
{
// No real dependency on LE32.
return Packer::getDefaultCompressionMethods_le32(method, level);
}
const int *PackVmlinuxARMEL::getFilters() const
{ {
static const int f50[] = { 0x50, FT_END }; static const int f50[] = { 0x50, FT_END };
return f50; return f50;
} }
const int *PackVmlinuxARMEB::getFilters() const
{
static const int f51[] = { 0x51, FT_END };
return f51;
}
const int *PackVmlinuxPPC32::getFilters() const
{
static const int fd0[] = { 0xd0, FT_END };
return fd0;
}
// //
// Examples as of 2004-07-16 [readelf --segments vmlinux # before fiddling]: // Examples as of 2004-07-16 [readelf --segments vmlinux # before fiddling]:
// //
@@ -646,18 +899,39 @@ void PackVmlinuxAMD64::buildLoader(const Filter *ft)
"LINUX992,IDENTSTR,UPX1HEAD", NULL); "LINUX992,IDENTSTR,UPX1HEAD", NULL);
} }
bool PackVmlinuxARM::is_valid_e_entry(Addr e_entry) bool PackVmlinuxARMEL::is_valid_e_entry(Addr e_entry)
{ {
return 0xc0008000==e_entry; return 0xc0008000==e_entry;
} }
Linker* PackVmlinuxARM::newLinker() const bool PackVmlinuxARMEB::is_valid_e_entry(Addr e_entry)
{
return 0xc0008000==e_entry;
}
bool PackVmlinuxPPC32::is_valid_e_entry(Addr e_entry)
{
return 0xc0000000==e_entry;
}
Linker* PackVmlinuxARMEL::newLinker() const
{ {
return new ElfLinkerArmLE; return new ElfLinkerArmLE;
} }
Linker* PackVmlinuxARMEB::newLinker() const
{
return new ElfLinkerArmBE;
}
void PackVmlinuxARM::buildLoader(const Filter *ft) Linker* PackVmlinuxPPC32::newLinker() const
{
return new ElfLinkerPpc32;
}
void PackVmlinuxARMEL::buildLoader(const Filter *ft)
{ {
// prepare loader // prepare loader
initLoader(stub_arm_linux_kernel_vmlinux, sizeof(stub_arm_linux_kernel_vmlinux)); initLoader(stub_arm_linux_kernel_vmlinux, sizeof(stub_arm_linux_kernel_vmlinux));
@@ -679,6 +953,50 @@ void PackVmlinuxARM::buildLoader(const Filter *ft)
addLoader("IDENTSTR,UPX1HEAD", NULL); addLoader("IDENTSTR,UPX1HEAD", NULL);
} }
void PackVmlinuxARMEB::buildLoader(const Filter *ft)
{
// prepare loader
initLoader(stub_armeb_linux_kernel_vmlinux, sizeof(stub_armeb_linux_kernel_vmlinux));
addLoader("LINUX000", NULL);
if (ft->id) {
assert(ft->calls > 0);
addLoader("LINUX010", NULL);
}
addLoader("LINUX020", NULL);
if (ft->id) {
addFilter32(ft->id);
}
addLoader("LINUX030", NULL);
if (ph.method == M_NRV2E_8) addLoader("NRV2E", NULL);
else if (ph.method == M_NRV2B_8) addLoader("NRV2B", NULL);
else if (ph.method == M_NRV2D_8) addLoader("NRV2D", NULL);
else if (M_IS_LZMA(ph.method)) addLoader("LZMA_ELF00,LZMA_DEC10,LZMA_DEC30", NULL);
else throwBadLoader();
addLoader("IDENTSTR,UPX1HEAD", NULL);
}
void PackVmlinuxPPC32::buildLoader(const Filter *ft)
{
// prepare loader
initLoader(stub_powerpc_linux_kernel_vmlinux, sizeof(stub_powerpc_linux_kernel_vmlinux));
addLoader("LINUX000", NULL);
if (ft->id) {
assert(ft->calls > 0);
addLoader("LINUX010", NULL);
}
addLoader("LINUX020", NULL);
if (ft->id) {
addFilter32(ft->id);
}
addLoader("LINUX030", NULL);
if (ph.method == M_NRV2E_LE32) addLoader("NRV2E", NULL);
else if (ph.method == M_NRV2B_LE32) addLoader("NRV2B", NULL);
else if (ph.method == M_NRV2D_LE32) addLoader("NRV2D", NULL);
else if (M_IS_LZMA(ph.method)) addLoader("LZMA_ELF00,LZMA_DEC10,LZMA_DEC30", NULL);
else throwBadLoader();
addLoader("IDENTSTR,UPX1HEAD", NULL);
}
static const static const
#include "stub/i386-linux.kernel.vmlinux-head.h" #include "stub/i386-linux.kernel.vmlinux-head.h"
@@ -686,6 +1004,10 @@ static const
#include "stub/amd64-linux.kernel.vmlinux-head.h" #include "stub/amd64-linux.kernel.vmlinux-head.h"
static const static const
#include "stub/arm-linux.kernel.vmlinux-head.h" #include "stub/arm-linux.kernel.vmlinux-head.h"
static const
#include "stub/armeb-linux.kernel.vmlinux-head.h"
static const
#include "stub/powerpc-linux.kernel.vmlinux-head.h"
unsigned PackVmlinuxI386::write_vmlinux_head( unsigned PackVmlinuxI386::write_vmlinux_head(
OutputFile *const fo, OutputFile *const fo,
@@ -719,7 +1041,7 @@ printf("UnCompressed length=0x%x\n", ph.u_len);
return sizeof(stub_amd64_linux_kernel_vmlinux_head); return sizeof(stub_amd64_linux_kernel_vmlinux_head);
} }
void PackVmlinuxARM::defineDecompressorSymbols() void PackVmlinuxARMEL::defineDecompressorSymbols()
{ {
super::defineDecompressorSymbols(); super::defineDecompressorSymbols();
linker->defineSymbol( "COMPRESSED_LENGTH", ph.c_len); linker->defineSymbol( "COMPRESSED_LENGTH", ph.c_len);
@@ -727,6 +1049,22 @@ void PackVmlinuxARM::defineDecompressorSymbols()
linker->defineSymbol("METHOD", ph.method); linker->defineSymbol("METHOD", ph.method);
} }
void PackVmlinuxARMEB::defineDecompressorSymbols()
{
super::defineDecompressorSymbols();
linker->defineSymbol( "COMPRESSED_LENGTH", ph.c_len);
linker->defineSymbol("UNCOMPRESSED_LENGTH", ph.u_len);
linker->defineSymbol("METHOD", ph.method);
}
void PackVmlinuxPPC32::defineDecompressorSymbols()
{
super::defineDecompressorSymbols();
// linker->defineSymbol( "COMPRESSED_LENGTH", ph.c_len);
// linker->defineSymbol("UNCOMPRESSED_LENGTH", ph.u_len);
// linker->defineSymbol("METHOD", ph.method);
}
void PackVmlinuxI386::defineDecompressorSymbols() void PackVmlinuxI386::defineDecompressorSymbols()
{ {
super::defineDecompressorSymbols(); super::defineDecompressorSymbols();
@@ -744,7 +1082,7 @@ void PackVmlinuxAMD64::defineDecompressorSymbols()
linker->defineSymbol("PHYSICAL_START", phdri[0].p_paddr); linker->defineSymbol("PHYSICAL_START", phdri[0].p_paddr);
} }
unsigned PackVmlinuxARM::write_vmlinux_head( unsigned PackVmlinuxARMEL::write_vmlinux_head(
OutputFile *const fo, OutputFile *const fo,
Shdr *const stxt Shdr *const stxt
) )
@@ -766,8 +1104,38 @@ unsigned PackVmlinuxARM::write_vmlinux_head(
return sizeof(stub_arm_linux_kernel_vmlinux_head); return sizeof(stub_arm_linux_kernel_vmlinux_head);
} }
unsigned PackVmlinuxARMEB::write_vmlinux_head(
OutputFile *const fo,
Shdr *const stxt
)
{
// First word from vmlinux-head.S
fo->write(&stub_armeb_linux_kernel_vmlinux_head[0], 4);
bool PackVmlinuxARM::has_valid_vmlinux_head() // Second word
U32 tmp_u32;
unsigned const t = (0xff000000 &
BeLePolicy::get32(&stub_armeb_linux_kernel_vmlinux_head[4]))
| (0x00ffffff & (0u - 1 + ((3+ ph.c_len)>>2)));
tmp_u32 = t;
fo->write(&tmp_u32, 4);
stxt->sh_addralign = 4;
stxt->sh_size += sizeof(stub_armeb_linux_kernel_vmlinux_head);
return sizeof(stub_armeb_linux_kernel_vmlinux_head);
}
unsigned PackVmlinuxPPC32::write_vmlinux_head(
OutputFile * /*const fo*/,
Shdr * /*const stxt*/
)
{
return 0;
}
bool PackVmlinuxARMEL::has_valid_vmlinux_head()
{ {
U32 buf[2]; U32 buf[2];
fi->seek(p_text->sh_offset + sizeof(stub_arm_linux_kernel_vmlinux_head) -8, SEEK_SET); fi->seek(p_text->sh_offset + sizeof(stub_arm_linux_kernel_vmlinux_head) -8, SEEK_SET);
@@ -781,6 +1149,34 @@ bool PackVmlinuxARM::has_valid_vmlinux_head()
return false; return false;
} }
bool PackVmlinuxARMEB::has_valid_vmlinux_head()
{
U32 buf[2];
fi->seek(p_text->sh_offset + sizeof(stub_armeb_linux_kernel_vmlinux_head) -8, SEEK_SET);
fi->readx(buf, sizeof(buf));
//unsigned const word0 = buf[0];
unsigned const word1 = buf[1];
if (0xeb==(word1>>24)
&& (0x00ffffff& word1)==(0u - 1 + ((3+ ph.c_len)>>2))) {
return true;
}
return false;
}
bool PackVmlinuxPPC32::has_valid_vmlinux_head()
{
U32 buf[2];
fi->seek(p_text->sh_offset + sizeof(stub_powerpc_linux_kernel_vmlinux_head) -8, SEEK_SET);
fi->readx(buf, sizeof(buf));
//unsigned const word0 = buf[0];
unsigned const word1 = buf[1];
if (0xeb==(word1>>24)
&& (0x00ffffff& word1)==(0u - 1 + ((3+ ph.c_len)>>2))) {
return true;
}
return false;
}
bool PackVmlinuxI386::has_valid_vmlinux_head() bool PackVmlinuxI386::has_valid_vmlinux_head()
{ {
unsigned char buf[5]; unsigned char buf[5];
@@ -1058,6 +1454,7 @@ Linker* PackVmlinuxAMD64::newLinker() const
// instantiate instances // instantiate instances
template class PackVmlinuxBase<ElfClass_LE32>; template class PackVmlinuxBase<ElfClass_LE32>;
template class PackVmlinuxBase<ElfClass_BE32>;
template class PackVmlinuxBase<ElfClass_LE64>; template class PackVmlinuxBase<ElfClass_LE64>;
+52 -4
View File
@@ -119,14 +119,14 @@ protected:
}; };
class PackVmlinuxARM : public PackVmlinuxBase<ElfClass_LE32> class PackVmlinuxARMEL : public PackVmlinuxBase<ElfClass_LE32>
{ {
typedef PackVmlinuxBase<ElfClass_LE32> super; typedef PackVmlinuxBase<ElfClass_LE32> super;
public: public:
PackVmlinuxARM(InputFile *f) : super(f, Ehdr::EM_ARM, PackVmlinuxARMEL(InputFile *f) : super(f, Ehdr::EM_ARM,
Ehdr::ELFCLASS32, Ehdr::ELFDATA2LSB, "decompress_kernel") { } Ehdr::ELFCLASS32, Ehdr::ELFDATA2LSB, "decompress_kernel") { }
virtual int getFormat() const { return UPX_F_VMLINUX_ARM; } virtual int getFormat() const { return UPX_F_VMLINUX_ARMEL; }
virtual const char *getName() const { return "vmlinux/ARM"; } virtual const char *getName() const { return "vmlinux/armel"; }
virtual const char *getFullName(const options_t *) const { return "arm-linux.kernel.vmlinux"; } virtual const char *getFullName(const options_t *) const { return "arm-linux.kernel.vmlinux"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
@@ -143,6 +143,54 @@ protected:
); );
}; };
class PackVmlinuxARMEB : public PackVmlinuxBase<ElfClass_BE32>
{
typedef PackVmlinuxBase<ElfClass_BE32> super;
public:
PackVmlinuxARMEB(InputFile *f) : super(f, Ehdr::EM_ARM,
Ehdr::ELFCLASS32, Ehdr::ELFDATA2MSB, "decompress_kernel") { }
virtual int getFormat() const { return UPX_F_VMLINUX_ARMEB; }
virtual const char *getName() const { return "vmlinux/armeb"; }
virtual const char *getFullName(const options_t *) const { return "armeb-linux.kernel.vmlinux"; }
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
protected:
virtual void buildLoader(const Filter *ft);
virtual void defineDecompressorSymbols();
virtual Linker* newLinker() const;
virtual bool is_valid_e_entry(Addr);
virtual bool has_valid_vmlinux_head();
virtual unsigned write_vmlinux_head(
OutputFile *const fo,
Shdr *const stxt
);
};
class PackVmlinuxPPC32 : public PackVmlinuxBase<ElfClass_BE32>
{
typedef PackVmlinuxBase<ElfClass_BE32> super;
public:
PackVmlinuxPPC32(InputFile *f) : super(f, Ehdr::EM_PPC,
Ehdr::ELFCLASS32, Ehdr::ELFDATA2MSB, "_vmlinux_start") { }
virtual int getFormat() const { return UPX_F_VMLINUX_PPC32; }
virtual const char *getName() const { return "vmlinux/ppc32"; }
virtual const char *getFullName(const options_t *) const { return "powerpc-linux.kernel.vmlinux"; }
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
protected:
virtual void buildLoader(const Filter *ft);
virtual void defineDecompressorSymbols();
virtual Linker* newLinker() const;
virtual bool is_valid_e_entry(Addr);
virtual bool has_valid_vmlinux_head();
virtual unsigned write_vmlinux_head(
OutputFile *const fo,
Shdr *const stxt
);
};
class PackVmlinuxAMD64 : public PackVmlinuxBase<ElfClass_LE64> class PackVmlinuxAMD64 : public PackVmlinuxBase<ElfClass_LE64>
{ {
+14 -5
View File
@@ -208,15 +208,24 @@ int PackVmlinuzI386::decompressKernel()
if (fd_pos != file_size) if (fd_pos != file_size)
{ {
//printf("fd_pos: %ld, file_size: %ld\n", (long)fd_pos, (long)file_size); //printf("fd_pos: %ld, file_size: %ld\n", (long)fd_pos, (long)file_size);
throwCantPack("trailing bytes after kernel image; use option '-f' to force packing");
// linux-2.6.21.5/arch/i386/boot/compressed/vmlinux.lds
// puts .data.compressed ahead of .text, .rodata, etc;
// so piggy.o need not be last in bzImage. Alas.
//throwCantPack("trailing bytes after kernel image; use option '-f' to force packing");
} }
// see /usr/src/linux/arch/i386/kernel/head.S // see /usr/src/linux/arch/i386/kernel/head.S
// 2.4.x: cld; mov $...,%eax // 2.4.x: [cli;] cld; mov $...,%eax
if (memcmp(ibuf, "\xFC\xB8", 2) == 0) goto head_ok; if (memcmp(ibuf, "\xFC\xB8", 2) == 0) goto head_ok;
// 2.6.x: cld; lgdt ... if (memcmp(ibuf, "\xFA\xFC\xB8", 3) == 0) goto head_ok;
if (memcmp(ibuf, "\xFC\x0F\x01", 3) == 0) goto head_ok; // 2.6.21.5 CONFIG_PARAVIRT mov %cs,%eax; test $3,%eax; jne ...;
if (memcmp(ibuf, "\x8c\xc8\xa9\x03\x00\x00\x00\x0f\x85", 9) == 0) goto head_ok;
if (memcmp(ibuf, "\x8c\xc8\xa8\x03\x0f\x85", 6) == 0) goto head_ok;
// 2.6.x: [cli;] cld; lgdt ...
if (memcmp(ibuf, "\xFC\x0F\x01", 3) == 0) goto head_ok;
if (memcmp(ibuf, "\xFA\xFC\x0F\x01", 4) == 0) goto head_ok;
// 2.6.x+grsecurity+strongswan+openwall+trustix: ljmp $0x10,... // 2.6.x+grsecurity+strongswan+openwall+trustix: ljmp $0x10,...
if (ibuf[0] == 0xEA && memcmp(ibuf+5, "\x10\x00", 2) == 0) goto head_ok; if (ibuf[0] == 0xEA && memcmp(ibuf+5, "\x10\x00", 2) == 0) goto head_ok;
// x86_64 2.6.x // x86_64 2.6.x
+1 -1
View File
@@ -60,7 +60,7 @@ protected:
virtual void buildLoader(const Filter *ft); virtual void buildLoader(const Filter *ft);
virtual Linker* newLinker() const; virtual Linker* newLinker() const;
// virtual const upx_byte *getLoader() const; // virtual upx_byte *getLoader() const;
// virtual int getLoaderSize() const; // virtual int getLoaderSize() const;
struct boot_sect_t struct boot_sect_t
+2 -1
View File
@@ -42,7 +42,8 @@ public:
virtual int getVersion() const { return 13; } virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_WIN16_NE; } virtual int getFormat() const { return UPX_F_WIN16_NE; }
virtual const char *getName() const { return "win16/ne"; } virtual const char *getName() const { return "win16/ne"; }
virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_286 ? "i286-win16.ne" : "i386-win16.ne"; } //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_286 ? "i286-win16.ne" : "i386-win16.ne"; }
virtual const char *getFullName(const options_t *) const { return "i286-win16.ne"; }
virtual const int *getCompressionMethods(int method, int level) const; virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const; virtual const int *getFilters() const;
+14 -2
View File
@@ -592,6 +592,10 @@ void PackW32Pe::buildLoader(const Filter *ft)
void PackW32Pe::pack(OutputFile *fo) void PackW32Pe::pack(OutputFile *fo)
{ {
// FIXME: we need to think about better support for --exact
if (opt->exact)
throwCantPackExact();
const unsigned objs = ih.objects; const unsigned objs = ih.objects;
isection = new pe_section_t[objs]; isection = new pe_section_t[objs];
fi->seek(pe_offset+sizeof(ih),SEEK_SET); fi->seek(pe_offset+sizeof(ih),SEEK_SET);
@@ -607,7 +611,8 @@ void PackW32Pe::pack(OutputFile *fo)
(ih.cpu < 0x14c || ih.cpu > 0x150) (ih.cpu < 0x14c || ih.cpu > 0x150)
|| (ih.opthdrsize != 0xe0) || (ih.opthdrsize != 0xe0)
|| ((ih.flags & EXECUTABLE) == 0) || ((ih.flags & EXECUTABLE) == 0)
|| (ih.subsystem != 2 && ih.subsystem != 3 && ih.subsystem != 1) || (ih.subsystem != 2 && ih.subsystem != 3
&& ih.subsystem != 1 && ih.subsystem != 9)
|| (ih.entry == 0 && !isdll) || (ih.entry == 0 && !isdll)
|| (ih.ddirsentries != 16) || (ih.ddirsentries != 16)
|| IDSIZE(PEDIR_EXCEPTION) // is this used on i386? || IDSIZE(PEDIR_EXCEPTION) // is this used on i386?
@@ -615,6 +620,9 @@ void PackW32Pe::pack(OutputFile *fo)
)) ))
throwCantPack("unexpected value in PE header (try --force)"); throwCantPack("unexpected value in PE header (try --force)");
if (ih.subsystem == 9)
throwCantPack("x86/wince files are not yet supported");
if (IDSIZE(PEDIR_SEC)) if (IDSIZE(PEDIR_SEC))
IDSIZE(PEDIR_SEC) = IDADDR(PEDIR_SEC) = 0; IDSIZE(PEDIR_SEC) = IDADDR(PEDIR_SEC) = 0;
if (IDSIZE(PEDIR_COMRT)) if (IDSIZE(PEDIR_COMRT))
@@ -625,10 +633,12 @@ void PackW32Pe::pack(OutputFile *fo)
else if (opt->win32_pe.strip_relocs < 0) else if (opt->win32_pe.strip_relocs < 0)
opt->win32_pe.strip_relocs = (ih.imagebase >= 0x400000); opt->win32_pe.strip_relocs = (ih.imagebase >= 0x400000);
if (opt->win32_pe.strip_relocs) if (opt->win32_pe.strip_relocs)
{
if (ih.imagebase < 0x400000) if (ih.imagebase < 0x400000)
throwCantPack("--strip-relocs is not allowed when imagebase < 0x400000"); throwCantPack("--strip-relocs is not allowed when imagebase < 0x400000");
else else
ih.flags |= RELOCS_STRIPPED; ih.flags |= RELOCS_STRIPPED;
}
if (memcmp(isection[0].name,"UPX",3) == 0) if (memcmp(isection[0].name,"UPX",3) == 0)
throwAlreadyPackedByUPX(); throwAlreadyPackedByUPX();
@@ -717,7 +727,7 @@ void PackW32Pe::pack(OutputFile *fo)
//OutputFile::dump("x1", ibuf, usize); //OutputFile::dump("x1", ibuf, usize);
// some checks for broken linkers - disable filter if neccessary // some checks for broken linkers - disable filter if necessary
bool allow_filter = true; bool allow_filter = true;
if (ih.codebase == ih.database if (ih.codebase == ih.database
|| ih.codebase + ih.codesize > ih.imagesize || ih.codebase + ih.codesize > ih.imagesize
@@ -1017,6 +1027,8 @@ void PackW32Pe::pack(OutputFile *fo)
oh.codebase = osection[1].vaddr; oh.codebase = osection[1].vaddr;
// oh.headersize = osection[0].rawdataptr; // oh.headersize = osection[0].rawdataptr;
oh.headersize = rvamin; oh.headersize = rvamin;
if (rvamin < osection[0].rawdataptr)
throwCantPack("object alignment too small");
if (opt->win32_pe.strip_relocs && !isdll) if (opt->win32_pe.strip_relocs && !isdll)
oh.flags |= RELOCS_STRIPPED; oh.flags |= RELOCS_STRIPPED;
+39 -29
View File
@@ -46,7 +46,7 @@ Packer::Packer(InputFile *f) :
last_patch(NULL), last_patch_len(0), last_patch_off(0) last_patch(NULL), last_patch_len(0), last_patch_off(0)
{ {
if (fi != NULL) if (fi != NULL)
file_size = fi->st.st_size; file_size = fi->st_size();
uip = new UiPacker(this); uip = new UiPacker(this);
memset(&ph, 0, sizeof(ph)); memset(&ph, 0, sizeof(ph));
} }
@@ -67,8 +67,9 @@ void Packer::assertPacker() const
assert(getVersion() >= 11); assert(getVersion() >= 11);
assert(getVersion() <= 14); assert(getVersion() <= 14);
assert(strlen(getName()) <= 13); assert(strlen(getName()) <= 13);
assert(strlen(getFullName(opt)) <= 26); // "i386-linux.kernel.bvmlinuz" // info: 32 is limit for show_all_packers() in help.cpp
assert(strlen(getFullName(NULL)) <= 26); // "i386-linux.kernel.bvmlinuz" assert(strlen(getFullName(opt)) <= 28);
assert(strlen(getFullName(NULL)) <= 28);
if (bele == NULL) fprintf(stderr, "%s\n", getName()); if (bele == NULL) fprintf(stderr, "%s\n", getName());
assert(bele != NULL); assert(bele != NULL);
#if 1 #if 1
@@ -245,7 +246,7 @@ bool Packer::compress(upx_bytep i_ptr, unsigned i_len, upx_bytep o_ptr,
uip->endCallback(); uip->endCallback();
if (r == UPX_E_OUT_OF_MEMORY) if (r == UPX_E_OUT_OF_MEMORY)
throwCantPack("out of memory"); throwOutOfMemoryException();
if (r != UPX_E_OK) if (r != UPX_E_OK)
throwInternalError("compression failed"); throwInternalError("compression failed");
@@ -282,6 +283,8 @@ bool Packer::compress(upx_bytep i_ptr, unsigned i_len, upx_bytep o_ptr,
// decompress // decompress
unsigned new_len = ph.u_len; unsigned new_len = ph.u_len;
r = upx_decompress(o_ptr, ph.c_len, i_ptr, &new_len, ph.method, &ph.compress_result); r = upx_decompress(o_ptr, ph.c_len, i_ptr, &new_len, ph.method, &ph.compress_result);
if (r == UPX_E_OUT_OF_MEMORY)
throwOutOfMemoryException();
//printf("%d %d: %d %d %d\n", ph.method, r, ph.c_len, ph.u_len, new_len); //printf("%d %d: %d %d %d\n", ph.method, r, ph.c_len, ph.u_len, new_len);
if (r != UPX_E_OK) if (r != UPX_E_OK)
throwInternalError("decompression failed"); throwInternalError("decompression failed");
@@ -360,6 +363,8 @@ void ph_decompress(PackHeader &ph, const upx_bytep in, upx_bytep out,
// decompress // decompress
unsigned new_len = ph.u_len; unsigned new_len = ph.u_len;
int r = upx_decompress(in, ph.c_len, out, &new_len, ph.method, &ph.compress_result); int r = upx_decompress(in, ph.c_len, out, &new_len, ph.method, &ph.compress_result);
if (r == UPX_E_OUT_OF_MEMORY)
throwOutOfMemoryException();
if (r != UPX_E_OK || new_len != ph.u_len) if (r != UPX_E_OK || new_len != ph.u_len)
throwCompressedDataViolation(); throwCompressedDataViolation();
@@ -386,13 +391,16 @@ void Packer::decompress(const upx_bytep in, upx_bytep out,
// overlapping decompression // overlapping decompression
**************************************************************************/ **************************************************************************/
bool ph_testOverlappingDecompression(const PackHeader &ph, const upx_bytep buf, bool ph_testOverlappingDecompression(const PackHeader &ph,
const upx_bytep buf,
const upx_bytep tbuf,
unsigned overlap_overhead) unsigned overlap_overhead)
{ {
if (ph.c_len >= ph.u_len) if (ph.c_len >= ph.u_len)
return false; return false;
assert((int)overlap_overhead >= 0); assert((int) overlap_overhead >= 0);
assert((int) (ph.u_len + overlap_overhead) >= 0);
// Because upx_test_overlap() does not use the asm_fast decompressor // Because upx_test_overlap() does not use the asm_fast decompressor
// we must account for extra 3 bytes that asm_fast does use, // we must account for extra 3 bytes that asm_fast does use,
@@ -406,16 +414,19 @@ bool ph_testOverlappingDecompression(const PackHeader &ph, const upx_bytep buf,
unsigned src_off = ph.u_len + overlap_overhead - ph.c_len; unsigned src_off = ph.u_len + overlap_overhead - ph.c_len;
unsigned new_len = ph.u_len; unsigned new_len = ph.u_len;
int r = upx_test_overlap(buf - src_off, src_off, int r = upx_test_overlap(buf - src_off, tbuf,
ph.c_len, &new_len, ph.method, &ph.compress_result); src_off, ph.c_len, &new_len,
ph.method, &ph.compress_result);
if (r == UPX_E_OUT_OF_MEMORY)
throwOutOfMemoryException();
return (r == UPX_E_OK && new_len == ph.u_len); return (r == UPX_E_OK && new_len == ph.u_len);
} }
bool Packer::testOverlappingDecompression(const upx_bytep buf, bool Packer::testOverlappingDecompression(const upx_bytep buf, const upx_bytep tbuf,
unsigned overlap_overhead) const unsigned overlap_overhead) const
{ {
return ph_testOverlappingDecompression(ph, buf, overlap_overhead); return ph_testOverlappingDecompression(ph, buf, tbuf, overlap_overhead);
} }
@@ -474,6 +485,7 @@ void Packer::verifyOverlappingDecompression(upx_bytep o_ptr, unsigned o_size, Fi
**************************************************************************/ **************************************************************************/
unsigned Packer::findOverlapOverhead(const upx_bytep buf, unsigned Packer::findOverlapOverhead(const upx_bytep buf,
const upx_bytep tbuf,
unsigned range, unsigned range,
unsigned upper_limit) const unsigned upper_limit) const
{ {
@@ -481,7 +493,7 @@ unsigned Packer::findOverlapOverhead(const upx_bytep buf,
// prepare to deal with very pessimistic values // prepare to deal with very pessimistic values
unsigned low = 1; unsigned low = 1;
unsigned high = UPX_MIN(ph.u_len / 4 + 512, upper_limit); unsigned high = UPX_MIN(ph.u_len + 512, upper_limit);
// but be optimistic for first try (speedup) // but be optimistic for first try (speedup)
unsigned m = UPX_MIN(16u, high); unsigned m = UPX_MIN(16u, high);
// //
@@ -493,21 +505,23 @@ unsigned Packer::findOverlapOverhead(const upx_bytep buf,
assert(m >= low); assert(m <= high); assert(m >= low); assert(m <= high);
assert(m < overhead || overhead == 0); assert(m < overhead || overhead == 0);
nr++; nr++;
bool success = testOverlappingDecompression(buf, m); bool success = testOverlappingDecompression(buf, tbuf, m);
//printf("testOverlapOverhead: %d %d -> %d\n", nr, m, (int)success); //printf("testOverlapOverhead(%d): %d %d: %d -> %d\n", nr, low, high, m, (int)success);
if (success) if (success)
{ {
overhead = m; overhead = m;
// Succeed early if m lies in [low .. low+range-1], i.e. if // Succeed early if m lies in [low .. low+range-1], i.e. if
// if the range of the current interval is <= range. // if the range of the current interval is <= range.
//if (m <= low + range - 1) // if (m <= low + range - 1)
if (m + 1 <= low + range) // avoid underflow // if (m < low + range)
if (m - low < range) // avoid underflow
break; break;
high = m - 1; high = m - 1;
} }
else else
low = m + 1; low = m + 1;
m = (low + high) / 2; ////m = (low + high) / 2;
m = (low & high) + ((low ^ high) >> 1); // avoid overflow
} }
//printf("findOverlapOverhead: %d (%d tries)\n", overhead, nr); //printf("findOverlapOverhead: %d (%d tries)\n", overhead, nr);
@@ -684,7 +698,7 @@ int Packer::patchPackHeader(void *b, int blen)
} }
bool Packer::getPackHeader(void *b, int blen) bool Packer::getPackHeader(void *b, int blen, bool allow_incompressible)
{ {
if (!ph.fillPackHeader((unsigned char *)b, blen)) if (!ph.fillPackHeader((unsigned char *)b, blen))
return false; return false;
@@ -697,7 +711,9 @@ bool Packer::getPackHeader(void *b, int blen)
if (!testUnpackVersion(ph.version)) if (!testUnpackVersion(ph.version))
return false; return false;
if (ph.c_len >= ph.u_len || (off_t)ph.c_len >= file_size if (ph.c_len > ph.u_len
|| (ph.c_len == ph.u_len && !allow_incompressible)
|| (off_t)ph.c_len >= file_size
|| ph.version <= 0 || ph.version >= 0xff) || ph.version <= 0 || ph.version >= 0xff)
throwCantUnpack("header corrupted"); throwCantUnpack("header corrupted");
else if ((off_t)ph.u_len > ph.u_file_size) else if ((off_t)ph.u_len > ph.u_file_size)
@@ -722,14 +738,14 @@ bool Packer::getPackHeader(void *b, int blen)
} }
bool Packer::readPackHeader(int len) bool Packer::readPackHeader(int len, bool allow_incompressible)
{ {
assert((int)len > 0); assert((int)len > 0);
MemBuffer buf(len); MemBuffer buf(len);
len = fi->read(buf, len); len = fi->read(buf, len);
if (len <= 0) if (len <= 0)
return false; return false;
return getPackHeader(buf, len); return getPackHeader(buf, len, allow_incompressible);
} }
@@ -1082,14 +1098,8 @@ void Packer::addLoader(C a, C b, C c, C d, C e, C f, C g, C h, C i, C j)
void __acc_cdecl_va Packer::addLoaderVA(const char *s, ...) void __acc_cdecl_va Packer::addLoaderVA(const char *s, ...)
{ {
va_list ap; va_list ap;
const char *t = s;
va_start(ap, s); va_start(ap, s);
while (t != NULL) linker->addLoader(s, ap);
{
linker->addLoader(t);
t = va_arg(ap, const char *);
}
va_end(ap); va_end(ap);
} }
@@ -1196,7 +1206,7 @@ void Packer::relocateLoader()
// The workaround is for hdr_buf and hdr_u_len to describe the Elf headers // The workaround is for hdr_buf and hdr_u_len to describe the Elf headers
// (typically less than 512 bytes) when .text is passed in, and include // (typically less than 512 bytes) when .text is passed in, and include
// them in the calculation of shortest output. Then the result // them in the calculation of shortest output. Then the result
// this->ph.method will say which [single] method to use for everthing. // this->ph.method will say which [single] method to use for everything.
// The Elf headers are never filtered. They are short enough (< 512 bytes) // The Elf headers are never filtered. They are short enough (< 512 bytes)
// that compressing them more than once per method (once here when choosing, // that compressing them more than once per method (once here when choosing,
// once again just before writing [because compressWithFilters discards]) // once again just before writing [because compressWithFilters discards])
@@ -1415,7 +1425,7 @@ void Packer::compressWithFilters(upx_bytep i_ptr, unsigned i_len,
if (ph.c_len + lsize + hdr_c_len <= best_ph.c_len + best_ph_lsize + best_hdr_c_len) if (ph.c_len + lsize + hdr_c_len <= best_ph.c_len + best_ph_lsize + best_hdr_c_len)
{ {
// get results // get results
ph.overlap_overhead = findOverlapOverhead(o_tmp, overlap_range); ph.overlap_overhead = findOverlapOverhead(o_tmp, i_ptr, overlap_range);
buildLoader(&ft); buildLoader(&ft);
lsize = getLoaderSize(); lsize = getLoaderSize();
assert(lsize > 0); assert(lsize > 0);
+4 -2
View File
@@ -203,9 +203,11 @@ protected:
// util for verifying overlapping decompresion // util for verifying overlapping decompresion
// non-destructive test // non-destructive test
virtual bool testOverlappingDecompression(const upx_bytep buf, virtual bool testOverlappingDecompression(const upx_bytep buf,
const upx_bytep tbuf,
unsigned overlap_overhead) const; unsigned overlap_overhead) const;
// non-destructive find // non-destructive find
virtual unsigned findOverlapOverhead(const upx_bytep buf, virtual unsigned findOverlapOverhead(const upx_bytep buf,
const upx_bytep tbuf,
unsigned range = 0, unsigned range = 0,
unsigned upper_limit = ~0u) const; unsigned upper_limit = ~0u) const;
// destructive decompress + verify // destructive decompress + verify
@@ -214,8 +216,8 @@ protected:
// packheader handling // packheader handling
virtual int patchPackHeader(void *b, int blen); virtual int patchPackHeader(void *b, int blen);
virtual bool getPackHeader(void *b, int blen); virtual bool getPackHeader(void *b, int blen, bool allow_incompressible=false);
virtual bool readPackHeader(int len); virtual bool readPackHeader(int len, bool allow_incompressible=false);
virtual void checkAlreadyPacked(const void *b, int blen); virtual void checkAlreadyPacked(const void *b, int blen);
// loader core // loader core
+23 -6
View File
@@ -208,11 +208,15 @@ const char *Packer::getDecompressorSections() const
if (UPX_F_LINUX_ELF_i386 ==ph.format if (UPX_F_LINUX_ELF_i386 ==ph.format
|| UPX_F_LINUX_ELFI_i386 ==ph.format || UPX_F_LINUX_ELFI_i386 ==ph.format
|| UPX_F_LINUX_ELF64_AMD ==ph.format || UPX_F_LINUX_ELF64_AMD ==ph.format
|| UPX_F_LINUX_ELF32_ARMLE==ph.format || UPX_F_LINUX_ELF32_ARMEL==ph.format
|| UPX_F_LINUX_ELFPPC32 ==ph.format || UPX_F_LINUX_ELFPPC32 ==ph.format
|| UPX_F_LINUX_ELF32_ARMBE==ph.format || UPX_F_LINUX_ELF32_ARMEB==ph.format
|| UPX_F_BSD_ELF_i386 ==ph.format || UPX_F_BSD_ELF_i386 ==ph.format
|| UPX_F_VMLINUX_ARM ==ph.format || UPX_F_VMLINUX_ARMEL ==ph.format
|| UPX_F_VMLINUX_ARMEB ==ph.format
|| UPX_F_VMLINUX_PPC32 ==ph.format
|| UPX_F_MACH_PPC32 ==ph.format
|| UPX_F_MACH_i386 ==ph.format
) { ) {
return opt->small ? lzma_elf_small : lzma_elf_fast; return opt->small ? lzma_elf_small : lzma_elf_fast;
} }
@@ -242,11 +246,15 @@ void Packer::defineDecompressorSymbols()
if (UPX_F_LINUX_ELF_i386 ==ph.format if (UPX_F_LINUX_ELF_i386 ==ph.format
|| UPX_F_LINUX_ELFI_i386 ==ph.format || UPX_F_LINUX_ELFI_i386 ==ph.format
|| UPX_F_LINUX_ELF64_AMD ==ph.format || UPX_F_LINUX_ELF64_AMD ==ph.format
|| UPX_F_LINUX_ELF32_ARMLE==ph.format || UPX_F_LINUX_ELF32_ARMEL==ph.format
|| UPX_F_LINUX_ELFPPC32 ==ph.format || UPX_F_LINUX_ELFPPC32 ==ph.format
|| UPX_F_LINUX_ELF32_ARMBE==ph.format || UPX_F_LINUX_ELF32_ARMEB==ph.format
|| UPX_F_BSD_ELF_i386 ==ph.format || UPX_F_BSD_ELF_i386 ==ph.format
|| UPX_F_VMLINUX_ARM ==ph.format || UPX_F_VMLINUX_ARMEL ==ph.format
|| UPX_F_VMLINUX_ARMEB ==ph.format
|| UPX_F_VMLINUX_PPC32 ==ph.format
|| UPX_F_MACH_PPC32 ==ph.format
|| UPX_F_MACH_i386 ==ph.format
) { ) {
// ELF calls the decompressor many times; the parameters change! // ELF calls the decompressor many times; the parameters change!
return; return;
@@ -268,6 +276,15 @@ void Packer::defineDecompressorSymbols()
linker->defineSymbol("lzma_u_len", ph.u_len); linker->defineSymbol("lzma_u_len", ph.u_len);
unsigned stack = getDecompressorWrkmemSize(); unsigned stack = getDecompressorWrkmemSize();
linker->defineSymbol("lzma_stack_adjust", 0u - stack); linker->defineSymbol("lzma_stack_adjust", 0u - stack);
if (ph.format == UPX_F_DOS_EXE)
{
linker->defineSymbol("lzma_properties_hi", properties / 65536);
// -2 for properties
linker->defineSymbol("lzma_c_len_hi", (ph.c_len - 2) / 65536);
linker->defineSymbol("lzma_u_len_hi", ph.u_len / 65536);
linker->defineSymbol("lzma_u_len_segment", (ph.u_len & 0xf0000) >> 4);
}
} }
} }
+12 -2
View File
@@ -192,7 +192,11 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
// //
// linux kernel // linux kernel
// //
if ((p = func(new PackVmlinuxARM(f), user)) != NULL) if ((p = func(new PackVmlinuxARMEL(f), user)) != NULL)
return p;
if ((p = func(new PackVmlinuxARMEB(f), user)) != NULL)
return p;
if ((p = func(new PackVmlinuxPPC32(f), user)) != NULL)
return p; return p;
if ((p = func(new PackVmlinuxAMD64(f), user)) != NULL) if ((p = func(new PackVmlinuxAMD64(f), user)) != NULL)
return p; return p;
@@ -239,12 +243,16 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
return p; return p;
if ((p = func(new PackLinuxElf32ppc(f), user)) != NULL) if ((p = func(new PackLinuxElf32ppc(f), user)) != NULL)
return p; return p;
if ((p = func(new PackLinuxElf32mipsel(f), user)) != NULL)
return p;
if ((p = func(new PackLinuxI386sh(f), user)) != NULL) if ((p = func(new PackLinuxI386sh(f), user)) != NULL)
return p; return p;
} }
if ((p = func(new PackBSDI386(f), user)) != NULL) if ((p = func(new PackBSDI386(f), user)) != NULL)
return p; return p;
if ((p = func(new PackLinuxI386(f), user)) != NULL) if ((p = func(new PackMachFat(f), user)) != NULL) // cafebabe conflict
return p;
if ((p = func(new PackLinuxI386(f), user)) != NULL) // cafebabe conflict
return p; return p;
// //
@@ -264,6 +272,8 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
// Mach (MacOS X PowerPC) // Mach (MacOS X PowerPC)
if ((p = func(new PackMachPPC32(f), user)) != NULL) if ((p = func(new PackMachPPC32(f), user)) != NULL)
return p; return p;
if ((p = func(new PackMachI386(f), user)) != NULL)
return p;
return NULL; return NULL;
} }
+44 -32
View File
@@ -50,18 +50,6 @@
# define strcpy(a,b) strcpy((char *)(a),(const char *)(b)) # define strcpy(a,b) strcpy((char *)(a),(const char *)(b))
#endif #endif
// Unicode string compare
static bool ustrsame(const void *s1, const void *s2)
{
unsigned len1 = get_le16(s1);
unsigned len2 = get_le16(s2);
if (len1 != len2)
return false;
return memcmp(s1, s2, 2 + 2*len1) == 0;
}
#if (__ACC_CXX_HAVE_PLACEMENT_DELETE) || defined(__DJGPP__) #if (__ACC_CXX_HAVE_PLACEMENT_DELETE) || defined(__DJGPP__)
#include "bptr.h" #include "bptr.h"
#define IPTR(type, var) BoundedPtr<type> var(ibuf, ibuf.getSize()) #define IPTR(type, var) BoundedPtr<type> var(ibuf, ibuf.getSize())
@@ -1245,6 +1233,12 @@ upx_byte *PeFile::Resource::build()
newstart = new upx_byte [dirsize()]; newstart = new upx_byte [dirsize()];
unsigned bpos = 0,spos = dsize; unsigned bpos = 0,spos = dsize;
build(root,bpos,spos,0); build(root,bpos,spos,0);
// dirsize() is 4 bytes aligned, so we may need to zero
// up to 2 bytes to make valgrind happy
while (spos < dirsize())
newstart[spos++] = 0;
return newstart; return newstart;
} }
@@ -1349,7 +1343,7 @@ static bool match(unsigned itype, const unsigned char *ntype,
if (unistr[2 + ic * 2] != (unsigned char) mkeep[ic]) if (unistr[2 + ic * 2] != (unsigned char) mkeep[ic])
return false; return false;
return mkeep[ic] == 0 || mkeep[ic] == ',' || mkeep[ic] == '/'; return mkeep[ic] == 0 || mkeep[ic] == ',' || mkeep[ic] == '/';
}; }
}; };
// FIXME this comparison is not too exact // FIXME this comparison is not too exact
@@ -1404,15 +1398,31 @@ void PeFile::processResources(Resource *res)
oresources = new upx_byte[soresources]; oresources = new upx_byte[soresources];
upx_byte *ores = oresources + res->dirsize(); upx_byte *ores = oresources + res->dirsize();
char *keep_icons = NULL; // icon ids in the first icon group
unsigned iconsin1stdir = 0; unsigned iconsin1stdir = 0;
if (opt->win32_pe.compress_icons == 2) if (opt->win32_pe.compress_icons == 2)
while (res->next()) // there is no rewind() in Resource while (res->next()) // there is no rewind() in Resource
if (res->itype() == RT_GROUP_ICON && iconsin1stdir == 0) if (res->itype() == RT_GROUP_ICON && iconsin1stdir == 0)
{
iconsin1stdir = get_le16(ibuf + res->offs() + 4); iconsin1stdir = get_le16(ibuf + res->offs() + 4);
keep_icons = new char[1 + iconsin1stdir * 9];
*keep_icons = 0;
for (unsigned ic = 0; ic < iconsin1stdir; ic++)
snprintf(keep_icons + strlen(keep_icons), 9, "3/%u,",
get_le16(ibuf + res->offs() + 6 + ic * 14 + 12));
if (*keep_icons)
keep_icons[strlen(keep_icons) - 1] = 0;
}
bool compress_icon = opt->win32_pe.compress_icons == 3; // the icon id which should not be compressed when compress_icons == 1
bool compress_idir = false; unsigned first_icon_id = (unsigned) -1;
unsigned iconcnt = 0; if (opt->win32_pe.compress_icons == 1)
while (res->next())
if (res->itype() == RT_GROUP_ICON && first_icon_id == (unsigned) -1)
first_icon_id = get_le16(ibuf + res->offs() + 6 + 12);
bool compress_icon = opt->win32_pe.compress_icons > 1;
bool compress_idir = opt->win32_pe.compress_icons == 3;
// some statistics // some statistics
unsigned usize = 0; unsigned usize = 0;
@@ -1426,26 +1436,27 @@ void PeFile::processResources(Resource *res)
bool do_compress = true; bool do_compress = true;
if (!opt->win32_pe.compress_resources) if (!opt->win32_pe.compress_resources)
do_compress = false; do_compress = false;
else if (rtype == RT_VERSION) // version info
do_compress = false;
else if (rtype == RT_ICON) // icon else if (rtype == RT_ICON) // icon
do_compress = compress_icon && opt->win32_pe.compress_icons; {
if (opt->win32_pe.compress_icons == 0)
do_compress = false;
else if (opt->win32_pe.compress_icons == 1)
if ((first_icon_id == (unsigned) -1
|| first_icon_id == res->iname()))
do_compress = compress_icon;
}
else if (rtype == RT_GROUP_ICON) // icon directory else if (rtype == RT_GROUP_ICON) // icon directory
do_compress = compress_idir && opt->win32_pe.compress_icons; do_compress = compress_idir && opt->win32_pe.compress_icons;
else if (rtype > 0 && rtype < RT_LAST) else if (rtype > 0 && rtype < RT_LAST)
do_compress = opt->win32_pe.compress_rt[rtype] ? true : false; do_compress = opt->win32_pe.compress_rt[rtype] ? true : false;
else if (res->ntype()) // named resource type
{
const upx_byte * const t = res->ntype();
if (ustrsame(t, "\x7\x0T\x0Y\x0P\x0""E\x0L\x0I\x0""B\x0"))
do_compress = false; // u"TYPELIB"
else if (ustrsame(t, "\x8\x0R\x0""E\x0G\x0I\x0S\x0T\x0R\x0Y\x0"))
do_compress = false; // u"REGISTRY"
}
if (do_compress && opt->win32_pe.keep_resource[0]) if (keep_icons)
do_compress ^= match(res->itype(), res->ntype(), res->iname(), do_compress &= !match(res->itype(), res->ntype(), res->iname(),
res->nname(), opt->win32_pe.keep_resource); res->nname(), keep_icons);
do_compress &= !match(res->itype(), res->ntype(), res->iname(),
res->nname(), "TYPELIB,REGISTRY,16");
do_compress &= !match(res->itype(), res->ntype(), res->iname(),
res->nname(), opt->win32_pe.keep_resource);
if (do_compress) if (do_compress)
{ {
@@ -1463,8 +1474,8 @@ void PeFile::processResources(Resource *res)
memcpy(ores, ibuf + res->offs(), res->size()); memcpy(ores, ibuf + res->offs(), res->size());
ibuf.fill(res->offs(), res->size(), FILLVAL); ibuf.fill(res->offs(), res->size(), FILLVAL);
res->newoffs() = ptr_diff(ores,oresources); res->newoffs() = ptr_diff(ores,oresources);
if (rtype == RT_ICON) if (rtype == RT_ICON && opt->win32_pe.compress_icons == 1)
compress_icon = (++iconcnt >= iconsin1stdir || opt->win32_pe.compress_icons == 1); compress_icon = true;
else if (rtype == RT_GROUP_ICON) else if (rtype == RT_GROUP_ICON)
{ {
if (opt->win32_pe.compress_icons == 1) if (opt->win32_pe.compress_icons == 1)
@@ -1479,6 +1490,7 @@ void PeFile::processResources(Resource *res)
} }
soresources = ptr_diff(ores,oresources); soresources = ptr_diff(ores,oresources);
delete[] keep_icons;
if (!res->clear()) if (!res->clear())
{ {
// The area occupied by the resource directory is not continuous // The area occupied by the resource directory is not continuous
+162 -29
View File
@@ -9,6 +9,7 @@
MAKEFLAGS += -rR MAKEFLAGS += -rR
.SUFFIXES: .SUFFIXES:
.SECONDEXPANSION: .SECONDEXPANSION:
.NOTPARALLEL:
export LC_ALL = C export LC_ALL = C
export SHELL = /bin/sh export SHELL = /bin/sh
@@ -18,10 +19,19 @@ empty :=
space := $(empty) $(empty) space := $(empty) $(empty)
tab := $(empty) $(empty) tab := $(empty) $(empty)
ifneq ($(findstring $(firstword $(MAKE_VERSION)),3.79 3.79.1 3.80),) ifneq ($(findstring $(firstword $(MAKE_VERSION)),3.77 3.78 3.78.1 3.79 3.79.1 3.80),)
$(error GNU make 3.81 or better is required) $(error GNU make 3.81 or better is required)
endif endif
ifndef srcdir
srcdir := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
srcdir := $(shell echo '$(srcdir)' | sed 's,/*$$,,')
endif
ifndef top_srcdir
top_srcdir := $(srcdir)/../..
endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
# update $PATH for our special stub build tools # update $PATH for our special stub build tools
ifneq ($(wildcard $(HOME)/local/bin/bin-upx/.),) ifneq ($(wildcard $(HOME)/local/bin/bin-upx/.),)
export PATH := $(HOME)/local/bin/bin-upx:$(PATH) export PATH := $(HOME)/local/bin/bin-upx:$(PATH)
@@ -35,14 +45,6 @@ endif
# // # //
# ************************************************************************/ # ************************************************************************/
ifndef srcdir
srcdir := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
srcdir := $(shell echo '$(srcdir)' | sed 's,/*$$,,')
endif
ifndef top_srcdir
top_srcdir := $(srcdir)/../..
endif
ifndef STUBS ifndef STUBS
STUBS += amd64-linux.elf-entry.h STUBS += amd64-linux.elf-entry.h
STUBS += amd64-linux.elf-fold.h STUBS += amd64-linux.elf-fold.h
@@ -55,6 +57,8 @@ STUBS += arm-linux.kernel.vmlinux.h
STUBS += arm-linux.kernel.vmlinux-head.h STUBS += arm-linux.kernel.vmlinux-head.h
STUBS += armeb-linux.elf-entry.h STUBS += armeb-linux.elf-entry.h
STUBS += armeb-linux.elf-fold.h STUBS += armeb-linux.elf-fold.h
STUBS += armeb-linux.kernel.vmlinux.h
STUBS += armeb-linux.kernel.vmlinux-head.h
STUBS += arm.v4a-wince.pe.h STUBS += arm.v4a-wince.pe.h
STUBS += arm.v4t-wince.pe.h STUBS += arm.v4t-wince.pe.h
STUBS += i086-dos16.com.h STUBS += i086-dos16.com.h
@@ -64,6 +68,8 @@ STUBS += i386-bsd.elf-entry.h
STUBS += i386-bsd.elf-fold.h STUBS += i386-bsd.elf-fold.h
STUBS += i386-bsd.elf.execve-entry.h STUBS += i386-bsd.elf.execve-entry.h
STUBS += i386-bsd.elf.execve-fold.h STUBS += i386-bsd.elf.execve-fold.h
STUBS += i386-darwin.macho-entry.h
STUBS += i386-darwin.macho-fold.h
STUBS += i386-openbsd.elf-fold.h STUBS += i386-openbsd.elf-fold.h
STUBS += i386-dos32.djgpp2.h STUBS += i386-dos32.djgpp2.h
STUBS += i386-dos32.djgpp2-stubify.h STUBS += i386-dos32.djgpp2-stubify.h
@@ -83,10 +89,14 @@ STUBS += i386-linux.kernel.vmlinuz.h
STUBS += i386-win32.pe.h STUBS += i386-win32.pe.h
STUBS += m68k-atari.tos.h STUBS += m68k-atari.tos.h
STUBS += mipsel.r3000-ps1.h STUBS += mipsel.r3000-ps1.h
STUBS += mipsel.r3000-linux.elf-entry.h
STUBS += mipsel.r3000-linux.elf-fold.h
STUBS += powerpc-darwin.macho-entry.h STUBS += powerpc-darwin.macho-entry.h
STUBS += powerpc-darwin.macho-fold.h STUBS += powerpc-darwin.macho-fold.h
STUBS += powerpc-linux.elf-entry.h STUBS += powerpc-linux.elf-entry.h
STUBS += powerpc-linux.elf-fold.h STUBS += powerpc-linux.elf-fold.h
STUBS += powerpc-linux.kernel.vmlinux.h
STUBS += powerpc-linux.kernel.vmlinux-head.h
endif endif
@@ -101,14 +111,16 @@ default: $$(default.targets)
endif endif
endif endif
all.targets ?= .upx-stubtools-stamp tmp/.tmp-stamp .all-stamp all.targets ?= .upx-stubtools-stamp tmp/.tmp-stamp .all-stamp
all: $$(all.targets) all: $$(all.targets)
.upx-stubtools-stamp: $(MAKEFILE_LIST) .upx-stubtools-stamp: $(MAKEFILE_LIST)
upx-stubtools-check-version 20060823 upx-stubtools-check-version 20060823
@echo "timestamp" > $@ @echo "timestamp" > $@
tmp/.tmp-stamp: %/.tmp-stamp:
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
@echo "timestamp" > $@ @echo "timestamp" > $@
.PRECIOUS: %/.tmp-stamp
.all-stamp: $$(STUBS) .all-stamp: $$(STUBS)
@echo "timestamp" > $@ @echo "timestamp" > $@
@@ -131,13 +143,6 @@ maintainer-clean:
# util var for use in the rules - basename of the current target # util var for use in the rules - basename of the current target
override T = $(basename $(notdir $@)) override T = $(basename $(notdir $@))
# trim (strip) trailing whitespace
RTRIM := sed -e 's/[ $(tab)]*$$//'
# squeeze duplicate blank lines, delete empty first & last line
BLSQUEEZE := $(RTRIM) | cat --squeeze-blank | sed -e '1{/^$$/d}' -e '$${/^$$/d}'
# delete blank lines
BLDEL := $(RTRIM) | sed -e '/^$$/d'
# clear some vars, just in case # clear some vars, just in case
LABEL_PREFIX = LABEL_PREFIX =
PP_FLAGS = PP_FLAGS =
@@ -146,6 +151,24 @@ tc_bfdname =
tc_list = tc_list =
tc_objdump_disasm_options = tc_objdump_disasm_options =
# commands
ECHO_e = /bin/echo -e
ECHO_E = /bin/echo -E
PERL = perl
PYTHON = python
UNIX2DOS := $(PERL) -i -pe 's/$$/\r/;'
# trim (strip) trailing whitespace
RTRIM := sed -e 's/[ $(tab)]*$$//'
# squeeze duplicate blank lines, delete empty first & last line
BLSQUEEZE := $(RTRIM) | cat --squeeze-blank | sed -e '1{/^$$/d}' -e '$${/^$$/d}'
# delete blank lines
BLDEL := $(RTRIM) | sed -e '/^$$/d'
# delete blank lines at top (beginning) of file
BLDELTOP := sed -e '/./,$$!d'
# delete blank lines at bottom (end) of file
BLDELBOT := sed -e ':a' -e '/^\n*$$/{$$d;N;ba' -e '}'
# /*********************************************************************** # /***********************************************************************
# // setup toolchain globals # // setup toolchain globals
@@ -165,17 +188,18 @@ define tc
endef endef
# default tools # default tools
tc.default.bin2h = python $(top_srcdir)/src/stub/scripts/bin2h.py --ident=auto-stub tc.default.bin2h = $(PYTHON) $(top_srcdir)/src/stub/scripts/bin2h.py --ident=auto-stub
##tc.default.bin2h-c = $(call tc,bin2h) --compress=14,15,0 ##tc.default.bin2h-c = $(call tc,bin2h) --compress=14,15,0
tc.default.bin2h-c = $(call tc,bin2h) --compress=0 tc.default.bin2h-c = $(call tc,bin2h) --compress=0
tc.default.brandelf = python $(top_srcdir)/src/stub/scripts/brandelf.py $(if $(tc_bfdname),--bfdname=$(tc_bfdname)) tc.default.brandelf = $(PYTHON) $(top_srcdir)/src/stub/scripts/brandelf.py $(if $(tc_bfdname),--bfdname=$(tc_bfdname))
tc.default.gpp_inc = python $(top_srcdir)/src/stub/scripts/gpp_inc.py tc.default.gpp_inc = $(PYTHON) $(top_srcdir)/src/stub/scripts/gpp_inc.py
tc.default.gpp_mkdep = python $(top_srcdir)/src/stub/scripts/gpp_inc.py -o /dev/null tc.default.gpp_mkdep = $(PYTHON) $(top_srcdir)/src/stub/scripts/gpp_inc.py -o /dev/null
tc.default.pp-as = i386-linux-gcc-3.4.6 -E -nostdinc -x assembler-with-cpp -Wall tc.default.pp-as = i386-linux-gcc-3.4.6 -E -nostdinc -x assembler-with-cpp -Wall
tc.default.sstrip = sstrip tc.default.sstrip = sstrip
tc.default.xstrip = python $(top_srcdir)/src/stub/scripts/xstrip.py tc.default.xstrip = $(PYTHON) $(top_srcdir)/src/stub/scripts/xstrip.py
# default multiarch-binutils # default multiarch-binutils
tc.default.m-ar = multiarch-ar-2.17
tc.default.m-ld = multiarch-ld-2.17 $(if $(tc_bfdname),-b $(tc_bfdname)) tc.default.m-ld = multiarch-ld-2.17 $(if $(tc_bfdname),-b $(tc_bfdname))
tc.default.m-nm = multiarch-nm-2.17 $(if $(tc_bfdname),--target=$(tc_bfdname)) tc.default.m-nm = multiarch-nm-2.17 $(if $(tc_bfdname),--target=$(tc_bfdname))
tc.default.m-objcopy = multiarch-objcopy-2.17 $(if $(tc_bfdname),-F $(tc_bfdname)) tc.default.m-objcopy = multiarch-objcopy-2.17 $(if $(tc_bfdname),-F $(tc_bfdname))
@@ -207,6 +231,7 @@ endef
# some common arch settings # some common arch settings
tc.arch-i086.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@ tc.arch-i086.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
tc.arch-i086.wdis = $(WATCOM)/binl/wdis
tc.arch-i386.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@ tc.arch-i386.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
tc.arch-i386.djasm = djasm tc.arch-i386.djasm = djasm
@@ -220,7 +245,7 @@ amd64-linux.elf%.h : tc_bfdname = elf64-x86-64
tc.amd64-linux.elf.gcc = amd64-linux-gcc-3.4.4 -m64 -nostdinc -MMD -MT $@ tc.amd64-linux.elf.gcc = amd64-linux-gcc-3.4.4 -m64 -nostdinc -MMD -MT $@
tc.amd64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.amd64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.amd64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.amd64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
amd64-linux.elf-entry.h: $(srcdir)/src/$$T.S amd64-linux.elf-entry.h: $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin $(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
@@ -274,7 +299,7 @@ arm-linux.elf%.h : tc_bfdname = elf32-littlearm
tc.arm-linux.elf.gcc = arm-linux-gcc-4.1.0 -march=armv4 -nostdinc -MMD -MT $@ tc.arm-linux.elf.gcc = arm-linux-gcc-4.1.0 -march=armv4 -nostdinc -MMD -MT $@
tc.arm-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.arm-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.arm-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.arm-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
arm-linux.elf-entry.h : $(srcdir)/src/$$T.S arm-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -march=armv4 -c $< -o tmp/$T.bin $(call tc,gcc) -march=armv4 -c $< -o tmp/$T.bin
@@ -308,7 +333,7 @@ arm-linux.kernel.vmlinu%.h : tc_bfdname = elf32-littlearm
tc.arm-linux.kernel.gcc = arm-linux-gcc-4.1.0 -march=armv5 -nostdinc -MMD -MT $@ tc.arm-linux.kernel.gcc = arm-linux-gcc-4.1.0 -march=armv5 -nostdinc -MMD -MT $@
tc.arm-linux.kernel.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.arm-linux.kernel.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.arm-linux.kernel.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.arm-linux.kernel.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
arm-linux.kernel.vmlinu%.h : $(srcdir)/src/$$T.S arm-linux.kernel.vmlinu%.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin $(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
@@ -321,6 +346,28 @@ arm-linux.kernel.vmlinux-head.h : $(srcdir)/src/$$T.S
$(call tc,bin2h) tmp/$T.bin $@ $(call tc,bin2h) tmp/$T.bin $@
# /***********************************************************************
# // armeb-linux.kernel.vmlinux
# // armeb-linux.kernel.vmlinuz
# // armeb-linux.kernel.vmlinux-head
# ************************************************************************/
armeb-linux.kernel.vmlinu%.h : tc_list = armeb-linux.kernel default
armeb-linux.kernel.vmlinu%.h : tc_bfdname = elf32-bigarm
tc.armeb-linux.kernel.gcc = $(tc.arm-linux.elf.gcc) -mbig-endian
armeb-linux.kernel.vmlinu%.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h-c) tmp/$T.bin $@
armeb-linux.kernel.vmlinux-head.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
$(call tc,objcopy) --output-target binary --only-section .text tmp/$T.o tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
# /*********************************************************************** # /***********************************************************************
# // armeb-linux.elf # // armeb-linux.elf
# ************************************************************************/ # ************************************************************************/
@@ -507,6 +554,34 @@ tmp/i386-bsd.elf.execve-upx_itoa.o : $(srcdir)/src/$$T.S
$(call tc,f-objstrip,$@) $(call tc,f-objstrip,$@)
# /***********************************************************************
# // i386-darwin.macho
# ************************************************************************/
# info: we use the tc settings from i386-linux.elf
i386-darwin.macho%.h : tc_list = i386-linux.elf default
i386-darwin.macho%.h : tc_bfdname = elf32-i386
i386-darwin.macho-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
i386-darwin.macho-fold.h : tmp/$$T.o tmp/i386-darwin.macho-main.o
$(call tc,ld) --no-warn-mismatch --strip-all --oformat binary -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
chmod a-x tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/i386-darwin.macho-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
$(call tc,f-objstrip,$@)
tmp/i386-darwin.macho-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@)
$(call tc,objdump) -dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
# /*********************************************************************** # /***********************************************************************
# // i386-dos32.djgpp2 # // i386-dos32.djgpp2
# ************************************************************************/ # ************************************************************************/
@@ -560,7 +635,7 @@ i386-linux.elf%.h : tc_bfdname = elf32-i386
tc.i386-linux.elf.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@ tc.i386-linux.elf.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
tc.i386-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.i386-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.i386-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.i386-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
tc.i386-linux.elf.gcc += -mtune=k6 tc.i386-linux.elf.gcc += -mtune=k6
tc.i386-linux.elf.gcc += -Os -fno-omit-frame-pointer tc.i386-linux.elf.gcc += -Os -fno-omit-frame-pointer
tc.i386-linux.elf.gcc += -momit-leaf-frame-pointer tc.i386-linux.elf.gcc += -momit-leaf-frame-pointer
@@ -721,7 +796,7 @@ m68k-atari.tos.h : tc_objdump_disasm_options = -m m68k:68040
tc.m68k-atari.tos.gcc = m68k-linux-gcc-4.1.1 -m68000 -malign-int -nostdinc -MMD -MT $@ tc.m68k-atari.tos.gcc = m68k-linux-gcc-4.1.1 -m68000 -malign-int -nostdinc -MMD -MT $@
tc.m68k-atari.tos.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.m68k-atari.tos.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.m68k-atari.tos.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.m68k-atari.tos.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
m68k-atari.tos.h : $(srcdir)/src/$$T.S m68k-atari.tos.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp -Wa,-m68000,-l,--pcrel,--register-prefix-optional $< -o tmp/$T.bin $(call tc,gcc) -c -x assembler-with-cpp -Wa,-m68000,-l,--pcrel,--register-prefix-optional $< -o tmp/$T.bin
@@ -740,7 +815,7 @@ tc.mipsel.r3000-ps1.as = mipsel-elf-as-20060406 -O -mno-pdr
##tc.mipsel.r3000-ps1.as = mipsel-linux-as-2.16.1 -O -mno-pdr ##tc.mipsel.r3000-ps1.as = mipsel-linux-as-2.16.1 -O -mno-pdr
tc.mipsel.r3000-ps1.gcc = mipsel-linux-gcc-4.1.1 -mel -march=r3000 -mno-abicalls -mabi=eabi -G0 -nostdinc -MMD -MT $@ tc.mipsel.r3000-ps1.gcc = mipsel-linux-gcc-4.1.1 -mel -march=r3000 -mno-abicalls -mabi=eabi -G0 -nostdinc -MMD -MT $@
tc.mipsel.r3000-ps1.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.mipsel.r3000-ps1.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.mipsel.r3000-ps1.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.mipsel.r3000-ps1.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
mipsel.r3000-ps1.h : $(srcdir)/src/$$T.S mipsel.r3000-ps1.h : $(srcdir)/src/$$T.S
ifeq (1,1) ifeq (1,1)
@@ -756,6 +831,45 @@ endif
$(call tc,bin2h-c) tmp/$T.bin $@ $(call tc,bin2h-c) tmp/$T.bin $@
# /***********************************************************************
# // mipsel.r3000-linux.elf
# ************************************************************************/
mipsel.r3000-linux.elf%.h : tc_list = mipsel.r3000-ps1 default
mipsel.r3000-linux.elf%.h : tc_bfdname = elf32-littlemips
mipsel.r3000-linux.elf-entry.h : $(srcdir)/src/$$T.S
ifeq (1,1)
# info: we really need as-2.17 here
$(call tc,pp-as) -D_TARGET_LINUX_ $< -o - | $(RTRIM) > tmp/$T.i
$(call tc,as) tmp/$T.i -o tmp/$T.bin
$(call tc,gpp_mkdep) --mode=c --MMD=$@ $< --MF=tmp/$T.d
else
# info: as-2.16.1 as used by gcc-4.1.1 does _not_ work
$(call tc,gcc) -c -D_TARGET_LINUX_ -Wa,-O,-mno-pdr $< -o tmp/$T.bin
endif
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h-c) tmp/$T.bin $@
mipsel.r3000-linux.elf-fold.h : tmp/$$T.o tmp/mipsel.r3000-linux.elf-main.o $(srcdir)/src/$$T.lds
$(call tc,ld) --strip-all -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
$(call tc,f-objstrip,tmp/$T.bin)
$(call tc,sstrip) tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/mipsel.r3000-linux.elf-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -D_TARGET_LINUX_ $< -o $@
$(call tc,f-objstrip,$@)
tmp/mipsel.r3000-linux.elf-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -S -Os -MF tmp/$T.d $< -o - | $(RTRIM) > tmp/$T.i
sed -e 's/ j[ ][ ]*$$L/ b $$L/' \
-e 's/ jal[ ][ ]*\([^\$$]\)/ bal \1/' < tmp/$T.i > tmp/$T.s
$(call tc,gcc) -c -Wa,-O,-mno-pdr tmp/$T.s -o $@
$(call tc,f-objstrip,$@)
$(call tc,objdump) -dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
# /*********************************************************************** # /***********************************************************************
# // powerpc-darwin.macho # // powerpc-darwin.macho
# ************************************************************************/ # ************************************************************************/
@@ -793,7 +907,7 @@ powerpc-linux.elf%.h : tc_bfdname = elf32-powerpc
tc.powerpc-linux.elf.gcc = powerpc.405-linux-gcc-3.4.5 -m32 -mbig-endian -mcpu=405 -nostdinc -MMD -MT $@ tc.powerpc-linux.elf.gcc = powerpc.405-linux-gcc-3.4.5 -m32 -mbig-endian -mcpu=405 -nostdinc -MMD -MT $@
tc.powerpc-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.powerpc-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.powerpc-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wwrite-strings -Werror tc.powerpc-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
powerpc-linux.elf-entry.h : $(srcdir)/src/$$T.S powerpc-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o tmp/$T.bin $(call tc,gcc) -c $< -o tmp/$T.bin
@@ -816,6 +930,25 @@ tmp/powerpc-linux.elf-main.o : $(srcdir)/src/$$T.c
$(call tc,objdump) -dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm $(call tc,objdump) -dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
# /***********************************************************************
# // powerpc-linux.kernel.vmlinux
# ************************************************************************/
powerpc-linux.kernel.vmlinu%.h : tc_list = powerpc-linux.kernel default
powerpc-linux.kernel.vmlinu%.h : tc_bfdname = elf32-powerpc
tc.powerpc-linux.kernel.gcc = $(tc.powerpc-linux.elf.gcc)
powerpc-linux.kernel.vmlinu%.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h-c) tmp/$T.bin $@
powerpc-linux.kernel.vmlinux-head.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
$(call tc,objcopy) --output-target binary --only-section .text tmp/$T.o tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
# /*********************************************************************** # /***********************************************************************
# // dependencies # // dependencies
# ************************************************************************/ # ************************************************************************/
+3 -3
View File
@@ -29,8 +29,8 @@
#define STUB_ARM_LINUX_ELF_ENTRY_SIZE 16296 #define STUB_ARM_LINUX_ELF_ENTRY_SIZE 16296
#define STUB_ARM_LINUX_ELF_ENTRY_ADLER32 0x9b815c2e #define STUB_ARM_LINUX_ELF_ENTRY_ADLER32 0xdf115bee
#define STUB_ARM_LINUX_ELF_ENTRY_CRC32 0x3b801af9 #define STUB_ARM_LINUX_ELF_ENTRY_CRC32 0x8704e1a1
unsigned char stub_arm_linux_elf_entry[16296] = { unsigned char stub_arm_linux_elf_entry[16296] = {
127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
@@ -44,7 +44,7 @@ unsigned char stub_arm_linux_elf_entry[16296] = {
254, 1,160,232, 15, 0, 0, 58, 9, 64, 64,224, 80, 80,143,226, /* 0x 80 */ 254, 1,160,232, 15, 0, 0, 58, 9, 64, 64,224, 80, 80,143,226, /* 0x 80 */
0,224,160,225, 4, 80,133,224, 5, 0,160,225, 4, 16,137,224, /* 0x 90 */ 0,224,160,225, 4, 80,133,224, 5, 0,160,225, 4, 16,137,224, /* 0x 90 */
0, 32,160,227, 2, 0,159,239, 0,144,156,229,140,144, 73,226, /* 0x a0 */ 0, 32,160,227, 2, 0,159,239, 0,144,156,229,140,144, 73,226, /* 0x a0 */
9,160, 76,224, 4,160,138,224, 8, 0,219,229, 1, 64, 45,233, /* 0x b0 */ 9,160, 76,224, 4,160,138,224, 8, 0,155,229, 1, 64, 45,233, /* 0x b0 */
0, 48,155,229, 12, 0,139,226, 4, 16,155,229, 14, 32,160,225, /* 0x c0 */ 0, 48,155,229, 12, 0,139,226, 4, 16,155,229, 14, 32,160,225, /* 0x c0 */
8, 48,141,229, 8, 48,141,226, 15,224,160,225, 5,240,160,225, /* 0x d0 */ 8, 48,141,229, 8, 48,141,226, 15,224,160,225, 5,240,160,225, /* 0x d0 */
2,128,189,232,252, 64, 45,233, 0,112,129,224, 0, 80,224,227, /* 0x e0 */ 2,128,189,232,252, 64, 45,233, 0,112,129,224, 0, 80,224,227, /* 0x e0 */
+80 -79
View File
@@ -1,5 +1,5 @@
/* arm-linux.elf-fold.h /* arm-linux.elf-fold.h
created from arm-linux.elf-fold.bin, 2108 (0x83c) bytes created from arm-linux.elf-fold.bin, 2128 (0x850) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,17 +28,17 @@
*/ */
#define STUB_ARM_LINUX_ELF_FOLD_SIZE 2108 #define STUB_ARM_LINUX_ELF_FOLD_SIZE 2128
#define STUB_ARM_LINUX_ELF_FOLD_ADLER32 0x3e40608e #define STUB_ARM_LINUX_ELF_FOLD_ADLER32 0xf3eb5f7c
#define STUB_ARM_LINUX_ELF_FOLD_CRC32 0xb5be5c29 #define STUB_ARM_LINUX_ELF_FOLD_CRC32 0x79cd3b89
unsigned char stub_arm_linux_elf_fold[2108] = { unsigned char stub_arm_linux_elf_fold[2128] = {
127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
2, 0, 40, 0, 1, 0, 0, 0,128,128, 0, 0, 52, 0, 0, 0, /* 0x 10 */ 2, 0, 40, 0, 1, 0, 0, 0,128,128, 0, 0, 52, 0, 0, 0, /* 0x 10 */
0, 0, 0, 0, 2, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 2, 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,128, 0, 0, /* 0x 30 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, /* 0x 30 */
0,128, 0, 0, 60, 8, 0, 0, 60, 8, 0, 0, 5, 0, 0, 0, /* 0x 40 */ 0,128, 0, 0, 80, 8, 0, 0, 80, 8, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0,128, 0, 0, 1, 0, 0, 0, 60, 8, 0, 0, 0, 0, 0, 0, /* 0x 50 */ 0,128, 0, 0, 1, 0, 0, 0, 80, 8, 0, 0, 0, 0, 0, 0, /* 0x 50 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
12, 48,157,229, 3, 49,141,224, 20, 48,131,226, 4, 0,147,228, /* 0x 80 */ 12, 48,157,229, 3, 49,141,224, 20, 48,131,226, 4, 0,147,228, /* 0x 80 */
@@ -46,7 +46,7 @@ unsigned char stub_arm_linux_elf_fold[2108] = {
0, 0, 80,227,252,255,255, 26, 8, 32,141,229, 10,220, 77,226, /* 0x a0 */ 0, 0, 80,227,252,255,255, 26, 8, 32,141,229, 10,220, 77,226, /* 0x a0 */
9, 64,160,225, 4,144,154,229, 13,128,160,225, 0,112,154,229, /* 0x b0 */ 9, 64,160,225, 4,144,154,229, 13,128,160,225, 0,112,154,229, /* 0x b0 */
36, 96,143,226, 12,144,137,226, 0,176,160,227,248, 15, 45,233, /* 0x c0 */ 36, 96,143,226, 12,144,137,226, 0,176,160,227,248, 15, 45,233, /* 0x c0 */
15, 0,189,232,132, 1, 0,235, 0,224,160,225, 20,208,141,226, /* 0x d0 */ 15, 0,189,232,131, 1, 0,235, 0,224,160,225, 20,208,141,226, /* 0x d0 */
10,220,141,226, 7, 0,189,232, 4,240, 18,229,255, 48, 3,226, /* 0x e0 */ 10,220,141,226, 7, 0,189,232, 4,240, 18,229,255, 48, 3,226, /* 0x e0 */
80, 0, 83,227, 14,240,160, 17, 33, 17,176,225, 0, 0, 80, 19, /* 0x f0 */ 80, 0, 83,227, 14,240,160, 17, 33, 17,176,225, 0, 0, 80, 19, /* 0x f0 */
14,240,160, 1, 1, 16, 65,226, 1, 33,144,231, 15, 52, 2,226, /* 0x 100 */ 14,240,160, 1, 1, 16, 65,226, 1, 33,144,231, 15, 52, 2,226, /* 0x 100 */
@@ -91,78 +91,79 @@ unsigned char stub_arm_linux_elf_fold[2108] = {
183,255,255, 26, 20,208,141,226,240,128,189,232, 85, 80, 88, 33, /* 0x 370 */ 183,255,255, 26, 20,208,141,226,240,128,189,232, 85, 80, 88, 33, /* 0x 370 */
240, 79, 45,233, 1,160,160,225,176,193,218,225, 28, 16,145,229, /* 0x 380 */ 240, 79, 45,233, 1,160,160,225,176,193,218,225, 28, 16,145,229, /* 0x 380 */
188,226,218,225, 48,208, 77,226, 2, 0, 92,227, 1, 96,138,224, /* 0x 390 */ 188,226,218,225, 48,208, 77,226, 2, 0, 92,227, 1, 96,138,224, /* 0x 390 */
16, 0,141,229, 16,192,160, 3, 0,192,160, 19, 1,224, 78,226, /* 0x 3a0 */ 16, 0,141,229, 50,192,160, 3, 34,192,160, 19, 1,224, 78,226, /* 0x 3a0 */
6, 16,160,225, 0, 64,224,227, 0, 0,160,227, 12, 32,141,229, /* 0x 3b0 */ 6, 16,160,225, 0, 0,224,227, 0, 80,160,227, 12, 32,141,229, /* 0x 3b0 */
8, 48,141,229, 11, 0, 0,234, 0, 48,145,229, 1, 0, 83,227, /* 0x 3c0 */ 8, 48,141,229, 11, 0, 0,234, 0, 48,145,229, 1, 0, 83,227, /* 0x 3c0 */
6, 0, 0, 26, 8, 32,145,229, 20, 48,145,229, 3, 48,130,224, /* 0x 3d0 */ 6, 0, 0, 26, 8, 32,145,229, 20, 48,145,229, 3, 48,130,224, /* 0x 3d0 */
3, 0, 80,225, 3, 0,160, 49, 2, 0, 84,225, 2, 64,160, 33, /* 0x 3e0 */ 3, 0, 85,225, 3, 80,160, 49, 2, 0, 80,225, 2, 0,160, 33, /* 0x 3e0 */
32, 16,129,226, 1,224, 78,226, 0, 0, 94,227,241,255,255,170, /* 0x 3f0 */ 32, 16,129,226, 1,224, 78,226, 0, 0, 94,227,241,255,255,170, /* 0x 3f0 */
255, 78,196,227, 15, 64,196,227, 0, 48,100,224,255, 62,131,226, /* 0x 400 */ 255, 78,192,227, 15, 64,196,227, 5, 48,100,224,255, 62,131,226, /* 0x 400 */
15, 48,131,226,255, 62,195,227, 15, 48,195,227, 36, 48,141,229, /* 0x 410 */ 15, 48,131,226,255, 62,195,227, 16,224, 28,226, 15, 48,195,227, /* 0x 410 */
0, 80,160,227, 34, 48,140,226, 4, 0,160,225, 0,192,224,227, /* 0x 420 */ 36, 48,141,229, 28, 64,141, 21, 7, 0, 0, 26, 12, 48,160,225, /* 0x 420 */
36, 16,157,229, 5, 32,160,225, 0,192,141,229, 4, 80,141,229, /* 0x 430 */ 14, 32,160,225, 0,192,224,227, 4, 0,160,225, 36, 16,157,229, /* 0x 430 */
75,255,255,235, 52, 48,160,227, 0,176,100,224,155, 3, 3,224, /* 0x 440 */ 0, 80,141,232, 74,255,255,235, 28, 0,141,229, 28, 16,157,229, /* 0x 440 */
28, 0,141,229, 32, 48,141,229, 24, 80,141,229,127, 0, 0,234, /* 0x 450 */ 52, 48,160,227, 1,176,100,224,155, 3, 3,224, 0, 32,160,227, /* 0x 450 */
0, 48,150,229, 6, 0, 83,227, 5, 0, 0, 26, 8, 32,150,229, /* 0x 460 */ 32, 80,134,226, 32, 48,141,229, 24, 32,141,229,127, 0, 0,234, /* 0x 460 */
8, 0,157,229, 2, 32,139,224, 3, 16,160,227, 69,255,255,235, /* 0x 470 */ 12, 48,157,229, 0, 0, 83,227, 8, 0, 0, 10, 32, 48, 21,229, /* 0x 470 */
114, 0, 0,234, 1, 0, 83,227,112, 0, 0, 26, 24, 48,150,229, /* 0x 480 */ 6, 0, 83,227, 5, 0, 0, 26, 24, 32, 21,229, 8, 0,157,229, /* 0x 480 */
72, 34,159,229, 7, 48, 3,226, 3, 49,160,225, 50, 35,160,225, /* 0x 490 */ 2, 32,139,224, 3, 16,160,227, 62,255,255,235,111, 0, 0,234, /* 0x 490 */
8, 48,150,229, 12, 16,157,229, 3,144,139,224, 9, 10,160,225, /* 0x 4a0 */ 32, 48, 21,229, 1, 0, 83,227,108, 0, 0, 26, 8, 48, 21,229, /* 0x 4a0 */
16, 48,150,229, 0, 0, 81,227, 32, 10,160,225, 4,192,150,229, /* 0x 4b0 */ 36, 34,159,229, 7, 48, 3,226, 3, 49,160,225, 50, 35,160,225, /* 0x 4b0 */
7, 80, 2,226, 20, 32,150,229, 0,128,131,224, 16,224,157, 5, /* 0x 4c0 */ 24, 48, 21,229, 3,144,139,224, 12, 48,157,229, 16,224, 21,229, /* 0x 4c0 */
9,112, 96,224, 40, 48,141,229, 20, 32,141,229, 0,224,224, 19, /* 0x 4d0 */ 9, 26,160,225, 0, 0, 83,227, 33, 26,160,225, 28,192, 21,229, /* 0x 4d0 */
12,192, 96,224, 5, 32,160, 1, 18, 48,160, 3, 2, 32,133, 19, /* 0x 4e0 */ 7, 96, 2,226, 12, 32, 21,229, 9,128, 97,224, 16, 64,157, 5, /* 0x 4e0 */
50, 48,160, 19, 7, 0,160,225, 8, 16,160,225, 44,144,141,229, /* 0x 4f0 */ 1,112,142,224, 20, 32,141,229, 0, 64,224, 19, 12,192, 97,224, /* 0x 4f0 */
0,224,141,229, 4,192,141,229, 25,255,255,235, 0, 0, 87,225, /* 0x 500 */ 6, 32,160, 1, 18, 48,160, 3, 2, 32,134, 19, 50, 48,160, 19, /* 0x 500 */
59, 0, 0, 26, 12, 48,157,229, 0, 0, 83,227, 6, 0, 0, 10, /* 0x 510 */ 8, 0,160,225, 7, 16,160,225, 40,224,141,229, 16, 16,141,232, /* 0x 510 */
88, 16,157,229, 4, 48, 21,226, 1, 48,160, 17, 12, 0,157,229, /* 0x 520 */ 44,144,141,229, 18,255,255,235, 0, 0, 88,225, 56, 0, 0, 26, /* 0x 520 */
40, 16,141,226, 16, 32,157,229, 62,255,255,235, 0, 48,104,226, /* 0x 530 */ 12, 48,157,229, 0, 0, 83,227, 6, 0, 0, 10, 88, 16,157,229, /* 0x 530 */
3, 74,160,225, 2, 0, 21,227, 36, 74,160,225, 7, 0, 0, 10, /* 0x 540 */ 4, 48, 22,226, 1, 48,160, 17, 12, 0,157,229, 40, 16,141,226, /* 0x 540 */
0, 0, 84,227, 5, 0, 0, 10, 8, 16,135,224, 4, 32,160,225, /* 0x 550 */ 16, 32,157,229, 55,255,255,235, 0, 48,103,226, 3, 74,160,225, /* 0x 550 */
0, 48,160,227, 1, 32, 82,226, 1, 48,193,228,251,255,255, 26, /* 0x 560 */ 2, 0, 22,227, 36, 74,160,225, 7, 0, 0, 10, 0, 0, 84,227, /* 0x 560 */
12, 32,157,229, 0, 0, 82,227, 35, 0, 0, 10, 0, 48,150,229, /* 0x 570 */ 5, 0, 0, 10, 7, 16,136,224, 4, 32,160,225, 0, 48,160,227, /* 0x 570 */
1, 0, 83,227, 24, 0, 0, 26, 24, 48,150,229, 1, 0, 19,227, /* 0x 580 */ 1, 32, 82,226, 1, 48,193,228,251,255,255, 26, 12, 32,157,229, /* 0x 580 */
21, 0, 0, 10, 20, 32,150,229, 16, 48,150,229, 3, 0, 82,225, /* 0x 590 */ 0, 0, 82,227, 32, 0, 0, 10, 32, 48, 21,229, 1, 0, 83,227, /* 0x 590 */
8, 16,150,229, 70, 0, 0, 26, 1, 48,130,224, 11, 32,131,224, /* 0x 5a0 */ 21, 0, 0, 26, 8, 48, 21,229, 1, 0, 19,227, 18, 0, 0, 10, /* 0x 5a0 */
0, 48, 98,226, 3, 58,160,225, 35, 58,160,225, 7, 0, 83,227, /* 0x 5b0 */ 12, 32, 21,229, 16, 48, 21,229, 3, 0, 82,225, 24, 16, 21,229, /* 0x 5b0 */
63, 0, 0,154, 24, 49,159,229, 0, 48,130,229, 20, 49,159,229, /* 0x 5c0 */ 62, 0, 0, 26, 1, 48,130,224, 11, 32,131,224, 0, 48, 98,226, /* 0x 5c0 */
4, 48,130,229, 1, 0, 0,234, 0, 0, 82,227, 2, 0, 0, 10, /* 0x 5d0 */ 3, 58,160,225, 35, 58,160,225, 7, 0, 83,227, 55, 0, 0,154, /* 0x 5d0 */
8, 0,157,229, 0, 16,160,227,234,254,255,235, 7, 0,160,225, /* 0x 5e0 */ 248, 48,159,229, 0, 48,130,229,244, 48,159,229, 8, 0,157,229, /* 0x 5e0 */
8, 16,160,225, 5, 32,160,225,219,254,255,235, 0, 0, 80,227, /* 0x 5f0 */ 4, 48,130,229, 0, 16,160,227,230,254,255,235, 8, 0,160,225, /* 0x 5f0 */
1, 0, 0, 10,127, 0,160,227,202,254,255,235, 20, 32,157,229, /* 0x 600 */ 7, 16,160,225, 6, 32,160,225,215,254,255,235, 0, 0, 80,227, /* 0x 600 */
4, 48,136,224, 2, 16,137,224, 3, 64,135,224, 1, 0, 84,225, /* 0x 610 */ 1, 0, 0, 10,127, 0,160,227,198,254,255,235, 20, 32,157,229, /* 0x 610 */
10, 0, 0, 42, 0,192,224,227, 0,192,141,229, 1, 16,100,224, /* 0x 620 */ 4, 48,135,224, 2, 16,137,224, 3, 64,136,224, 1, 0, 84,225, /* 0x 620 */
1,192,140,226, 5, 32,160,225, 4, 0,160,225, 50, 48,160,227, /* 0x 630 */ 10, 0, 0, 42, 0,192,224,227, 0,192,141,229, 1, 16,100,224, /* 0x 630 */
4,192,141,229,202,254,255,235, 0, 0, 84,225,236,255,255, 26, /* 0x 640 */ 1,192,140,226, 6, 32,160,225, 4, 0,160,225, 50, 48,160,227, /* 0x 640 */
24, 48,157,229, 1, 48,131,226, 24, 48,141,229, 32, 96,134,226, /* 0x 650 */ 4,192,141,229,198,254,255,235, 0, 0, 84,225,236,255,255, 26, /* 0x 650 */
188, 50,218,225, 24, 16,157,229, 3, 0, 81,225,123,255,255,186, /* 0x 660 */ 24, 48,157,229, 1, 48,131,226, 24, 48,141,229, 32, 80,133,226, /* 0x 660 */
12, 32,157,229, 0, 0, 82,227, 4, 0, 0, 26, 16, 0,157,229, /* 0x 670 */ 188, 50,218,225, 24, 16,157,229, 3, 0, 81,225,123,255,255,186, /* 0x 670 */
179,254,255,235, 0, 0, 80,227,221,255,255, 26, 5, 0, 0,234, /* 0x 680 */ 12, 32,157,229, 0, 0, 82,227, 5, 0, 0, 10,176, 49,218,225, /* 0x 680 */
176, 49,218,225, 3, 0, 83,227, 28, 48,157, 21, 36, 16,157, 21, /* 0x 690 */ 3, 0, 83,227, 28, 48,157, 21, 36, 16,157, 21, 1, 0,131, 16, /* 0x 690 */
1, 0,131, 16,172,254,255, 27, 84, 32,157,229, 0, 0, 82,227, /* 0x 6a0 */ 173,254,255, 27, 84, 32,157,229, 0, 0, 82,227, 0,176,130, 21, /* 0x 6a0 */
0,176,130, 21, 24, 0,154,229, 0, 0,139,224, 48,208,141,226, /* 0x 6b0 */ 24, 0,154,229, 0, 0,139,224, 48,208,141,226,240,143,189,232, /* 0x 6b0 */
240,143,189,232, 4, 48,150,229, 32, 32,157,229, 0, 0, 83,227, /* 0x 6c0 */ 28, 48, 21,229, 0, 0, 83,227, 32, 32,157, 5, 2, 48,129, 0, /* 0x 6c0 */
2, 48,129,224, 8, 32,131,226,185,255,255, 10,189,255,255,234, /* 0x 6d0 */ 8, 32,131, 2,193,255,255, 10,199,255,255,234, 64, 98, 81,115, /* 0x 6d0 */
64, 98, 81,115, 91, 0,144,239, 14,240,160,225,240, 71, 45,233, /* 0x 6e0 */ 91, 0,144,239, 14,240,160,225,240, 71, 45,233, 12,208, 77,226, /* 0x 6e0 */
12,208, 77,226, 52,112,141,226, 0, 80,160,225, 1, 96,160,225, /* 0x 6f0 */ 52, 96,141,226, 0,144,160,225, 1, 80,160,225, 3,128,160,225, /* 0x 6f0 */
3,160,160,225, 7, 0,160,225, 0, 48,160,227, 44, 16,141,226, /* 0x 700 */ 6, 0,160,225, 0, 48,160,227, 44, 16,141,226, 48,160,157,229, /* 0x 700 */
48,144,157,229, 2,128,160,225, 52, 64,157,229,197,254,255,235, /* 0x 710 */ 2,112,160,225, 52, 64,157,229,198,254,255,235, 56, 48,157,229, /* 0x 710 */
56, 48,157,229, 5, 16,160,227, 3, 48,100,224,188, 34,217,225, /* 0x 720 */ 5, 16,160,227, 3, 48,100,224,188, 34,218,225, 9, 0,160,225, /* 0x 720 */
5, 0,160,225, 56, 48,141,229, 52, 96,141,229,149,254,255,235, /* 0x 730 */ 56, 48,141,229, 52, 80,141,229,150,254,255,235, 9, 0,160,225, /* 0x 730 */
5, 0,160,225, 4, 16,160,227,186, 34,217,225,145,254,255,235, /* 0x 740 */ 4, 16,160,227,186, 34,218,225,146,254,255,235, 52, 64,138,226, /* 0x 740 */
52, 96,137,226, 60, 32,157,229, 8, 48,150,229, 52, 32,130,226, /* 0x 750 */ 60, 32,157,229, 8, 48,148,229, 52, 32,130,226, 3, 32,130,224, /* 0x 750 */
3, 32,130,224, 5, 0,160,225, 3, 16,160,227,137,254,255,235, /* 0x 760 */ 9, 0,160,225, 3, 16,160,227,138,254,255,235, 8,192,141,226, /* 0x 760 */
8,192,141,226, 7, 32,160,225, 9, 16,160,225, 5, 48,160,225, /* 0x 770 */ 6, 32,160,225, 10, 16,160,225, 9, 48,160,225, 7, 0,160,225, /* 0x 770 */
8, 0,160,225, 0,192,141,229, 4,160,141,229,251,254,255,235, /* 0x 780 */ 0,192,141,229, 4,128,141,229,252,254,255,235, 0, 80,160,225, /* 0x 780 */
0, 64,160,225, 9, 16,160,227, 4, 32,160,225, 5, 0,160,225, /* 0x 790 */ 9, 16,160,227, 5, 32,160,225, 9, 0,160,225,125,254,255,235, /* 0x 790 */
124,254,255,235,188, 18,217,225, 0, 32,160,227, 29, 0, 0,234, /* 0x 7a0 */ 188, 18,218,225, 0, 32,160,227, 35, 0, 0,234, 0, 48,148,229, /* 0x 7a0 */
0, 48,150,229, 3, 0, 83,227, 24, 0, 0, 26, 8, 48,150,229, /* 0x 7b0 */ 3, 0, 83,227, 30, 0, 0, 26, 8, 48,148,229, 8, 0,157,229, /* 0x 7b0 */
8, 0,157,229, 0, 16,160,227, 0, 0,131,224, 1, 32,160,225, /* 0x 7c0 */ 0, 16,160,227, 0, 0,131,224, 1, 32,160,225, 94,254,255,235, /* 0x 7c0 */
93,254,255,235, 0, 64, 80,226, 4, 0, 0,186, 9, 16,160,225, /* 0x 7d0 */ 0, 64, 80,226, 4, 0, 0,186, 10, 16,160,225, 2, 44,160,227, /* 0x 7d0 */
2, 44,160,227, 84,254,255,235, 2, 12, 80,227, 1, 0, 0, 10, /* 0x 7e0 */ 85,254,255,235, 2, 12, 80,227, 1, 0, 0, 10,127, 0,160,227, /* 0x 7e0 */
127, 0,160,227, 79,254,255,235, 0,192,160,227, 4, 0,160,225, /* 0x 7f0 */ 80,254,255,235, 0,224,160,227, 14, 32,160,225, 8,192,141,226, /* 0x 7f0 */
12, 32,160,225, 9, 16,160,225, 12, 48,160,225, 0,192,141,229, /* 0x 800 */ 10, 16,160,225, 9, 48,160,225, 4, 0,160,225, 0, 80,141,232, /* 0x 800 */
4,192,141,229,217,254,255,235, 0, 64,160,225, 3, 0, 0,234, /* 0x 810 */ 218,254,255,235, 7, 16,160,227, 0, 80,160,225, 8, 32,157,229, /* 0x 810 */
32, 96,134,226, 1, 32,130,226, 1, 0, 82,225,223,255,255,186, /* 0x 820 */ 9, 0,160,225, 91,254,255,235, 4, 0,160,225, 72,254,255,235, /* 0x 820 */
4, 0,160,225, 12,208,141,226,240,135,189,232 /* 0x 830 */ 3, 0, 0,234, 32, 64,132,226, 1, 32,130,226, 1, 0, 82,225, /* 0x 830 */
217,255,255,186, 5, 0,160,225, 12,208,141,226,240,135,189,232 /* 0x 840 */
}; };
+5 -5
View File
@@ -29,8 +29,8 @@
#define STUB_ARM_LINUX_KERNEL_VMLINUX_SIZE 17091 #define STUB_ARM_LINUX_KERNEL_VMLINUX_SIZE 17091
#define STUB_ARM_LINUX_KERNEL_VMLINUX_ADLER32 0x3d6cea16 #define STUB_ARM_LINUX_KERNEL_VMLINUX_ADLER32 0x2af6ea3d
#define STUB_ARM_LINUX_KERNEL_VMLINUX_CRC32 0xab8eacad #define STUB_ARM_LINUX_KERNEL_VMLINUX_CRC32 0x12d16cc6
unsigned char stub_arm_linux_kernel_vmlinux[17091] = { unsigned char stub_arm_linux_kernel_vmlinux[17091] = {
127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
@@ -570,7 +570,7 @@ unsigned char stub_arm_linux_kernel_vmlinux[17091] = {
10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x2160 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x2160 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x2170 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x2170 */
69, 10, 48, 48, 48, 48, 48, 48, 49, 52, 32, 82, 95, 65, 82, 77, /* 0x2180 */ 69, 10, 48, 48, 48, 48, 48, 48, 49, 52, 32, 82, 95, 65, 82, 77, /* 0x2180 */
95, 65, 66, 83, 56, 32, 32, 32, 32, 32, 32, 32, 32, 77, 69, 84, /* 0x2190 */ 95, 65, 66, 83, 51, 50, 32, 32, 32, 32, 32, 32, 32, 77, 69, 84, /* 0x2190 */
72, 79, 68, 10, 48, 48, 48, 48, 48, 48, 51, 48, 32, 82, 95, 65, /* 0x21a0 */ 72, 79, 68, 10, 48, 48, 48, 48, 48, 48, 51, 48, 32, 82, 95, 65, /* 0x21a0 */
82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, /* 0x21b0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, /* 0x21b0 */
73, 78, 85, 88, 48, 51, 48, 10, 48, 48, 48, 48, 48, 48, 51, 52, /* 0x21c0 */ 73, 78, 85, 88, 48, 51, 48, 10, 48, 48, 48, 48, 48, 48, 51, 52, /* 0x21c0 */
@@ -589,9 +589,9 @@ unsigned char stub_arm_linux_kernel_vmlinux[17091] = {
79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x2290 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x2290 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x22a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x22a0 */
10, 48, 48, 48, 48, 48, 48, 48, 56, 32, 82, 95, 65, 82, 77, 95, /* 0x22b0 */ 10, 48, 48, 48, 48, 48, 48, 48, 56, 32, 82, 95, 65, 82, 77, 95, /* 0x22b0 */
65, 66, 83, 56, 32, 32, 32, 32, 32, 32, 32, 32,102,105,108,116, /* 0x22c0 */ 65, 66, 83, 51, 50, 32, 32, 32, 32, 32, 32, 32,102,105,108,116, /* 0x22c0 */
101,114, 95, 99,116,111, 10, 48, 48, 48, 48, 48, 48, 48, 99, 32, /* 0x22d0 */ 101,114, 95, 99,116,111, 10, 48, 48, 48, 48, 48, 48, 48, 99, 32, /* 0x22d0 */
82, 95, 65, 82, 77, 95, 65, 66, 83, 56, 32, 32, 32, 32, 32, 32, /* 0x22e0 */ 82, 95, 65, 82, 77, 95, 65, 66, 83, 51, 50, 32, 32, 32, 32, 32, /* 0x22e0 */
32, 32,102,105,108,116,101,114, 95,105,100, 10, 48, 48, 48, 48, /* 0x22f0 */ 32, 32,102,105,108,116,101,114, 95,105,100, 10, 48, 48, 48, 48, /* 0x22f0 */
48, 48, 49, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, /* 0x2300 */ 48, 48, 49, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, /* 0x2300 */
32, 32, 32, 32, 32, 32, 32, 99,116,111,107, 51, 50, 46, 48, 48, /* 0x2310 */ 32, 32, 32, 32, 32, 32, 32, 99,116,111,107, 51, 50, 46, 48, 48, /* 0x2310 */
+3 -3
View File
@@ -29,8 +29,8 @@
#define STUB_ARMEB_LINUX_ELF_ENTRY_SIZE 16295 #define STUB_ARMEB_LINUX_ELF_ENTRY_SIZE 16295
#define STUB_ARMEB_LINUX_ELF_ENTRY_ADLER32 0x87435b9a #define STUB_ARMEB_LINUX_ELF_ENTRY_ADLER32 0xcad35b5a
#define STUB_ARMEB_LINUX_ELF_ENTRY_CRC32 0x7cf93476 #define STUB_ARMEB_LINUX_ELF_ENTRY_CRC32 0xc07dcf2e
unsigned char stub_armeb_linux_elf_entry[16295] = { unsigned char stub_armeb_linux_elf_entry[16295] = {
127, 69, 76, 70, 1, 2, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 2, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
@@ -44,7 +44,7 @@ unsigned char stub_armeb_linux_elf_entry[16295] = {
232,160, 1,254, 58, 0, 0, 15,224, 64, 64, 9,226,143, 80, 80, /* 0x 80 */ 232,160, 1,254, 58, 0, 0, 15,224, 64, 64, 9,226,143, 80, 80, /* 0x 80 */
225,160,224, 0,224,133, 80, 4,225,160, 0, 5,224,137, 16, 4, /* 0x 90 */ 225,160,224, 0,224,133, 80, 4,225,160, 0, 5,224,137, 16, 4, /* 0x 90 */
227,160, 32, 0,239,159, 0, 2,229,156,144, 0,226, 73,144,140, /* 0x a0 */ 227,160, 32, 0,239,159, 0, 2,229,156,144, 0,226, 73,144,140, /* 0x a0 */
224, 76,160, 9,224,138,160, 4,229,219, 0, 8,233, 45, 64, 1, /* 0x b0 */ 224, 76,160, 9,224,138,160, 4,229,155, 0, 8,233, 45, 64, 1, /* 0x b0 */
229,155, 48, 0,226,139, 0, 12,229,155, 16, 4,225,160, 32, 14, /* 0x c0 */ 229,155, 48, 0,226,139, 0, 12,229,155, 16, 4,225,160, 32, 14, /* 0x c0 */
229,141, 48, 8,226,141, 48, 8,225,160,224, 15,225,160,240, 5, /* 0x d0 */ 229,141, 48, 8,226,141, 48, 8,225,160,224, 15,225,160,240, 5, /* 0x d0 */
232,189,128, 2,233, 45, 64,252,224,129,112, 0,227,224, 80, 0, /* 0x e0 */ 232,189,128, 2,233, 45, 64,252,224,129,112, 0,227,224, 80, 0, /* 0x e0 */
+80 -79
View File
@@ -1,5 +1,5 @@
/* armeb-linux.elf-fold.h /* armeb-linux.elf-fold.h
created from armeb-linux.elf-fold.bin, 2108 (0x83c) bytes created from armeb-linux.elf-fold.bin, 2128 (0x850) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,17 +28,17 @@
*/ */
#define STUB_ARMEB_LINUX_ELF_FOLD_SIZE 2108 #define STUB_ARMEB_LINUX_ELF_FOLD_SIZE 2128
#define STUB_ARMEB_LINUX_ELF_FOLD_ADLER32 0x65a66090 #define STUB_ARMEB_LINUX_ELF_FOLD_ADLER32 0x14dc5f7e
#define STUB_ARMEB_LINUX_ELF_FOLD_CRC32 0xdee2e92e #define STUB_ARMEB_LINUX_ELF_FOLD_CRC32 0xf7b8b4af
unsigned char stub_armeb_linux_elf_fold[2108] = { unsigned char stub_armeb_linux_elf_fold[2128] = {
127, 69, 76, 70, 1, 2, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 2, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
0, 2, 0, 40, 0, 0, 0, 1, 0, 0,128,128, 0, 0, 0, 52, /* 0x 10 */ 0, 2, 0, 40, 0, 0, 0, 1, 0, 0,128,128, 0, 0, 0, 52, /* 0x 10 */
0, 0, 0, 0, 0, 0, 0, 2, 0, 52, 0, 32, 0, 2, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 0, 0, 0, 2, 0, 52, 0, 32, 0, 2, 0, 0, /* 0x 20 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,128, 0, /* 0x 30 */ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,128, 0, /* 0x 30 */
0, 0,128, 0, 0, 0, 8, 60, 0, 0, 8, 60, 0, 0, 0, 5, /* 0x 40 */ 0, 0,128, 0, 0, 0, 8, 80, 0, 0, 8, 80, 0, 0, 0, 5, /* 0x 40 */
0, 0,128, 0, 0, 0, 0, 1, 0, 0, 8, 60, 0, 0, 0, 0, /* 0x 50 */ 0, 0,128, 0, 0, 0, 0, 1, 0, 0, 8, 80, 0, 0, 0, 0, /* 0x 50 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
229,157, 48, 12,224,141, 49, 3,226,131, 48, 20,228,147, 0, 4, /* 0x 80 */ 229,157, 48, 12,224,141, 49, 3,226,131, 48, 20,228,147, 0, 4, /* 0x 80 */
@@ -46,7 +46,7 @@ unsigned char stub_armeb_linux_elf_fold[2108] = {
227, 80, 0, 0, 26,255,255,252,229,141, 32, 8,226, 77,220, 10, /* 0x a0 */ 227, 80, 0, 0, 26,255,255,252,229,141, 32, 8,226, 77,220, 10, /* 0x a0 */
225,160, 64, 9,229,154,144, 4,225,160,128, 13,229,154,112, 0, /* 0x b0 */ 225,160, 64, 9,229,154,144, 4,225,160,128, 13,229,154,112, 0, /* 0x b0 */
226,143, 96, 36,226,137,144, 12,227,160,176, 0,233, 45, 15,248, /* 0x c0 */ 226,143, 96, 36,226,137,144, 12,227,160,176, 0,233, 45, 15,248, /* 0x c0 */
232,189, 0, 15,235, 0, 1,132,225,160,224, 0,226,141,208, 20, /* 0x d0 */ 232,189, 0, 15,235, 0, 1,131,225,160,224, 0,226,141,208, 20, /* 0x d0 */
226,141,220, 10,232,189, 0, 7,229, 18,240, 4,226, 3, 48,255, /* 0x e0 */ 226,141,220, 10,232,189, 0, 7,229, 18,240, 4,226, 3, 48,255, /* 0x e0 */
227, 83, 0, 81, 17,160,240, 14,225,176, 17, 33, 19, 80, 0, 0, /* 0x f0 */ 227, 83, 0, 81, 17,160,240, 14,225,176, 17, 33, 19, 80, 0, 0, /* 0x f0 */
1,160,240, 14,226, 65, 16, 1,231,144, 33, 1,226, 2, 52, 15, /* 0x 100 */ 1,160,240, 14,226, 65, 16, 1,231,144, 33, 1,226, 2, 52, 15, /* 0x 100 */
@@ -91,78 +91,79 @@ unsigned char stub_armeb_linux_elf_fold[2108] = {
26,255,255,183,226,141,208, 20,232,189,128,240, 33, 88, 80, 85, /* 0x 370 */ 26,255,255,183,226,141,208, 20,232,189,128,240, 33, 88, 80, 85, /* 0x 370 */
233, 45, 79,240,225,160,160, 1,225,218,193,176,229,145, 16, 28, /* 0x 380 */ 233, 45, 79,240,225,160,160, 1,225,218,193,176,229,145, 16, 28, /* 0x 380 */
225,218,226,188,226, 77,208, 48,227, 92, 0, 2,224,138, 96, 1, /* 0x 390 */ 225,218,226,188,226, 77,208, 48,227, 92, 0, 2,224,138, 96, 1, /* 0x 390 */
229,141, 0, 16, 3,160,192, 16, 19,160,192, 0,226, 78,224, 1, /* 0x 3a0 */ 229,141, 0, 16, 3,160,192, 50, 19,160,192, 34,226, 78,224, 1, /* 0x 3a0 */
225,160, 16, 6,227,224, 64, 0,227,160, 0, 0,229,141, 32, 12, /* 0x 3b0 */ 225,160, 16, 6,227,224, 0, 0,227,160, 80, 0,229,141, 32, 12, /* 0x 3b0 */
229,141, 48, 8,234, 0, 0, 11,229,145, 48, 0,227, 83, 0, 1, /* 0x 3c0 */ 229,141, 48, 8,234, 0, 0, 11,229,145, 48, 0,227, 83, 0, 1, /* 0x 3c0 */
26, 0, 0, 6,229,145, 32, 8,229,145, 48, 20,224,130, 48, 3, /* 0x 3d0 */ 26, 0, 0, 6,229,145, 32, 8,229,145, 48, 20,224,130, 48, 3, /* 0x 3d0 */
225, 80, 0, 3, 49,160, 0, 3,225, 84, 0, 2, 33,160, 64, 2, /* 0x 3e0 */ 225, 85, 0, 3, 49,160, 80, 3,225, 80, 0, 2, 33,160, 0, 2, /* 0x 3e0 */
226,129, 16, 32,226, 78,224, 1,227, 94, 0, 0,170,255,255,241, /* 0x 3f0 */ 226,129, 16, 32,226, 78,224, 1,227, 94, 0, 0,170,255,255,241, /* 0x 3f0 */
227,196, 78,255,227,196, 64, 15,224,100, 48, 0,226,131, 62,255, /* 0x 400 */ 227,192, 78,255,227,196, 64, 15,224,100, 48, 5,226,131, 62,255, /* 0x 400 */
226,131, 48, 15,227,195, 62,255,227,195, 48, 15,229,141, 48, 36, /* 0x 410 */ 226,131, 48, 15,227,195, 62,255,226, 28,224, 16,227,195, 48, 15, /* 0x 410 */
227,160, 80, 0,226,140, 48, 34,225,160, 0, 4,227,224,192, 0, /* 0x 420 */ 229,141, 48, 36, 21,141, 64, 28, 26, 0, 0, 7,225,160, 48, 12, /* 0x 420 */
229,157, 16, 36,225,160, 32, 5,229,141,192, 0,229,141, 80, 4, /* 0x 430 */ 225,160, 32, 14,227,224,192, 0,225,160, 0, 4,229,157, 16, 36, /* 0x 430 */
235,255,255, 75,227,160, 48, 52,224,100,176, 0,224, 3, 3,155, /* 0x 440 */ 232,141, 80, 0,235,255,255, 74,229,141, 0, 28,229,157, 16, 28, /* 0x 440 */
229,141, 0, 28,229,141, 48, 32,229,141, 80, 24,234, 0, 0,127, /* 0x 450 */ 227,160, 48, 52,224,100,176, 1,224, 3, 3,155,227,160, 32, 0, /* 0x 450 */
229,150, 48, 0,227, 83, 0, 6, 26, 0, 0, 5,229,150, 32, 8, /* 0x 460 */ 226,134, 80, 32,229,141, 48, 32,229,141, 32, 24,234, 0, 0,127, /* 0x 460 */
229,157, 0, 8,224,139, 32, 2,227,160, 16, 3,235,255,255, 69, /* 0x 470 */ 229,157, 48, 12,227, 83, 0, 0, 10, 0, 0, 8,229, 21, 48, 32, /* 0x 470 */
234, 0, 0,114,227, 83, 0, 1, 26, 0, 0,112,229,150, 48, 24, /* 0x 480 */ 227, 83, 0, 6, 26, 0, 0, 5,229, 21, 32, 24,229,157, 0, 8, /* 0x 480 */
229,159, 34, 72,226, 3, 48, 7,225,160, 49, 3,225,160, 35, 50, /* 0x 490 */ 224,139, 32, 2,227,160, 16, 3,235,255,255, 62,234, 0, 0,111, /* 0x 490 */
229,150, 48, 8,229,157, 16, 12,224,139,144, 3,225,160, 10, 9, /* 0x 4a0 */ 229, 21, 48, 32,227, 83, 0, 1, 26, 0, 0,108,229, 21, 48, 8, /* 0x 4a0 */
229,150, 48, 16,227, 81, 0, 0,225,160, 10, 32,229,150,192, 4, /* 0x 4b0 */ 229,159, 34, 36,226, 3, 48, 7,225,160, 49, 3,225,160, 35, 50, /* 0x 4b0 */
226, 2, 80, 7,229,150, 32, 20,224,131,128, 0, 5,157,224, 16, /* 0x 4c0 */ 229, 21, 48, 24,224,139,144, 3,229,157, 48, 12,229, 21,224, 16, /* 0x 4c0 */
224, 96,112, 9,229,141, 48, 40,229,141, 32, 20, 19,224,224, 0, /* 0x 4d0 */ 225,160, 26, 9,227, 83, 0, 0,225,160, 26, 33,229, 21,192, 28, /* 0x 4d0 */
224, 96,192, 12, 1,160, 32, 5, 3,160, 48, 18, 19,133, 32, 2, /* 0x 4e0 */ 226, 2, 96, 7,229, 21, 32, 12,224, 97,128, 9, 5,157, 64, 16, /* 0x 4e0 */
19,160, 48, 50,225,160, 0, 7,225,160, 16, 8,229,141,144, 44, /* 0x 4f0 */ 224,142,112, 1,229,141, 32, 20, 19,224, 64, 0,224, 97,192, 12, /* 0x 4f0 */
229,141,224, 0,229,141,192, 4,235,255,255, 25,225, 87, 0, 0, /* 0x 500 */ 1,160, 32, 6, 3,160, 48, 18, 19,134, 32, 2, 19,160, 48, 50, /* 0x 500 */
26, 0, 0, 59,229,157, 48, 12,227, 83, 0, 0, 10, 0, 0, 6, /* 0x 510 */ 225,160, 0, 8,225,160, 16, 7,229,141,224, 40,232,141, 16, 16, /* 0x 510 */
229,157, 16, 88,226, 21, 48, 4, 17,160, 48, 1,229,157, 0, 12, /* 0x 520 */ 229,141,144, 44,235,255,255, 18,225, 88, 0, 0, 26, 0, 0, 56, /* 0x 520 */
226,141, 16, 40,229,157, 32, 16,235,255,255, 62,226,104, 48, 0, /* 0x 530 */ 229,157, 48, 12,227, 83, 0, 0, 10, 0, 0, 6,229,157, 16, 88, /* 0x 530 */
225,160, 74, 3,227, 21, 0, 2,225,160, 74, 36, 10, 0, 0, 7, /* 0x 540 */ 226, 22, 48, 4, 17,160, 48, 1,229,157, 0, 12,226,141, 16, 40, /* 0x 540 */
227, 84, 0, 0, 10, 0, 0, 5,224,135, 16, 8,225,160, 32, 4, /* 0x 550 */ 229,157, 32, 16,235,255,255, 55,226,103, 48, 0,225,160, 74, 3, /* 0x 550 */
227,160, 48, 0,226, 82, 32, 1,228,193, 48, 1, 26,255,255,251, /* 0x 560 */ 227, 22, 0, 2,225,160, 74, 36, 10, 0, 0, 7,227, 84, 0, 0, /* 0x 560 */
229,157, 32, 12,227, 82, 0, 0, 10, 0, 0, 35,229,150, 48, 0, /* 0x 570 */ 10, 0, 0, 5,224,136, 16, 7,225,160, 32, 4,227,160, 48, 0, /* 0x 570 */
227, 83, 0, 1, 26, 0, 0, 24,229,150, 48, 24,227, 19, 0, 1, /* 0x 580 */ 226, 82, 32, 1,228,193, 48, 1, 26,255,255,251,229,157, 32, 12, /* 0x 580 */
10, 0, 0, 21,229,150, 32, 20,229,150, 48, 16,225, 82, 0, 3, /* 0x 590 */ 227, 82, 0, 0, 10, 0, 0, 32,229, 21, 48, 32,227, 83, 0, 1, /* 0x 590 */
229,150, 16, 8, 26, 0, 0, 70,224,130, 48, 1,224,131, 32, 11, /* 0x 5a0 */ 26, 0, 0, 21,229, 21, 48, 8,227, 19, 0, 1, 10, 0, 0, 18, /* 0x 5a0 */
226, 98, 48, 0,225,160, 58, 3,225,160, 58, 35,227, 83, 0, 7, /* 0x 5b0 */ 229, 21, 32, 12,229, 21, 48, 16,225, 82, 0, 3,229, 21, 16, 24, /* 0x 5b0 */
154, 0, 0, 63,229,159, 49, 24,229,130, 48, 0,229,159, 49, 20, /* 0x 5c0 */ 26, 0, 0, 62,224,130, 48, 1,224,131, 32, 11,226, 98, 48, 0, /* 0x 5c0 */
229,130, 48, 4,234, 0, 0, 1,227, 82, 0, 0, 10, 0, 0, 2, /* 0x 5d0 */ 225,160, 58, 3,225,160, 58, 35,227, 83, 0, 7,154, 0, 0, 55, /* 0x 5d0 */
229,157, 0, 8,227,160, 16, 0,235,255,254,234,225,160, 0, 7, /* 0x 5e0 */ 229,159, 48,248,229,130, 48, 0,229,159, 48,244,229,157, 0, 8, /* 0x 5e0 */
225,160, 16, 8,225,160, 32, 5,235,255,254,219,227, 80, 0, 0, /* 0x 5f0 */ 229,130, 48, 4,227,160, 16, 0,235,255,254,230,225,160, 0, 8, /* 0x 5f0 */
10, 0, 0, 1,227,160, 0,127,235,255,254,202,229,157, 32, 20, /* 0x 600 */ 225,160, 16, 7,225,160, 32, 6,235,255,254,215,227, 80, 0, 0, /* 0x 600 */
224,136, 48, 4,224,137, 16, 2,224,135, 64, 3,225, 84, 0, 1, /* 0x 610 */ 10, 0, 0, 1,227,160, 0,127,235,255,254,198,229,157, 32, 20, /* 0x 610 */
42, 0, 0, 10,227,224,192, 0,229,141,192, 0,224,100, 16, 1, /* 0x 620 */ 224,135, 48, 4,224,137, 16, 2,224,136, 64, 3,225, 84, 0, 1, /* 0x 620 */
226,140,192, 1,225,160, 32, 5,225,160, 0, 4,227,160, 48, 50, /* 0x 630 */ 42, 0, 0, 10,227,224,192, 0,229,141,192, 0,224,100, 16, 1, /* 0x 630 */
229,141,192, 4,235,255,254,202,225, 84, 0, 0, 26,255,255,236, /* 0x 640 */ 226,140,192, 1,225,160, 32, 6,225,160, 0, 4,227,160, 48, 50, /* 0x 640 */
229,157, 48, 24,226,131, 48, 1,229,141, 48, 24,226,134, 96, 32, /* 0x 650 */ 229,141,192, 4,235,255,254,198,225, 84, 0, 0, 26,255,255,236, /* 0x 650 */
225,218, 50,188,229,157, 16, 24,225, 81, 0, 3,186,255,255,123, /* 0x 660 */ 229,157, 48, 24,226,131, 48, 1,229,141, 48, 24,226,133, 80, 32, /* 0x 660 */
229,157, 32, 12,227, 82, 0, 0, 26, 0, 0, 4,229,157, 0, 16, /* 0x 670 */ 225,218, 50,188,229,157, 16, 24,225, 81, 0, 3,186,255,255,123, /* 0x 670 */
235,255,254,179,227, 80, 0, 0, 26,255,255,221,234, 0, 0, 5, /* 0x 680 */ 229,157, 32, 12,227, 82, 0, 0, 10, 0, 0, 5,225,218, 49,176, /* 0x 680 */
225,218, 49,176,227, 83, 0, 3, 21,157, 48, 28, 21,157, 16, 36, /* 0x 690 */ 227, 83, 0, 3, 21,157, 48, 28, 21,157, 16, 36, 16,131, 0, 1, /* 0x 690 */
16,131, 0, 1, 27,255,254,172,229,157, 32, 84,227, 82, 0, 0, /* 0x 6a0 */ 27,255,254,173,229,157, 32, 84,227, 82, 0, 0, 21,130,176, 0, /* 0x 6a0 */
21,130,176, 0,229,154, 0, 24,224,139, 0, 0,226,141,208, 48, /* 0x 6b0 */ 229,154, 0, 24,224,139, 0, 0,226,141,208, 48,232,189,143,240, /* 0x 6b0 */
232,189,143,240,229,150, 48, 4,229,157, 32, 32,227, 83, 0, 0, /* 0x 6c0 */ 229, 21, 48, 28,227, 83, 0, 0, 5,157, 32, 32, 0,129, 48, 2, /* 0x 6c0 */
224,129, 48, 2,226,131, 32, 8, 10,255,255,185,234,255,255,189, /* 0x 6d0 */ 2,131, 32, 8, 10,255,255,193,234,255,255,199,115, 81, 98, 64, /* 0x 6d0 */
115, 81, 98, 64,239,144, 0, 91,225,160,240, 14,233, 45, 71,240, /* 0x 6e0 */ 239,144, 0, 91,225,160,240, 14,233, 45, 71,240,226, 77,208, 12, /* 0x 6e0 */
226, 77,208, 12,226,141,112, 52,225,160, 80, 0,225,160, 96, 1, /* 0x 6f0 */ 226,141, 96, 52,225,160,144, 0,225,160, 80, 1,225,160,128, 3, /* 0x 6f0 */
225,160,160, 3,225,160, 0, 7,227,160, 48, 0,226,141, 16, 44, /* 0x 700 */ 225,160, 0, 6,227,160, 48, 0,226,141, 16, 44,229,157,160, 48, /* 0x 700 */
229,157,144, 48,225,160,128, 2,229,157, 64, 52,235,255,254,197, /* 0x 710 */ 225,160,112, 2,229,157, 64, 52,235,255,254,198,229,157, 48, 56, /* 0x 710 */
229,157, 48, 56,227,160, 16, 5,224,100, 48, 3,225,217, 34,188, /* 0x 720 */ 227,160, 16, 5,224,100, 48, 3,225,218, 34,188,225,160, 0, 9, /* 0x 720 */
225,160, 0, 5,229,141, 48, 56,229,141, 96, 52,235,255,254,149, /* 0x 730 */ 229,141, 48, 56,229,141, 80, 52,235,255,254,150,225,160, 0, 9, /* 0x 730 */
225,160, 0, 5,227,160, 16, 4,225,217, 34,186,235,255,254,145, /* 0x 740 */ 227,160, 16, 4,225,218, 34,186,235,255,254,146,226,138, 64, 52, /* 0x 740 */
226,137, 96, 52,229,157, 32, 60,229,150, 48, 8,226,130, 32, 52, /* 0x 750 */ 229,157, 32, 60,229,148, 48, 8,226,130, 32, 52,224,130, 32, 3, /* 0x 750 */
224,130, 32, 3,225,160, 0, 5,227,160, 16, 3,235,255,254,137, /* 0x 760 */ 225,160, 0, 9,227,160, 16, 3,235,255,254,138,226,141,192, 8, /* 0x 760 */
226,141,192, 8,225,160, 32, 7,225,160, 16, 9,225,160, 48, 5, /* 0x 770 */ 225,160, 32, 6,225,160, 16, 10,225,160, 48, 9,225,160, 0, 7, /* 0x 770 */
225,160, 0, 8,229,141,192, 0,229,141,160, 4,235,255,254,251, /* 0x 780 */ 229,141,192, 0,229,141,128, 4,235,255,254,252,225,160, 80, 0, /* 0x 780 */
225,160, 64, 0,227,160, 16, 9,225,160, 32, 4,225,160, 0, 5, /* 0x 790 */ 227,160, 16, 9,225,160, 32, 5,225,160, 0, 9,235,255,254,125, /* 0x 790 */
235,255,254,124,225,217, 18,188,227,160, 32, 0,234, 0, 0, 29, /* 0x 7a0 */ 225,218, 18,188,227,160, 32, 0,234, 0, 0, 35,229,148, 48, 0, /* 0x 7a0 */
229,150, 48, 0,227, 83, 0, 3, 26, 0, 0, 24,229,150, 48, 8, /* 0x 7b0 */ 227, 83, 0, 3, 26, 0, 0, 30,229,148, 48, 8,229,157, 0, 8, /* 0x 7b0 */
229,157, 0, 8,227,160, 16, 0,224,131, 0, 0,225,160, 32, 1, /* 0x 7c0 */ 227,160, 16, 0,224,131, 0, 0,225,160, 32, 1,235,255,254, 94, /* 0x 7c0 */
235,255,254, 93,226, 80, 64, 0,186, 0, 0, 4,225,160, 16, 9, /* 0x 7d0 */ 226, 80, 64, 0,186, 0, 0, 4,225,160, 16, 10,227,160, 44, 2, /* 0x 7d0 */
227,160, 44, 2,235,255,254, 84,227, 80, 12, 2, 10, 0, 0, 1, /* 0x 7e0 */ 235,255,254, 85,227, 80, 12, 2, 10, 0, 0, 1,227,160, 0,127, /* 0x 7e0 */
227,160, 0,127,235,255,254, 79,227,160,192, 0,225,160, 0, 4, /* 0x 7f0 */ 235,255,254, 80,227,160,224, 0,225,160, 32, 14,226,141,192, 8, /* 0x 7f0 */
225,160, 32, 12,225,160, 16, 9,225,160, 48, 12,229,141,192, 0, /* 0x 800 */ 225,160, 16, 10,225,160, 48, 9,225,160, 0, 4,232,141, 80, 0, /* 0x 800 */
229,141,192, 4,235,255,254,217,225,160, 64, 0,234, 0, 0, 3, /* 0x 810 */ 235,255,254,218,227,160, 16, 7,225,160, 80, 0,229,157, 32, 8, /* 0x 810 */
226,134, 96, 32,226,130, 32, 1,225, 82, 0, 1,186,255,255,223, /* 0x 820 */ 225,160, 0, 9,235,255,254, 91,225,160, 0, 4,235,255,254, 72, /* 0x 820 */
225,160, 0, 4,226,141,208, 12,232,189,135,240 /* 0x 830 */ 234, 0, 0, 3,226,132, 64, 32,226,130, 32, 1,225, 82, 0, 1, /* 0x 830 */
186,255,255,217,225,160, 0, 5,226,141,208, 12,232,189,135,240 /* 0x 840 */
}; };
@@ -0,0 +1,37 @@
/* armeb-linux.kernel.vmlinux-head.h
created from armeb-linux.kernel.vmlinux-head.bin, 8 (0x8) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_ARMEB_LINUX_KERNEL_VMLINUX_HEAD_SIZE 8
#define STUB_ARMEB_LINUX_KERNEL_VMLINUX_HEAD_ADLER32 0x19db0637
#define STUB_ARMEB_LINUX_KERNEL_VMLINUX_HEAD_CRC32 0xb5ec5990
unsigned char stub_armeb_linux_kernel_vmlinux_head[8] = {
225,160,192, 14,235,255,255,254 /* 0x 0 */
};
File diff suppressed because it is too large Load Diff
+1915 -817
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -29,15 +29,15 @@
#define STUB_I386_BSD_ELF_ENTRY_SIZE 37562 #define STUB_I386_BSD_ELF_ENTRY_SIZE 37562
#define STUB_I386_BSD_ELF_ENTRY_ADLER32 0xb6d5917d #define STUB_I386_BSD_ELF_ENTRY_ADLER32 0x0c31915d
#define STUB_I386_BSD_ELF_ENTRY_CRC32 0x57a02d3a #define STUB_I386_BSD_ELF_ENTRY_CRC32 0x68fd1b14
unsigned char stub_i386_bsd_elf_entry[37562] = { unsigned char stub_i386_bsd_elf_entry[37562] = {
127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */ 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
116, 34, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, /* 0x 20 */ 116, 34, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, /* 0x 20 */
243, 0,240, 0,232,123, 0, 0, 0, 96,139,116, 36, 40,139,124, /* 0x 30 */ 243, 0,240, 0,232,123, 0, 0, 0, 96,139,116, 36, 36,139,124, /* 0x 30 */
36, 48,131,205,255,235, 3,164,235, 3,138, 6, 70,136, 7, 71, /* 0x 40 */ 36, 44,131,205,255,235, 3,164,235, 3,138, 6, 70,136, 7, 71, /* 0x 40 */
1,219,117, 7,139, 30,131,238,252, 17,219,114, 1, 49,192, 64, /* 0x 50 */ 1,219,117, 7,139, 30,131,238,252, 17,219,114, 1, 49,192, 64, /* 0x 50 */
138, 7,114,255,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131, /* 0x 60 */ 138, 7,114,255,184, 1, 0, 0, 0, 1,219,117, 7,139, 30,131, /* 0x 60 */
238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 70 */ 238,252, 17,219, 17,192, 1,219,117, 7,139, 30,131,238,252, 17, /* 0x 70 */
@@ -88,10 +88,10 @@ unsigned char stub_i386_bsd_elf_entry[37562] = {
4,119,241, 1,207,233,252,255,255,255,137,229,141,156, 36, 0, /* 0x 340 */ 4,119,241, 1,207,233,252,255,255,255,137,229,141,156, 36, 0, /* 0x 340 */
0, 0, 0, 49,192, 80, 57,220,117,251, 70, 70, 83,104, 0, 0, /* 0x 350 */ 0, 0, 0, 49,192, 80, 57,220,117,251, 70, 70, 83,104, 0, 0, /* 0x 350 */
0, 0, 87,131,195, 4, 83,104, 0, 0, 0, 0, 86,131,195, 4, /* 0x 360 */ 0, 0, 87,131,195, 4, 83,104, 0, 0, 0, 0, 86,131,195, 4, /* 0x 360 */
83, 80,199, 3, 0, 0, 0, 0,137,229,139, 85, 44,172, 74,136, /* 0x 370 */ 83, 80,199, 3, 0, 0, 0, 0,137,229,139, 85, 40,172, 74,136, /* 0x 370 */
193, 36, 7,192,233, 3,187, 0,253,255,255,211,227,141,164, 92, /* 0x 380 */ 193, 36, 7,192,233, 3,187, 0,253,255,255,211,227,141,164, 92, /* 0x 380 */
144,241,255,255,131,228,224,106, 0,106, 0,137,227, 83,131,195, /* 0x 390 */ 144,241,255,255,131,228,224,106, 0,106, 0,137,227, 83,131,195, /* 0x 390 */
4,139, 77, 52,255, 49, 87, 83,131,195, 4,136, 67, 2,172, 74, /* 0x 3a0 */ 4,139, 77, 48,255, 49, 87, 83,131,195, 4,136, 67, 2,172, 74, /* 0x 3a0 */
136,193, 36, 15,136, 3,192,233, 4,136, 75, 1, 82, 86, 83, 80, /* 0x 3b0 */ 136,193, 36, 15,136, 3,192,233, 4,136, 75, 1, 82, 86, 83, 80, /* 0x 3b0 */
85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68, /* 0x 3c0 */ 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68, /* 0x 3c0 */
36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0, /* 0x 3d0 */ 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0, /* 0x 3d0 */
@@ -431,8 +431,8 @@ unsigned char stub_i386_bsd_elf_entry[37562] = {
148, 36,156, 0, 0, 0,139, 76, 36,116,137, 26,139,156, 36,168, /* 0x18b0 */ 148, 36,156, 0, 0, 0,139, 76, 36,116,137, 26,139,156, 36,168, /* 0x18b0 */
0, 0, 0,137, 11,131,196,124, 91, 94, 95, 93, 3,115,252, 3, /* 0x18c0 */ 0, 0, 0,137, 11,131,196,124, 91, 94, 95, 93, 3,115,252, 3, /* 0x18c0 */
123,248, 49,192,141,140, 36, 0,255,255,255,137,236, 80, 57,204, /* 0x18d0 */ 123,248, 49,192,141,140, 36, 0,255,255,255,137,236, 80, 57,204, /* 0x18d0 */
117,251,137,236, 49,201,139, 84, 36, 40, 3, 84, 36, 44, 57,214, /* 0x18e0 */ 117,251,137,236, 49,201,139, 84, 36, 36, 3, 84, 36, 40, 57,214, /* 0x18e0 */
116, 1, 72, 43,124, 36, 48,139, 84, 36, 52,137, 58,137, 68, 36, /* 0x18f0 */ 116, 1, 72, 43,124, 36, 44,139, 84, 36, 48,137, 58,137, 68, 36, /* 0x18f0 */
28, 97,195,235, 4, 90, 88, 89,151, 96, 49,219,187, 0, 0, 0, /* 0x1900 */ 28, 97,195,235, 4, 90, 88, 89,151, 96, 49,219,187, 0, 0, 0, /* 0x1900 */
0,106, 15, 88,138,100, 36, 32,106, 15, 91,138,124, 36, 32,138, /* 0x1910 */ 0,106, 15, 88,138,100, 36, 32,106, 15, 91,138,124, 36, 32,138, /* 0x1910 */
84, 36, 32,233,252,255,255,255, 15,183, 47, 43,110, 12, 41,221, /* 0x1920 */ 84, 36, 32,233,252,255,255,255, 15,183, 47, 43,110, 12, 41,221, /* 0x1920 */
File diff suppressed because it is too large Load Diff
+106
View File
@@ -0,0 +1,106 @@
/* i386-darwin.macho-fold.h
created from i386-darwin.macho-fold.bin, 1105 (0x451) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_I386_DARWIN_MACHO_FOLD_SIZE 1105
#define STUB_I386_DARWIN_MACHO_FOLD_ADLER32 0x5ad106a1
#define STUB_I386_DARWIN_MACHO_FOLD_CRC32 0x01a4878b
unsigned char stub_i386_darwin_macho_fold[1105] = {
106, 0,137,231,141,117, 2,139, 19,137,217, 41,209,139, 89, 24, /* 0x 0 */
184, 0, 8, 0, 0, 57,216,118, 2,137,195, 41,220, 96,232, 6, /* 0x 10 */
3, 0, 0,139, 76, 36, 16,141,100, 12, 32,255, 96, 40,139, 68, /* 0x 20 */
36, 4,139, 76, 36, 8,139, 16, 15,202,137, 16,131,233, 4,141, /* 0x 30 */
64, 4,115,242,195, 90, 15, 52,176, 1,235, 2,176, 74,235, 2, /* 0x 40 */
176, 73,235, 2,176,153,235, 2,176, 6,235, 2,176, 5,235, 2, /* 0x 50 */
176,197,235, 2,176, 3, 15,182,192,137,225,232,213,255,255,255, /* 0x 60 */
115, 3,131,200,255,195,144,144, 85,137,229, 87, 86,139,125, 8, /* 0x 70 */
83,137,195, 57, 56,139,112, 4,115, 7,106,127,232,183,255,255, /* 0x 80 */
255,133,255,116, 10,137,249,138, 6, 70,136, 2, 66,226,248, 1, /* 0x 90 */
123, 4, 41, 59,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, /* 0x a0 */
86,137,198, 83,137,211,131,236, 24,139, 69, 8,139,125, 12,137, /* 0x b0 */
69,220,131, 58, 0, 15,132,172, 0, 0, 0,141, 85,228,137,240, /* 0x c0 */
106, 12,232,161,255,255,255,139, 69,228, 90,133,192,139, 77,232, /* 0x d0 */
117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, 15,132,132, /* 0x e0 */
0, 0, 0,235, 4,133,201,117, 7,106,127,232, 72,255,255,255, /* 0x f0 */
57,193,119,245, 59, 3,119,241, 57,193,115, 76,137, 69,224, 15, /* 0x 100 */
182, 69,236, 80,141, 69,224, 80,255,115, 4, 81,255,118, 4,255, /* 0x 110 */
85,220,131,196, 20,133,192,117,208,139, 85,224, 59, 85,228,117, /* 0x 120 */
200,138, 69,237,132,192,116, 22,133,255,116, 18, 15,182,192, 80, /* 0x 130 */
15,182, 69,238, 80, 82,255,115, 4,255,215,131,196, 16,139, 69, /* 0x 140 */
232, 1, 70, 4, 41, 6,235, 12,139, 83, 4, 81,137,240,232, 21, /* 0x 150 */
255,255,255, 88,139, 85,228,139, 3, 1, 83, 4, 41,208,133,192, /* 0x 160 */
137, 3,233, 78,255,255,255,141,101,244, 91, 94, 95,201,195, 85, /* 0x 170 */
137,229, 87, 86, 83,131,236, 48,137, 69,232,139, 69, 8,137, 85, /* 0x 180 */
228,139, 85, 12,199, 69,208, 0, 0, 0, 0,137, 69,224,139, 69, /* 0x 190 */
20,137, 85,220,139, 85, 24,137, 69,216,139, 93,232,139, 69,232, /* 0x 1a0 */
137, 85,212, 49,210,131,195, 28,199, 69,204, 0, 0, 0, 0, 59, /* 0x 1b0 */
80, 16, 15,131, 86, 1, 0, 0,139, 3,131,248, 1, 15,133, 29, /* 0x 1c0 */
1, 0, 0,139, 83, 24,139, 67, 28,139, 75, 36,137,214, 1,208, /* 0x 1d0 */
137, 85,240,137, 69,200,137,208, 37,255, 15, 0, 0,137,207, 41, /* 0x 1e0 */
198, 1,199,137, 77,236,116, 69,139, 69,228, 49,210, 3, 67, 32, /* 0x 1f0 */
82,133,201, 80,139, 69,220,117, 3,131,200,255,131,125,224, 0, /* 0x 200 */
80,117, 9,133,201,184, 18, 0, 0, 0,117, 5,184, 18, 16, 0, /* 0x 210 */
0,131,125,224, 0, 80,106, 3,137,248,116, 3,141, 71, 3, 80, /* 0x 220 */
86,232, 42,254,255,255,131,196, 28, 57,198,117, 94,131,125,224, /* 0x 230 */
0,116, 42,131,123, 36, 0,116, 36,131,123, 32, 0,117, 11,131, /* 0x 240 */
125, 16, 0,116, 5,139, 85, 16,137, 50,255,117,212,255,117,216, /* 0x 250 */
141, 85,236,139, 69,224,232, 65,254,255,255, 88, 90,137,248,141, /* 0x 260 */
20, 62,247,216, 37,255, 15, 0, 0,137, 69,196,116, 8,137,193, /* 0x 270 */
198, 2, 0, 66,226,250,133,255,116, 24,255,115, 44, 87, 86,232, /* 0x 280 */
184,253,255,255,131,196, 12,133,192,116, 7,106,127,232,166,253, /* 0x 290 */
255,255,139, 85,196,141, 4, 23, 1,198, 59,117,200,115, 35,106, /* 0x 2a0 */
0,106, 0,106,255,104, 18, 16, 0, 0,255,115, 44, 41,117,200, /* 0x 2b0 */
255,117,200, 86,232,151,253,255,255,131,196, 28, 57,198,116, 58, /* 0x 2c0 */
235,201,131,125,224, 0,116, 50,141, 71, 3, 37,255, 15, 0, 0, /* 0x 2d0 */
131,248, 3,119, 37, 80, 86,232,100,253,255,255, 89, 94,235, 26, /* 0x 2e0 */
131,232, 4,131,248, 1,119, 18,131,123, 8, 1,117, 12,131,123, /* 0x 2f0 */
12, 16,117, 6,141, 67, 16,137, 69,208,255, 69,204,139, 85,232, /* 0x 300 */
139, 69,204, 3, 91, 4, 59, 66, 16,233,164,254,255,255,139, 69, /* 0x 310 */
208,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83,131, /* 0x 320 */
236, 32,199, 69,212, 0, 0, 0, 0,139, 85, 32,139, 69, 24,139, /* 0x 330 */
93, 16,137, 69,216,139,117, 20,141, 66, 24,137,117,232,137, 69, /* 0x 340 */
240,139, 69, 28,131,232, 24,137, 69,236,139, 66, 24,139, 85,240, /* 0x 350 */
106, 0,137, 69,228,139, 69,236,137, 85,224,137, 69,220,141, 85, /* 0x 360 */
228,141, 69,236, 83,232, 50,253,255,255,255,117, 12, 83, 49,210, /* 0x 370 */
255,117, 8,141, 69,220,106,255, 80,137,240,232,239,253,255,255, /* 0x 380 */
49,210,137,195,141, 70, 28,131,196, 28,139, 78, 16, 57,202, 15, /* 0x 390 */
131,162, 0, 0, 0,131, 56, 14, 15,133,144, 0, 0, 0, 3, 64, /* 0x 3a0 */
8,106, 0,106, 0, 80,232,161,252,255,255,131,196, 12,133,192, /* 0x 3b0 */
137,199,120, 25, 49,210,139, 69,212, 82, 80,255,117,216, 86, 87, /* 0x 3c0 */
232,127,252,255,255,131,196, 20, 57, 69,216,116, 15,106,127,232, /* 0x 3d0 */
100,252,255,255,139, 91, 8,137, 93,212,235,216,129, 62,202,254, /* 0x 3e0 */
186,190,117, 42, 15,182, 70, 7,141, 94, 8,107,192, 20,131,192, /* 0x 3f0 */
8, 80, 86,232, 38,252,255,255, 89, 90, 49,192,139, 86, 4, 57, /* 0x 400 */
208,115, 11,131, 59, 7,116,204, 64,131,195, 20,235,241,106, 0, /* 0x 410 */
139, 85,212,106, 0,137,240,106, 0, 87,106, 0,232, 78,253,255, /* 0x 420 */
255, 87,137,195,232, 31,252,255,255,131,196, 24,235, 9, 3, 64, /* 0x 430 */
4, 66,233, 86,255,255,255,141,101,244,137,216, 91, 94, 95,201, /* 0x 440 */
195 /* 0x 450 */
};
+3 -3
View File
@@ -29,8 +29,8 @@
#define STUB_I386_DOS32_TMT_SIZE 27032 #define STUB_I386_DOS32_TMT_SIZE 27032
#define STUB_I386_DOS32_TMT_ADLER32 0xe058a94c #define STUB_I386_DOS32_TMT_ADLER32 0x60faa944
#define STUB_I386_DOS32_TMT_CRC32 0x76e13290 #define STUB_I386_DOS32_TMT_CRC32 0x1e38f90e
unsigned char stub_i386_dos32_tmt[27032] = { unsigned char stub_i386_dos32_tmt[27032] = {
127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
@@ -444,7 +444,7 @@ unsigned char stub_i386_dos32_tmt[27032] = {
0, 0,235, 30,138, 7,131,199, 1, 60,128,114, 10, 60,143,119, /* 0x1980 */ 0, 0,235, 30,138, 7,131,199, 1, 60,128,114, 10, 60,143,119, /* 0x1980 */
6,128,127,254, 15,116, 5, 44,232, 60, 1,119,255,128, 63, 0, /* 0x1990 */ 6,128,127,254, 15,116, 5, 44,232, 60, 1,119,255,128, 63, 0, /* 0x1990 */
117,255,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1, /* 0x19a0 */ 117,255,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1, /* 0x19a0 */
240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 13, /* 0x19b0 */ 232,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 13, /* 0x19b0 */
131,233, 1,127, 6,141,125,252, 49,192,138, 6, 70, 9,192,116, /* 0x19c0 */ 131,233, 1,127, 6,141,125,252, 49,192,138, 6, 70, 9,192,116, /* 0x19c0 */
1, 60,239,119, 17, 1,199,139, 7,134,196,193,192, 16,134,196, /* 0x19d0 */ 1, 60,239,119, 17, 1,199,139, 7,134,196,193,192, 16,134,196, /* 0x19d0 */
1,232,137, 7,235,226, 36, 15,193,224, 16,102,139, 6,131,198, /* 0x19e0 */ 1,232,137, 7,235,226, 36, 15,193,224, 16,102,139, 6,131,198, /* 0x19e0 */
+3 -3
View File
@@ -29,8 +29,8 @@
#define STUB_I386_DOS32_WATCOM_LE_SIZE 27436 #define STUB_I386_DOS32_WATCOM_LE_SIZE 27436
#define STUB_I386_DOS32_WATCOM_LE_ADLER32 0x1fda144c #define STUB_I386_DOS32_WATCOM_LE_ADLER32 0x946d1444
#define STUB_I386_DOS32_WATCOM_LE_CRC32 0xd84b8031 #define STUB_I386_DOS32_WATCOM_LE_CRC32 0x39b33888
unsigned char stub_i386_dos32_watcom_le[27436] = { unsigned char stub_i386_dos32_watcom_le[27436] = {
127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
@@ -445,7 +445,7 @@ unsigned char stub_i386_dos32_watcom_le[27436] = {
4,185, 0, 0, 0, 0,235, 30,138, 7,131,199, 1, 60,128,114, /* 0x1990 */ 4,185, 0, 0, 0, 0,235, 30,138, 7,131,199, 1, 60,128,114, /* 0x1990 */
10, 60,143,119, 6,128,127,254, 15,116, 5, 44,232, 60, 1,119, /* 0x19a0 */ 10, 60,143,119, 6,128,127,254, 15,116, 5, 44,232, 60, 1,119, /* 0x19a0 */
255,128, 63, 0,117,255,139, 7,102,193,232, 8,193,192, 16,134, /* 0x19b0 */ 255,128, 63, 0,117,255,139, 7,102,193,232, 8,193,192, 16,134, /* 0x19b0 */
196, 41,248, 1,240,137, 7,131,199, 4,131,233, 4,138, 7,131, /* 0x19c0 */ 196, 41,248, 1,232,137, 7,131,199, 4,131,233, 4,138, 7,131, /* 0x19c0 */
199, 1,226, 13,131,233, 1,127, 6,141,125,252, 49,192,138, 6, /* 0x19d0 */ 199, 1,226, 13,131,233, 1,127, 6,141,125,252, 49,192,138, 6, /* 0x19d0 */
70, 9,192,116, 1, 60,239,119, 17, 1,199,139, 7,134,196,193, /* 0x19e0 */ 70, 9,192,116, 1, 60,239,119, 17, 1,199,139, 7,134,196,193, /* 0x19e0 */
192, 16,134,196, 1,232,137, 7,235,226, 36, 15,193,224, 16,102, /* 0x19f0 */ 192, 16,134,196, 1,232,137, 7,235,226, 36, 15,193,224, 16,102, /* 0x19f0 */
+77 -74
View File
@@ -1,5 +1,5 @@
/* i386-linux.elf-fold.h /* i386-linux.elf-fold.h
created from i386-linux.elf-fold.bin, 1691 (0x69b) bytes created from i386-linux.elf-fold.bin, 1730 (0x6c2) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,17 +28,17 @@
*/ */
#define STUB_I386_LINUX_ELF_FOLD_SIZE 1691 #define STUB_I386_LINUX_ELF_FOLD_SIZE 1730
#define STUB_I386_LINUX_ELF_FOLD_ADLER32 0xe27fd53e #define STUB_I386_LINUX_ELF_FOLD_ADLER32 0x8b6ce726
#define STUB_I386_LINUX_ELF_FOLD_CRC32 0x75829ac3 #define STUB_I386_LINUX_ELF_FOLD_CRC32 0xb81886c1
unsigned char stub_i386_linux_elf_fold[1691] = { unsigned char stub_i386_linux_elf_fold[1730] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
2, 0, 3, 0, 1, 0, 0, 0,128, 16,192, 0, 52, 0, 0, 0, /* 0x 10 */ 2, 0, 3, 0, 1, 0, 0, 0,128, 16,192, 0, 52, 0, 0, 0, /* 0x 10 */
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0, /* 0x 30 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0, /* 0x 30 */
0, 16,192, 0,155, 6, 0, 0,156, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */ 0, 16,192, 0,194, 6, 0, 0,196, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0, 16, 0, 0, 1, 0, 0, 0,155, 6, 0, 0, 0, 0, 0, 0, /* 0x 50 */ 0, 16, 0, 0, 1, 0, 0, 0,194, 6, 0, 0, 0, 0, 0, 0, /* 0x 50 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
83, 41,201,186,120, 2, 0, 0,137,230,137,231, 41,219,232,181, /* 0x 80 */ 83, 41,201,186,120, 2, 0, 0,137,230,137,231, 41,219,232,181, /* 0x 80 */
@@ -51,7 +51,7 @@ unsigned char stub_i386_linux_elf_fold[1691] = {
148, 26,255, 31, 0, 0,129,226, 0,240,255,255, 82, 41,192,102, /* 0x f0 */ 148, 26,255, 31, 0, 0,129,226, 0,240,255,255, 82, 41,192,102, /* 0x f0 */
131,123, 16, 3,117, 1,146, 80,139,115, 24,141,131,140, 0, 0, /* 0x 100 */ 131,123, 16, 3,117, 1,146, 80,139,115, 24,141,131,140, 0, 0, /* 0x 100 */
0, 41,198,139, 24,139, 72, 4,131,193, 12,141, 84, 36, 12, 96, /* 0x 110 */ 0, 41,198,139, 24,139, 72, 4,131,193, 12,141, 84, 36, 12, 96, /* 0x 110 */
71,232, 98, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, 0, /* 0x 120 */ 71,232,102, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, 0, /* 0x 120 */
0, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, 80, /* 0x 130 */ 0, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, 80, /* 0x 130 */
80, 80, 41,217,176, 91,255, 39,173,171,133,192,117,250,135,223, /* 0x 140 */ 80, 80, 41,217,176, 91,255, 39,173,171,133,192,117,250,135,223, /* 0x 140 */
1,223,173,171,133,192,117,250, 87,173,171,131,248, 32,115, 3, /* 0x 150 */ 1,223,173,171,133,192,117,250, 87,173,171,131,248, 32,115, 3, /* 0x 150 */
@@ -74,69 +74,72 @@ unsigned char stub_i386_linux_elf_fold[1691] = {
196, 16,139, 69,232, 1, 70, 4, 41, 6,235, 10,139, 83, 4,137, /* 0x 260 */ 196, 16,139, 69,232, 1, 70, 4, 41, 6,235, 10,139, 83, 4,137, /* 0x 260 */
240,232, 14,255,255,255,139, 85,228,139, 3, 1, 83, 4, 41,208, /* 0x 270 */ 240,232, 14,255,255,255,139, 85,228,139, 3, 1, 83, 4, 41,208, /* 0x 270 */
133,192,137, 3,233, 65,255,255,255,141,101,244, 91, 94, 95,201, /* 0x 280 */ 133,192,137, 3,233, 65,255,255,255,141,101,244, 91, 94, 95,201, /* 0x 280 */
195,133,192, 83,137,211,116, 29,168, 1,117, 25,139, 16, 57,218, /* 0x 290 */ 195,133,192, 83,137,211,116, 26,168, 1,117, 22,139, 16, 57,218, /* 0x 290 */
116, 7, 74,117, 11,133,219,116, 7,137, 24,137, 72, 4,235, 5, /* 0x 2a0 */ 116, 7, 74,117, 8,133,219,116, 4,137, 24,235, 7,131,192, 8, /* 0x 2a0 */
131,192, 8,235,231, 91,195, 85,137,229, 87, 86, 83,131,236, 68, /* 0x 2b0 */ 235,234, 49,192,133,192,116, 3,137, 72, 4, 91,195, 85,137,229, /* 0x 2b0 */
137, 69,228,139, 69, 8,137, 85,224,139, 93,224,139, 85, 12,137, /* 0x 2c0 */ 87, 86, 83,131,236, 68,137, 69,228,139, 69, 8,137, 85,224,139, /* 0x 2c0 */
69,220,139, 69,224,139, 77, 20,137, 85,216, 3, 91, 28,139, 85, /* 0x 2d0 */ 93,224,139, 85, 12,137, 69,220,139, 69,224,139, 77, 20,137, 85, /* 0x 2d0 */
224,137, 77,212,102,131,120, 16, 2, 15,183, 74, 44,137, 93,208, /* 0x 2e0 */ 216, 3, 91, 28,139, 85,224,137, 77,212,102,131,120, 16, 2, 15, /* 0x 2e0 */
15,148,192,131,207,255, 15,182,192,137,202,193,224, 4, 49,246, /* 0x 2f0 */ 183, 74, 44,137, 93,208, 15,148,192,131,206,255, 15,182,192,137, /* 0x 2f0 */
131,192, 34, 74,120, 28,131, 59, 1,117, 18,139, 83, 8, 57,250, /* 0x 300 */ 202,193,224, 4, 49,255,131,192, 34, 74,120, 28,131, 59, 1,117, /* 0x 300 */
115, 2,137,215, 3, 83, 20, 57,214,115, 2,137,214,131,195, 32, /* 0x 310 */ 18,139, 83, 8, 57,242,115, 2,137,214, 3, 83, 20, 57,215,115, /* 0x 310 */
226,228,137,251,106, 0,129,227, 0,240,255,255,106,255, 41,222, /* 0x 320 */ 2,137,215,131,195, 32,226,228,129,230, 0,240,255,255, 41,247, /* 0x 320 */
80,129,198,255, 15, 0, 0,106, 0,129,230, 0,240,255,255, 86, /* 0x 330 */ 137,242,141,159,255, 15, 0, 0,129,227, 0,240,255,255,168, 16, /* 0x 330 */
83,232, 50,254,255,255,139, 77,224,141, 52, 48,131,196, 24, 41, /* 0x 340 */ 117, 19,106, 0,106,255, 80,106, 0, 83, 86,232, 40,254,255,255, /* 0x 340 */
216,102,131,121, 44, 0,137,117,240,137, 69,204,199, 69,200, 0, /* 0x 350 */ 131,196, 24,137,194,139, 77,224,141, 4, 26, 41,242,199, 69,200, /* 0x 350 */
0, 0, 0, 15,132,215, 1, 0, 0,139, 93,208,139, 3,131,248, /* 0x 360 */ 0, 0, 0, 0,102,131,121, 44, 0,137, 69,240,137, 85,204, 15, /* 0x 360 */
6,117, 24,139, 77,204,186, 3, 0, 0, 0, 3, 75, 8,139, 69, /* 0x 370 */ 132,221, 1, 0, 0,131,125,220, 0,116, 32,139, 93,208,131, 59, /* 0x 370 */
216,232, 11,255,255,255,233,158, 1, 0, 0, 72, 15,133,151, 1, /* 0x 380 */ 6,117, 24,139, 77,204,186, 3, 0, 0, 0, 3, 75, 8,139, 69, /* 0x 380 */
0, 0,139, 69,208,199, 69,196, 64, 98, 81,115,139, 85,208,139, /* 0x 390 */ 216,232,251,254,255,255,233,160, 1, 0, 0,139, 69,208,131, 56, /* 0x 390 */
72, 24,139, 90, 20,131,225, 7,193,225, 2,211,109,196,139, 72, /* 0x 3a0 */ 1, 15,133,148, 1, 0, 0,139, 72, 24,199, 69,196, 64, 98, 81, /* 0x 3a0 */
16,139, 69,204, 3, 66, 8,137, 77,232,131,101,196, 7,137,194, /* 0x 3b0 */ 115,139, 85,208,131,225, 7,193,225, 2,139, 90, 20,211,109,196, /* 0x 3b0 */
1,195,129,226,255, 15, 0, 0,137,199,141, 52, 17,139, 77,208, /* 0x 3c0 */ 139, 72, 16,139, 69,204, 3, 66, 8,137, 77,232,131,101,196, 7, /* 0x 3c0 */
137, 69,236, 41,215,139, 65, 4,137, 93,192, 41,208,131,125,220, /* 0x 3d0 */ 137,194, 1,195,129,226,255, 15, 0, 0,137,199,141, 52, 17,139, /* 0x 3d0 */
0, 80,139, 69,228,116, 3,131,200,255,131,125,220, 1, 80, 25, /* 0x 3e0 */ 77,208,137, 69,236, 41,215,139, 65, 4,137, 93,192, 41,208,131, /* 0x 3e0 */
192,131,224,224,131,192, 50,131,125,220, 0, 80,139, 69,196,116, /* 0x 3f0 */ 125,220, 0, 80,139, 69,228,116, 3,131,200,255,131,125,220, 1, /* 0x 3f0 */
3,131,200, 2,131,125,220, 0, 80,137,240,116, 3,141, 70, 3, /* 0x 400 */ 80, 25,192,131,224,224,131,192, 50,131,125,220, 0, 80,139, 69, /* 0x 400 */
80, 87,232, 97,253,255,255,131,196, 24, 57,199, 15,133,184, 0, /* 0x 410 */ 196,116, 3,131,200, 2,131,125,220, 0, 80,137,240,116, 3,141, /* 0x 410 */
0, 0,131,125,220, 0,116, 28,246, 69,196, 4,139, 69,212,117, /* 0x 420 */ 70, 3, 80, 87,232, 79,253,255,255,131,196, 24, 57,199, 15,133, /* 0x 420 */
2, 49,192, 80,139, 69,220,255,117,228,141, 85,232,232,111,253, /* 0x 430 */ 184, 0, 0, 0,131,125,220, 0,116, 28,246, 69,196, 4,139, 69, /* 0x 430 */
255,255, 88, 90,137,243,247,219,129,227,255, 15, 0, 0,246, 69, /* 0x 440 */ 212,117, 2, 49,192, 80,139, 69,220,255,117,228,141, 85,232,232, /* 0x 440 */
196, 2,137, 93,188,116, 15,133,219,141, 4, 55,116, 8,137,217, /* 0x 450 */ 93,253,255,255, 88, 90,137,243,247,219,129,227,255, 15, 0, 0, /* 0x 450 */
198, 0, 0, 64,226,250,131,125,220, 0,116,120,139, 69,208,131, /* 0x 460 */ 246, 69,196, 2,137, 93,188,116, 15,133,219,141, 4, 55,116, 8, /* 0x 460 */
56, 1,117, 86,246, 64, 24, 1,116, 80,139, 80, 20,139, 88, 8, /* 0x 470 */ 137,217,198, 0, 0, 64,226,250,131,125,220, 0,116,120,139, 69, /* 0x 470 */
141, 12, 26, 3, 77,204, 59, 80, 16,117, 14,137,200,247,216, 37, /* 0x 480 */ 208,131, 56, 1,117, 86,246, 64, 24, 1,116, 80,139, 80, 20,139, /* 0x 480 */
255, 15, 0, 0,131,248, 3,119, 17,139, 85,208,107, 69,204, 52, /* 0x 490 */ 88, 8,141, 12, 26, 3, 77,204, 59, 80, 16,117, 14,137,200,247, /* 0x 490 */
131,122, 4, 0,141, 76, 3, 12,117, 15,139, 1, 61,205,128, 97, /* 0x 4a0 */ 216, 37,255, 15, 0, 0,131,248, 3,119, 17,139, 85,208,107, 69, /* 0x 4a0 */
195,116, 6,199, 1,205,128, 97,195,133,201,116, 13,139, 69,216, /* 0x 4b0 */ 204, 52,131,122, 4, 0,141, 76, 3, 12,117, 32,139, 1, 61,205, /* 0x 4b0 */
49,210,131,224,254,232,199,253,255,255,137,251,137,241,139, 85, /* 0x 4c0 */ 128, 97,195,116, 6,199, 1,205,128, 97,195,133,201,116, 13,139, /* 0x 4c0 */
196,106,125, 88,205,128,133,192,116, 10,106,127, 91,106, 1, 88, /* 0x 4d0 */ 69,216, 49,210,131,224,254,232,181,253,255,255,137,251,137,241, /* 0x 4d0 */
205,128,235,254,139, 85,188,141, 4, 22,141, 28, 7, 59, 93,192, /* 0x 4e0 */ 139, 85,196,106,125, 88,205,128,133,192,116, 10,106,127, 91,106, /* 0x 4e0 */
115, 30,106, 0,106,255,106, 50,255,117,196, 41, 93,192,255,117, /* 0x 4f0 */ 1, 88,205,128,235,254,139, 85,188,141, 4, 22,141, 28, 7, 59, /* 0x 4f0 */
192, 83,232,113,252,255,255,131,196, 24, 57,195,116, 27,235,202, /* 0x 500 */ 93,192,115, 30,106, 0,106,255,106, 50,255,117,196, 41, 93,192, /* 0x 500 */
131,125,220, 0,116, 19,141, 78, 3,129,225,255, 15, 0, 0,131, /* 0x 510 */ 255,117,192, 83,232, 95,252,255,255,131,196, 24, 57,195,116, 27, /* 0x 510 */
249, 3,119, 5,106, 91, 88,205,128,139, 77,224,255, 69,200, 15, /* 0x 520 */ 235,202,131,125,220, 0,116, 19,141, 78, 3,129,225,255, 15, 0, /* 0x 520 */
183, 65, 44,131, 69,208, 32, 57, 69,200, 15,140, 41,254,255,255, /* 0x 530 */ 0,131,249, 3,119, 5,106, 91, 88,205,128,139, 77,224,255, 69, /* 0x 530 */
131,125,220, 0,117, 14,139, 93,228,106, 6, 88,205,128,133,192, /* 0x 540 */ 200, 15,183, 65, 44,131, 69,208, 32, 57, 69,200, 15,140, 35,254, /* 0x 540 */
116, 20,235,134,139, 69,224,102,131,120, 16, 3,116, 8,139, 93, /* 0x 550 */ 255,255,131,125,220, 0,116, 18,139, 93,224,102,131,123, 16, 3, /* 0x 550 */
240,106, 45, 88,205,128,131,125, 16, 0,116, 8,139, 77,204,139, /* 0x 560 */ 116, 8,139, 93,240,106, 45, 88,205,128,131,125, 16, 0,116, 8, /* 0x 560 */
85, 16,137, 10,139, 93,224,139, 91, 24, 1, 93,204,139, 69,204, /* 0x 570 */ 139, 85,204,139, 69, 16,137, 16,139, 77,224,139, 73, 24, 1, 77, /* 0x 570 */
141,101,244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83,131,236, /* 0x 580 */ 204,139, 69,204,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, /* 0x 580 */
28,139,125, 28,106, 0,139, 69, 16,141, 87, 52,139,117, 8,137, /* 0x 590 */ 86, 83,131,236, 32,139,125, 28,106, 0,139,117, 16,139, 69, 8, /* 0x 590 */
69,236,131,192, 2,255,117,236,137, 85,228,139, 93, 32,137, 69, /* 0x 5a0 */ 141, 87, 52,141, 78, 2,139, 93, 32,137, 69,236,137, 85,228,141, /* 0x 5a0 */
232,141, 85, 24,141, 69, 32,232,245,251,255,255,139, 69, 12, 15, /* 0x 5b0 */ 69, 32,141, 85, 24, 86,137, 77,232,232,243,251,255,255,139, 69, /* 0x 5b0 */
183, 79, 44,186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, 36, /* 0x 5c0 */ 12,186, 5, 0, 0, 0, 15,183, 79, 44,137, 69, 32,139, 69,236, /* 0x 5c0 */
232,188,252,255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137,240, /* 0x 5d0 */ 41, 93, 36,232,185,252,255,255, 15,183, 79, 42,139, 69,236,186, /* 0x 5d0 */
232,172,252,255,255,139, 93,228,139, 77, 40,186, 3, 0, 0, 0, /* 0x 5e0 */ 4, 0, 0, 0,232,168,252,255,255,139, 93,228,139, 77, 40,186, /* 0x 5e0 */
3, 75, 8,137,240,131,193, 52,232,148,252,255,255,141, 69,240, /* 0x 5f0 */ 3, 0, 0, 0, 3, 75, 8,139, 69,236,131,193, 52,232,143,252, /* 0x 5f0 */
255,117,232,137,250, 80,141, 69, 32, 86, 80,139, 69,236,232,164, /* 0x 600 */ 255,255,141, 69,240,255,117,232,137,250, 80,255,117,236,141, 69, /* 0x 600 */
252,255,255,186, 9, 0, 0, 0,137,193,137,195,137,240,232,110, /* 0x 610 */ 32, 80,137,240,232,164,252,255,255,186, 9, 0, 0, 0,137,193, /* 0x 610 */
252,255,255,102,139, 79, 44,131,196, 24, 49,210,102,133,201,116, /* 0x 620 */ 137, 69,224,139, 69,236,232,102,252,255,255,102,139, 79, 44,131, /* 0x 620 */
96,139, 69,228,131, 56, 3,117, 76,139, 93,240, 49,201, 3, 88, /* 0x 630 */ 196, 24, 49,210,102,133,201,116,126,139, 93,228,131, 59, 3,117, /* 0x 630 */
8,137,202,106, 5, 88,205,128,133,192,137,198,120, 21,186, 0, /* 0x 640 */ 106,139, 69,228, 49,201,139, 93,240,137,202, 3, 88, 8,106, 5, /* 0x 640 */
2, 0, 0,137,195,137,249,106, 3, 88,205,128, 61, 0, 2, 0, /* 0x 650 */ 88,205,128,133,192,137,198,120, 21,186, 0, 2, 0, 0,137,195, /* 0x 650 */
0,116, 10,106,127, 91,106, 1, 88,205,128,235,254,106, 0,137, /* 0x 660 */ 137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, /* 0x 660 */
250,106, 0,137,240,106, 0,106, 0,232, 57,252,255,255,131,196, /* 0x 670 */ 91,106, 1, 88,205,128,235,254,141, 69,240,137,250,106, 0,137, /* 0x 670 */
16,137,195,235, 12, 66, 15,183,193,131, 69,228, 32, 57,194,124, /* 0x 680 */ 243, 80,137,240,255,117,236,106, 0,232, 47,252,255,255,139, 77, /* 0x 680 */
160,141,101,244,137,216, 91, 94, 95,201,195 /* 0x 690 */ 240,137, 69,224,139, 69,236,186, 7, 0, 0, 0,232,240,251,255, /* 0x 690 */
255,131,196, 16,106, 6, 88,205,128,235, 12, 66, 15,183,193,131, /* 0x 6a0 */
69,228, 32, 57,194,124,130,139, 69,224,141,101,244, 91, 94, 95, /* 0x 6b0 */
201,195 /* 0x 6c0 */
}; };
+3 -3
View File
@@ -29,11 +29,11 @@
#define STUB_I386_LINUX_ELF_EXECVE_FOLD_SIZE 931 #define STUB_I386_LINUX_ELF_EXECVE_FOLD_SIZE 931
#define STUB_I386_LINUX_ELF_EXECVE_FOLD_ADLER32 0x488877dc #define STUB_I386_LINUX_ELF_EXECVE_FOLD_ADLER32 0xdce475cc
#define STUB_I386_LINUX_ELF_EXECVE_FOLD_CRC32 0x399780ea #define STUB_I386_LINUX_ELF_EXECVE_FOLD_CRC32 0x512b1d3a
unsigned char stub_i386_linux_elf_execve_fold[931] = { unsigned char stub_i386_linux_elf_execve_fold[931] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
2, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x 10 */ 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, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 64, 0, /* 0x 30 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 64, 0, /* 0x 30 */
+3 -3
View File
@@ -29,11 +29,11 @@
#define STUB_I386_LINUX_ELF_INTERP_FOLD_SIZE 1519 #define STUB_I386_LINUX_ELF_INTERP_FOLD_SIZE 1519
#define STUB_I386_LINUX_ELF_INTERP_FOLD_ADLER32 0xe82498de #define STUB_I386_LINUX_ELF_INTERP_FOLD_ADLER32 0xbf8496ce
#define STUB_I386_LINUX_ELF_INTERP_FOLD_CRC32 0xd7e223de #define STUB_I386_LINUX_ELF_INTERP_FOLD_CRC32 0xe6675cdc
unsigned char stub_i386_linux_elf_interp_fold[1519] = { unsigned char stub_i386_linux_elf_interp_fold[1519] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
2, 0, 3, 0, 1, 0, 0, 0,116, 0, 1, 0, 52, 0, 0, 0, /* 0x 10 */ 2, 0, 3, 0, 1, 0, 0, 0,116, 0, 1, 0, 52, 0, 0, 0, /* 0x 10 */
0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x 30 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x 30 */
+3 -3
View File
@@ -29,11 +29,11 @@
#define STUB_I386_LINUX_ELF_SHELL_FOLD_SIZE 1194 #define STUB_I386_LINUX_ELF_SHELL_FOLD_SIZE 1194
#define STUB_I386_LINUX_ELF_SHELL_FOLD_ADLER32 0x63b3f90a #define STUB_I386_LINUX_ELF_SHELL_FOLD_ADLER32 0xd981f6fa
#define STUB_I386_LINUX_ELF_SHELL_FOLD_CRC32 0xe2bc019d #define STUB_I386_LINUX_ELF_SHELL_FOLD_CRC32 0x5d287cd0
unsigned char stub_i386_linux_elf_shell_fold[1194] = { unsigned char stub_i386_linux_elf_shell_fold[1194] = {
127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
2, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x 10 */ 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, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, /* 0x 30 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, /* 0x 30 */
+675
View File
@@ -0,0 +1,675 @@
/* mipsel.r3000-linux.elf-entry.h
created from mipsel.r3000-linux.elf-entry.bin, 10221 (0x27ed) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_MIPSEL_R3000_LINUX_ELF_ENTRY_SIZE 10221
#define STUB_MIPSEL_R3000_LINUX_ELF_ENTRY_ADLER32 0x9a8b8343
#define STUB_MIPSEL_R3000_LINUX_ELF_ENTRY_CRC32 0xc53813db
unsigned char stub_mipsel_r3000_linux_elf_entry[10221] = {
127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
1, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
0, 30, 0, 0, 1, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, /* 0x 20 */
21, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 30 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 17, 4, /* 0x 40 */
0, 0,247, 39, 0,128, 13, 60, 33, 72,160, 1, 1, 0, 11, 36, /* 0x 50 */
194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, /* 0x 60 */
3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, /* 0x 70 */
1, 0, 41, 37, 1, 0, 15, 36, 5, 0,192, 17, 0, 0,142,144, /* 0x 80 */
1, 0,132, 36, 0, 0,206,160,241,255, 0, 16, 1, 0,198, 36, /* 0x 90 */
194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, /* 0x a0 */
3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, /* 0x b0 */
1, 0, 41, 37, 64,120, 15, 0, 33,120,238, 1,194,119, 9, 0, /* 0x c0 */
7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, /* 0x d0 */
4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, /* 0x e0 */
13, 0,192, 21,254,255,238, 37, 33,120,238, 1,194,119, 9, 0, /* 0x f0 */
7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, /* 0x 100 */
4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, /* 0x 110 */
223,255, 0, 16, 33,120,238, 1, 13, 0,192, 21,253,255,239, 37, /* 0x 120 */
194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, /* 0x 130 */
3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, /* 0x 140 */
1, 0, 41, 37, 33,120, 96, 1, 11, 0, 0, 16, 1, 0,204, 49, /* 0x 150 */
0, 0,142,144, 0,122, 15, 0, 33,120,238, 1, 1, 0,238, 37, /* 0x 160 */
255,255,192, 17, 1, 0,132, 36, 66,120, 15, 0, 1, 0,239, 37, /* 0x 170 */
33, 88,224, 1, 1, 0,204, 49,194,119, 9, 0, 7, 0,169, 21, /* 0x 180 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 190 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 35, 0,128, 21, /* 0x 1a0 */
254,255,204, 37, 12, 0,192, 17, 1, 0, 12, 36,194,119, 9, 0, /* 0x 1b0 */
7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, /* 0x 1c0 */
4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, /* 0x 1d0 */
22, 0, 0, 16, 33, 96,192, 1,194,119, 9, 0, 7, 0,169, 21, /* 0x 1e0 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 1f0 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 64, 96, 12, 0, /* 0x 200 */
33, 96,142, 1,194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, /* 0x 210 */
0, 0,137,152, 3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, /* 0x 220 */
64, 72, 9, 0, 1, 0, 41, 37,235,255,192, 17, 1, 5,238, 45, /* 0x 230 */
5, 0,140, 37, 35, 96,142, 1, 35,120,207, 0, 0, 0,238,145, /* 0x 240 */
255,255,140, 37, 1, 0,239, 37, 1, 0,198, 36,251,255,128, 21, /* 0x 250 */
255,255,206,160,127,255, 0, 16,194,119, 9, 0, 0,128, 13, 60, /* 0x 260 */
33, 72,160, 1, 1, 0, 11, 36,194,119, 9, 0, 7, 0,169, 21, /* 0x 270 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 280 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 1, 0, 15, 36, /* 0x 290 */
5, 0,192, 17, 0, 0,142,144, 1, 0,132, 36, 0, 0,206,160, /* 0x 2a0 */
241,255, 0, 16, 1, 0,198, 36,194,119, 9, 0, 7, 0,169, 21, /* 0x 2b0 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 2c0 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 64,120, 15, 0, /* 0x 2d0 */
33,120,238, 1,194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, /* 0x 2e0 */
0, 0,137,152, 3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, /* 0x 2f0 */
64, 72, 9, 0, 1, 0, 41, 37, 13, 0,192, 21,254,255,238, 37, /* 0x 300 */
33,120,207, 1,194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, /* 0x 310 */
0, 0,137,152, 3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, /* 0x 320 */
64, 72, 9, 0, 1, 0, 41, 37,223,255, 0, 16, 33,120,238, 1, /* 0x 330 */
13, 0,192, 21,253,255,239, 37,194,119, 9, 0, 7, 0,169, 21, /* 0x 340 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 350 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 33,120, 96, 1, /* 0x 360 */
11, 0, 0, 16, 1, 0,204, 49, 0, 0,142,144, 0,122, 15, 0, /* 0x 370 */
33,120,238, 1, 1, 0,238, 37,255,255,192, 17, 1, 0,132, 36, /* 0x 380 */
66,120, 15, 0, 1, 0,239, 37, 33, 88,224, 1, 1, 0,204, 49, /* 0x 390 */
194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, /* 0x 3a0 */
3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, /* 0x 3b0 */
1, 0, 41, 37, 64, 96, 12, 0, 33, 96,142, 1, 23, 0,128, 21, /* 0x 3c0 */
254,255,140, 37, 1, 0, 12, 36,194,119, 9, 0, 7, 0,169, 21, /* 0x 3d0 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 3e0 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 64, 96, 12, 0, /* 0x 3f0 */
33, 96,142, 1,194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, /* 0x 400 */
0, 0,137,152, 3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, /* 0x 410 */
64, 72, 9, 0, 1, 0, 41, 37,235,255,192, 17, 1, 5,238, 45, /* 0x 420 */
4, 0,140, 37, 35, 96,142, 1, 35,120,207, 0, 0, 0,238,145, /* 0x 430 */
255,255,140, 37, 1, 0,239, 37, 1, 0,198, 36,251,255,128, 21, /* 0x 440 */
255,255,206,160,137,255, 0, 16,194,119, 9, 0, 0,128, 13, 60, /* 0x 450 */
33, 72,160, 1, 1, 0, 11, 36,194,119, 9, 0, 7, 0,169, 21, /* 0x 460 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 470 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 1, 0, 15, 36, /* 0x 480 */
5, 0,192, 17, 0, 0,142,144, 1, 0,132, 36, 0, 0,206,160, /* 0x 490 */
241,255, 0, 16, 1, 0,198, 36,194,119, 9, 0, 7, 0,169, 21, /* 0x 4a0 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 4b0 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, 64,120, 15, 0, /* 0x 4c0 */
33,120,238, 1,194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, /* 0x 4d0 */
0, 0,137,152, 3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, /* 0x 4e0 */
64, 72, 9, 0, 1, 0, 41, 37,235,255,192, 17, 2, 0, 14, 36, /* 0x 4f0 */
3, 0,238, 21,253,255,239, 37, 8, 0, 0, 16, 33,120, 96, 1, /* 0x 500 */
0, 0,142,144, 0,122, 15, 0, 33,120,238, 1, 1, 0,239, 37, /* 0x 510 */
255,255,224, 17, 1, 0,132, 36, 33, 88,224, 1,194,119, 9, 0, /* 0x 520 */
7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, /* 0x 530 */
4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, /* 0x 540 */
33, 96,192, 1,194,119, 9, 0, 7, 0,169, 21, 64, 72, 9, 0, /* 0x 550 */
0, 0,137,152, 3, 0,137,136, 4, 0,132, 36,194,119, 9, 0, /* 0x 560 */
64, 72, 9, 0, 1, 0, 41, 37, 64, 96, 12, 0, 33, 96,142, 1, /* 0x 570 */
23, 0,128, 21,254,255,140, 37, 1, 0, 12, 36,194,119, 9, 0, /* 0x 580 */
7, 0,169, 21, 64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, /* 0x 590 */
4, 0,132, 36,194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37, /* 0x 5a0 */
64, 96, 12, 0, 33, 96,142, 1,194,119, 9, 0, 7, 0,169, 21, /* 0x 5b0 */
64, 72, 9, 0, 0, 0,137,152, 3, 0,137,136, 4, 0,132, 36, /* 0x 5c0 */
194,119, 9, 0, 64, 72, 9, 0, 1, 0, 41, 37,235,255,192, 17, /* 0x 5d0 */
1, 13,238, 45, 4, 0,140, 37, 35, 96,142, 1, 35,120,207, 0, /* 0x 5e0 */
0, 0,238,145,255,255,140, 37, 1, 0,239, 37, 1, 0,198, 36, /* 0x 5f0 */
251,255,128, 21,255,255,206,160,152,255, 0, 16,194,119, 9, 0, /* 0x 600 */
0, 0,153,144, 0,250, 1, 36, 1, 0,152,144, 7, 0, 34, 51, /* 0x 610 */
194,200, 25, 0, 4, 8, 33, 3, 96,241, 33, 36, 33,232,161, 3, /* 0x 620 */
40, 0,161,175, 32, 0,170, 39, 44, 0,191,175, 0, 0,233,140, /* 0x 630 */
36, 0,166,175, 33, 64,192, 0, 28, 0,167, 39,254,255,166, 36, /* 0x 640 */
2, 0,133, 36, 48, 0,164, 39, 2, 0,130,160, 15, 0, 1, 51, /* 0x 650 */
0, 0,129,160, 2,193, 24, 0, 12, 0, 17, 4, 1, 0,152,160, /* 0x 660 */
33,192, 64, 0, 36, 0,164,143, 32, 0,165,143, 3, 0, 6, 36, /* 0x 670 */
51, 16, 2, 36, 12, 0, 0, 0, 33, 16, 0, 3, 44, 0,191,143, /* 0x 680 */
40, 0,161,143, 8, 0,224, 3, 35,232,161, 3,200,255,189, 39, /* 0x 690 */
52, 0,183,175, 48, 0,182,175, 44, 0,181,175, 40, 0,180,175, /* 0x 6a0 */
36, 0,179,175, 32, 0,178,175, 28, 0,177,175, 24, 0,176,175, /* 0x 6b0 */
33,168,160, 0, 12, 0,167,175, 33,152, 0, 1, 16, 0,169,175, /* 0x 6c0 */
20, 0,170,175, 4, 0,144, 36, 2, 0,130,144, 1, 0, 3, 36, /* 0x 6d0 */
4, 16, 67, 0,255,255, 66, 36, 8, 0,162,175, 1, 0,130,144, /* 0x 6e0 */
0, 0, 0, 0, 4, 16, 67, 0,255,255, 66, 36, 4, 0,162,175, /* 0x 6f0 */
0, 0,150,144, 0, 0,224,172, 0, 0, 64,173, 1, 0,132,144, /* 0x 700 */
0, 0, 0, 0, 33, 32,196, 2, 0, 3, 2, 36, 4, 32,130, 0, /* 0x 710 */
54, 7,132, 36, 33, 16, 0, 2, 4, 0, 0, 16, 33, 88, 0, 0, /* 0x 720 */
0, 4, 3, 36,254,255, 67,164, 1, 0,107, 37,252,255,100, 21, /* 0x 730 */
2, 0, 66, 36, 33, 56,166, 2, 33,104,160, 2, 33,192, 0, 0, /* 0x 740 */
33, 32, 0, 0, 35, 16,245, 0,123, 2,130, 16, 0, 26, 24, 0, /* 0x 750 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,132, 36, /* 0x 760 */
5, 0, 2, 36,247,255,130, 20, 1, 0,173, 37, 33, 80, 0, 0, /* 0x 770 */
33,112, 0, 0, 33,144, 0, 0, 1, 0, 17, 36, 1, 0, 20, 36, /* 0x 780 */
1, 0, 23, 36, 0, 0,183,175, 87, 2, 0, 16,255,255, 15, 36, /* 0x 790 */
255,255, 70, 52, 43, 16,207, 0, 8, 0, 64, 20, 0, 0, 0, 0, /* 0x 7a0 */
101, 2,167, 17, 0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x 7b0 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, 8, 0,163,143, /* 0x 7c0 */
0, 0, 0, 0, 36, 40, 67, 1, 0,201, 18, 0, 33, 16,185, 0, /* 0x 7d0 */
64, 16, 2, 0, 33, 88, 2, 2, 0, 0, 99,149,194, 18, 15, 0, /* 0x 7e0 */
24, 0, 67, 0, 18, 96, 0, 0, 43, 16, 12, 3,125, 0, 64, 16, /* 0x 7f0 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x 800 */
0, 0, 98,165, 4, 0,163,143, 0, 0, 0, 0, 36, 16, 67, 1, /* 0x 810 */
4, 24,194, 2, 8, 0, 2, 36, 35, 16, 86, 0, 7, 16, 78, 0, /* 0x 820 */
33, 16, 98, 0, 64, 26, 2, 0,192, 18, 2, 0, 35, 16, 67, 0, /* 0x 830 */
33, 16, 2, 2,108, 14, 70, 36, 7, 0, 66, 42, 3, 0, 64, 16, /* 0x 840 */
33,120,128, 1, 85, 0, 0, 16, 1, 0, 5, 36, 35, 16, 81, 1, /* 0x 850 */
33, 16, 98, 2, 0, 0, 89,144, 1, 0, 5, 36,255, 0, 2, 60, /* 0x 860 */
255,255, 66, 52, 43, 16, 79, 0, 8, 0, 64, 20, 0, 0, 0, 0, /* 0x 870 */
49, 2,167, 17, 0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x 880 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, 64,200, 25, 0, /* 0x 890 */
0, 1, 44, 51, 64, 16, 12, 0, 33, 16,194, 0, 64,112, 5, 0, /* 0x 8a0 */
33, 88, 78, 0, 0, 2, 99,149,194, 18, 15, 0, 24, 0, 67, 0, /* 0x 8b0 */
18, 32, 0, 0, 43, 16, 4, 3, 9, 0, 64, 16, 0, 8, 2, 36, /* 0x 8c0 */
35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, 0, 2, 98,165, /* 0x 8d0 */
41, 0,128, 21, 33, 40,192, 1, 9, 0, 0, 16, 33,120,128, 0, /* 0x 8e0 */
35,120,228, 1, 35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x 8f0 */
0, 2, 98,165, 1, 0,162, 36, 40, 0,128, 17, 33, 40,162, 0, /* 0x 900 */
0, 1,162, 40, 37, 0, 64, 16,255, 0, 2, 60,213,255, 0, 16, /* 0x 910 */
255,255, 66, 52,255,255, 66, 52, 43, 16, 79, 0, 9, 0, 64, 20, /* 0x 920 */
64, 96, 5, 0, 4, 2,167, 17, 0,122, 15, 0, 0, 26, 24, 0, /* 0x 930 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x 940 */
64, 96, 5, 0, 33, 88,204, 0, 0, 0, 99,149,194, 18, 15, 0, /* 0x 950 */
24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, 8, 0, 64, 16, /* 0x 960 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x 970 */
0, 0, 98,165, 33, 40,128, 1, 8, 0, 0, 16, 33,120,128, 0, /* 0x 980 */
35,120,228, 1, 35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x 990 */
0, 0, 98,165, 1, 0,162, 36, 33, 40,162, 0, 0, 1,162, 40, /* 0x 9a0 */
220,255, 64, 20,255, 0, 2, 60,255, 0,174, 48, 33, 16,106, 2, /* 0x 9b0 */
0, 0, 78,160, 4, 0, 66, 42, 3, 0, 64, 16, 1, 0, 67, 37, /* 0x 9c0 */
200, 1, 0, 16, 33,144, 0, 0, 10, 0, 66, 42, 3, 0, 64, 16, /* 0x 9d0 */
0, 0, 0, 0,195, 1, 0, 16,253,255, 82, 38,193, 1, 0, 16, /* 0x 9e0 */
250,255, 82, 38, 35, 32,236, 1, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x 9f0 */
0, 0, 98,165, 43, 16,196, 0, 8, 0, 64, 20, 35,192, 12, 3, /* 0x a00 */
205, 1,167, 17, 0, 34, 4, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x a10 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, 64, 16, 18, 0, /* 0x a20 */
33,112, 2, 2,128, 1,195,149,194, 18, 4, 0, 24, 0, 67, 0, /* 0x a30 */
18, 96, 0, 0, 43, 16, 12, 3, 15, 0, 64, 16, 0, 8, 2, 36, /* 0x a40 */
35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0,128, 1,194,165, /* 0x a50 */
7, 0, 66, 42, 2, 0, 64, 20, 33,144, 0, 0, 3, 0, 18, 36, /* 0x a60 */
100, 6, 14, 38, 0, 0,183,175, 33,184,128, 2, 33,160, 32, 2, /* 0x a70 */
144, 0, 0, 16, 33, 88,128, 1, 35, 88,140, 0, 66, 17, 3, 0, /* 0x a80 */
35, 16, 98, 0,128, 1,194,165, 43, 16,203, 0, 8, 0, 64, 20, /* 0x a90 */
35,192, 12, 3,168, 1,167, 17, 0, 90, 11, 0, 0, 26, 24, 0, /* 0x aa0 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x ab0 */
152, 1,195,149,194, 18, 11, 0, 24, 0, 67, 0, 18, 32, 0, 0, /* 0x ac0 */
43, 16, 4, 3, 50, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x ad0 */
67, 17, 2, 0, 33, 16, 98, 0,152, 1,194,165, 0, 1, 2, 60, /* 0x ae0 */
43, 16,130, 0, 8, 0, 64, 16, 33, 88,128, 0,146, 1,167, 17, /* 0x af0 */
0, 90, 4, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x b00 */
37,192, 98, 0, 1, 0,173, 37, 64, 16, 25, 0, 33, 24, 2, 2, /* 0x b10 */
64, 16, 5, 0, 33, 32, 98, 0,224, 1,131,148,194, 18, 11, 0, /* 0x b20 */
24, 0, 67, 0, 18, 96, 0, 0, 43, 16, 12, 3, 18, 0, 64, 16, /* 0x b30 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x b40 */
125, 1, 64, 17,224, 1,130,164, 7, 0, 66, 42, 2, 0, 64, 20, /* 0x b50 */
9, 0, 18, 36, 11, 0, 18, 36, 35, 16, 81, 1, 33, 16, 98, 2, /* 0x b60 */
0, 0, 78,144, 33, 16,106, 2, 0, 0, 78,160, 1, 0, 67, 37, /* 0x b70 */
92, 1, 0, 16, 33,120,128, 1, 35, 88,108, 1, 35,192, 12, 3, /* 0x b80 */
66, 17, 3, 0, 35, 16, 98, 0, 69, 0, 0, 16,224, 1,130,164, /* 0x b90 */
35, 88,100, 1, 66, 17, 3, 0, 35, 16, 98, 0,152, 1,194,165, /* 0x ba0 */
43, 16,203, 0, 8, 0, 64, 20, 35,192, 4, 3, 98, 1,167, 17, /* 0x bb0 */
0, 90, 11, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x bc0 */
37,192, 98, 0, 1, 0,173, 37,176, 1,195,149,194, 18, 11, 0, /* 0x bd0 */
24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, 7, 0, 64, 16, /* 0x be0 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x bf0 */
176, 1,194,165, 28, 0, 0, 16, 33, 16,128, 2, 35, 88,100, 1, /* 0x c00 */
66, 17, 3, 0, 35, 16, 98, 0,176, 1,194,165, 43, 16,203, 0, /* 0x c10 */
8, 0, 64, 20, 35,192, 4, 3, 71, 1,167, 17, 0, 90, 11, 0, /* 0x c20 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x c30 */
1, 0,173, 37,200, 1,195,149,194, 18, 11, 0, 24, 0, 67, 0, /* 0x c40 */
18, 32, 0, 0, 43, 16, 4, 3, 11, 0, 64, 16, 0, 8, 2, 36, /* 0x c50 */
35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0,200, 1,194,165, /* 0x c60 */
33, 16,224, 2, 33,184,128, 2, 33,160, 32, 2, 33,136, 64, 0, /* 0x c70 */
11, 0, 0, 16, 33, 88,128, 0, 35, 88,100, 1, 35,192, 4, 3, /* 0x c80 */
66, 17, 3, 0, 35, 16, 98, 0,200, 1,194,165, 0, 0,162,143, /* 0x c90 */
0, 0,183,175, 33,184,128, 2, 33,160, 32, 2, 33,136, 64, 0, /* 0x ca0 */
7, 0, 66, 42, 2, 0, 64, 20, 8, 0, 18, 36, 11, 0, 18, 36, /* 0x cb0 */
104, 10, 14, 38,255, 0, 2, 60,255,255, 76, 52, 43, 16,139, 1, /* 0x cc0 */
8, 0, 64, 20, 0, 0, 0, 0, 27, 1,167, 17, 0, 90, 11, 0, /* 0x cd0 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x ce0 */
1, 0,173, 37, 0, 0,195,149,194, 18, 11, 0, 24, 0, 67, 0, /* 0x cf0 */
18, 32, 0, 0, 43, 16, 4, 3, 12, 0, 64, 16, 0, 8, 2, 36, /* 0x d00 */
35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, 0, 0,194,165, /* 0x d10 */
0, 17, 5, 0, 33, 16,194, 1, 4, 0, 69, 36, 33,120,128, 0, /* 0x d20 */
3, 0, 8, 36, 41, 0, 0, 16, 33, 48, 0, 0, 35, 88,100, 1, /* 0x d30 */
66, 17, 3, 0, 35, 16, 98, 0, 0, 0,194,165, 43, 16,139, 1, /* 0x d40 */
8, 0, 64, 20, 35,192, 4, 3,251, 0,167, 17, 0, 90, 11, 0, /* 0x d50 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x d60 */
1, 0,173, 37, 2, 0,195,149,194, 18, 11, 0, 24, 0, 67, 0, /* 0x d70 */
18, 32, 0, 0, 43, 16, 4, 3, 12, 0, 64, 16, 0, 8, 2, 36, /* 0x d80 */
35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, 2, 0,194,165, /* 0x d90 */
0, 17, 5, 0, 33, 16,194, 1, 4, 1, 69, 36, 33,120,128, 0, /* 0x da0 */
3, 0, 8, 36, 9, 0, 0, 16, 8, 0, 6, 36, 35,120,100, 1, /* 0x db0 */
35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, 2, 0,194,165, /* 0x dc0 */
4, 2,197, 37, 8, 0, 8, 36, 16, 0, 6, 36, 33,112, 0, 1, /* 0x dd0 */
1, 0, 25, 36,255, 0, 2, 60,255,255, 66, 52, 43, 16, 79, 0, /* 0x de0 */
9, 0, 64, 20, 64, 96, 25, 0,211, 0,167, 17, 0,122, 15, 0, /* 0x df0 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x e00 */
1, 0,173, 37, 64, 96, 25, 0, 33, 88,172, 0, 0, 0, 99,149, /* 0x e10 */
194, 18, 15, 0, 24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, /* 0x e20 */
8, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, /* 0x e30 */
33, 16, 98, 0, 0, 0, 98,165, 33,200,128, 1, 8, 0, 0, 16, /* 0x e40 */
33,120,128, 0, 35,120,228, 1, 35,192, 4, 3, 66, 17, 3, 0, /* 0x e50 */
35, 16, 98, 0, 0, 0, 98,165, 1, 0, 34, 39, 33,200, 34, 3, /* 0x e60 */
255,255,206, 37,220,255,192, 21,255, 0, 2, 60, 1, 0, 2, 36, /* 0x e70 */
4, 16, 2, 1, 35, 16, 34, 3, 33, 72, 70, 0, 4, 0, 66, 42, /* 0x e80 */
134, 0, 64, 16, 4, 0, 34, 41, 2, 0, 64, 20, 33, 24, 32, 1, /* 0x e90 */
3, 0, 3, 36,192, 17, 3, 0, 33, 16, 2, 2, 96, 3, 70, 36, /* 0x ea0 */
1, 0, 14, 36, 6, 0, 25, 36,255, 0, 2, 60,255,255, 66, 52, /* 0x eb0 */
43, 16, 79, 0, 9, 0, 64, 20, 64, 96, 14, 0,158, 0,167, 17, /* 0x ec0 */
0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x ed0 */
37,192, 98, 0, 1, 0,173, 37, 64, 96, 14, 0, 33, 88,204, 0, /* 0x ee0 */
0, 0, 99,149,194, 18, 15, 0, 24, 0, 67, 0, 18, 32, 0, 0, /* 0x ef0 */
43, 16, 4, 3, 8, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x f00 */
67, 17, 2, 0, 33, 16, 98, 0, 0, 0, 98,165, 33,112,128, 1, /* 0x f10 */
8, 0, 0, 16, 33,120,128, 0, 35,120,228, 1, 35,192, 4, 3, /* 0x f20 */
66, 17, 3, 0, 35, 16, 98, 0, 0, 0, 98,165, 1, 0,194, 37, /* 0x f30 */
33,112,194, 1,255,255, 57, 39,220,255, 32, 23,255, 0, 2, 60, /* 0x f40 */
192,255,195, 37, 4, 0, 98, 40, 80, 0, 64, 20, 33,112, 96, 0, /* 0x f50 */
67, 32, 3, 0, 1, 0, 98, 48, 2, 0, 75, 52, 14, 0, 98, 40, /* 0x f60 */
8, 0, 64, 16,255,255,153, 36, 4,112, 43, 3, 64, 16, 14, 0, /* 0x f70 */
33, 32, 2, 2, 64, 16, 3, 0, 35, 16,130, 0, 26, 0, 0, 16, /* 0x f80 */
94, 5, 72, 36,251,255,132, 36,255, 0, 2, 60,255,255, 66, 52, /* 0x f90 */
43, 16, 79, 0, 8, 0, 64, 20, 0, 0, 0, 0,102, 0,167, 17, /* 0x fa0 */
0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x fb0 */
37,192, 98, 0, 1, 0,173, 37, 66,120, 15, 0, 43, 16, 15, 3, /* 0x fc0 */
3, 0, 64, 20, 64, 88, 11, 0, 35,192, 15, 3, 1, 0,107, 53, /* 0x fd0 */
255,255,132, 36,237,255,128, 20,255, 0, 2, 60, 68, 6, 8, 38, /* 0x fe0 */
0,113, 11, 0, 4, 0, 25, 36, 1, 0, 6, 36, 1, 0, 5, 36, /* 0x ff0 */
255, 0, 2, 60,255,255, 66, 52, 43, 16, 79, 0, 9, 0, 64, 20, /* 0x1000 */
64, 96, 5, 0, 76, 0,167, 17, 0,122, 15, 0, 0, 26, 24, 0, /* 0x1010 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x1020 */
64, 96, 5, 0, 33, 88, 12, 1, 0, 0, 99,149,194, 18, 15, 0, /* 0x1030 */
24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, 8, 0, 64, 16, /* 0x1040 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x1050 */
0, 0, 98,165, 33, 40,128, 1, 9, 0, 0, 16, 33,120,128, 0, /* 0x1060 */
35,120,228, 1, 35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x1070 */
0, 0, 98,165, 1, 0,162, 36, 33, 40,162, 0, 37,112,198, 1, /* 0x1080 */
255,255, 57, 39,218,255, 32, 23, 64, 48, 6, 0, 1, 0,209, 37, /* 0x1090 */
26, 0, 32, 18,255, 0, 2, 60, 7, 0, 82, 38, 43, 16, 81, 1, /* 0x10a0 */
38, 0, 64, 20, 1, 0, 2, 36, 35, 16, 81, 1, 33, 88, 98, 2, /* 0x10b0 */
33, 32,106, 2, 33, 24, 64, 1, 0, 0,110,145, 1, 0, 99, 36, /* 0x10c0 */
33, 16, 73, 1, 2, 0, 66, 36, 6, 0, 98, 16, 0, 0,142,160, /* 0x10d0 */
1, 0,107, 37, 16, 0,162,143, 0, 0, 0, 0,246,255, 98, 20, /* 0x10e0 */
1, 0,132, 36, 33, 80, 96, 0, 16, 0,163,143, 0, 0, 0, 0, /* 0x10f0 */
43, 16, 67, 1,166,253, 64, 20,255, 0, 2, 60,255,255, 66, 52, /* 0x1100 */
43, 16, 79, 0, 4, 0, 64, 20, 35, 40,181, 1, 10, 0,167, 17, /* 0x1110 */
1, 0,173, 37, 35, 40,181, 1, 12, 0,162,143, 0, 0, 0, 0, /* 0x1120 */
0, 0, 69,172, 20, 0,163,143, 0, 0, 0, 0, 0, 0,106,172, /* 0x1130 */
2, 0, 0, 16, 33, 16, 0, 0, 1, 0, 2, 36, 52, 0,183,143, /* 0x1140 */
48, 0,182,143, 44, 0,181,143, 40, 0,180,143, 36, 0,179,143, /* 0x1150 */
32, 0,178,143, 28, 0,177,143, 24, 0,176,143, 8, 0,224, 3, /* 0x1160 */
56, 0,189, 39,200,255,189, 39, 52, 0,183,175, 48, 0,182,175, /* 0x1170 */
44, 0,181,175, 40, 0,180,175, 36, 0,179,175, 32, 0,178,175, /* 0x1180 */
28, 0,177,175, 24, 0,176,175, 33,168,160, 0, 12, 0,167,175, /* 0x1190 */
33,152, 0, 1, 16, 0,169,175, 20, 0,170,175, 4, 0,144, 36, /* 0x11a0 */
2, 0,130,144, 1, 0, 3, 36, 4, 16, 67, 0,255,255, 66, 36, /* 0x11b0 */
8, 0,162,175, 1, 0,130,144, 0, 0, 0, 0, 4, 16, 67, 0, /* 0x11c0 */
255,255, 66, 36, 4, 0,162,175, 0, 0,150,144, 0, 0,224,172, /* 0x11d0 */
0, 0, 64,173, 1, 0,132,144, 0, 0, 0, 0, 33, 32,196, 2, /* 0x11e0 */
0, 3, 2, 36, 4, 32,130, 0, 54, 7,132, 36, 33, 16, 0, 2, /* 0x11f0 */
4, 0, 0, 16, 33, 88, 0, 0, 0, 4, 3, 36,254,255, 67,164, /* 0x1200 */
1, 0,107, 37,252,255,100, 21, 2, 0, 66, 36, 33, 56,166, 2, /* 0x1210 */
33,104,160, 2, 33,192, 0, 0, 33, 32, 0, 0, 35, 16,245, 0, /* 0x1220 */
123, 2,130, 16, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x1230 */
37,192, 98, 0, 1, 0,132, 36, 5, 0, 2, 36,247,255,130, 20, /* 0x1240 */
1, 0,173, 37, 33, 80, 0, 0, 33,112, 0, 0, 33,144, 0, 0, /* 0x1250 */
1, 0, 17, 36, 1, 0, 20, 36, 1, 0, 23, 36, 0, 0,183,175, /* 0x1260 */
87, 2, 0, 16,255,255, 15, 36,255,255, 70, 52, 43, 16,207, 0, /* 0x1270 */
8, 0, 64, 20, 0, 0, 0, 0,101, 2,167, 17, 0,122, 15, 0, /* 0x1280 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x1290 */
1, 0,173, 37, 8, 0,163,143, 0, 0, 0, 0, 36, 40, 67, 1, /* 0x12a0 */
0,201, 18, 0, 33, 16,185, 0, 64, 16, 2, 0, 33, 88, 2, 2, /* 0x12b0 */
0, 0, 99,149,194, 18, 15, 0, 24, 0, 67, 0, 18, 96, 0, 0, /* 0x12c0 */
43, 16, 12, 3,125, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x12d0 */
67, 17, 2, 0, 33, 16, 98, 0, 0, 0, 98,165, 4, 0,163,143, /* 0x12e0 */
0, 0, 0, 0, 36, 16, 67, 1, 4, 24,194, 2, 8, 0, 2, 36, /* 0x12f0 */
35, 16, 86, 0, 7, 16, 78, 0, 33, 16, 98, 0, 64, 26, 2, 0, /* 0x1300 */
192, 18, 2, 0, 35, 16, 67, 0, 33, 16, 2, 2,108, 14, 70, 36, /* 0x1310 */
7, 0, 66, 42, 3, 0, 64, 16, 33,120,128, 1, 85, 0, 0, 16, /* 0x1320 */
1, 0, 5, 36, 35, 16, 81, 1, 33, 16, 98, 2, 0, 0, 89,144, /* 0x1330 */
1, 0, 5, 36,255, 0, 2, 60,255,255, 66, 52, 43, 16, 79, 0, /* 0x1340 */
8, 0, 64, 20, 0, 0, 0, 0, 49, 2,167, 17, 0,122, 15, 0, /* 0x1350 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x1360 */
1, 0,173, 37, 64,200, 25, 0, 0, 1, 44, 51, 64, 16, 12, 0, /* 0x1370 */
33, 16,194, 0, 64,112, 5, 0, 33, 88, 78, 0, 0, 2, 99,149, /* 0x1380 */
194, 18, 15, 0, 24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, /* 0x1390 */
9, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, /* 0x13a0 */
33, 16, 98, 0, 0, 2, 98,165, 41, 0,128, 21, 33, 40,192, 1, /* 0x13b0 */
9, 0, 0, 16, 33,120,128, 0, 35,120,228, 1, 35,192, 4, 3, /* 0x13c0 */
66, 17, 3, 0, 35, 16, 98, 0, 0, 2, 98,165, 1, 0,162, 36, /* 0x13d0 */
40, 0,128, 17, 33, 40,162, 0, 0, 1,162, 40, 37, 0, 64, 16, /* 0x13e0 */
255, 0, 2, 60,213,255, 0, 16,255,255, 66, 52,255,255, 66, 52, /* 0x13f0 */
43, 16, 79, 0, 9, 0, 64, 20, 64, 96, 5, 0, 4, 2,167, 17, /* 0x1400 */
0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x1410 */
37,192, 98, 0, 1, 0,173, 37, 64, 96, 5, 0, 33, 88,204, 0, /* 0x1420 */
0, 0, 99,149,194, 18, 15, 0, 24, 0, 67, 0, 18, 32, 0, 0, /* 0x1430 */
43, 16, 4, 3, 8, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x1440 */
67, 17, 2, 0, 33, 16, 98, 0, 0, 0, 98,165, 33, 40,128, 1, /* 0x1450 */
8, 0, 0, 16, 33,120,128, 0, 35,120,228, 1, 35,192, 4, 3, /* 0x1460 */
66, 17, 3, 0, 35, 16, 98, 0, 0, 0, 98,165, 1, 0,162, 36, /* 0x1470 */
33, 40,162, 0, 0, 1,162, 40,220,255, 64, 20,255, 0, 2, 60, /* 0x1480 */
255, 0,174, 48, 33, 16,106, 2, 0, 0, 78,160, 4, 0, 66, 42, /* 0x1490 */
3, 0, 64, 16, 1, 0, 67, 37,200, 1, 0, 16, 33,144, 0, 0, /* 0x14a0 */
10, 0, 66, 42, 3, 0, 64, 16, 0, 0, 0, 0,195, 1, 0, 16, /* 0x14b0 */
253,255, 82, 38,193, 1, 0, 16,250,255, 82, 38, 35, 32,236, 1, /* 0x14c0 */
66, 17, 3, 0, 35, 16, 98, 0, 0, 0, 98,165, 43, 16,196, 0, /* 0x14d0 */
8, 0, 64, 20, 35,192, 12, 3,205, 1,167, 17, 0, 34, 4, 0, /* 0x14e0 */
0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, /* 0x14f0 */
1, 0,173, 37, 64, 16, 18, 0, 33,112, 2, 2,128, 1,195,149, /* 0x1500 */
194, 18, 4, 0, 24, 0, 67, 0, 18, 96, 0, 0, 43, 16, 12, 3, /* 0x1510 */
15, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, /* 0x1520 */
33, 16, 98, 0,128, 1,194,165, 7, 0, 66, 42, 2, 0, 64, 20, /* 0x1530 */
33,144, 0, 0, 3, 0, 18, 36,100, 6, 14, 38, 0, 0,183,175, /* 0x1540 */
33,184,128, 2, 33,160, 32, 2,144, 0, 0, 16, 33, 88,128, 1, /* 0x1550 */
35, 88,140, 0, 66, 17, 3, 0, 35, 16, 98, 0,128, 1,194,165, /* 0x1560 */
43, 16,203, 0, 8, 0, 64, 20, 35,192, 12, 3,168, 1,167, 17, /* 0x1570 */
0, 90, 11, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x1580 */
37,192, 98, 0, 1, 0,173, 37,152, 1,195,149,194, 18, 11, 0, /* 0x1590 */
24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, 50, 0, 64, 16, /* 0x15a0 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x15b0 */
152, 1,194,165, 0, 1, 2, 60, 43, 16,130, 0, 8, 0, 64, 16, /* 0x15c0 */
33, 88,128, 0,146, 1,167, 17, 0, 90, 4, 0, 0, 26, 24, 0, /* 0x15d0 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x15e0 */
64, 16, 25, 0, 33, 24, 2, 2, 64, 16, 5, 0, 33, 32, 98, 0, /* 0x15f0 */
224, 1,131,148,194, 18, 11, 0, 24, 0, 67, 0, 18, 96, 0, 0, /* 0x1600 */
43, 16, 12, 3, 18, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x1610 */
67, 17, 2, 0, 33, 16, 98, 0,125, 1, 64, 17,224, 1,130,164, /* 0x1620 */
7, 0, 66, 42, 2, 0, 64, 20, 9, 0, 18, 36, 11, 0, 18, 36, /* 0x1630 */
35, 16, 81, 1, 33, 16, 98, 2, 0, 0, 78,144, 33, 16,106, 2, /* 0x1640 */
0, 0, 78,160, 1, 0, 67, 37, 92, 1, 0, 16, 33,120,128, 1, /* 0x1650 */
35, 88,108, 1, 35,192, 12, 3, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x1660 */
69, 0, 0, 16,224, 1,130,164, 35, 88,100, 1, 66, 17, 3, 0, /* 0x1670 */
35, 16, 98, 0,152, 1,194,165, 43, 16,203, 0, 8, 0, 64, 20, /* 0x1680 */
35,192, 4, 3, 98, 1,167, 17, 0, 90, 11, 0, 0, 26, 24, 0, /* 0x1690 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x16a0 */
176, 1,195,149,194, 18, 11, 0, 24, 0, 67, 0, 18, 32, 0, 0, /* 0x16b0 */
43, 16, 4, 3, 7, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x16c0 */
67, 17, 2, 0, 33, 16, 98, 0,176, 1,194,165, 28, 0, 0, 16, /* 0x16d0 */
33, 16,128, 2, 35, 88,100, 1, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x16e0 */
176, 1,194,165, 43, 16,203, 0, 8, 0, 64, 20, 35,192, 4, 3, /* 0x16f0 */
71, 1,167, 17, 0, 90, 11, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x1700 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37,200, 1,195,149, /* 0x1710 */
194, 18, 11, 0, 24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, /* 0x1720 */
11, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, /* 0x1730 */
33, 16, 98, 0,200, 1,194,165, 33, 16,224, 2, 33,184,128, 2, /* 0x1740 */
33,160, 32, 2, 33,136, 64, 0, 11, 0, 0, 16, 33, 88,128, 0, /* 0x1750 */
35, 88,100, 1, 35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x1760 */
200, 1,194,165, 0, 0,162,143, 0, 0,183,175, 33,184,128, 2, /* 0x1770 */
33,160, 32, 2, 33,136, 64, 0, 7, 0, 66, 42, 2, 0, 64, 20, /* 0x1780 */
8, 0, 18, 36, 11, 0, 18, 36,104, 10, 14, 38,255, 0, 2, 60, /* 0x1790 */
255,255, 76, 52, 43, 16,139, 1, 8, 0, 64, 20, 0, 0, 0, 0, /* 0x17a0 */
27, 1,167, 17, 0, 90, 11, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x17b0 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, 0, 0,195,149, /* 0x17c0 */
194, 18, 11, 0, 24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, /* 0x17d0 */
12, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, /* 0x17e0 */
33, 16, 98, 0, 0, 0,194,165, 0, 17, 5, 0, 33, 16,194, 1, /* 0x17f0 */
4, 0, 69, 36, 33,120,128, 0, 3, 0, 8, 36, 41, 0, 0, 16, /* 0x1800 */
33, 48, 0, 0, 35, 88,100, 1, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x1810 */
0, 0,194,165, 43, 16,139, 1, 8, 0, 64, 20, 35,192, 4, 3, /* 0x1820 */
251, 0,167, 17, 0, 90, 11, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x1830 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, 2, 0,195,149, /* 0x1840 */
194, 18, 11, 0, 24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, /* 0x1850 */
12, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, /* 0x1860 */
33, 16, 98, 0, 2, 0,194,165, 0, 17, 5, 0, 33, 16,194, 1, /* 0x1870 */
4, 1, 69, 36, 33,120,128, 0, 3, 0, 8, 36, 9, 0, 0, 16, /* 0x1880 */
8, 0, 6, 36, 35,120,100, 1, 35,192, 4, 3, 66, 17, 3, 0, /* 0x1890 */
35, 16, 98, 0, 2, 0,194,165, 4, 2,197, 37, 8, 0, 8, 36, /* 0x18a0 */
16, 0, 6, 36, 33,112, 0, 1, 1, 0, 25, 36,255, 0, 2, 60, /* 0x18b0 */
255,255, 66, 52, 43, 16, 79, 0, 9, 0, 64, 20, 64, 96, 25, 0, /* 0x18c0 */
211, 0,167, 17, 0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, /* 0x18d0 */
0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, 64, 96, 25, 0, /* 0x18e0 */
33, 88,172, 0, 0, 0, 99,149,194, 18, 15, 0, 24, 0, 67, 0, /* 0x18f0 */
18, 32, 0, 0, 43, 16, 4, 3, 8, 0, 64, 16, 0, 8, 2, 36, /* 0x1900 */
35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, 0, 0, 98,165, /* 0x1910 */
33,200,128, 1, 8, 0, 0, 16, 33,120,128, 0, 35,120,228, 1, /* 0x1920 */
35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, 0, 0, 98,165, /* 0x1930 */
1, 0, 34, 39, 33,200, 34, 3,255,255,206, 37,220,255,192, 21, /* 0x1940 */
255, 0, 2, 60, 1, 0, 2, 36, 4, 16, 2, 1, 35, 16, 34, 3, /* 0x1950 */
33, 72, 70, 0, 4, 0, 66, 42,134, 0, 64, 16, 4, 0, 34, 41, /* 0x1960 */
2, 0, 64, 20, 33, 24, 32, 1, 3, 0, 3, 36,192, 17, 3, 0, /* 0x1970 */
33, 16, 2, 2, 96, 3, 70, 36, 1, 0, 14, 36, 6, 0, 25, 36, /* 0x1980 */
255, 0, 2, 60,255,255, 66, 52, 43, 16, 79, 0, 9, 0, 64, 20, /* 0x1990 */
64, 96, 14, 0,158, 0,167, 17, 0,122, 15, 0, 0, 26, 24, 0, /* 0x19a0 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x19b0 */
64, 96, 14, 0, 33, 88,204, 0, 0, 0, 99,149,194, 18, 15, 0, /* 0x19c0 */
24, 0, 67, 0, 18, 32, 0, 0, 43, 16, 4, 3, 8, 0, 64, 16, /* 0x19d0 */
0, 8, 2, 36, 35, 16, 67, 0, 67, 17, 2, 0, 33, 16, 98, 0, /* 0x19e0 */
0, 0, 98,165, 33,112,128, 1, 8, 0, 0, 16, 33,120,128, 0, /* 0x19f0 */
35,120,228, 1, 35,192, 4, 3, 66, 17, 3, 0, 35, 16, 98, 0, /* 0x1a00 */
0, 0, 98,165, 1, 0,194, 37, 33,112,194, 1,255,255, 57, 39, /* 0x1a10 */
220,255, 32, 23,255, 0, 2, 60,192,255,195, 37, 4, 0, 98, 40, /* 0x1a20 */
80, 0, 64, 20, 33,112, 96, 0, 67, 32, 3, 0, 1, 0, 98, 48, /* 0x1a30 */
2, 0, 75, 52, 14, 0, 98, 40, 8, 0, 64, 16,255,255,153, 36, /* 0x1a40 */
4,112, 43, 3, 64, 16, 14, 0, 33, 32, 2, 2, 64, 16, 3, 0, /* 0x1a50 */
35, 16,130, 0, 26, 0, 0, 16, 94, 5, 72, 36,251,255,132, 36, /* 0x1a60 */
255, 0, 2, 60,255,255, 66, 52, 43, 16, 79, 0, 8, 0, 64, 20, /* 0x1a70 */
0, 0, 0, 0,102, 0,167, 17, 0,122, 15, 0, 0, 26, 24, 0, /* 0x1a80 */
0, 0,162,145, 0, 0, 0, 0, 37,192, 98, 0, 1, 0,173, 37, /* 0x1a90 */
66,120, 15, 0, 43, 16, 15, 3, 3, 0, 64, 20, 64, 88, 11, 0, /* 0x1aa0 */
35,192, 15, 3, 1, 0,107, 53,255,255,132, 36,237,255,128, 20, /* 0x1ab0 */
255, 0, 2, 60, 68, 6, 8, 38, 0,113, 11, 0, 4, 0, 25, 36, /* 0x1ac0 */
1, 0, 6, 36, 1, 0, 5, 36,255, 0, 2, 60,255,255, 66, 52, /* 0x1ad0 */
43, 16, 79, 0, 9, 0, 64, 20, 64, 96, 5, 0, 76, 0,167, 17, /* 0x1ae0 */
0,122, 15, 0, 0, 26, 24, 0, 0, 0,162,145, 0, 0, 0, 0, /* 0x1af0 */
37,192, 98, 0, 1, 0,173, 37, 64, 96, 5, 0, 33, 88, 12, 1, /* 0x1b00 */
0, 0, 99,149,194, 18, 15, 0, 24, 0, 67, 0, 18, 32, 0, 0, /* 0x1b10 */
43, 16, 4, 3, 8, 0, 64, 16, 0, 8, 2, 36, 35, 16, 67, 0, /* 0x1b20 */
67, 17, 2, 0, 33, 16, 98, 0, 0, 0, 98,165, 33, 40,128, 1, /* 0x1b30 */
9, 0, 0, 16, 33,120,128, 0, 35,120,228, 1, 35,192, 4, 3, /* 0x1b40 */
66, 17, 3, 0, 35, 16, 98, 0, 0, 0, 98,165, 1, 0,162, 36, /* 0x1b50 */
33, 40,162, 0, 37,112,198, 1,255,255, 57, 39,218,255, 32, 23, /* 0x1b60 */
64, 48, 6, 0, 1, 0,209, 37, 26, 0, 32, 18,255, 0, 2, 60, /* 0x1b70 */
7, 0, 82, 38, 43, 16, 81, 1, 38, 0, 64, 20, 1, 0, 2, 36, /* 0x1b80 */
35, 16, 81, 1, 33, 88, 98, 2, 33, 32,106, 2, 33, 24, 64, 1, /* 0x1b90 */
0, 0,110,145, 1, 0, 99, 36, 33, 16, 73, 1, 2, 0, 66, 36, /* 0x1ba0 */
6, 0, 98, 16, 0, 0,142,160, 1, 0,107, 37, 16, 0,162,143, /* 0x1bb0 */
0, 0, 0, 0,246,255, 98, 20, 1, 0,132, 36, 33, 80, 96, 0, /* 0x1bc0 */
16, 0,163,143, 0, 0, 0, 0, 43, 16, 67, 1,166,253, 64, 20, /* 0x1bd0 */
255, 0, 2, 60,255,255, 66, 52, 43, 16, 79, 0, 4, 0, 64, 20, /* 0x1be0 */
35, 40,181, 1, 10, 0,167, 17, 1, 0,173, 37, 35, 40,181, 1, /* 0x1bf0 */
12, 0,162,143, 0, 0, 0, 0, 0, 0, 69,172, 20, 0,163,143, /* 0x1c00 */
0, 0, 0, 0, 0, 0,106,172, 2, 0, 0, 16, 33, 16, 0, 0, /* 0x1c10 */
1, 0, 2, 36, 52, 0,183,143, 48, 0,182,143, 44, 0,181,143, /* 0x1c20 */
40, 0,180,143, 36, 0,179,143, 32, 0,178,143, 28, 0,177,143, /* 0x1c30 */
24, 0,176,143, 8, 0,224, 3, 56, 0,189, 39, 13, 0, 0, 0, /* 0x1c40 */
32, 40,164, 0, 0, 0,230,172, 0, 0,227,140, 35,192,133, 0, /* 0x1c50 */
33, 32, 96, 0, 35, 40,195, 0, 0, 0,229,172, 3, 0, 6, 36, /* 0x1c60 */
51, 16, 2, 36, 12, 0, 0, 0, 8, 0,224, 3, 33, 16, 0, 3, /* 0x1c70 */
30, 0, 6, 36,255,255, 17, 4, 33, 40,224, 3, 80, 82, 79, 84, /* 0x1c80 */
95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, /* 0x1c90 */
32,102, 97,105,108,101,100, 46, 10, 0, 2, 0, 4, 36,164, 15, /* 0x1ca0 */
2, 36, 12, 0, 0, 0,127, 0, 4, 36,161, 15, 2, 36, 12, 0, /* 0x1cb0 */
0, 0,224,255,189, 39,224,255,228,142, 7, 0, 6, 36,228,255, /* 0x1cc0 */
229,142, 18, 8, 7, 36, 16, 0,160,175,250, 15, 2, 36, 12, 0, /* 0x1cd0 */
0, 0, 27, 0,224, 20, 33, 32, 64, 0,236,255,229,142,232,255, /* 0x1ce0 */
243,142,240,255,242,142,244,255,241,142, 13, 0,133, 16, 35, 64, /* 0x1cf0 */
133, 0, 35, 48,215, 2, 33, 48,213, 0, 33,184,232, 2, 0, 0, /* 0x1d00 */
168,140, 8, 0,132, 36, 4, 0,169,140,248,255,198, 36,248,255, /* 0x1d10 */
136,172, 8, 0,165, 36,249,255,192, 28,252,255,137,172, 33, 16, /* 0x1d20 */
128, 0, 0, 0,200,142, 33, 56,160, 3, 0, 0,168,175, 33, 48, /* 0x1d30 */
64, 0, 4, 0,197,142, 12, 0,196, 38, 8, 0,224, 2, 33,248, /* 0x1d40 */
192, 0,255,255, 0, 16, 0, 0, 0, 0,220,255,245,142,216,255, /* 0x1d50 */
17, 4, 33,176,224, 3,116,109,112, 47,109,105,112,115,101,108, /* 0x1d60 */
46,114, 51, 48, 48, 48, 45,108,105,110,117,120, 46,101,108,102, /* 0x1d70 */
45,101,110,116,114,121, 46, 98,105,110, 58, 32, 32, 32, 32, 32, /* 0x1d80 */
102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51, /* 0x1d90 */
50, 45,108,105,116,116,108,101,109,105,112,115, 10, 10, 83,101, /* 0x1da0 */
99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, /* 0x1db0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, /* 0x1dc0 */
32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, /* 0x1dd0 */
65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, /* 0x1de0 */
32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, /* 0x1df0 */
48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, /* 0x1e00 */
48, 48, 48, 48, 48, 48, 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1e10 */
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1e20 */
48, 48, 48, 48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, /* 0x1e30 */
78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, /* 0x1e40 */
69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 50, /* 0x1e50 */
69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50, /* 0x1e60 */
49, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1e70 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 52, /* 0x1e80 */
32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x1e90 */
44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1ea0 */
89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, /* 0x1eb0 */
32, 32, 32, 32, 48, 48, 48, 48, 48, 49,102, 48, 32, 32, 48, 48, /* 0x1ec0 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1ed0 */
32, 32, 48, 48, 48, 48, 48, 50, 54, 99, 32, 32, 50, 42, 42, 48, /* 0x1ee0 */
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, /* 0x1ef0 */
67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, /* 0x1f00 */
78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, /* 0x1f10 */
48, 48, 48, 49, 98, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1f20 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1f30 */
48, 52, 53, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x1f40 */
69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, /* 0x1f50 */
68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 76, 90, 77, 65, 95, 69, /* 0x1f60 */
76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 99, /* 0x1f70 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1f80 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 54, 49, 48, 32, 32, /* 0x1f90 */
50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x1fa0 */
82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, 90, 77, /* 0x1fb0 */
65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, /* 0x1fc0 */
97,100, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1fd0 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 54, 57, /* 0x1fe0 */
99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, /* 0x1ff0 */
83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, /* 0x2000 */
76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, /* 0x2010 */
48, 48, 48, 97,100, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2020 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x2030 */
49, 49, 55, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x2040 */
69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, /* 0x2050 */
32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, /* 0x2060 */
32, 48, 48, 48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, /* 0x2070 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x2080 */
48, 48, 48, 49, 99, 52, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, /* 0x2090 */
79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x20a0 */
89, 10, 32, 32, 56, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, /* 0x20b0 */
32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 56, 32, 32, 48, 48, /* 0x20c0 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x20d0 */
32, 32, 48, 48, 48, 48, 49, 99, 53, 48, 32, 32, 50, 42, 42, 48, /* 0x20e0 */
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, /* 0x20f0 */
79, 78, 76, 89, 10, 32, 32, 57, 32, 78, 82, 86, 95, 84, 65, 73, /* 0x2100 */
76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 56, 32, /* 0x2110 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x2120 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 99, 53, 56, 32, 32, 50, /* 0x2130 */
42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x2140 */
69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, /* 0x2150 */
65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x2160 */
50, 97, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x2170 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 99, 56, 48, /* 0x2180 */
32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x2190 */
44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x21a0 */
89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, /* 0x21b0 */
32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 98, 99, 32, 32, 48, 48, /* 0x21c0 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x21d0 */
32, 32, 48, 48, 48, 48, 49, 99, 97, 97, 32, 32, 50, 42, 42, 48, /* 0x21e0 */
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, /* 0x21f0 */
79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, /* 0x2200 */
69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x2210 */
32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, /* 0x2220 */
48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, /* 0x2230 */
48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, /* 0x2240 */
69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x2250 */
48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, /* 0x2260 */
48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, /* 0x2270 */
65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, /* 0x2280 */
70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2290 */
108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, /* 0x22a0 */
48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, /* 0x22b0 */
48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, /* 0x22c0 */
86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, /* 0x22d0 */
50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x22e0 */
32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, /* 0x22f0 */
48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2300 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, /* 0x2310 */
76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, /* 0x2320 */
77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2330 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, /* 0x2340 */
69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, /* 0x2350 */
77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2360 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, /* 0x2370 */
69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, /* 0x2380 */
77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2390 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, /* 0x23a0 */
69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, /* 0x23b0 */
77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x23c0 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, /* 0x23d0 */
65, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, /* 0x23e0 */
72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x23f0 */
32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, /* 0x2400 */
48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x2410 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, /* 0x2420 */
32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2430 */
32, 65, 68, 82, 77, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x2440 */
32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, /* 0x2450 */
48, 48, 48, 48, 48, 32, 76, 69, 78, 77, 10, 48, 48, 48, 48, 48, /* 0x2460 */
48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, /* 0x2470 */
42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 68, 82, 85, 10, /* 0x2480 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2490 */
32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x24a0 */
65, 68, 82, 67, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, /* 0x24b0 */
32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, /* 0x24c0 */
48, 48, 48, 48, 32, 76, 69, 78, 85, 10, 48, 48, 48, 48, 48, 48, /* 0x24d0 */
48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, /* 0x24e0 */
9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 68, 82, 88, 10, 48, /* 0x24f0 */
48, 48, 48, 48, 48, 49, 56, 32,103, 32, 32, 32, 32, 32, 79, 32, /* 0x2500 */
69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x2510 */
48, 32, 95,115,116, 97,114,116, 10, 10, 82, 69, 76, 79, 67, 65, /* 0x2520 */
84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, /* 0x2530 */
32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, /* 0x2540 */
83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x2550 */
32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x2560 */
48, 48, 48, 48, 48, 48, 32, 82, 95, 77, 73, 80, 83, 95, 51, 50, /* 0x2570 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 65, 68, 82, 77, 10, 48, 48, /* 0x2580 */
48, 48, 48, 48, 48, 52, 32, 82, 95, 77, 73, 80, 83, 95, 51, 50, /* 0x2590 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 69, 78, 77, 10, 48, 48, /* 0x25a0 */
48, 48, 48, 48, 48, 56, 32, 82, 95, 77, 73, 80, 83, 95, 51, 50, /* 0x25b0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 65, 68, 82, 85, 10, 48, 48, /* 0x25c0 */
48, 48, 48, 48, 48, 99, 32, 82, 95, 77, 73, 80, 83, 95, 51, 50, /* 0x25d0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 65, 68, 82, 67, 10, 48, 48, /* 0x25e0 */
48, 48, 48, 48, 49, 48, 32, 82, 95, 77, 73, 80, 83, 95, 51, 50, /* 0x25f0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 69, 78, 85, 10, 48, 48, /* 0x2600 */
48, 48, 48, 48, 49, 52, 32, 82, 95, 77, 73, 80, 83, 95, 51, 50, /* 0x2610 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 65, 68, 82, 88, 10, 48, 48, /* 0x2620 */
48, 48, 48, 48, 49, 56, 32, 82, 95, 77, 73, 80, 83, 95, 80, 67, /* 0x2630 */
49, 54, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x2640 */
90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x2650 */
67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 69, /* 0x2660 */
93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, /* 0x2670 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, /* 0x2680 */
76, 85, 69, 10, 48, 48, 48, 48, 48, 49, 49, 99, 32, 82, 95, 77, /* 0x2690 */
73, 80, 83, 95, 80, 67, 49, 54, 32, 32, 32, 32, 32, 32, 32, 78, /* 0x26a0 */
82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x26b0 */
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x26c0 */
91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, /* 0x26d0 */
32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x26e0 */
32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 49, /* 0x26f0 */
49, 99, 32, 82, 95, 77, 73, 80, 83, 95, 80, 67, 49, 54, 32, 32, /* 0x2700 */
32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, /* 0x2710 */
69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, /* 0x2720 */
83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, 10, 79, /* 0x2730 */
70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, /* 0x2740 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, /* 0x2750 */
48, 48, 48, 48, 48, 48, 99, 52, 32, 82, 95, 77, 73, 80, 83, 95, /* 0x2760 */
80, 67, 49, 54, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, /* 0x2770 */
65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, /* 0x2780 */
82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, /* 0x2790 */
77, 65, 73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, /* 0x27a0 */
32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x27b0 */
32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x27c0 */
52, 32, 82, 95, 77, 73, 80, 83, 95, 80, 67, 49, 54, 32, 32, 32, /* 0x27d0 */
32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10 /* 0x27e0 */
};
+196
View File
@@ -0,0 +1,196 @@
/* mipsel.r3000-linux.elf-fold.h
created from mipsel.r3000-linux.elf-fold.bin, 2560 (0xa00) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_MIPSEL_R3000_LINUX_ELF_FOLD_SIZE 2560
#define STUB_MIPSEL_R3000_LINUX_ELF_FOLD_ADLER32 0x62582e6c
#define STUB_MIPSEL_R3000_LINUX_ELF_FOLD_CRC32 0xbf4a45c4
unsigned char stub_mipsel_r3000_linux_elf_fold[2560] = {
127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
2, 0, 8, 0, 1, 0, 0, 0,128, 0, 16, 0, 52, 0, 0, 0, /* 0x 10 */
0, 0, 0, 0, 1, 48, 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, 16, 0, /* 0x 30 */
0, 0, 16, 0, 0, 10, 0, 0, 0, 10, 0, 0, 5, 0, 0, 0, /* 0x 40 */
0, 16, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, /* 0x 50 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
32, 0,162, 39, 24,240,189, 39, 33, 24,160, 3, 0, 0, 65,140, /* 0x 80 */
4, 0, 66, 36, 0, 0, 97,172, 4, 0, 99, 36,251,255, 32, 20, /* 0x 90 */
33,128, 96, 0, 4, 0, 99, 36, 0, 0, 65,140, 4, 0, 66, 36, /* 0x a0 */
0, 0, 97,172, 4, 0, 99, 36,251,255, 32, 20, 33,160, 96, 0, /* 0x b0 */
0, 0, 65,140, 4, 0, 72,140, 8, 0, 66, 36, 0, 0, 97,172, /* 0x c0 */
4, 0,104,172, 8, 0, 99, 36,249,255, 32, 20, 33,176, 96, 0, /* 0x d0 */
0, 0, 3,174, 32, 0, 1, 36, 0, 0, 97,160, 1, 0, 97,160, /* 0x e0 */
2, 0, 97,160, 61, 0, 1, 36, 3, 0, 97,160,255, 15, 6, 36, /* 0x f0 */
4, 0,101, 36, 5, 0, 17, 4, 33, 32,224, 3, 47,112,114,111, /* 0x 100 */
99, 47,115,101,108,102, 47,101,120,101, 0, 0,245, 15, 2, 36, /* 0x 110 */
12, 0, 0, 0, 2, 0,224, 4, 33, 8,162, 0, 0, 0, 32,160, /* 0x 120 */
0,254,189, 39, 33, 72, 0, 0, 33, 64,224, 2, 33, 56,128, 2, /* 0x 130 */
33, 48,160, 3,116,255,165, 38, 1, 0, 16, 4, 80, 1, 2, 36, /* 0x 140 */
35, 16,226, 3, 84, 8, 66, 36, 9,248, 64, 0, 33, 32, 32, 2, /* 0x 150 */
33,200, 64, 0, 0, 2,189, 39,252,255,193,142, 33, 40, 64, 2, /* 0x 160 */
3, 0, 32, 16, 33, 32, 96, 2, 8, 0, 32, 0,251, 15, 2, 36, /* 0x 170 */
8, 0, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 180 */
250, 15, 2, 36,224,255,189, 39, 16, 0,168,175, 20, 0,169,175, /* 0x 190 */
12, 0, 0, 0, 2, 0, 0, 16, 32, 0,189, 39, 12, 0, 0, 0, /* 0x 1a0 */
3, 0,224, 20, 0, 0, 0, 0, 8, 0,224, 3, 0, 0, 0, 0, /* 0x 1b0 */
8, 0,224, 3,255,255, 2, 36, 8, 0,224, 3, 0, 0, 0, 0, /* 0x 1c0 */
0, 0,130,140, 4, 0,135,140, 43, 16, 70, 0, 3, 0, 64, 20, /* 0x 1d0 */
161, 15, 2, 36, 10, 0, 0, 16, 33, 24,192, 0,127, 0, 4, 36, /* 0x 1e0 */
238,255, 17, 4, 0, 0, 0, 0,255,255, 0, 16, 0, 0, 0, 0, /* 0x 1f0 */
0, 0,226,144, 1, 0,231, 36, 0, 0,162,160, 1, 0,165, 36, /* 0x 200 */
255,255, 99, 36,255,255, 2, 36,249,255, 98, 20, 0, 0, 0, 0, /* 0x 210 */
4, 0,131,140, 0, 0,130,140, 33, 24,102, 0, 35, 16, 70, 0, /* 0x 220 */
0, 0,130,172, 8, 0,224, 3, 4, 0,131,172,216,255,189, 39, /* 0x 230 */
28, 0,179,175, 24, 0,178,175, 20, 0,177,175, 16, 0,176,175, /* 0x 240 */
33,136,128, 0, 33,128,160, 0, 33,152,192, 0, 33,144,224, 0, /* 0x 250 */
82, 0, 0, 16, 32, 0,191,175, 33, 32, 32, 2,216,255, 17, 4, /* 0x 260 */
4, 0,165, 39, 4, 0,163,143, 8, 0,166,143, 10, 0, 96, 20, /* 0x 270 */
88, 33, 2, 60, 85, 80, 66, 52, 10, 0,194, 20,127, 0, 4, 36, /* 0x 280 */
0, 0, 34,142, 0, 0, 0, 0, 7, 0, 64, 20,161, 15, 2, 36, /* 0x 290 */
70, 0, 0, 16, 0, 0, 0, 0, 7, 0,192, 20, 43, 16,102, 0, /* 0x 2a0 */
127, 0, 4, 36,161, 15, 2, 36,188,255, 17, 4, 0, 0, 0, 0, /* 0x 2b0 */
255,255, 0, 16, 0, 0, 0, 0,250,255, 64, 20,127, 0, 4, 36, /* 0x 2c0 */
0, 0, 2,142, 0, 0, 0, 0, 43, 16, 67, 0,245,255, 64, 20, /* 0x 2d0 */
43, 16,195, 0, 4, 0, 7,142, 39, 0, 64, 16, 33, 40,224, 0, /* 0x 2e0 */
4, 0, 36,142, 12, 0,168,143, 33, 40,192, 0, 0, 0,163,175, /* 0x 2f0 */
33, 48,224, 0, 9,248, 96, 2, 33, 56,160, 3,233,255, 64, 20, /* 0x 300 */
127, 0, 4, 36, 0, 0,165,143, 4, 0,162,143, 0, 0, 0, 0, /* 0x 310 */
228,255,162, 20, 0, 0, 0, 0, 13, 0,167,147, 0, 0, 0, 0, /* 0x 320 */
13, 0,224, 16, 0, 0, 0, 0, 11, 0, 64, 18, 1, 2,162, 44, /* 0x 330 */
5, 0, 64, 16, 0, 0, 0, 0, 0, 0, 2,142, 0, 0, 0, 0, /* 0x 340 */
5, 0, 69, 20, 0, 0, 0, 0, 4, 0, 4,142, 14, 0,166,147, /* 0x 350 */
9,248, 64, 2, 0, 0, 0, 0, 8, 0,162,143, 4, 0, 35,142, /* 0x 360 */
0, 0, 36,142, 33, 24, 98, 0, 35, 32,130, 0, 4, 0, 35,174, /* 0x 370 */
3, 0, 0, 16, 0, 0, 36,174,145,255, 17, 4, 33, 32, 32, 2, /* 0x 380 */
4, 0,162,143, 4, 0, 3,142, 0, 0, 4,142, 33, 24, 98, 0, /* 0x 390 */
35, 32,130, 0, 4, 0, 3,174, 0, 0, 4,174, 0, 0, 2,142, /* 0x 3a0 */
0, 0, 0, 0,172,255, 64, 20, 12, 0, 6, 36, 32, 0,191,143, /* 0x 3b0 */
28, 0,179,143, 24, 0,178,143, 20, 0,177,143, 16, 0,176,143, /* 0x 3c0 */
8, 0,224, 3, 40, 0,189, 39, 14, 0,128, 16, 33, 16,128, 0, /* 0x 3d0 */
1, 0, 4, 36, 0, 0, 67,140, 0, 0, 0, 0, 5, 0,101, 16, /* 0x 3e0 */
0, 0, 0, 0, 5, 0,100, 20, 0, 0, 0, 0, 3, 0,160, 16, /* 0x 3f0 */
0, 0, 0, 0, 8, 0,224, 3, 0, 0, 69,172,245,255, 0, 16, /* 0x 400 */
8, 0, 66, 36, 8, 0,224, 3, 0, 0, 0, 0,248,255,189, 39, /* 0x 410 */
0, 0,176,175, 4, 0,191,175,235,255, 17, 4, 33,128,192, 0, /* 0x 420 */
2, 0, 64, 16, 0, 0, 0, 0, 4, 0, 80,172, 4, 0,191,143, /* 0x 430 */
0, 0,176,143, 8, 0,224, 3, 8, 0,189, 39,168,255,189, 39, /* 0x 440 */
80, 0,190,175, 68, 0,181,175, 52, 0,177,175, 84, 0,191,175, /* 0x 450 */
76, 0,183,175, 72, 0,182,175, 64, 0,180,175, 60, 0,179,175, /* 0x 460 */
56, 0,178,175, 48, 0,176,175, 28, 0,162,140, 33,168,160, 0, /* 0x 470 */
28, 0,164,175, 6, 0, 5, 36, 33, 32,224, 0, 32, 0,167,175, /* 0x 480 */
33,240,192, 0, 36, 0,168,175, 40, 0,169,175,206,255, 17, 4, /* 0x 490 */
33,136,162, 2, 3, 0, 64, 20, 0, 0, 0, 0, 4, 0, 0, 16, /* 0x 4a0 */
255,255, 2, 52, 4, 0, 66,140, 0, 0, 0, 0,255,255, 66, 36, /* 0x 4b0 */
20, 0,162,175, 16, 0,162,150, 20, 0,164,143, 2, 0, 66, 56, /* 0x 4c0 */
44, 0,163,150, 1, 0, 66, 44, 0, 17, 2, 0, 39, 40, 4, 0, /* 0x 4d0 */
2, 8, 71, 36,255,255, 99, 36, 33, 64, 32, 2,255,255, 4, 36, /* 0x 4e0 */
33, 72, 0, 0, 19, 0, 0, 16, 1, 0, 10, 36, 0, 0, 2,141, /* 0x 4f0 */
0, 0, 0, 0, 14, 0, 74, 20,255,255, 99, 36, 8, 0, 6,141, /* 0x 500 */
0, 0, 0, 0, 43, 16,196, 0, 2, 0, 64, 16, 0, 0, 0, 0, /* 0x 510 */
33, 32,192, 0, 20, 0, 2,141, 0, 0, 0, 0, 33, 48,194, 0, /* 0x 520 */
43, 16, 38, 1, 2, 0, 64, 16, 0, 0, 0, 0, 33, 72,192, 0, /* 0x 530 */
32, 0, 8, 37,237,255, 97, 4, 36,128,164, 0, 35, 16, 48, 1, /* 0x 540 */
35, 16, 69, 0,255,255, 66, 36, 36, 40,162, 0, 16, 0,227, 48, /* 0x 550 */
3, 0, 96, 16, 8, 0,165,175, 8, 0, 0, 16, 12, 0,176,175, /* 0x 560 */
8, 0,165,143, 33, 32, 0, 2, 33, 48, 0, 0,255,255, 8, 36, /* 0x 570 */
3,255, 17, 4, 33, 72, 0, 0, 12, 0,162,175, 12, 0,165,143, /* 0x 580 */
16, 0,160,175,133, 0, 0, 16, 35,184,176, 0, 12, 0,192, 19, /* 0x 590 */
6, 0, 2, 36, 0, 0, 35,142, 0, 0, 0, 0, 10, 0, 98, 20, /* 0x 5a0 */
1, 0, 2, 36, 8, 0, 38,142, 32, 0,164,143, 33, 48,230, 2, /* 0x 5b0 */
150,255, 17, 4, 3, 0, 5, 36,116, 0, 0, 16, 0, 0, 0, 0, /* 0x 5c0 */
0, 0, 35,142, 1, 0, 2, 36,112, 0, 98, 20, 0, 0, 0, 0, /* 0x 5d0 */
8, 0, 34,142, 24, 0, 35,142, 33,176,226, 2, 81,115, 2, 60, /* 0x 5e0 */
128, 24, 3, 0, 64, 98, 66, 52, 6, 16, 98, 0, 20, 0,165,143, /* 0x 5f0 */
16, 0, 36,142, 7, 0, 82, 48, 20, 0, 34,142, 36, 24,197, 2, /* 0x 600 */
0, 0,164,175, 4, 0,182,175, 33,160,131, 0, 24, 0,162,175, /* 0x 610 */
122, 0,192, 19, 35,152,195, 2, 2, 0, 70, 54,255,255, 8, 36, /* 0x 620 */
18, 8, 7, 36, 4, 0, 41,142, 33, 32, 96, 2, 35, 72, 35, 1, /* 0x 630 */
211,254, 17, 4, 33, 40,128, 2, 64, 0, 98, 22,127, 0, 4, 36, /* 0x 640 */
11, 0,192, 19, 4, 0, 66, 50, 4, 0, 64, 16, 0, 0, 0, 0, /* 0x 650 */
40, 0,167,143, 2, 0, 0, 16, 0, 0, 0, 0, 33, 56, 0, 0, /* 0x 660 */
28, 0,166,143, 33, 32,192, 3,240,254, 17, 4, 33, 40,160, 3, /* 0x 670 */
20, 0,164,143, 35, 16, 20, 0, 2, 0, 67, 50, 8, 0, 96, 16, /* 0x 680 */
36,128, 68, 0, 6, 0, 0, 18, 33, 24,116, 2, 33, 16, 0, 2, /* 0x 690 */
255,255, 66, 36, 0, 0, 96,160,253,255, 64, 20, 1, 0, 99, 36, /* 0x 6a0 */
43, 0,192, 19, 1, 0, 2, 36, 0, 0, 35,142, 0, 0, 0, 0, /* 0x 6b0 */
28, 0, 98, 20, 33, 32, 96, 2, 24, 0, 34,142, 0, 0, 0, 0, /* 0x 6c0 */
1, 0, 66, 48, 24, 0, 64, 16, 33, 40,128, 2, 20, 0, 36,142, /* 0x 6d0 */
16, 0, 34,142, 8, 0, 35,142, 17, 0,130, 20, 33, 16,131, 0, /* 0x 6e0 */
33, 48, 87, 0, 20, 0,165,143, 35, 16, 6, 0, 36, 16,162, 0, /* 0x 6f0 */
12, 0, 66, 44, 11, 0, 64, 20, 33, 32, 96, 2, 12, 0, 2, 36, /* 0x 700 */
0, 0,194,172, 32, 3, 2, 60, 8, 0, 66, 52, 32, 0,164,143, /* 0x 710 */
4, 0,194,172, 8, 0,192,172, 60,255, 17, 4, 33, 40, 0, 0, /* 0x 720 */
33, 32, 96, 2, 33, 40,128, 2, 33, 48, 64, 2,155,254, 17, 4, /* 0x 730 */
29, 16, 2, 36, 6, 0, 64, 16,127, 0, 4, 36,161, 15, 2, 36, /* 0x 740 */
150,254, 17, 4, 0, 0, 0, 0,255,255, 0, 16, 0, 0, 0, 0, /* 0x 750 */
24, 0,163,143, 33, 16,144, 2, 33, 40,195, 2, 33,128, 98, 2, /* 0x 760 */
43, 16, 5, 2, 9, 0, 64, 16, 35, 40,176, 0, 33, 48, 64, 2, /* 0x 770 */
33, 32, 0, 2, 18, 8, 7, 36,255,255, 8, 36,128,254, 17, 4, /* 0x 780 */
33, 72, 0, 0,237,255, 2, 22,127, 0, 4, 36, 16, 0,164,143, /* 0x 790 */
32, 0, 49, 38, 1, 0,132, 36, 16, 0,164,175, 44, 0,162,150, /* 0x 7a0 */
16, 0,165,143, 0, 0, 0, 0, 42, 16,162, 0,119,255, 64, 20, /* 0x 7b0 */
0, 0, 0, 0, 11, 0,192, 19, 3, 0, 2, 36, 16, 0,163,150, /* 0x 7c0 */
0, 0, 0, 0, 7, 0, 98, 16, 0, 0, 0, 0, 12, 0,162,143, /* 0x 7d0 */
8, 0,163,143, 0, 0, 0, 0, 33, 32, 67, 0,111,254, 17, 4, /* 0x 7e0 */
205, 15, 2, 36, 36, 0,164,143, 0, 0, 0, 0, 7, 0,128, 16, /* 0x 7f0 */
0, 0, 0, 0, 5, 0, 0, 16, 0, 0,151,172, 28, 0,168,143, /* 0x 800 */
33, 48, 64, 2,135,255, 0, 16, 18, 0, 7, 36, 24, 0,162,142, /* 0x 810 */
84, 0,191,143, 33, 16,226, 2, 80, 0,190,143, 76, 0,183,143, /* 0x 820 */
72, 0,182,143, 68, 0,181,143, 64, 0,180,143, 60, 0,179,143, /* 0x 830 */
56, 0,178,143, 52, 0,177,143, 48, 0,176,143, 8, 0,224, 3, /* 0x 840 */
88, 0,189, 39,200,255,189, 39, 52, 0,191,175, 48, 0,180,175, /* 0x 850 */
44, 0,179,175, 40, 0,178,175, 36, 0,177,175, 32, 0,176,175, /* 0x 860 */
33,128, 0, 1, 0, 0,136,140, 33, 24,160, 0, 33, 16,128, 0, /* 0x 870 */
33,144,192, 0, 33,160,224, 0, 4, 0,165, 39, 33, 56, 0, 0, /* 0x 880 */
33, 48, 0, 2, 20, 0,164, 39, 20, 0,163,175, 33,136, 32, 1, /* 0x 890 */
12, 0,163,175, 4, 0,168,175, 24, 0,162,175, 16, 0,162,175, /* 0x 8a0 */
98,254, 17, 4, 8, 0,178,175, 44, 0, 70,150, 33, 32,128, 2, /* 0x 8b0 */
214,254, 17, 4, 5, 0, 5, 36, 42, 0, 70,150, 33, 32,128, 2, /* 0x 8c0 */
4, 0, 5, 36,209,254, 17, 4, 52, 0, 83, 38, 8, 0,102,142, /* 0x 8d0 */
33, 32,128, 2, 52, 0,198, 36,204,254, 17, 4, 3, 0, 5, 36, /* 0x 8e0 */
33, 72, 32, 2, 33, 32, 0, 2, 33, 40, 64, 2, 12, 0,166, 39, /* 0x 8f0 */
33, 56,128, 2,209,254, 17, 4, 33, 64,160, 3, 33, 48, 64, 0, /* 0x 900 */
33, 32,128, 2, 9, 0, 5, 36,192,254, 17, 4, 33,136, 64, 0, /* 0x 910 */
44, 0, 69,150, 42, 0, 0, 16, 33, 32, 0, 0, 0, 0, 99,142, /* 0x 920 */
3, 0, 2, 36, 38, 0, 98, 20, 32, 0,115, 38,224,255,115, 38, /* 0x 930 */
8, 0, 98,142, 0, 0,164,143, 33, 40, 0, 0, 33, 32, 68, 0, /* 0x 940 */
33, 48, 0, 0, 21,254, 17, 4,165, 15, 2, 36, 9, 0, 64, 4, /* 0x 950 */
33,128, 64, 0, 33, 32, 64, 0, 33, 40, 64, 2, 0, 2, 6, 36, /* 0x 960 */
14,254, 17, 4,163, 15, 2, 36, 0, 2, 3, 36, 6, 0, 67, 16, /* 0x 970 */
33, 56,128, 2,127, 0, 4, 36, 8,254, 17, 4,161, 15, 2, 36, /* 0x 980 */
255,255, 0, 16, 0, 0, 0, 0, 33, 64,160, 3, 33, 72, 0, 0, /* 0x 990 */
170,254, 17, 4, 33, 48, 0, 0, 0, 0,166,143, 33, 32,128, 2, /* 0x 9a0 */
7, 0, 5, 36,153,254, 17, 4, 33,136, 64, 0, 33, 32, 0, 2, /* 0x 9b0 */
250,253, 17, 4,166, 15, 2, 36, 5, 0, 0, 16, 33, 16, 32, 2, /* 0x 9c0 */
42, 16,133, 0,213,255, 64, 20, 1, 0,132, 36, 33, 16, 32, 2, /* 0x 9d0 */
52, 0,191,143, 48, 0,180,143, 44, 0,179,143, 40, 0,178,143, /* 0x 9e0 */
36, 0,177,143, 32, 0,176,143, 8, 0,224, 3, 56, 0,189, 39 /* 0x 9f0 */
};
+1320 -1297
View File
File diff suppressed because it is too large Load Diff
+155 -155
View File
@@ -1,5 +1,5 @@
/* powerpc-darwin.macho-entry.h /* powerpc-darwin.macho-entry.h
created from powerpc-darwin.macho-entry.bin, 8406 (0x20d6) bytes created from powerpc-darwin.macho-entry.bin, 8410 (0x20da) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,15 +28,15 @@
*/ */
#define STUB_POWERPC_DARWIN_MACHO_ENTRY_SIZE 8406 #define STUB_POWERPC_DARWIN_MACHO_ENTRY_SIZE 8410
#define STUB_POWERPC_DARWIN_MACHO_ENTRY_ADLER32 0x8291963e #define STUB_POWERPC_DARWIN_MACHO_ENTRY_ADLER32 0xd0d29892
#define STUB_POWERPC_DARWIN_MACHO_ENTRY_CRC32 0x977e3f05 #define STUB_POWERPC_DARWIN_MACHO_ENTRY_CRC32 0xbe74f591
unsigned char stub_powerpc_darwin_macho_entry[8406] = { unsigned char stub_powerpc_darwin_macho_entry[8410] = {
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */ 0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
0, 0, 24,120, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */ 0, 0, 24,124, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */
0, 21, 0, 18, 72, 0, 0, 69,124, 0, 41,236,125,168, 2,166, /* 0x 30 */ 0, 21, 0, 18, 72, 0, 0, 73,124, 0, 41,236,125,168, 2,166, /* 0x 30 */
40, 7, 0, 8, 64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, /* 0x 40 */ 40, 7, 0, 8, 64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, /* 0x 40 */
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 50 */ 60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 50 */
57, 64,255,255, 72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 60 */ 57, 64,255,255, 72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 60 */
@@ -92,7 +92,7 @@ unsigned char stub_powerpc_darwin_macho_entry[8406] = {
141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, 56,224, 1, 0, /* 0x 380 */ 141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, 56,224, 1, 0, /* 0x 380 */
124, 7, 41,236,124, 7, 26, 44, 75,255,255,112, 40, 7, 0, 14, /* 0x 390 */ 124, 7, 41,236,124, 7, 26, 44, 75,255,255,112, 40, 7, 0, 14, /* 0x 390 */
64,130, 0, 16,124, 8, 2,166,124,201, 51,120,129, 6, 0, 0, /* 0x 3a0 */ 64,130, 0, 16,124, 8, 2,166,124,201, 51,120,129, 6, 0, 0, /* 0x 3a0 */
124,167, 43,120, 56,164,255,254, 56,131, 0, 2,144, 1, 0, 4, /* 0x 3b0 */ 124,167, 43,120, 56,164,255,254, 56,131, 0, 2,144, 1, 0, 8, /* 0x 3b0 */
136, 3, 0, 0, 84, 11,232,254, 84, 2, 7,126, 56, 96,250, 0, /* 0x 3c0 */ 136, 3, 0, 0, 84, 11,232,254, 84, 2, 7,126, 56, 96,250, 0, /* 0x 3c0 */
124, 99, 88, 48, 56, 99,241,132,124, 38, 11,120,124, 33, 26, 20, /* 0x 3d0 */ 124, 99, 88, 48, 56, 99,241,132,124, 38, 11,120,124, 33, 26, 20, /* 0x 3d0 */
84, 33, 0, 52, 56, 0, 0, 0,124,195, 51,120,144, 9, 0, 0, /* 0x 3e0 */ 84, 33, 0, 52, 56, 0, 0, 0,124,195, 51,120,144, 9, 0, 0, /* 0x 3e0 */
@@ -406,157 +406,157 @@ unsigned char stub_powerpc_darwin_macho_entry[8406] = {
65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, 72, 0, 0, 28, /* 0x1720 */ 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, 72, 0, 0, 28, /* 0x1720 */
57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80,144, 14, 0, 0, /* 0x1730 */ 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80,144, 14, 0, 0, /* 0x1730 */
56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100,185,193, 0, 24, /* 0x1740 */ 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100,185,193, 0, 24, /* 0x1740 */
124, 8, 3,166, 56, 33, 0, 96,128, 33, 0, 0,128, 1, 0, 4, /* 0x1750 */ 124, 8, 3,166, 56, 33, 0, 96,128, 33, 0, 0,128, 1, 0, 8, /* 0x1750 */
124, 8, 3,166, 78,128, 0, 32,128, 6, 0, 0,125,168, 3,166, /* 0x1760 */ 124, 8, 3,166, 78,128, 0, 32,128, 6, 0, 0,125,168, 3,166, /* 0x1760 */
56,165, 0, 1, 56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80, /* 0x1770 */ 56,165, 0, 1, 56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80, /* 0x1770 */
144,166, 0, 0, 78,128, 0, 32,124, 72, 2,166,128,130, 0, 8, /* 0x1780 */ 144,166, 0, 0, 78,128, 0, 32,124, 72, 2,166,128,130, 0, 8, /* 0x1780 */
124,137, 3,166,128,194, 0, 4,136,226, 0, 12,124,164, 18, 20, /* 0x1790 */ 124,137, 3,166,128,194, 0, 4,136,226, 0, 12,124,164, 18, 20, /* 0x1790 */
56,165, 0, 16,124,102, 18, 20, 56, 99, 0,192,140, 5,255,255, /* 0x17a0 */ 56,165, 0, 16,124,102, 18, 20, 56, 99, 0,192,140, 5,255,255, /* 0x17a0 */
156, 3,255,255, 66, 0,255,248,127,233, 3,166, 56,162, 0,128, /* 0x17b0 */ 156, 3,255,255, 66, 0,255,248,127,233, 3,166, 56,162, 0,128, /* 0x17b0 */
144,193,255,252, 56,193,255,252, 78,128, 4, 32,127,232, 2,166, /* 0x17c0 */ 144,193,255,252, 56,193,255,252, 56, 33,255,232, 78,128, 4, 32, /* 0x17c0 */
75,255,255,185, 72, 0, 0,128,116,109,112, 47,112,111,119,101, /* 0x17d0 */ 127,232, 2,166, 75,255,255,181, 72, 0, 0,128,116,109,112, 47, /* 0x17d0 */
114,112, 99, 45,100, 97,114,119,105,110, 46,109, 97, 99,104,111, /* 0x17e0 */ 112,111,119,101,114,112, 99, 45,100, 97,114,119,105,110, 46,109, /* 0x17e0 */
45,101,110,116,114,121, 46, 98,105,110, 58, 32, 32, 32, 32, 32, /* 0x17f0 */ 97, 99,104,111, 45,101,110,116,114,121, 46, 98,105,110, 58, 32, /* 0x17f0 */
102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51, /* 0x1800 */ 32, 32, 32, 32,102,105,108,101, 32,102,111,114,109, 97,116, 32, /* 0x1800 */
50, 45,112,111,119,101,114,112, 99, 10, 10, 83,101, 99,116,105, /* 0x1810 */ 101,108,102, 51, 50, 45,112,111,119,101,114,112, 99, 10, 10, 83, /* 0x1810 */
111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, /* 0x1820 */ 101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109, /* 0x1820 */
32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, /* 0x1830 */ 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, /* 0x1830 */
32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, /* 0x1840 */ 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, /* 0x1840 */
32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65, /* 0x1850 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102, /* 0x1850 */
108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 77, /* 0x1860 */ 102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, /* 0x1860 */
65, 67, 79, 83, 48, 48, 48, 32, 32, 32, 32, 32, 32, 48, 48, 48, /* 0x1870 */ 32, 48, 32, 77, 65, 67, 79, 83, 48, 48, 48, 32, 32, 32, 32, 32, /* 0x1870 */
48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1880 */ 32, 48, 48, 48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, /* 0x1880 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1890 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1890 */
48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x18a0 */ 48, 48, 48, 48, 48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, /* 0x18a0 */
78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, /* 0x18b0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, /* 0x18b0 */
79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, /* 0x18c0 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, /* 0x18c0 */
68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x18d0 */ 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, /* 0x18d0 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x18e0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x18e0 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 56, 32, 32, 50, /* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, /* 0x18f0 */
42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1900 */ 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, /* 0x1900 */
69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, /* 0x1910 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, /* 0x1910 */
69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, /* 0x1920 */ 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, /* 0x1920 */
52, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1930 */ 48, 48, 48, 49, 52, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1930 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 56, /* 0x1940 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1940 */
32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x1950 */ 48, 48, 51, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x1950 */
44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1960 */ 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, /* 0x1960 */
89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, /* 0x1970 */ 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, /* 0x1970 */
32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 99, 32, 32, 48, 48, /* 0x1980 */ 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 99, /* 0x1980 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1990 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1990 */
32, 32, 48, 48, 48, 48, 48, 49, 56, 48, 32, 32, 50, 42, 42, 48, /* 0x19a0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, 48, 32, 32, /* 0x19a0 */
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, /* 0x19b0 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x19b0 */
67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, /* 0x19c0 */ 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x19c0 */
78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, /* 0x19d0 */ 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, /* 0x19d0 */
48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x19e0 */ 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, /* 0x19e0 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x19f0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x19f0 */
48, 50, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x1a00 */ 48, 48, 48, 48, 48, 50, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, /* 0x1a00 */
69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, /* 0x1a10 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, /* 0x1a10 */
68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, 90, 77, 65, 95, 69, /* 0x1a20 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, 90, /* 0x1a20 */
76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, /* 0x1a30 */ 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, /* 0x1a30 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1a40 */ 48, 48, 56, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1a40 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 57, 99, 32, 32, /* 0x1a50 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, /* 0x1a50 */
50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x1a60 */ 57, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, /* 0x1a60 */
82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x1a70 */ 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, /* 0x1a70 */
32, 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, /* 0x1a80 */ 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x1a80 */
32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, 48, 48, /* 0x1a90 */ 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, /* 0x1a90 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1aa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1aa0 */
48, 48, 48, 48, 48, 52, 50, 48, 32, 32, 50, 42, 42, 48, 32, 32, /* 0x1ab0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 50, 48, 32, 32, 50, 42, /* 0x1ab0 */
67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, /* 0x1ac0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x1ac0 */
76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, /* 0x1ad0 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, /* 0x1ad0 */
48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, /* 0x1ae0 */ 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, /* 0x1ae0 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1af0 */ 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1af0 */
48, 32, 32, 48, 48, 48, 48, 48,100, 98, 99, 32, 32, 50, 42, 42, /* 0x1b00 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 99, 32, /* 0x1b00 */
48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, /* 0x1b10 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1b10 */
68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, /* 0x1b20 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, /* 0x1b20 */
69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 48, /* 0x1b30 */ 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, /* 0x1b30 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1b40 */ 48, 48, 49, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1b40 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 53, 56, 32, 32, /* 0x1b50 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, /* 0x1b50 */
50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x1b60 */ 53, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, /* 0x1b60 */
82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 78, 82, 86, /* 0x1b70 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, /* 0x1b70 */
95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, /* 0x1b80 */ 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, /* 0x1b80 */
48, 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1b90 */ 48, 48, 48, 48, 48, 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1b90 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 54, /* 0x1ba0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1ba0 */
56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, /* 0x1bb0 */ 48, 49, 55, 54, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, /* 0x1bb0 */
83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, /* 0x1bc0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x1bc0 */
69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, /* 0x1bd0 */ 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, /* 0x1bd0 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1be0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1be0 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1bf0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1bf0 */
49, 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x1c00 */ 48, 48, 48, 48, 49, 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, /* 0x1c00 */
69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, /* 0x1c10 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, /* 0x1c10 */
49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, /* 0x1c20 */ 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, /* 0x1c20 */
32, 48, 48, 48, 48, 48, 48, 53, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1c30 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 53, 52, 32, 32, 48, /* 0x1c30 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1c40 */
48, 48, 48, 49, 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, /* 0x1c50 */ 48, 32, 32, 48, 48, 48, 48, 49, 55, 56, 56, 32, 32, 50, 42, 42, /* 0x1c50 */
79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1c60 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, /* 0x1c60 */
89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, /* 0x1c70 */ 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, /* 0x1c70 */
48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x1c80 */ 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x1c80 */
32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, /* 0x1c90 */ 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, /* 0x1c90 */
48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, /* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, /* 0x1ca0 */
48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x1cb0 */ 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x1cb0 */
32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, /* 0x1cc0 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, /* 0x1cc0 */
48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, /* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, /* 0x1cd0 */
48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, /* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x1ce0 */
77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, /* 0x1cf0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, /* 0x1cf0 */
76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1d00 */ 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, /* 0x1d00 */
32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 79, 83, 48, 48, /* 0x1d10 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, /* 0x1d10 */
48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 79, 83, /* 0x1d20 */ 79, 83, 48, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, /* 0x1d20 */
48, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x1d30 */ 65, 67, 79, 83, 48, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1d30 */
32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, /* 0x1d40 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, /* 0x1d40 */
48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, /* 0x1d50 */ 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, /* 0x1d50 */
48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x1d60 */ 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x1d60 */
32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1d70 */ 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, /* 0x1d70 */
78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x1d80 */ 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, /* 0x1d80 */
32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, /* 0x1d90 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, /* 0x1d90 */
48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, /* 0x1da0 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, /* 0x1da0 */
48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, /* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x1db0 */
50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, /* 0x1dc0 */ 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1dc0 */
66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1dd0 */ 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x1dd0 */
100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, /* 0x1de0 */ 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, /* 0x1de0 */
48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, /* 0x1df0 */ 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, /* 0x1df0 */
48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1e00 */ 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x1e00 */
100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, /* 0x1e10 */ 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, /* 0x1e10 */
48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, /* 0x1e20 */ 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, /* 0x1e20 */
48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1e30 */ 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x1e30 */
100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, /* 0x1e40 */ 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, /* 0x1e40 */
48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, /* 0x1e50 */ 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, /* 0x1e50 */
48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1e60 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x1e60 */
100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, /* 0x1e70 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, /* 0x1e70 */
48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, 48, /* 0x1e80 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x1e80 */
48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, /* 0x1e90 */ 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, /* 0x1e90 */
65, 67, 79, 83, 48, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1ea0 */ 32, 32, 32, 77, 65, 67, 79, 83, 48, 48, 48, 9, 48, 48, 48, 48, /* 0x1ea0 */
32, 95,115,116, 97,114,116, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x1eb0 */ 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 10, 82, 69, 76, /* 0x1eb0 */
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x1ec0 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, /* 0x1ec0 */
91, 77, 65, 67, 79, 83, 48, 48, 48, 93, 58, 10, 79, 70, 70, 83, /* 0x1ed0 */ 70, 79, 82, 32, 91, 77, 65, 67, 79, 83, 48, 48, 48, 93, 58, 10, /* 0x1ed0 */
69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, /* 0x1ee0 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x1ee0 */
32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, /* 0x1ef0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x1ef0 */
48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 50, /* 0x1f00 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 95, /* 0x1f00 */
52, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x1f10 */ 82, 69, 76, 50, 52, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x1f10 */
43, 48,120, 48, 48, 48, 48, 48, 48, 52, 52, 10, 10, 82, 69, 76, /* 0x1f20 */ 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 52, 56, 10, /* 0x1f20 */
79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, /* 0x1f30 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, /* 0x1f30 */
70, 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, 79, 70, 70, /* 0x1f40 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, 58, /* 0x1f40 */
83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x1f50 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x1f50 */
32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x1f60 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x1f60 */
48, 48, 48, 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, /* 0x1f70 */ 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, 32, 82, 95, 80, 80, 67, /* 0x1f70 */
49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, /* 0x1f80 */ 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, /* 0x1f80 */
76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x1f90 */ 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, /* 0x1f90 */
67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 68, /* 0x1fa0 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, /* 0x1fa0 */
93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, /* 0x1fb0 */ 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, /* 0x1fb0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, /* 0x1fc0 */ 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1fc0 */
76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, 32, 82, 95, 80, /* 0x1fd0 */ 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, /* 0x1fd0 */
80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, /* 0x1fe0 */ 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, /* 0x1fe0 */
82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x1ff0 */ 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, /* 0x1ff0 */
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x2000 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, /* 0x2000 */
91, 78, 82, 86, 50, 66, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, /* 0x2010 */ 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, 10, 79, 70, 70, /* 0x2010 */
32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2020 */ 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x2020 */
32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, /* 0x2030 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x2030 */
57, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, /* 0x2040 */ 48, 48, 48, 48, 57, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, /* 0x2040 */
32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, /* 0x2050 */ 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, /* 0x2050 */
69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, /* 0x2060 */ 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, /* 0x2060 */
83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, /* 0x2070 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, /* 0x2070 */
48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, /* 0x2080 */ 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, /* 0x2080 */
69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, /* 0x2090 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2090 */
65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, /* 0x20a0 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x20a0 */
80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, /* 0x20b0 */ 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, /* 0x20b0 */
76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 43, 48,120, 48, 48, 48, /* 0x20c0 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 43, 48, /* 0x20c0 */
48, 48, 48, 49, 48, 10 /* 0x20d0 */ 120, 48, 48, 48, 48, 48, 48, 49, 48, 10 /* 0x20d0 */
}; };
+103 -103
View File
@@ -1,5 +1,5 @@
/* powerpc-darwin.macho-fold.h /* powerpc-darwin.macho-fold.h
created from powerpc-darwin.macho-fold.bin, 1660 (0x67c) bytes created from powerpc-darwin.macho-fold.bin, 1664 (0x680) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,113 +28,113 @@
*/ */
#define STUB_POWERPC_DARWIN_MACHO_FOLD_SIZE 1660 #define STUB_POWERPC_DARWIN_MACHO_FOLD_SIZE 1664
#define STUB_POWERPC_DARWIN_MACHO_FOLD_ADLER32 0xfc8b272c #define STUB_POWERPC_DARWIN_MACHO_FOLD_ADLER32 0x2e3a279d
#define STUB_POWERPC_DARWIN_MACHO_FOLD_CRC32 0x62ce0ae3 #define STUB_POWERPC_DARWIN_MACHO_FOLD_CRC32 0xf61322eb
unsigned char stub_powerpc_darwin_macho_fold[1660] = { unsigned char stub_powerpc_darwin_macho_fold[1664] = {
72, 0, 0,105, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 0 */ 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 */ 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 */ 124, 4, 3,120, 56,165, 1, 32,124,103, 27,120, 56, 99,255,252, /* 0x 20 */
124,137, 3,166, 72, 0, 0, 28, 84, 75, 2,186,125, 99, 88, 80, /* 0x 30 */ 124,137, 3,166, 72, 0, 0, 28, 84, 75, 2,186,125, 99, 88, 80, /* 0x 30 */
125,107, 58, 20, 81, 98, 1,186,144, 67, 0, 0, 78, 64, 0, 32, /* 0x 40 */ 125,107, 58, 20, 81, 98, 1,186,144, 67, 0, 0, 78, 64, 0, 32, /* 0x 40 */
132, 67, 0, 4, 84, 75, 85,190,124, 11, 40, 64, 65,162,255,220, /* 0x 50 */ 132, 67, 0, 4, 84, 75, 85,190,124, 11, 40, 64, 65,162,255,220, /* 0x 50 */
66, 0,255,240, 78,128, 0, 32, 57, 32, 0, 0,149, 33,255,252, /* 0x 60 */ 66, 0,255,240, 78,128, 0, 32, 56, 33, 0, 24, 57, 32, 0, 0, /* 0x 60 */
124, 41, 11,120,125, 8, 2,166,128,159,255,248,124,100,248, 80, /* 0x 70 */ 149, 33,255,252,124, 41, 11,120,125, 8, 2,166,128,159,255,248, /* 0x 70 */
128,195, 0, 24, 40, 6, 8, 0, 65,129, 0, 8, 56,192, 8, 0, /* 0x 80 */ 124,100,248, 80,128,195, 0, 24, 40, 6, 8, 0, 65,129, 0, 8, /* 0x 80 */
124, 61, 11,120,124, 38, 8, 80,124, 37, 11,120, 56, 33,255,232, /* 0x 90 */ 56,192, 8, 0,124, 61, 11,120,124, 38, 8, 80,124, 37, 11,120, /* 0x 90 */
127,231,251,120, 72, 0, 4, 61,127,161,235,120,128, 67, 0, 0, /* 0x a0 */ 56, 33,255,232,127,231,251,120, 72, 0, 4, 61,127,161,235,120, /* 0x a0 */
124, 73, 3,166,128, 67, 0,136,124, 79,241, 32,128, 67, 0,140, /* 0x b0 */ 128, 67, 0, 0,124, 73, 3,166,128, 67, 0,136,124, 79,241, 32, /* 0x b0 */
124, 65, 3,166,128, 67, 0,144,124, 72, 3,166,184,131, 0, 24, /* 0x c0 */ 128, 67, 0,140,124, 65, 3,166,128, 67, 0,144,124, 72, 3,166, /* 0x c0 */
128, 3, 0, 8,128, 67, 0, 16,128, 99, 0, 20, 78,128, 4, 32, /* 0x d0 */ 184,131, 0, 24,128, 3, 0, 8,128, 67, 0, 16,128, 99, 0, 20, /* 0x d0 */
124,199, 51,120, 56,192, 0, 0, 56, 0, 0,153, 72, 0, 0, 16, /* 0x e0 */ 78,128, 4, 32,124,199, 51,120, 56,192, 0, 0, 56, 0, 0,153, /* 0x e0 */
125, 9, 67,120, 57, 0, 0, 0, 56, 0, 0,197, 68, 0, 0, 2, /* 0x f0 */ 72, 0, 0, 16,125, 9, 67,120, 57, 0, 0, 0, 56, 0, 0,197, /* 0x f0 */
56, 96,255,255, 78,128, 0, 32, 56, 0, 0, 1, 75,255,255,240, /* 0x 100 */ 68, 0, 0, 2, 56, 96,255,255, 78,128, 0, 32, 56, 0, 0, 1, /* 0x 100 */
56, 0, 0, 3, 75,255,255,232, 56, 0, 0, 5, 75,255,255,224, /* 0x 110 */ 75,255,255,240, 56, 0, 0, 3, 75,255,255,232, 56, 0, 0, 5, /* 0x 110 */
56, 0, 0, 6, 75,255,255,216, 56, 0, 0, 74, 75,255,255,208, /* 0x 120 */ 75,255,255,224, 56, 0, 0, 6, 75,255,255,216, 56, 0, 0, 74, /* 0x 120 */
124, 8, 2,166,148, 33,255,240,144, 1, 0, 20,128, 3, 0, 0, /* 0x 130 */ 75,255,255,208,124, 8, 2,166,148, 33,255,240,144, 1, 0, 20, /* 0x 130 */
129, 35, 0, 4,127,128, 40, 64, 64,188, 0, 12, 56, 96, 0,127, /* 0x 140 */ 128, 3, 0, 0,129, 35, 0, 4,127,128, 40, 64, 64,188, 0, 12, /* 0x 140 */
75,255,255,185, 47,133, 0, 0, 65,158, 0, 28,124,169, 3,166, /* 0x 150 */ 56, 96, 0,127, 75,255,255,185, 47,133, 0, 0, 65,158, 0, 28, /* 0x 150 */
136, 9, 0, 0, 57, 41, 0, 1,152, 4, 0, 0, 56,132, 0, 1, /* 0x 160 */ 124,169, 3,166,136, 9, 0, 0, 57, 41, 0, 1,152, 4, 0, 0, /* 0x 160 */
66, 0,255,240,128, 3, 0, 0,129, 35, 0, 4,124, 5, 0, 80, /* 0x 170 */ 56,132, 0, 1, 66, 0,255,240,128, 3, 0, 0,129, 35, 0, 4, /* 0x 170 */
144, 3, 0, 0,128, 1, 0, 20,125, 41, 42, 20,124, 8, 3,166, /* 0x 180 */ 124, 5, 0, 80,144, 3, 0, 0,128, 1, 0, 20,125, 41, 42, 20, /* 0x 180 */
56, 33, 0, 16,145, 35, 0, 4, 78,128, 0, 32,124, 8, 2,166, /* 0x 190 */ 124, 8, 3,166, 56, 33, 0, 16,145, 35, 0, 4, 78,128, 0, 32, /* 0x 190 */
148, 33,255,192,144, 1, 0, 68,128, 4, 0, 0,191,129, 0, 48, /* 0x 1a0 */ 124, 8, 2,166,148, 33,255,192,144, 1, 0, 68,128, 4, 0, 0, /* 0x 1a0 */
47,128, 0, 0,124,159, 35,120,124,126, 27,120,124,188, 43,120, /* 0x 1b0 */ 191,129, 0, 48, 47,128, 0, 0,124,159, 35,120,124,126, 27,120, /* 0x 1b0 */
124,221, 51,120, 65,158, 1, 36, 56,160, 0, 12,127,195,243,120, /* 0x 1c0 */ 124,188, 43,120,124,221, 51,120, 65,158, 1, 36, 56,160, 0, 12, /* 0x 1c0 */
56,129, 0, 16, 75,255,255, 93,129, 33, 0, 16,128,161, 0, 20, /* 0x 1d0 */ 127,195,243,120, 56,129, 0, 16, 75,255,255, 93,129, 33, 0, 16, /* 0x 1d0 */
47,137, 0, 0, 64,190, 0, 36, 60, 0, 33, 88, 96, 0, 80, 85, /* 0x 1e0 */ 128,161, 0, 20, 47,137, 0, 0, 64,190, 0, 36, 60, 0, 33, 88, /* 0x 1e0 */
127,133, 0, 0, 64,190, 0, 28,128, 30, 0, 0, 47,128, 0, 0, /* 0x 1f0 */ 96, 0, 80, 85,127,133, 0, 0, 64,190, 0, 28,128, 30, 0, 0, /* 0x 1f0 */
65,190, 0,232, 72, 0, 0, 12, 47,133, 0, 0, 64,190, 0, 12, /* 0x 200 */ 47,128, 0, 0, 65,190, 0,232, 72, 0, 0, 12, 47,133, 0, 0, /* 0x 200 */
56, 96, 0,127, 75,255,254,245,127, 5, 72, 64, 65,185,255,244, /* 0x 210 */ 64,190, 0, 12, 56, 96, 0,127, 75,255,254,245,127, 5, 72, 64, /* 0x 210 */
128, 31, 0, 0,127,137, 0, 64, 65,189,255,232,128, 31, 0, 4, /* 0x 220 */ 65,185,255,244,128, 31, 0, 0,127,137, 0, 64, 65,189,255,232, /* 0x 220 */
64,152, 0,136,124,164, 43,120,128,126, 0, 4,124, 5, 3,120, /* 0x 230 */ 128, 31, 0, 4, 64,152, 0,136,124,164, 43,120,128,126, 0, 4, /* 0x 230 */
56,193, 0, 32,136,225, 0, 24,145, 33, 0, 32,127,136, 3,166, /* 0x 240 */ 124, 5, 3,120, 56,193, 0, 32,136,225, 0, 24,145, 33, 0, 32, /* 0x 240 */
78,128, 0, 33, 47,131, 0, 0, 64,190,255,184,128,129, 0, 32, /* 0x 250 */ 127,136, 3,166, 78,128, 0, 33, 47,131, 0, 0, 64,190,255,184, /* 0x 250 */
128, 1, 0, 16,127,132, 0, 0, 64,190,255,168,136,193, 0, 25, /* 0x 260 */ 128,129, 0, 32,128, 1, 0, 16,127,132, 0, 0, 64,190,255,168, /* 0x 260 */
49, 61,255,255,124, 9,233, 16,125, 38, 0,208, 85, 41, 15,254, /* 0x 270 */ 136,193, 0, 25, 49, 61,255,255,124, 9,233, 16,125, 38, 0,208, /* 0x 270 */
125, 43, 0, 57, 65,162, 0, 20,128,127, 0, 4,136,161, 0, 26, /* 0x 280 */ 85, 41, 15,254,125, 43, 0, 57, 65,162, 0, 20,128,127, 0, 4, /* 0x 280 */
127,168, 3,166, 78,128, 0, 33,128, 30, 0, 4,129, 97, 0, 20, /* 0x 290 */ 136,161, 0, 26,127,168, 3,166, 78,128, 0, 33,128, 30, 0, 4, /* 0x 290 */
129, 62, 0, 0,124, 0, 90, 20,125, 43, 72, 80,144, 30, 0, 4, /* 0x 2a0 */ 129, 97, 0, 20,129, 62, 0, 0,124, 0, 90, 20,125, 43, 72, 80, /* 0x 2a0 */
145, 62, 0, 0, 72, 0, 0, 16,124, 4, 3,120,127,195,243,120, /* 0x 2b0 */ 144, 30, 0, 4,145, 62, 0, 0, 72, 0, 0, 16,124, 4, 3,120, /* 0x 2b0 */
75,255,254,113,129, 97, 0, 16,129, 63, 0, 0,128, 31, 0, 4, /* 0x 2c0 */ 127,195,243,120, 75,255,254,113,129, 97, 0, 16,129, 63, 0, 0, /* 0x 2c0 */
125, 43, 72, 80, 47,137, 0, 0,124, 0, 90, 20,144, 31, 0, 4, /* 0x 2d0 */ 128, 31, 0, 4,125, 43, 72, 80, 47,137, 0, 0,124, 0, 90, 20, /* 0x 2d0 */
145, 63, 0, 0, 75,255,254,224,128, 1, 0, 68,187,129, 0, 48, /* 0x 2e0 */ 144, 31, 0, 4,145, 63, 0, 0, 75,255,254,224,128, 1, 0, 68, /* 0x 2e0 */
124, 8, 3,166, 56, 33, 0, 64, 78,128, 0, 32,124, 8, 2,166, /* 0x 2f0 */ 187,129, 0, 48,124, 8, 3,166, 56, 33, 0, 64, 78,128, 0, 32, /* 0x 2f0 */
148, 33,255,176,144, 1, 0, 84,128, 3, 0, 16,190, 65, 0, 24, /* 0x 300 */ 124, 8, 2,166,148, 33,255,176,144, 1, 0, 84,128, 3, 0, 16, /* 0x 300 */
58,224, 0, 0,125,128, 0, 38,127,151, 0, 64,145,129, 0, 20, /* 0x 310 */ 190, 65, 0, 24, 58,224, 0, 0,125,128, 0, 38,127,151, 0, 64, /* 0x 310 */
124,122, 27,120,124,146, 35,120,124,187, 43,120,124,211, 51,120, /* 0x 320 */ 145,129, 0, 20,124,122, 27,120,124,146, 35,120,124,187, 43,120, /* 0x 320 */
124,244, 59,120,125, 21, 67,120,125, 54, 75,120, 59,195, 0, 28, /* 0x 330 */ 124,211, 51,120,124,244, 59,120,125, 21, 67,120,125, 54, 75,120, /* 0x 330 */
59, 0, 0, 0, 64,156, 1,124,129, 62, 0, 0, 47,137, 0, 1, /* 0x 340 */ 59,195, 0, 28, 59, 0, 0, 0, 64,156, 1,124,129, 62, 0, 0, /* 0x 340 */
64,190, 1, 48,129, 62, 0, 24,129,126, 0, 36, 85, 61, 5, 62, /* 0x 350 */ 47,137, 0, 1, 64,190, 1, 48,129, 62, 0, 24,129,126, 0, 36, /* 0x 350 */
127,139,234, 20, 46, 28, 0, 0,128, 30, 0, 28,145, 97, 0, 8, /* 0x 360 */ 85, 61, 5, 62,127,139,234, 20, 46, 28, 0, 0,128, 30, 0, 28, /* 0x 360 */
127, 41, 2, 20,145, 33, 0, 12,127,253, 72, 80, 65,146, 0, 76, /* 0x 370 */ 145, 97, 0, 8,127, 41, 2, 20,145, 33, 0, 12,127,253, 72, 80, /* 0x 370 */
47,155, 0, 0, 64,190, 0, 16, 47,139, 0, 0, 56,192, 0, 18, /* 0x 380 */ 65,146, 0, 76, 47,155, 0, 0, 64,190, 0, 16, 47,139, 0, 0, /* 0x 380 */
64,158, 0, 8, 56,192, 16, 18, 47,139, 0, 0,126,103,155,120, /* 0x 390 */ 56,192, 0, 18, 64,158, 0, 8, 56,192, 16, 18, 47,139, 0, 0, /* 0x 390 */
64,158, 0, 8, 56,224,255,255,129, 30, 0, 32,127,227,251,120, /* 0x 3a0 */ 126,103,155,120, 64,158, 0, 8, 56,224,255,255,129, 30, 0, 32, /* 0x 3a0 */
125, 8,146, 20,127,132,227,120, 56,160, 0, 3, 75,255,253, 53, /* 0x 3b0 */ 127,227,251,120,125, 8,146, 20,127,132,227,120, 56,160, 0, 3, /* 0x 3b0 */
127,159, 24, 0, 64,158, 0,124, 47,155, 0, 0, 65,158, 0, 52, /* 0x 3c0 */ 75,255,253, 53,127,159, 24, 0, 64,158, 0,124, 47,155, 0, 0, /* 0x 3c0 */
128, 30, 0, 36, 47,128, 0, 0, 65,158, 0, 40,128, 30, 0, 32, /* 0x 3d0 */ 65,158, 0, 52,128, 30, 0, 36, 47,128, 0, 0, 65,158, 0, 40, /* 0x 3d0 */
47,128, 0, 0, 64,158, 0, 8,147,244, 0, 0,127, 99,219,120, /* 0x 3e0 */ 128, 30, 0, 32, 47,128, 0, 0, 64,158, 0, 8,147,244, 0, 0, /* 0x 3e0 */
56,129, 0, 8,126,165,171,120,126,198,179,120, 75,255,253,161, /* 0x 3f0 */ 127, 99,219,120, 56,129, 0, 8,126,165,171,120,126,198,179,120, /* 0x 3f0 */
124, 28, 0,208,112, 29, 15,255,125, 63,226, 20, 65,130, 0, 24, /* 0x 400 */ 75,255,253,161,124, 28, 0,208,112, 29, 15,255,125, 63,226, 20, /* 0x 400 */
127,169, 3,166, 56, 0, 0, 0,152, 9, 0, 0, 57, 41, 0, 1, /* 0x 410 */ 65,130, 0, 24,127,169, 3,166, 56, 0, 0, 0,152, 9, 0, 0, /* 0x 410 */
66, 0,255,248, 65,178, 0, 36,128,190, 0, 44,127,227,251,120, /* 0x 420 */ 57, 41, 0, 1, 66, 0,255,248, 65,178, 0, 36,128,190, 0, 44, /* 0x 420 */
127,132,227,120, 75,255,252,245, 47,131, 0, 0, 65,190, 0, 12, /* 0x 430 */ 127,227,251,120,127,132,227,120, 75,255,252,245, 47,131, 0, 0, /* 0x 430 */
56, 96, 0,127, 75,255,252,197,124, 28,234, 20,127,255, 2, 20, /* 0x 440 */ 65,190, 0, 12, 56, 96, 0,127, 75,255,252,197,124, 28,234, 20, /* 0x 440 */
127,159,200, 64, 64,188, 0, 84,128,190, 0, 44,124,159,200, 80, /* 0x 450 */ 127,255, 2, 20,127,159,200, 64, 64,188, 0, 84,128,190, 0, 44, /* 0x 450 */
127,227,251,120, 56,192, 16, 18, 56,224,255,255, 57, 0, 0, 0, /* 0x 460 */ 124,159,200, 80,127,227,251,120, 56,192, 16, 18, 56,224,255,255, /* 0x 460 */
75,255,252,129,127,159, 24, 0, 65,190, 0, 48, 75,255,255,196, /* 0x 470 */ 57, 0, 0, 0, 75,255,252,129,127,159, 24, 0, 65,190, 0, 48, /* 0x 470 */
56, 9,255,252, 43,128, 0, 1, 65,157, 0, 32,128, 30, 0, 8, /* 0x 480 */ 75,255,255,196, 56, 9,255,252, 43,128, 0, 1, 65,157, 0, 32, /* 0x 480 */
47,128, 0, 1, 64,190, 0, 20,128, 30, 0, 12, 47,128, 0, 40, /* 0x 490 */ 128, 30, 0, 8, 47,128, 0, 1, 64,190, 0, 20,128, 30, 0, 12, /* 0x 490 */
64,190, 0, 8, 58,254, 0, 16,128, 26, 0, 16, 59, 24, 0, 1, /* 0x 4a0 */ 47,128, 0, 40, 64,190, 0, 8, 58,254, 0, 16,128, 26, 0, 16, /* 0x 4a0 */
127,152, 0, 64,128, 30, 0, 4,127,222, 2, 20, 75,255,254,136, /* 0x 4b0 */ 59, 24, 0, 1,127,152, 0, 64,128, 30, 0, 4,127,222, 2, 20, /* 0x 4b0 */
128, 1, 0, 84,129,129, 0, 20,126,227,187,120,124, 8, 3,166, /* 0x 4c0 */ 75,255,254,136,128, 1, 0, 84,129,129, 0, 20,126,227,187,120, /* 0x 4c0 */
186, 65, 0, 24,125,128,129, 32, 56, 33, 0, 80, 78,128, 0, 32, /* 0x 4d0 */ 124, 8, 3,166,186, 65, 0, 24,125,128,129, 32, 56, 33, 0, 80, /* 0x 4d0 */
148, 33,255,192,144,129, 0, 8,124, 8, 2,166,129, 97, 0, 8, /* 0x 4e0 */ 78,128, 0, 32,148, 33,255,192,144,129, 0, 8,124, 8, 2,166, /* 0x 4e0 */
144, 1, 0, 68, 57,107,255,232, 56, 3, 0, 24,145, 97, 0, 16, /* 0x 4f0 */ 129, 97, 0, 8,144, 1, 0, 68, 57,107,255,232, 56, 3, 0, 24, /* 0x 4f0 */
144, 1, 0, 20,191, 97, 0, 44,128, 3, 0, 24,129, 65, 0, 20, /* 0x 500 */ 145, 97, 0, 16,144, 1, 0, 20,191, 97, 0, 44,128, 3, 0, 24, /* 0x 500 */
125, 60, 75,120,129, 33, 0, 16,124,191, 43,120,125, 27, 67,120, /* 0x 510 */ 129, 65, 0, 20,125, 60, 75,120,129, 33, 0, 16,124,191, 43,120, /* 0x 510 */
124,253, 59,120,124,229, 59,120, 56, 97, 0, 16, 56,129, 0, 24, /* 0x 520 */ 125, 27, 67,120,124,253, 59,120,124,229, 59,120, 56, 97, 0, 16, /* 0x 520 */
124,222, 51,120, 56,192, 0, 0,145, 65, 0, 36,144, 1, 0, 24, /* 0x 530 */ 56,129, 0, 24,124,222, 51,120, 56,192, 0, 0,145, 65, 0, 36, /* 0x 530 */
145, 33, 0, 32,147,225, 0, 28, 75,255,252, 85,127,105,219,120, /* 0x 540 */ 144, 1, 0, 24,145, 33, 0, 32,147,225, 0, 28, 75,255,252, 85, /* 0x 540 */
127,135,227,120,127,227,251,120,127,168,235,120, 56,128, 0, 0, /* 0x 550 */ 127,105,219,120,127,135,227,120,127,227,251,120,127,168,235,120, /* 0x 550 */
56,161, 0, 32, 56,192,255,255, 75,255,253,149,129, 95, 0, 16, /* 0x 560 */ 56,128, 0, 0, 56,161, 0, 32, 56,192,255,255, 75,255,253,149, /* 0x 560 */
57, 96, 0, 0,127,139, 80, 64,124,124, 27,120, 59, 96, 0, 0, /* 0x 570 */ 129, 95, 0, 16, 57, 96, 0, 0,127,139, 80, 64,124,124, 27,120, /* 0x 570 */
57, 63, 0, 28, 64,156, 0,224,128, 9, 0, 0, 57,107, 0, 1, /* 0x 580 */ 59, 96, 0, 0, 57, 63, 0, 28, 64,156, 0,224,128, 9, 0, 0, /* 0x 580 */
47,128, 0, 14,127, 11, 80, 64, 64,190, 0,192,128,105, 0, 8, /* 0x 590 */ 57,107, 0, 1, 47,128, 0, 14,127, 11, 80, 64, 64,190, 0,192, /* 0x 590 */
56,128, 0, 0,124,105, 26, 20, 56,160, 0, 0, 75,255,251,109, /* 0x 5a0 */ 128,105, 0, 8, 56,128, 0, 0,124,105, 26, 20, 56,160, 0, 0, /* 0x 5a0 */
124,125, 27,121, 65,128, 0, 32,127,163,235,120,127,228,251,120, /* 0x 5b0 */ 75,255,251,109,124,125, 27,121, 65,128, 0, 32,127,163,235,120, /* 0x 5b0 */
127,197,243,120,127,102,219,120, 75,255,251, 25,127,158, 24, 0, /* 0x 5c0 */ 127,228,251,120,127,197,243,120,127,102,219,120, 75,255,251, 25, /* 0x 5c0 */
65,190, 0, 20, 56, 96, 0,127, 75,255,251, 49,131,105, 0, 8, /* 0x 5d0 */ 127,158, 24, 0, 65,190, 0, 20, 56, 96, 0,127, 75,255,251, 49, /* 0x 5d0 */
75,255,255,216,128, 31, 0, 0, 61, 32,202,254, 97, 41,186,190, /* 0x 5e0 */ 131,105, 0, 8, 75,255,255,216,128, 31, 0, 0, 61, 32,202,254, /* 0x 5e0 */
127,128, 72, 0, 64,158, 0, 52,129, 95, 0, 4, 57, 96, 0, 0, /* 0x 5f0 */ 97, 41,186,190,127,128, 72, 0, 64,158, 0, 52,129, 95, 0, 4, /* 0x 5f0 */
127,139, 80, 64, 57, 63, 0, 8, 64,156, 0, 32,128, 9, 0, 0, /* 0x 600 */ 57, 96, 0, 0,127,139, 80, 64, 57, 63, 0, 8, 64,156, 0, 32, /* 0x 600 */
57,107, 0, 1, 47,128, 0, 18,127, 11, 80, 64, 65,190,255,192, /* 0x 610 */ 128, 9, 0, 0, 57,107, 0, 1, 47,128, 0, 18,127, 11, 80, 64, /* 0x 610 */
57, 41, 0, 20, 65,152,255,232,127,227,251,120,127,100,219,120, /* 0x 620 */ 65,190,255,192, 57, 41, 0, 20, 65,152,255,232,127,227,251,120, /* 0x 620 */
56,160, 0, 0,127,166,235,120, 56,224, 0, 0, 57, 0, 0, 0, /* 0x 630 */ 127,100,219,120, 56,160, 0, 0,127,166,235,120, 56,224, 0, 0, /* 0x 630 */
57, 32, 0, 0, 75,255,252,185,124,124, 27,120,127,163,235,120, /* 0x 640 */ 57, 0, 0, 0, 57, 32, 0, 0, 75,255,252,185,124,124, 27,120, /* 0x 640 */
75,255,250,209, 72, 0, 0, 16,128, 9, 0, 4,125, 41, 2, 20, /* 0x 650 */ 127,163,235,120, 75,255,250,209, 72, 0, 0, 16,128, 9, 0, 4, /* 0x 650 */
65,152,255, 40,128, 1, 0, 68,127,131,227,120,124, 8, 3,166, /* 0x 660 */ 125, 41, 2, 20, 65,152,255, 40,128, 1, 0, 68,127,131,227,120, /* 0x 660 */
187, 97, 0, 44, 56, 33, 0, 64, 78,128, 0, 32 /* 0x 670 */ 124, 8, 3,166,187, 97, 0, 44, 56, 33, 0, 64, 78,128, 0, 32 /* 0x 670 */
}; };
+169 -169
View File
@@ -1,5 +1,5 @@
/* powerpc-linux.elf-entry.h /* powerpc-linux.elf-entry.h
created from powerpc-linux.elf-entry.bin, 8721 (0x2211) bytes created from powerpc-linux.elf-entry.bin, 8725 (0x2215) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,15 +28,15 @@
*/ */
#define STUB_POWERPC_LINUX_ELF_ENTRY_SIZE 8721 #define STUB_POWERPC_LINUX_ELF_ENTRY_SIZE 8725
#define STUB_POWERPC_LINUX_ELF_ENTRY_ADLER32 0x94d0dad3 #define STUB_POWERPC_LINUX_ELF_ENTRY_ADLER32 0x7980dcbb
#define STUB_POWERPC_LINUX_ELF_ENTRY_CRC32 0xed9c5363 #define STUB_POWERPC_LINUX_ELF_ENTRY_CRC32 0x37bf2c85
unsigned char stub_powerpc_linux_elf_entry[8721] = { unsigned char stub_powerpc_linux_elf_entry[8725] = {
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */ 0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
0, 0, 24,224, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */ 0, 0, 24,228, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */
0, 23, 0, 20, 72, 0, 0,125,124, 0, 41,236,125,168, 2,166, /* 0x 30 */ 0, 23, 0, 20, 72, 0, 0,129,124, 0, 41,236,125,168, 2,166, /* 0x 30 */
40, 7, 0, 8, 64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, /* 0x 40 */ 40, 7, 0, 8, 64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, /* 0x 40 */
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 50 */ 60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 50 */
57, 64,255,255, 72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 60 */ 57, 64,255,255, 72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 60 */
@@ -92,7 +92,7 @@ unsigned char stub_powerpc_linux_elf_entry[8721] = {
141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, 56,224, 1, 0, /* 0x 380 */ 141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, 56,224, 1, 0, /* 0x 380 */
124, 7, 41,236,124, 7, 26, 44, 75,255,255,112, 40, 7, 0, 14, /* 0x 390 */ 124, 7, 41,236,124, 7, 26, 44, 75,255,255,112, 40, 7, 0, 14, /* 0x 390 */
64,130, 0, 16,124, 8, 2,166,124,201, 51,120,129, 6, 0, 0, /* 0x 3a0 */ 64,130, 0, 16,124, 8, 2,166,124,201, 51,120,129, 6, 0, 0, /* 0x 3a0 */
124,167, 43,120, 56,164,255,254, 56,131, 0, 2,144, 1, 0, 4, /* 0x 3b0 */ 124,167, 43,120, 56,164,255,254, 56,131, 0, 2,144, 1, 0, 8, /* 0x 3b0 */
136, 3, 0, 0, 84, 11,232,254, 84, 2, 7,126, 56, 96,250, 0, /* 0x 3c0 */ 136, 3, 0, 0, 84, 11,232,254, 84, 2, 7,126, 56, 96,250, 0, /* 0x 3c0 */
124, 99, 88, 48, 56, 99,241,132,124, 38, 11,120,124, 33, 26, 20, /* 0x 3d0 */ 124, 99, 88, 48, 56, 99,241,132,124, 38, 11,120,124, 33, 26, 20, /* 0x 3d0 */
84, 33, 0, 52, 56, 0, 0, 0,124,195, 51,120,144, 9, 0, 0, /* 0x 3e0 */ 84, 33, 0, 52, 56, 0, 0, 0,124,195, 51,120,144, 9, 0, 0, /* 0x 3e0 */
@@ -406,7 +406,7 @@ unsigned char stub_powerpc_linux_elf_entry[8721] = {
65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, 72, 0, 0, 28, /* 0x1720 */ 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, 72, 0, 0, 28, /* 0x1720 */
57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80,144, 14, 0, 0, /* 0x1730 */ 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80,144, 14, 0, 0, /* 0x1730 */
56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100,185,193, 0, 24, /* 0x1740 */ 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100,185,193, 0, 24, /* 0x1740 */
124, 8, 3,166, 56, 33, 0, 96,128, 33, 0, 0,128, 1, 0, 4, /* 0x1750 */ 124, 8, 3,166, 56, 33, 0, 96,128, 33, 0, 0,128, 1, 0, 8, /* 0x1750 */
124, 8, 3,166, 78,128, 0, 32,128, 6, 0, 0,125,168, 3,166, /* 0x1760 */ 124, 8, 3,166, 78,128, 0, 32,128, 6, 0, 0,125,168, 3,166, /* 0x1760 */
56,165, 0, 1, 56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80, /* 0x1770 */ 56,165, 0, 1, 56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80, /* 0x1770 */
144,166, 0, 0, 78,128, 0, 32, 72, 0, 0, 1, 80, 82, 79, 84, /* 0x1780 */ 144,166, 0, 0, 78,128, 0, 32, 72, 0, 0, 1, 80, 82, 79, 84, /* 0x1780 */
@@ -419,164 +419,164 @@ unsigned char stub_powerpc_linux_elf_entry[8721] = {
16, 11, 84, 99, 0, 38, 68, 0, 0, 2, 65,131, 0, 0,127,233, /* 0x17f0 */ 16, 11, 84, 99, 0, 38, 68, 0, 0, 2, 65,131, 0, 0,127,233, /* 0x17f0 */
3,166,128, 30, 0, 0,136,254, 0, 8, 56,193, 0,124,144, 1, /* 0x1800 */ 3,166,128, 30, 0, 0,136,254, 0, 8, 56,193, 0,124,144, 1, /* 0x1800 */
0,124,124,101, 27,120,124,104, 3,166,128,158, 0, 4, 56,126, /* 0x1810 */ 0,124,124,101, 27,120,124,104, 3,166,128,158, 0, 4, 56,126, /* 0x1810 */
0, 12, 78,128, 4, 32,148, 33,255,128,188, 65, 0, 4,127,232, /* 0x1820 */ 0, 12, 56, 33,255,232, 78,128, 4, 32,148, 33,255,128,188, 65, /* 0x1820 */
2,166, 75,255,255,153,116,109,112, 47,112,111,119,101,114,112, /* 0x1830 */ 0, 4,127,232, 2,166, 75,255,255,149,116,109,112, 47,112,111, /* 0x1830 */
99, 45,108,105,110,117,120, 46,101,108,102, 45,101,110,116,114, /* 0x1840 */ 119,101,114,112, 99, 45,108,105,110,117,120, 46,101,108,102, 45, /* 0x1840 */
121, 46, 98,105,110, 58, 32, 32, 32, 32, 32,102,105,108,101, 32, /* 0x1850 */ 101,110,116,114,121, 46, 98,105,110, 58, 32, 32, 32, 32, 32,102, /* 0x1850 */
102,111,114,109, 97,116, 32,101,108,102, 51, 50, 45,112,111,119, /* 0x1860 */ 105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 51, 50, /* 0x1860 */
101,114,112, 99, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, /* 0x1870 */ 45,112,111,119,101,114,112, 99, 10, 10, 83,101, 99,116,105,111, /* 0x1870 */
73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1880 */ 110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, /* 0x1880 */
32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, /* 0x1890 */ 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, /* 0x1890 */
32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, /* 0x18a0 */ 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, /* 0x18a0 */
70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, /* 0x18b0 */ 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108, /* 0x18b0 */
70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, /* 0x18c0 */ 103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, /* 0x18c0 */
78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 52, /* 0x18d0 */ 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, /* 0x18d0 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x18e0 */ 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x18e0 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 52, 32, 32, /* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x18f0 */
50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x1900 */ 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, /* 0x1900 */
82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x1910 */ 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, /* 0x1910 */
32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, /* 0x1920 */ 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, /* 0x1920 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1930 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1930 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1940 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1940 */
48, 48, 48, 48, 48, 48, 51, 56, 32, 32, 50, 42, 42, 48, 32, 32, /* 0x1950 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 56, 32, 32, 50, 42, /* 0x1950 */
67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, /* 0x1960 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x1960 */
76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, /* 0x1970 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, /* 0x1970 */
32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 52, 56, 32, 32, 48, /* 0x1980 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 52, /* 0x1980 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1990 */ 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1990 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 56, 32, 32, 50, 42, 42, /* 0x19a0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 56, 32, /* 0x19a0 */
48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, /* 0x19b0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x19b0 */
79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, /* 0x19c0 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x19c0 */
32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, /* 0x19d0 */ 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, /* 0x19d0 */
48, 48, 48, 48, 49, 50, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x19e0 */ 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 99, 32, 32, 48, 48, 48, /* 0x19e0 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x19f0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x19f0 */
48, 48, 49, 56, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, /* 0x1a00 */ 32, 48, 48, 48, 48, 48, 49, 56, 48, 32, 32, 50, 42, 42, 48, 32, /* 0x1a00 */
84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, /* 0x1a10 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, /* 0x1a10 */
65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 66, /* 0x1a20 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, /* 0x1a20 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,102, /* 0x1a30 */ 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, /* 0x1a30 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1a40 */ 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1a40 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 97, 99, 32, /* 0x1a50 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1a50 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1a60 */ 50, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x1a60 */
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1a70 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, /* 0x1a70 */
10, 32, 32, 53, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, /* 0x1a80 */ 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, 90, 77, 65, 95, 69, 76, /* 0x1a80 */
32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, 32, 48, 48, 48, /* 0x1a90 */ 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, /* 0x1a90 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1aa0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1aa0 */
32, 48, 48, 48, 48, 48, 51, 57, 99, 32, 32, 50, 42, 42, 48, 32, /* 0x1ab0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 57, 99, 32, 32, 50, /* 0x1ab0 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, /* 0x1ac0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1ac0 */
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, /* 0x1ad0 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, /* 0x1ad0 */
90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, /* 0x1ae0 */ 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, /* 0x1ae0 */
48, 48, 57, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1af0 */ 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, 48, 48, 48, /* 0x1af0 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1b00 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1b00 */
52, 50, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x1b10 */ 48, 48, 48, 48, 52, 50, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, /* 0x1b10 */
78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, /* 0x1b20 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1b20 */
55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, /* 0x1b30 */ 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, /* 0x1b30 */
48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1b40 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, /* 0x1b40 */
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1b50 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1b50 */
48, 48, 48,100, 98, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, /* 0x1b60 */ 32, 32, 48, 48, 48, 48, 48,100, 98, 99, 32, 32, 50, 42, 42, 48, /* 0x1b60 */
78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1b70 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, /* 0x1b70 */
10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, /* 0x1b80 */ 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, /* 0x1b80 */
32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 48, 32, 32, 48, 48, 48, /* 0x1b90 */ 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 48, 32, /* 0x1b90 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ba0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1ba0 */
32, 48, 48, 48, 48, 49, 55, 53, 56, 32, 32, 50, 42, 42, 48, 32, /* 0x1bb0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 53, 56, 32, 32, 50, /* 0x1bb0 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, /* 0x1bc0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1bc0 */
78, 76, 89, 10, 32, 32, 57, 32, 78, 82, 86, 95, 84, 65, 73, 76, /* 0x1bd0 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 78, 82, 86, 95, /* 0x1bd0 */
32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 48, 32, 32, /* 0x1be0 */ 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1be0 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1bf0 */ 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1bf0 */
48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 54, 56, 32, 32, 50, 42, /* 0x1c00 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 54, 56, /* 0x1c00 */
42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x1c10 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x1c10 */
65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, /* 0x1c20 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 69, /* 0x1c20 */
73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, /* 0x1c30 */ 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, /* 0x1c30 */
50, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1c40 */ 48, 48, 48, 50, 50, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1c40 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 56, 56, 32, /* 0x1c50 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, /* 0x1c50 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1c60 */ 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x1c60 */
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1c70 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, /* 0x1c70 */
10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, /* 0x1c80 */ 79, 78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x1c80 */
32, 32, 32, 48, 48, 48, 48, 48, 48, 56, 99, 32, 32, 48, 48, 48, /* 0x1c90 */ 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 57, 48, 32, /* 0x1c90 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ca0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1ca0 */
32, 48, 48, 48, 48, 49, 55, 97, 97, 32, 32, 50, 42, 42, 48, 32, /* 0x1cb0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 97, 97, 32, 32, 50, /* 0x1cb0 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, /* 0x1cc0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1cc0 */
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, /* 0x1cd0 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, /* 0x1cd0 */
76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1ce0 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, /* 0x1ce0 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, /* 0x1cf0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, /* 0x1cf0 */
69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, /* 0x1d00 */ 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x1d00 */
77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1d10 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, /* 0x1d10 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, /* 0x1d20 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, /* 0x1d20 */
73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, /* 0x1d30 */ 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1d30 */
84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x1d40 */ 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1d40 */
32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, /* 0x1d50 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, /* 0x1d50 */
48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x1d60 */ 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, /* 0x1d60 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x1d70 */ 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x1d70 */
32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, /* 0x1d80 */ 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, /* 0x1d80 */
48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, /* 0x1d90 */ 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x1d90 */
48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, /* 0x1da0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x1da0 */
70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1db0 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, /* 0x1db0 */
69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1dc0 */ 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, /* 0x1dc0 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, /* 0x1dd0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, /* 0x1dd0 */
65, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, /* 0x1de0 */ 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1de0 */
72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x1df0 */ 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x1df0 */
32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, /* 0x1e00 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, /* 0x1e00 */
48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, /* 0x1e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, /* 0x1e10 */
48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, /* 0x1e20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, /* 0x1e20 */
68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, /* 0x1e30 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, /* 0x1e30 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x1e40 */ 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x1e40 */
32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1e50 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, /* 0x1e50 */
32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1e60 */ 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, /* 0x1e60 */
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, /* 0x1e70 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, /* 0x1e70 */
48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x1e80 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1e80 */
95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1e90 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, /* 0x1e90 */
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x1ea0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, /* 0x1ea0 */
49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x1eb0 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1eb0 */
95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ec0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, /* 0x1ec0 */
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x1ed0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, /* 0x1ed0 */
50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x1ee0 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ee0 */
95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ef0 */ 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, /* 0x1ef0 */
103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x1f00 */ 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x1f00 */
9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, /* 0x1f10 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115, /* 0x1f10 */
10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, /* 0x1f20 */ 116, 97,114,116, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x1f20 */
79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, /* 0x1f30 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, /* 0x1f30 */
78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, /* 0x1f40 */ 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, /* 0x1f40 */
80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1f50 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1f50 */
86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, /* 0x1f60 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, /* 0x1f60 */
95, 80, 80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, 32, 32, /* 0x1f70 */ 48, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 50, 52, 32, 32, /* 0x1f70 */
32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, /* 0x1f80 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, /* 0x1f80 */
48, 48, 55, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x1f90 */ 48, 48, 48, 48, 48, 48, 56, 48, 10, 10, 82, 69, 76, 79, 67, 65, /* 0x1f90 */
32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, /* 0x1fa0 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, /* 0x1fa0 */
86, 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, /* 0x1fb0 */ 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, /* 0x1fb0 */
89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1fc0 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x1fc0 */
32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, 32, /* 0x1fd0 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, /* 0x1fd0 */
82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, /* 0x1fe0 */ 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, /* 0x1fe0 */
32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, /* 0x1ff0 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, /* 0x1ff0 */
67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, /* 0x2000 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, /* 0x2000 */
79, 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, /* 0x2010 */ 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, /* 0x2010 */
69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, /* 0x2020 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x2020 */
32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, /* 0x2030 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x2030 */
48, 48, 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, /* 0x2040 */ 10, 48, 48, 48, 48, 48, 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, /* 0x2040 */
52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, /* 0x2050 */ 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, /* 0x2050 */
10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, /* 0x2060 */ 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x2060 */
79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, /* 0x2070 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, /* 0x2070 */
58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, /* 0x2080 */ 86, 50, 66, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, /* 0x2080 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, /* 0x2090 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2090 */
85, 69, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, 95, 80, 80, /* 0x20a0 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, /* 0x20a0 */
67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, /* 0x20b0 */ 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, /* 0x20b0 */
86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, /* 0x20c0 */ 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, /* 0x20c0 */
79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, /* 0x20d0 */ 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, /* 0x20d0 */
76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, /* 0x20e0 */ 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, /* 0x20e0 */
83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x20f0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x20f0 */
32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x2100 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x2100 */
48, 48, 48, 48, 48, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, /* 0x2110 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 80, 80, 67, /* 0x2110 */
49, 52, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, /* 0x2120 */ 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, /* 0x2120 */
67, 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 49, 48, 10, 10, /* 0x2130 */ 65, 95, 68, 69, 67, 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, /* 0x2130 */
82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, /* 0x2140 */ 49, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, /* 0x2140 */
68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x2150 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, /* 0x2150 */
93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, /* 0x2160 */ 65, 73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, /* 0x2160 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, /* 0x2170 */ 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2170 */
76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, /* 0x2180 */ 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2180 */
80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, 32, 32, 32, 69, /* 0x2190 */ 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, /* 0x2190 */
76, 70, 77, 65, 73, 78, 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x21a0 */ 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10, 82, 69, 76, /* 0x21a0 */
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x21b0 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, /* 0x21b0 */
91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, /* 0x21c0 */ 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, /* 0x21c0 */
69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, /* 0x21d0 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x21d0 */
32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, /* 0x21e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x21e0 */
48, 48, 48, 53, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, /* 0x21f0 */ 10, 48, 48, 48, 48, 48, 48, 53, 48, 32, 82, 95, 80, 80, 67, 95, /* 0x21f0 */
52, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x2200 */ 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, /* 0x2200 */
10 /* 0x2210 */ 65, 73, 78, 89, 10 /* 0x2210 */
}; };
+114 -114
View File
@@ -1,5 +1,5 @@
/* powerpc-linux.elf-fold.h /* powerpc-linux.elf-fold.h
created from powerpc-linux.elf-fold.bin, 1944 (0x798) bytes created from powerpc-linux.elf-fold.bin, 1948 (0x79c) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -28,17 +28,17 @@
*/ */
#define STUB_POWERPC_LINUX_ELF_FOLD_SIZE 1944 #define STUB_POWERPC_LINUX_ELF_FOLD_SIZE 1948
#define STUB_POWERPC_LINUX_ELF_FOLD_ADLER32 0x727175e2 #define STUB_POWERPC_LINUX_ELF_FOLD_ADLER32 0x5d84765f
#define STUB_POWERPC_LINUX_ELF_FOLD_CRC32 0xe344893c #define STUB_POWERPC_LINUX_ELF_FOLD_CRC32 0x99711a49
unsigned char stub_powerpc_linux_elf_fold[1944] = { unsigned char stub_powerpc_linux_elf_fold[1948] = {
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ 127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
0, 2, 0, 20, 0, 0, 0, 1, 0, 16, 0,128, 0, 0, 0, 52, /* 0x 10 */ 0, 2, 0, 20, 0, 0, 0, 1, 0, 16, 0,128, 0, 0, 0, 52, /* 0x 10 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, /* 0x 20 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 16, 0, 0, /* 0x 30 */ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 16, 0, 0, /* 0x 30 */
0, 16, 0, 0, 0, 0, 7,152, 0, 0, 7,152, 0, 0, 0, 5, /* 0x 40 */ 0, 16, 0, 0, 0, 0, 7,156, 0, 0, 7,156, 0, 0, 0, 5, /* 0x 40 */
0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 7,152, 0, 0, 0, 0, /* 0x 50 */ 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 7,156, 0, 0, 0, 0, /* 0x 50 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */
72, 0, 0,125, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 80 */ 72, 0, 0,125, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 80 */
@@ -48,111 +48,111 @@ unsigned char stub_powerpc_linux_elf_fold[1944] = {
125,107, 58, 20, 81, 98, 1,186,144, 67, 0, 0, 78, 64, 0, 32, /* 0x c0 */ 125,107, 58, 20, 81, 98, 1,186,144, 67, 0, 0, 78, 64, 0, 32, /* 0x c0 */
132, 67, 0, 4, 84, 75, 85,190,124, 11, 40, 64, 65,162,255,220, /* 0x d0 */ 132, 67, 0, 4, 84, 75, 85,190,124, 11, 40, 64, 65,162,255,220, /* 0x d0 */
66, 0,255,240, 78,128, 0, 32,128, 73, 0, 0, 57, 41, 0, 4, /* 0x e0 */ 66, 0,255,240, 78,128, 0, 32,128, 73, 0, 0, 57, 41, 0, 4, /* 0x e0 */
47,130, 0, 0, 64,158,255,244, 78,128, 0, 32,125, 8, 2,166, /* 0x f0 */ 47,130, 0, 0, 64,158,255,244, 78,128, 0, 32, 56, 33, 0, 24, /* 0x f0 */
129, 33, 0, 0, 75,255,255,229, 75,255,255,225,128,159,255,248, /* 0x 100 */ 125, 8, 2,166,129, 33, 0, 0, 75,255,255,225, 75,255,255,221, /* 0x 100 */
85, 30, 0, 38,127,231,251,120,127,164,248, 80, 56,161,248, 0, /* 0x 110 */ 128,159,255,248, 85, 30, 0, 38,127,231,251,120,127,164,248, 80, /* 0x 110 */
59,189,255,248, 56,132,255,140, 56,125, 0,116, 56, 33,247,240, /* 0x 120 */ 56,161,248, 0, 59,189,255,248, 56,132,255,140, 56,125, 0,116, /* 0x 120 */
128,195, 0, 24, 72, 0, 5, 13,124,127, 27,120,127,163,235,120, /* 0x 130 */ 56, 33,247,232,128,195, 0, 24, 72, 0, 5, 13,124,127, 27,120, /* 0x 130 */
124,157,240, 80, 72, 0, 0, 81,127,232, 3,166,184, 65, 8, 20, /* 0x 140 */ 127,163,235,120,124,157,240, 80, 72, 0, 0, 81,127,232, 3,166, /* 0x 140 */
128, 33, 8, 16, 78,128, 0, 32, 56, 0, 0, 90, 68, 0, 0, 2, /* 0x 150 */ 184, 65, 8, 28,128, 33, 8, 24, 78,128, 0, 32, 56, 0, 0, 90, /* 0x 150 */
64,163, 0, 8, 56, 96,255,255, 78,128, 0, 32, 56, 0, 0, 1, /* 0x 160 */ 68, 0, 0, 2, 64,163, 0, 8, 56, 96,255,255, 78,128, 0, 32, /* 0x 160 */
75,255,255,236, 56, 0, 0, 3, 75,255,255,228, 56, 0, 0, 5, /* 0x 170 */ 56, 0, 0, 1, 75,255,255,236, 56, 0, 0, 3, 75,255,255,228, /* 0x 170 */
75,255,255,220, 56, 0, 0, 6, 75,255,255,212, 56, 0, 0,125, /* 0x 180 */ 56, 0, 0, 5, 75,255,255,220, 56, 0, 0, 6, 75,255,255,212, /* 0x 180 */
75,255,255,204, 56, 0, 0, 91, 75,255,255,196, 56, 0, 0, 45, /* 0x 190 */ 56, 0, 0,125, 75,255,255,204, 56, 0, 0, 91, 75,255,255,196, /* 0x 190 */
75,255,255,188,124, 8, 2,166,148, 33,255,240,144, 1, 0, 20, /* 0x 1a0 */ 56, 0, 0, 45, 75,255,255,188,124, 8, 2,166,148, 33,255,240, /* 0x 1a0 */
128, 3, 0, 0,129, 35, 0, 4,127,128, 40, 64, 64,188, 0, 12, /* 0x 1b0 */ 144, 1, 0, 20,128, 3, 0, 0,129, 35, 0, 4,127,128, 40, 64, /* 0x 1b0 */
56, 96, 0,127, 75,255,255,169, 47,133, 0, 0, 65,158, 0, 28, /* 0x 1c0 */ 64,188, 0, 12, 56, 96, 0,127, 75,255,255,169, 47,133, 0, 0, /* 0x 1c0 */
124,169, 3,166,136, 9, 0, 0, 57, 41, 0, 1,152, 4, 0, 0, /* 0x 1d0 */ 65,158, 0, 28,124,169, 3,166,136, 9, 0, 0, 57, 41, 0, 1, /* 0x 1d0 */
56,132, 0, 1, 66, 0,255,240,128, 3, 0, 0,129, 35, 0, 4, /* 0x 1e0 */ 152, 4, 0, 0, 56,132, 0, 1, 66, 0,255,240,128, 3, 0, 0, /* 0x 1e0 */
124, 5, 0, 80,144, 3, 0, 0,128, 1, 0, 20,125, 41, 42, 20, /* 0x 1f0 */ 129, 35, 0, 4,124, 5, 0, 80,144, 3, 0, 0,128, 1, 0, 20, /* 0x 1f0 */
124, 8, 3,166, 56, 33, 0, 16,145, 35, 0, 4, 78,128, 0, 32, /* 0x 200 */ 125, 41, 42, 20,124, 8, 3,166, 56, 33, 0, 16,145, 35, 0, 4, /* 0x 200 */
124, 8, 2,166,148, 33,255,192,144, 1, 0, 68,128, 4, 0, 0, /* 0x 210 */ 78,128, 0, 32,124, 8, 2,166,148, 33,255,192,144, 1, 0, 68, /* 0x 210 */
191,129, 0, 48, 47,128, 0, 0,124,159, 35,120,124,126, 27,120, /* 0x 220 */ 128, 4, 0, 0,191,129, 0, 48, 47,128, 0, 0,124,159, 35,120, /* 0x 220 */
124,188, 43,120,124,221, 51,120, 65,158, 1, 36, 56,160, 0, 12, /* 0x 230 */ 124,126, 27,120,124,188, 43,120,124,221, 51,120, 65,158, 1, 36, /* 0x 230 */
127,195,243,120, 56,129, 0, 16, 75,255,255, 93,129, 33, 0, 16, /* 0x 240 */ 56,160, 0, 12,127,195,243,120, 56,129, 0, 16, 75,255,255, 93, /* 0x 240 */
128,161, 0, 20, 47,137, 0, 0, 64,190, 0, 36, 60, 0, 33, 88, /* 0x 250 */ 129, 33, 0, 16,128,161, 0, 20, 47,137, 0, 0, 64,190, 0, 36, /* 0x 250 */
96, 0, 80, 85,127,133, 0, 0, 64,190, 0, 28,128, 30, 0, 0, /* 0x 260 */ 60, 0, 33, 88, 96, 0, 80, 85,127,133, 0, 0, 64,190, 0, 28, /* 0x 260 */
47,128, 0, 0, 65,190, 0,232, 72, 0, 0, 12, 47,133, 0, 0, /* 0x 270 */ 128, 30, 0, 0, 47,128, 0, 0, 65,190, 0,232, 72, 0, 0, 12, /* 0x 270 */
64,190, 0, 12, 56, 96, 0,127, 75,255,254,229,127, 5, 72, 64, /* 0x 280 */ 47,133, 0, 0, 64,190, 0, 12, 56, 96, 0,127, 75,255,254,229, /* 0x 280 */
65,185,255,244,128, 31, 0, 0,127,137, 0, 64, 65,189,255,232, /* 0x 290 */ 127, 5, 72, 64, 65,185,255,244,128, 31, 0, 0,127,137, 0, 64, /* 0x 290 */
128, 31, 0, 4, 64,152, 0,136,124,164, 43,120,128,126, 0, 4, /* 0x 2a0 */ 65,189,255,232,128, 31, 0, 4, 64,152, 0,136,124,164, 43,120, /* 0x 2a0 */
124, 5, 3,120, 56,193, 0, 32,136,225, 0, 24,145, 33, 0, 32, /* 0x 2b0 */ 128,126, 0, 4,124, 5, 3,120, 56,193, 0, 32,136,225, 0, 24, /* 0x 2b0 */
127,136, 3,166, 78,128, 0, 33, 47,131, 0, 0, 64,190,255,184, /* 0x 2c0 */ 145, 33, 0, 32,127,136, 3,166, 78,128, 0, 33, 47,131, 0, 0, /* 0x 2c0 */
128,129, 0, 32,128, 1, 0, 16,127,132, 0, 0, 64,190,255,168, /* 0x 2d0 */ 64,190,255,184,128,129, 0, 32,128, 1, 0, 16,127,132, 0, 0, /* 0x 2d0 */
136,193, 0, 25, 49, 61,255,255,124, 9,233, 16,125, 38, 0,208, /* 0x 2e0 */ 64,190,255,168,136,193, 0, 25, 49, 61,255,255,124, 9,233, 16, /* 0x 2e0 */
85, 41, 15,254,125, 43, 0, 57, 65,162, 0, 20,128,127, 0, 4, /* 0x 2f0 */ 125, 38, 0,208, 85, 41, 15,254,125, 43, 0, 57, 65,162, 0, 20, /* 0x 2f0 */
136,161, 0, 26,127,168, 3,166, 78,128, 0, 33,128, 30, 0, 4, /* 0x 300 */ 128,127, 0, 4,136,161, 0, 26,127,168, 3,166, 78,128, 0, 33, /* 0x 300 */
129, 97, 0, 20,129, 62, 0, 0,124, 0, 90, 20,125, 43, 72, 80, /* 0x 310 */ 128, 30, 0, 4,129, 97, 0, 20,129, 62, 0, 0,124, 0, 90, 20, /* 0x 310 */
144, 30, 0, 4,145, 62, 0, 0, 72, 0, 0, 16,124, 4, 3,120, /* 0x 320 */ 125, 43, 72, 80,144, 30, 0, 4,145, 62, 0, 0, 72, 0, 0, 16, /* 0x 320 */
127,195,243,120, 75,255,254,113,129, 97, 0, 16,129, 63, 0, 0, /* 0x 330 */ 124, 4, 3,120,127,195,243,120, 75,255,254,113,129, 97, 0, 16, /* 0x 330 */
128, 31, 0, 4,125, 43, 72, 80, 47,137, 0, 0,124, 0, 90, 20, /* 0x 340 */ 129, 63, 0, 0,128, 31, 0, 4,125, 43, 72, 80, 47,137, 0, 0, /* 0x 340 */
144, 31, 0, 4,145, 63, 0, 0, 75,255,254,224,128, 1, 0, 68, /* 0x 350 */ 124, 0, 90, 20,144, 31, 0, 4,145, 63, 0, 0, 75,255,254,224, /* 0x 350 */
187,129, 0, 48,124, 8, 3,166, 56, 33, 0, 64, 78,128, 0, 32, /* 0x 360 */ 128, 1, 0, 68,187,129, 0, 48,124, 8, 3,166, 56, 33, 0, 64, /* 0x 360 */
44, 3, 0, 0, 77,130, 0, 32, 48, 4,255,255,125, 96, 33, 16, /* 0x 370 */ 78,128, 0, 32, 44, 3, 0, 0, 77,130, 0, 32, 48, 4,255,255, /* 0x 370 */
128, 3, 0, 0,127,128, 32, 0,104, 9, 0, 1, 33, 73, 0, 0, /* 0x 380 */ 125, 96, 33, 16,128, 3, 0, 0,127,128, 32, 0,104, 9, 0, 1, /* 0x 380 */
125, 42, 73, 20,125, 42, 88, 57, 65,158, 0, 8, 65,162, 0, 16, /* 0x 390 */ 33, 73, 0, 0,125, 42, 73, 20,125, 42, 88, 57, 65,158, 0, 8, /* 0x 390 */
144,163, 0, 4,144,131, 0, 0, 78,128, 0, 32, 56, 99, 0, 8, /* 0x 3a0 */ 65,162, 0, 16,144,163, 0, 4,144,131, 0, 0, 78,128, 0, 32, /* 0x 3a0 */
75,255,255,208,124, 8, 2,166,148, 33,255,160,144, 1, 0,100, /* 0x 3b0 */ 56, 99, 0, 8, 75,255,255,208,124, 8, 2,166,148, 33,255,160, /* 0x 3b0 */
160, 3, 0, 16,161, 67, 0, 44,125,128, 0, 38,129, 35, 0, 28, /* 0x 3c0 */ 144, 1, 0,100,160, 3, 0, 16,161, 67, 0, 44,125,128, 0, 38, /* 0x 3c0 */
104, 0, 0, 3, 53, 74,255,255,124, 0, 0,208,190, 65, 0, 40, /* 0x 3d0 */ 129, 35, 0, 28,104, 0, 0, 3, 53, 74,255,255,124, 0, 0,208, /* 0x 3d0 */
127,163, 74, 20,124,121, 27,120, 84, 3, 46,246,145,129, 0, 36, /* 0x 3e0 */ 190, 65, 0, 40,127,163, 74, 20,124,121, 27,120, 84, 3, 46,246, /* 0x 3e0 */
124,151, 35,120,124,178, 43,120,124,211, 51,120,124,244, 59,120, /* 0x 3f0 */ 145,129, 0, 36,124,151, 35,120,124,178, 43,120,124,211, 51,120, /* 0x 3f0 */
125, 21, 67,120, 56, 99, 8, 34,127,171,235,120, 59,224,255,255, /* 0x 400 */ 124,244, 59,120,125, 21, 67,120, 56, 99, 8, 34,127,171,235,120, /* 0x 400 */
59,192, 0, 0, 65,128, 0, 68, 57, 74, 0, 1,125, 73, 3,166, /* 0x 410 */ 59,224,255,255, 59,192, 0, 0, 65,128, 0, 68, 57, 74, 0, 1, /* 0x 410 */
128, 11, 0, 0, 47,128, 0, 1, 64,190, 0, 40,129, 43, 0, 8, /* 0x 420 */ 125, 73, 3,166,128, 11, 0, 0, 47,128, 0, 1, 64,190, 0, 40, /* 0x 420 */
127,137,248, 64, 64,156, 0, 8,125, 63, 75,120,128, 11, 0, 20, /* 0x 430 */ 129, 43, 0, 8,127,137,248, 64, 64,156, 0, 8,125, 63, 75,120, /* 0x 430 */
124, 0, 74, 20,127,158, 0, 64, 64,156, 0, 8,124, 30, 3,120, /* 0x 440 */ 128, 11, 0, 20,124, 0, 74, 20,127,158, 0, 64, 64,156, 0, 8, /* 0x 440 */
57,107, 0, 32, 66, 0,255,204, 87,255, 0, 38,125, 63,240, 80, /* 0x 450 */ 124, 30, 3,120, 57,107, 0, 32, 66, 0,255,204, 87,255, 0, 38, /* 0x 450 */
57, 41, 15,255, 85, 62, 0, 38,124,102, 27,120,127,196,243,120, /* 0x 460 */ 125, 63,240, 80, 57, 41, 15,255, 85, 62, 0, 38,124,102, 27,120, /* 0x 460 */
127,227,251,120, 56,160, 0, 0, 56,224,255,255, 57, 0, 0, 0, /* 0x 470 */ 127,196,243,120,127,227,251,120, 56,160, 0, 0, 56,224,255,255, /* 0x 470 */
75,255,252,217,160, 25, 0, 44, 58,192, 0, 0,127,150, 0, 0, /* 0x 480 */ 57, 0, 0, 0, 75,255,252,217,160, 25, 0, 44, 58,192, 0, 0, /* 0x 480 */
124, 3,242, 20,144, 1, 0, 8,127, 31, 24, 80, 64,156, 1,128, /* 0x 490 */ 127,150, 0, 0,124, 3,242, 20,144, 1, 0, 8,127, 31, 24, 80, /* 0x 490 */
46, 23, 0, 0, 65,146, 0, 40,128, 29, 0, 0, 47,128, 0, 6, /* 0x 4a0 */ 64,156, 1,128, 46, 23, 0, 0, 65,146, 0, 40,128, 29, 0, 0, /* 0x 4a0 */
64,190, 0, 28,128,189, 0, 8,126, 99,155,120,124,165,194, 20, /* 0x 4b0 */ 47,128, 0, 6, 64,190, 0, 28,128,189, 0, 8,126, 99,155,120, /* 0x 4b0 */
56,128, 0, 3, 75,255,254,173, 72, 0, 1, 64,128, 29, 0, 0, /* 0x 4c0 */ 124,165,194, 20, 56,128, 0, 3, 75,255,254,173, 72, 0, 1, 64, /* 0x 4c0 */
47,128, 0, 1, 64,190, 1, 52,128, 29, 0, 24,129, 93, 0, 8, /* 0x 4d0 */ 128, 29, 0, 0, 47,128, 0, 1, 64,190, 1, 52,128, 29, 0, 24, /* 0x 4d0 */
61, 32,115, 81, 84, 0, 22,250, 97, 41, 98, 64,129,125, 0, 20, /* 0x 4e0 */ 129, 93, 0, 8, 61, 32,115, 81, 84, 0, 22,250, 97, 41, 98, 64, /* 0x 4e0 */
125, 41, 4, 48, 85, 94, 5, 62, 48, 23,255,255,124,160,185, 16, /* 0x 4f0 */ 129,125, 0, 20,125, 41, 4, 48, 85, 94, 5, 62, 48, 23,255,255, /* 0x 4f0 */
128, 29, 0, 16, 85, 58, 7,126,127,106, 90, 20, 84,165, 8, 60, /* 0x 500 */ 124,160,185, 16,128, 29, 0, 16, 85, 58, 7,126,127,106, 90, 20, /* 0x 500 */
127,254, 80, 80,144, 1, 0, 16,145, 65, 0, 20,127,128,242, 20, /* 0x 510 */ 84,165, 8, 60,127,254, 80, 80,144, 1, 0, 16,145, 65, 0, 20, /* 0x 510 */
127,255,194, 20,127,123,194, 20,124,165,211,120, 65,146, 0, 12, /* 0x 520 */ 127,128,242, 20,127,255,194, 20,127,123,194, 20,124,165,211,120, /* 0x 520 */
56,192, 0, 50, 72, 0, 0, 8, 56,192, 0, 18, 64,146, 0, 12, /* 0x 530 */ 65,146, 0, 12, 56,192, 0, 50, 72, 0, 0, 8, 56,192, 0, 18, /* 0x 530 */
126, 71,147,120, 72, 0, 0, 8, 56,224,255,255,129, 29, 0, 4, /* 0x 540 */ 64,146, 0, 12,126, 71,147,120, 72, 0, 0, 8, 56,224,255,255, /* 0x 540 */
127,227,251,120,125, 30, 64, 80,127,132,227,120, 75,255,251,253, /* 0x 550 */ 129, 29, 0, 4,127,227,251,120,125, 30, 64, 80,127,132,227,120, /* 0x 550 */
127,159, 24, 0, 64,158, 0,104, 65,178, 0, 24,126,227,187,120, /* 0x 560 */ 75,255,251,253,127,159, 24, 0, 64,158, 0,104, 65,178, 0, 24, /* 0x 560 */
56,129, 0, 16,126,133,163,120,126,166,171,120, 75,255,252,149, /* 0x 570 */ 126,227,187,120, 56,129, 0, 16,126,133,163,120,126,166,171,120, /* 0x 570 */
115, 64, 0, 2,124, 28, 0,208, 84, 30, 5, 62, 65,130, 0, 36, /* 0x 580 */ 75,255,252,149,115, 64, 0, 2,124, 28, 0,208, 84, 30, 5, 62, /* 0x 580 */
47,158, 0, 0,125, 63,226, 20, 65,158, 0, 24,127,201, 3,166, /* 0x 590 */ 65,130, 0, 36, 47,158, 0, 0,125, 63,226, 20, 65,158, 0, 24, /* 0x 590 */
56, 0, 0, 0,152, 9, 0, 0, 57, 41, 0, 1, 66, 0,255,248, /* 0x 5a0 */ 127,201, 3,166, 56, 0, 0, 0,152, 9, 0, 0, 57, 41, 0, 1, /* 0x 5a0 */
65,178, 0, 36,127,227,251,120,127,132,227,120,127, 69,211,120, /* 0x 5b0 */ 66, 0,255,248, 65,178, 0, 36,127,227,251,120,127,132,227,120, /* 0x 5b0 */
75,255,251,205, 47,131, 0, 0, 65,190, 0, 12, 56, 96, 0,127, /* 0x 5c0 */ 127, 69,211,120, 75,255,251,205, 47,131, 0, 0, 65,190, 0, 12, /* 0x 5c0 */
75,255,251,157,124, 28,242, 20,127,255, 2, 20,127,159,216, 64, /* 0x 5d0 */ 56, 96, 0,127, 75,255,251,157,124, 28,242, 20,127,255, 2, 20, /* 0x 5d0 */
64,188, 0, 40,124,159,216, 80,127, 69,211,120,127,227,251,120, /* 0x 5e0 */ 127,159,216, 64, 64,188, 0, 40,124,159,216, 80,127, 69,211,120, /* 0x 5e0 */
56,192, 0, 50, 56,224,255,255, 57, 0, 0, 0, 75,255,251, 93, /* 0x 5f0 */ 127,227,251,120, 56,192, 0, 50, 56,224,255,255, 57, 0, 0, 0, /* 0x 5f0 */
127,159, 24, 0, 64,190,255,200,160, 25, 0, 44, 58,214, 0, 1, /* 0x 600 */ 75,255,251, 93,127,159, 24, 0, 64,190,255,200,160, 25, 0, 44, /* 0x 600 */
127,150, 0, 0, 59,189, 0, 32, 75,255,254,132,128,121, 0, 24, /* 0x 610 */ 58,214, 0, 1,127,150, 0, 0, 59,189, 0, 32, 75,255,254,132, /* 0x 610 */
128, 1, 0,100,129,129, 0, 36,124, 99,194, 20,124, 8, 3,166, /* 0x 620 */ 128,121, 0, 24,128, 1, 0,100,129,129, 0, 36,124, 99,194, 20, /* 0x 620 */
186, 65, 0, 40,125,128,129, 32, 56, 33, 0, 96, 78,128, 0, 32, /* 0x 630 */ 124, 8, 3,166,186, 65, 0, 40,125,128,129, 32, 56, 33, 0, 96, /* 0x 630 */
124, 8, 2,166,148, 33,255,192,144, 1, 0, 68, 56,132,255,232, /* 0x 640 */ 78,128, 0, 32,124, 8, 2,166,148, 33,255,192,144, 1, 0, 68, /* 0x 640 */
56, 3, 0, 24,144, 1, 0, 12,144,129, 0, 8,128, 3, 0, 24, /* 0x 650 */ 56,132,255,232, 56, 3, 0, 24,144, 1, 0, 12,144,129, 0, 8, /* 0x 650 */
191, 97, 0, 44,129, 97, 0, 8,124,191, 43,120,129,129, 0, 12, /* 0x 660 */ 128, 3, 0, 24,191, 97, 0, 44,129, 97, 0, 8,124,191, 43,120, /* 0x 660 */
124,229, 59,120, 56,192, 0, 0, 56, 97, 0, 8, 56,129, 0, 16, /* 0x 670 */ 129,129, 0, 12,124,229, 59,120, 56,192, 0, 0, 56, 97, 0, 8, /* 0x 670 */
59,223, 0, 52,125, 61, 75,120,124,251, 59,120,144, 1, 0, 16, /* 0x 680 */ 56,129, 0, 16, 59,223, 0, 52,125, 61, 75,120,124,251, 59,120, /* 0x 680 */
125, 28, 67,120,145, 97, 0, 24,145,129, 0, 28,147,225, 0, 20, /* 0x 690 */ 144, 1, 0, 16,125, 28, 67,120,145, 97, 0, 24,145,129, 0, 28, /* 0x 690 */
75,255,251,113,128,190, 0, 8,127,163,235,120, 56,165, 0, 52, /* 0x 6a0 */ 147,225, 0, 20, 75,255,251,113,128,190, 0, 8,127,163,235,120, /* 0x 6a0 */
56,128, 0, 3, 75,255,252,189,160,191, 0, 44,127,163,235,120, /* 0x 6b0 */ 56,165, 0, 52, 56,128, 0, 3, 75,255,252,189,160,191, 0, 44, /* 0x 6b0 */
56,128, 0, 5, 75,255,252,173,128,191, 0, 24,127,163,235,120, /* 0x 6c0 */ 127,163,235,120, 56,128, 0, 5, 75,255,252,173,128,191, 0, 24, /* 0x 6c0 */
56,128, 0, 9, 75,255,252,157,127,103,219,120,127,136,227,120, /* 0x 6d0 */ 127,163,235,120, 56,128, 0, 9, 75,255,252,157,127,103,219,120, /* 0x 6d0 */
127,227,251,120,127,166,235,120, 56,129, 0, 24, 56,160, 0, 0, /* 0x 6e0 */ 127,136,227,120,127,227,251,120,127,166,235,120, 56,129, 0, 24, /* 0x 6e0 */
75,255,252,197,160, 31, 0, 44,124,124, 27,120, 59, 96, 0, 0, /* 0x 6f0 */ 56,160, 0, 0, 75,255,252,197,160, 31, 0, 44,124,124, 27,120, /* 0x 6f0 */
127,155, 0, 0, 64,156, 0,124,128, 30, 0, 0, 59,123, 0, 1, /* 0x 700 */ 59, 96, 0, 0,127,155, 0, 0, 64,156, 0,124,128, 30, 0, 0, /* 0x 700 */
47,128, 0, 3, 56,128, 0, 0, 56,160, 0, 0, 64,190, 0, 88, /* 0x 710 */ 59,123, 0, 1, 47,128, 0, 3, 56,128, 0, 0, 56,160, 0, 0, /* 0x 710 */
128,126, 0, 8, 75,255,250, 89,124,125, 27,121,127,228,251,120, /* 0x 720 */ 64,190, 0, 88,128,126, 0, 8, 75,255,250, 89,124,125, 27,121, /* 0x 720 */
56,160, 2, 0, 65,128, 0, 40, 75,255,250, 61, 47,131, 2, 0, /* 0x 730 */ 127,228,251,120, 56,160, 2, 0, 65,128, 0, 40, 75,255,250, 61, /* 0x 730 */
56,128, 0, 0,127,227,251,120,127,165,235,120, 56,192, 0, 0, /* 0x 740 */ 47,131, 2, 0, 56,128, 0, 0,127,227,251,120,127,165,235,120, /* 0x 740 */
56,224, 0, 0, 57, 0, 0, 0, 65,190, 0, 12, 56, 96, 0,127, /* 0x 750 */ 56,192, 0, 0, 56,224, 0, 0, 57, 0, 0, 0, 65,190, 0, 12, /* 0x 750 */
75,255,250, 13, 75,255,252, 81,124,124, 27,120,127,163,235,120, /* 0x 760 */ 56, 96, 0,127, 75,255,250, 13, 75,255,252, 81,124,124, 27,120, /* 0x 760 */
75,255,250, 21,160, 31, 0, 44, 59,222, 0, 32, 75,255,255,132, /* 0x 770 */ 127,163,235,120, 75,255,250, 21,160, 31, 0, 44, 59,222, 0, 32, /* 0x 770 */
128, 1, 0, 68,127,131,227,120,124, 8, 3,166,187, 97, 0, 44, /* 0x 780 */ 75,255,255,132,128, 1, 0, 68,127,131,227,120,124, 8, 3,166, /* 0x 780 */
56, 33, 0, 64, 78,128, 0, 32 /* 0x 790 */ 187, 97, 0, 44, 56, 33, 0, 64, 78,128, 0, 32 /* 0x 790 */
}; };
@@ -0,0 +1,37 @@
/* powerpc-linux.kernel.vmlinux-head.h
created from powerpc-linux.kernel.vmlinux-head.bin, 8 (0x8) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_POWERPC_LINUX_KERNEL_VMLINUX_HEAD_SIZE 8
#define STUB_POWERPC_LINUX_KERNEL_VMLINUX_HEAD_ADLER32 0x0ec30259
#define STUB_POWERPC_LINUX_KERNEL_VMLINUX_HEAD_CRC32 0xbb153f5c
unsigned char stub_powerpc_linux_kernel_vmlinux_head[8] = {
127,232, 2,166, 72, 0, 0, 1 /* 0x 0 */
};
+588
View File
@@ -0,0 +1,588 @@
/* powerpc-linux.kernel.vmlinux.h
created from powerpc-linux.kernel.vmlinux.bin, 8823 (0x2277) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_POWERPC_LINUX_KERNEL_VMLINUX_SIZE 8823
#define STUB_POWERPC_LINUX_KERNEL_VMLINUX_ADLER32 0xf9f4e72f
#define STUB_POWERPC_LINUX_KERNEL_VMLINUX_CRC32 0x2ccf6e01
unsigned char stub_powerpc_linux_kernel_vmlinux[8823] = {
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
0, 0, 24,164, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */
0, 23, 0, 20, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, /* 0x 30 */
0, 0, 0, 0, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 40 */
77,130, 0, 32, 60, 0, 0, 16,124, 4, 0, 64, 65,128, 0, 8, /* 0x 50 */
124, 4, 3,120, 56,165, 1, 32,124,103, 27,120, 56, 99,255,252, /* 0x 60 */
124,137, 3,166, 72, 0, 0, 28, 84, 75, 2,186,125, 99, 88, 80, /* 0x 70 */
125,107, 58, 20, 81, 98, 1,186,144, 67, 0, 0, 78, 64, 0, 32, /* 0x 80 */
132, 67, 0, 4, 84, 75, 85,190,124, 11, 40, 64, 65,162,255,220, /* 0x 90 */
66, 0,255,240, 78,128, 0, 32,124, 0, 41,236,125,168, 2,166, /* 0x a0 */
40, 7, 0, 2, 64,130, 0,228,144,166, 0, 0,124,132, 26, 20, /* 0x b0 */
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x c0 */
57, 64,255,255, 72, 0, 0,180,124, 9, 0, 64,125, 41, 72, 20, /* 0x d0 */
76,162, 0, 32, 57, 32, 0, 1,125, 41, 28, 44, 56, 99, 0, 4, /* 0x e0 */
124, 9, 0, 64,125, 41, 73, 20, 78,128, 0, 32,141, 3, 0, 1, /* 0x f0 */
157, 5, 0, 1, 75,255,255,213, 65,129,255,244, 56,224, 0, 1, /* 0x 100 */
75,255,255,201,124,231, 57, 21, 75,255,255,193, 65,160,255,244, /* 0x 110 */
52,231,255,253, 57, 0, 0, 0, 65,128, 0, 20,140, 67, 0, 1, /* 0x 120 */
84,231, 64, 46,124,234, 16,249, 65,130, 0, 0, 75,255,255,157, /* 0x 130 */
125, 8, 65, 21, 75,255,255,149,125, 8, 65, 21, 56,224, 0, 1, /* 0x 140 */
64,130, 0, 28, 56,224, 0, 3, 57, 0, 0, 1, 75,255,255,125, /* 0x 150 */
125, 8, 65, 21, 75,255,255,117, 65,160,255,244, 32, 74,242,255, /* 0x 160 */
125, 8, 57, 20,124,234, 42, 20,125, 9, 3,166,141, 7, 0, 1, /* 0x 170 */
157, 5, 0, 1, 66, 0,255,248, 56,224, 1, 0,124, 7, 41,236, /* 0x 180 */
124, 7, 26, 44, 75,255,255,112,124, 0, 41,236,125,168, 2,166, /* 0x 190 */
40, 7, 0, 5, 64,130, 1, 32,144,166, 0, 0,124,132, 26, 20, /* 0x 1a0 */
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 1b0 */
57, 64,255,255, 72, 0, 0,240, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 1c0 */
56, 99, 0, 4,124, 9, 0, 64,125, 41, 72, 20, 97, 41, 0, 1, /* 0x 1d0 */
78,128, 0, 32,141, 3, 0, 1,157, 5, 0, 1,124, 9, 0, 64, /* 0x 1e0 */
125, 41, 74, 20, 65,162,255,213, 65,129,255,236, 56,224, 0, 1, /* 0x 1f0 */
72, 0, 0, 20, 56,231,255,255,125, 41, 72, 21, 65,162,255,189, /* 0x 200 */
124,231, 57, 21,125, 41, 72, 21, 65,162,255,177,124,231, 57, 21, /* 0x 210 */
124, 9, 0, 64,125, 41, 74, 20, 65,162,255,161, 65,160,255,216, /* 0x 220 */
57, 0, 0, 0, 52,231,255,253, 84,231, 64, 46, 65,128, 0, 24, /* 0x 230 */
140, 67, 0, 1,124,234, 16,249,125, 74, 14,112, 65,130, 0, 0, /* 0x 240 */
72, 0, 0, 12,125, 41, 72, 21, 65,162,255,113,125, 8, 65, 21, /* 0x 250 */
125, 41, 72, 21, 65,162,255,101,125, 8, 65, 21, 64,130, 0, 40, /* 0x 260 */
57, 0, 0, 1,125, 41, 72, 21, 65,162,255, 81,125, 8, 65, 21, /* 0x 270 */
124, 9, 0, 64,125, 41, 74, 20, 65,162,255, 65, 65,160,255,232, /* 0x 280 */
57, 8, 0, 2, 32,234,250,255, 57, 8, 0, 1,125, 8, 1,148, /* 0x 290 */
124,234, 42, 20,125, 9, 3,166,141, 7, 0, 1,157, 5, 0, 1, /* 0x 2a0 */
66, 0,255,248, 56,224, 1, 0,124, 7, 41,236,124, 7, 26, 44, /* 0x 2b0 */
75,255,255, 44,124, 0, 41,236,125,168, 2,166, 40, 7, 0, 8, /* 0x 2c0 */
64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, 60, 0,128, 0, /* 0x 2d0 */
61, 32,128, 0, 56, 99,255,255, 56,165,255,255, 57, 64,255,255, /* 0x 2e0 */
72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, 56, 99, 0, 4, /* 0x 2f0 */
124, 9, 0, 64,125, 41, 72, 20, 97, 41, 0, 1, 78,128, 0, 32, /* 0x 300 */
141, 3, 0, 1,157, 5, 0, 1,124, 9, 0, 64,125, 41, 74, 20, /* 0x 310 */
65,162,255,213, 65,129,255,236, 56,224, 0, 1, 72, 0, 0, 20, /* 0x 320 */
56,231,255,255,125, 41, 72, 21, 65,162,255,189,124,231, 57, 20, /* 0x 330 */
125, 41, 72, 21, 65,162,255,177,124,231, 57, 20,124, 9, 0, 64, /* 0x 340 */
125, 41, 74, 20, 65,162,255,161, 65,160,255,216, 57, 0, 0, 0, /* 0x 350 */
52,231,255,253, 84,231, 64, 46, 65,128, 0, 32,140, 67, 0, 1, /* 0x 360 */
124,234, 16,249,125, 74, 14,112, 65,130, 0, 0,112, 66, 0, 1, /* 0x 370 */
65,162, 0, 80, 72, 0, 0, 20,124, 9, 0, 64,125, 41, 74, 20, /* 0x 380 */
65,162,255,101, 65,161, 0, 60, 57, 0, 0, 1,124, 9, 0, 64, /* 0x 390 */
125, 41, 74, 20, 65,162,255, 81, 65,161, 0, 40,125, 41, 72, 21, /* 0x 3a0 */
65,162,255, 69,125, 8, 65, 20,124, 9, 0, 64,125, 41, 74, 20, /* 0x 3b0 */
65,162,255, 53, 65,160,255,232, 57, 8, 0, 2, 72, 0, 0, 16, /* 0x 3c0 */
125, 41, 72, 21, 65,162,255, 33,125, 8, 65, 20, 32,234,250,255, /* 0x 3d0 */
57, 8, 0, 2,125, 8, 1,148,124,234, 42, 20,125, 9, 3,166, /* 0x 3e0 */
141, 7, 0, 1,157, 5, 0, 1, 66, 0,255,248, 56,224, 1, 0, /* 0x 3f0 */
124, 7, 41,236,124, 7, 26, 44, 75,255,255, 16, 40, 7, 0, 14, /* 0x 400 */
64,130, 0, 16,124, 8, 2,166,124,201, 51,120,129, 6, 0, 0, /* 0x 410 */
124,167, 43,120, 56,164,255,254, 56,131, 0, 2,144, 1, 0, 8, /* 0x 420 */
136, 3, 0, 0, 84, 11,232,254, 84, 2, 7,126, 56, 96,250, 0, /* 0x 430 */
124, 99, 88, 48, 56, 99,241,132,124, 38, 11,120,124, 33, 26, 20, /* 0x 440 */
84, 33, 0, 52, 56, 0, 0, 0,124,195, 51,120,144, 9, 0, 0, /* 0x 450 */
148, 3,255,252,124, 1, 24, 64, 65,128,255,248,144,193, 0, 0, /* 0x 460 */
136, 4,255,255, 56,193, 0, 8, 56, 97, 0, 12, 84, 11,225, 62, /* 0x 470 */
84, 0, 7, 62,152, 67, 0, 2,153, 99, 0, 1,152, 3, 0, 0, /* 0x 480 */
124, 8, 2,166,148, 33,255,160,189,193, 0, 24,144, 1, 0,100, /* 0x 490 */
59, 32, 0, 0,137, 67, 0, 2,137, 99, 0, 1,138, 67, 0, 0, /* 0x 4a0 */
147, 38, 0, 0,147, 41, 0, 0,136, 3, 0, 1,125, 40, 3,166, /* 0x 4b0 */
124, 18, 2, 20, 57, 32, 3, 0,125, 41, 0, 48, 56, 9, 7, 54, /* 0x 4c0 */
127,153, 0, 64, 57, 32, 0, 1,125, 43, 88, 48,125, 41, 80, 48, /* 0x 4d0 */
57, 41,255,255, 57,107,255,255,145, 33, 0, 8,124,206, 51,120, /* 0x 4e0 */
124,147, 35,120,124,245, 59,120,125, 20, 67,120,145, 97, 0, 12, /* 0x 4f0 */
59, 3, 0, 4, 59,224, 0, 0, 58,224, 0, 0, 59, 64, 0, 1, /* 0x 500 */
58, 32, 0, 1, 58, 0, 0, 1, 57,224, 0, 1, 57, 32, 0, 0, /* 0x 510 */
64,156, 0, 28,124, 9, 3,166, 57, 96, 4, 0, 85, 32, 8, 60, /* 0x 520 */
125,120, 3, 46, 57, 41, 0, 1, 66, 0,255,244,127,179, 42, 20, /* 0x 530 */
126,108,155,120, 56,160, 0, 0, 57, 0,255,255, 57, 96, 0, 0, /* 0x 540 */
127,140,232, 0, 57,107, 0, 1, 47, 11, 0, 4, 84,169, 64, 46, /* 0x 550 */
65,158, 8,156,136, 12, 0, 0, 57,140, 0, 1,125, 37, 3,120, /* 0x 560 */
64,153,255,224,127,153,160, 64, 64,156, 8,100, 62,192, 0,255, /* 0x 570 */
98,214,255,255,128, 1, 0, 8,127,136,176, 64,127, 35, 0, 56, /* 0x 580 */
86,224, 32, 54,124, 0, 26, 20, 84, 6, 8, 60, 65,157, 0, 32, /* 0x 590 */
127,140,232, 0, 65,158, 8, 88,137, 44, 0, 0, 84,160, 64, 46, /* 0x 5a0 */
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,124,230,194, 46, /* 0x 5b0 */
85, 0,170,254,125, 64, 57,214,127,133, 80, 64, 64,156, 1,172, /* 0x 5c0 */
128, 1, 0, 12, 47,151, 0, 6,127, 41, 0, 56, 32, 18, 0, 8, /* 0x 5d0 */
127,224, 6, 48,125, 41,144, 48,125, 41, 2, 20, 29, 41, 6, 0, /* 0x 5e0 */
32, 7, 8, 0,124, 0, 46,112,124, 7, 2, 20,125, 56, 74, 20, /* 0x 5f0 */
124, 6,195, 46,125, 72, 83,120, 56,201, 14,108, 56, 96, 0, 1, /* 0x 600 */
64,157, 0,180,124, 26,200, 80, 63, 96, 0,255,127,245, 0,174, /* 0x 610 */
99,123,255,255, 87,255, 8, 60, 87,252, 5,238,127,136,216, 64, /* 0x 620 */
87,128, 8, 60, 84,100, 8, 60,124, 6, 2, 20,127, 12,232, 0, /* 0x 630 */
84,169, 64, 46,124,224, 34, 20, 65,157, 0, 24, 65,154, 7,176, /* 0x 640 */
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x 650 */
161,103, 2, 0, 85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0, /* 0x 660 */
127,133, 80, 64,124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, /* 0x 670 */
47, 28, 0, 0,125,105, 88, 80,124,131, 35,120,125, 10, 64, 80, /* 0x 680 */
64,156, 0, 20,176, 7, 2, 0,125, 72, 83,120, 65,186, 0, 24, /* 0x 690 */
72, 0, 0, 28,177,103, 2, 0,124,170, 40, 80, 56,100, 0, 1, /* 0x 6a0 */
65,154, 0, 12, 47,131, 0,255, 64,157,255,108, 47,131, 0,255, /* 0x 6b0 */
65,157, 0,132, 63,224, 0,255, 99,255,255,255,127,136,248, 64, /* 0x 6c0 */
84,103, 8, 60,127, 12,232, 0, 84,169, 64, 46,124,227, 59,120, /* 0x 6d0 */
65,157, 0, 24, 65,154, 7, 24,136, 12, 0, 0, 85, 8, 64, 46, /* 0x 6e0 */
57,140, 0, 1,125, 37, 3,120,125,102, 58, 46, 85, 0,170,254, /* 0x 6f0 */
125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, /* 0x 700 */
85,105,217,126,124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, /* 0x 710 */
64,156, 0, 16,125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 16, /* 0x 720 */
124,170, 40, 80,125,102, 59, 46, 56,103, 0, 1, 47,131, 0,255, /* 0x 730 */
64,157,255,140, 47,151, 0, 3, 84,127, 6, 62,127,249,169,174, /* 0x 740 */
59, 57, 0, 1, 65,157, 0, 12, 58,224, 0, 0, 72, 0, 6,120, /* 0x 750 */
47,151, 0, 9, 65,157, 0, 12, 58,247,255,253, 72, 0, 6,104, /* 0x 760 */
58,247,255,250, 72, 0, 6, 96,125, 10, 64, 80,127,136,176, 64, /* 0x 770 */
84,224,217,126,124, 0, 56, 80, 86,233, 8, 60,124, 6,195, 46, /* 0x 780 */
124,170, 40, 80,124,248, 74, 20, 65,157, 0, 32,127,140,232, 0, /* 0x 790 */
65,158, 6, 92,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x 7a0 */
85, 8, 64, 46, 57,140, 0, 1,161,103, 1,128, 85, 0,170,254, /* 0x 7b0 */
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 64, 32, 11, 8, 0, /* 0x 7c0 */
47,151, 0, 6,124, 0, 46,112,124, 11, 2, 20,176, 7, 1,128, /* 0x 7d0 */
126, 15,131,120,125, 72, 83,120,126, 48,139,120, 56, 0, 0, 0, /* 0x 7e0 */
127, 81,211,120, 64,157, 0, 8, 56, 0, 0, 3,124, 23, 3,120, /* 0x 7f0 */
56,216, 6,100, 72, 0, 2, 24,125, 10, 64, 80,127,136,176, 64, /* 0x 800 */
85, 96,217,126,124, 0, 88, 80,124,170, 40, 80,176, 7, 1,128, /* 0x 810 */
65,157, 0, 32,127,140,232, 0, 65,158, 5,212,137, 44, 0, 0, /* 0x 820 */
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x 830 */
161,103, 1,152, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x 840 */
64,156, 0,188, 32, 11, 8, 0,127,138,176, 64,124, 0, 46,112, /* 0x 850 */
86,233, 40, 52,124, 11, 2, 20,125, 56, 74, 20, 84,107, 8, 60, /* 0x 860 */
176, 7, 1,152,125, 72, 83,120,124,233, 90, 20, 65,157, 0, 32, /* 0x 870 */
127,140,232, 0, 65,158, 5,120,137, 44, 0, 0, 84,160, 64, 46, /* 0x 880 */
124, 5, 75,120, 85, 72, 64, 46, 57,140, 0, 1,161,103, 1,224, /* 0x 890 */
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 72, /* 0x 8a0 */
32, 11, 8, 0, 47,153, 0, 0,124, 0, 46,112,124, 11, 2, 20, /* 0x 8b0 */
176, 7, 1,224,125, 72, 83,120, 65,158, 5, 52, 47,151, 0, 6, /* 0x 8c0 */
57, 32, 0, 9, 64,157, 0, 8, 57, 32, 0, 11,124, 26,200, 80, /* 0x 8d0 */
127,245, 0,174,125, 55, 75,120,127,249,169,174, 59, 57, 0, 1, /* 0x 8e0 */
72, 0, 4,228, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x 8f0 */
125, 10, 64, 80,176, 7, 1,224, 72, 0, 0,252,125, 10, 64, 80, /* 0x 900 */
127,136,176, 64, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x 910 */
176, 7, 1,152, 65,157, 0, 32,127,140,232, 0, 65,158, 4,208, /* 0x 920 */
137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, /* 0x 930 */
57,140, 0, 1,161,103, 1,176, 85, 0,170,254,125, 64, 89,214, /* 0x 940 */
127,133, 80, 64, 64,156, 0, 32, 32, 11, 8, 0,124, 0, 46,112, /* 0x 950 */
124, 11, 2, 20,125, 72, 83,120,126, 41,139,120,176, 7, 1,176, /* 0x 960 */
72, 0, 0,140,125, 10, 64, 80,127,136,176, 64, 85, 96,217,126, /* 0x 970 */
124, 0, 88, 80,124,170, 40, 80,176, 7, 1,176, 65,157, 0, 32, /* 0x 980 */
127,140,232, 0, 65,158, 4,104,137, 44, 0, 0, 84,160, 64, 46, /* 0x 990 */
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,161,103, 1,200, /* 0x 9a0 */
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 32, /* 0x 9b0 */
32, 11, 8, 0,124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120, /* 0x 9c0 */
126, 9,131,120,176, 7, 1,200, 72, 0, 0, 32, 85, 96,217,126, /* 0x 9d0 */
124, 0, 88, 80,125,233,123,120,176, 7, 1,200,124,170, 40, 80, /* 0x 9e0 */
125, 10, 64, 80,126, 15,131,120,126, 48,139,120,127, 81,211,120, /* 0x 9f0 */
125, 58, 75,120, 47,151, 0, 6, 56, 0, 0, 8, 64,157, 0, 8, /* 0x a00 */
56, 0, 0, 11,124, 23, 3,120, 56,216, 10,104,127,136,176, 64, /* 0x a10 */
65,157, 0, 32,127,140,232, 0, 65,158, 3,212,137, 44, 0, 0, /* 0x a20 */
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x a30 */
161,102, 0, 0, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x a40 */
64,156, 0, 48, 32, 11, 8, 0, 84,105, 32, 54,125, 38, 74, 20, /* 0x a50 */
124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120, 56,137, 0, 4, /* 0x a60 */
59,128, 0, 0, 59, 96, 0, 3,176, 6, 0, 0, 72, 0, 0,156, /* 0x a70 */
125, 10, 64, 80,127,136,176, 64, 85, 96,217,126,124, 0, 88, 80, /* 0x a80 */
124,170, 40, 80,176, 6, 0, 0, 65,157, 0, 32,127,140,232, 0, /* 0x a90 */
65,158, 3, 92,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x aa0 */
85, 8, 64, 46, 57,140, 0, 1,161,102, 0, 2, 85, 0,170,254, /* 0x ab0 */
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 48, 32, 11, 8, 0, /* 0x ac0 */
84,105, 32, 54,125, 38, 74, 20,124, 0, 46,112,124, 11, 2, 20, /* 0x ad0 */
125, 72, 83,120, 56,137, 1, 4, 59,128, 0, 8, 59, 96, 0, 3, /* 0x ae0 */
176, 6, 0, 2, 72, 0, 0, 36, 85, 96,217,126,124, 0, 88, 80, /* 0x af0 */
124,170, 40, 80,176, 6, 0, 2,125, 10, 64, 80, 56,134, 2, 4, /* 0x b00 */
59,128, 0, 16, 59, 96, 0, 8,127,105, 3,166, 63,224, 0,255, /* 0x b10 */
99,255,255,255, 56, 96, 0, 1,127,136,248, 64, 84,103, 8, 60, /* 0x b20 */
127, 12,232, 0, 84,169, 64, 46,124,227, 59,120, 65,157, 0, 24, /* 0x b30 */
65,154, 2,188,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x b40 */
125, 37, 3,120,125,100, 58, 46, 85, 0,170,254,125, 64, 89,214, /* 0x b50 */
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x b60 */
124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16, /* 0x b70 */
125, 72, 83,120,124, 4, 59, 46, 72, 0, 0, 16,124,170, 40, 80, /* 0x b80 */
56,103, 0, 1,125,100, 59, 46, 66, 0,255,144, 56, 0, 0, 1, /* 0x b90 */
47,151, 0, 3,124, 0,216, 48,124, 96, 24, 80,124, 99,226, 20, /* 0x ba0 */
65,157, 1,232, 47,131, 0, 3, 58,247, 0, 7,124,105, 27,120, /* 0x bb0 */
64,157, 0, 8, 57, 32, 0, 3, 85, 41, 56, 48,125, 56, 74, 20, /* 0x bc0 */
56,201, 3, 96, 57, 32, 0, 6,125, 41, 3,166, 63,224, 0,255, /* 0x bd0 */
99,255,255,255, 56,128, 0, 1,127,136,248, 64, 84,135, 8, 60, /* 0x be0 */
127, 12,232, 0, 84,169, 64, 46,124,228, 59,120, 65,157, 0, 24, /* 0x bf0 */
65,154, 1,252,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x c00 */
125, 37, 3,120,125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, /* 0x c10 */
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x c20 */
124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16, /* 0x c30 */
125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 16,124,170, 40, 80, /* 0x c40 */
56,135, 0, 1,125,102, 59, 46, 66, 0,255,144, 56,132,255,192, /* 0x c50 */
47,132, 0, 3,124,154, 35,120, 64,157, 1, 40, 47,132, 0, 13, /* 0x c60 */
124,137, 14,112, 84,128, 7,254, 57,105,255,255, 96, 26, 0, 2, /* 0x c70 */
125,105, 3,166, 65,157, 0, 32,127, 90, 88, 48, 87, 73, 8, 60, /* 0x c80 */
125, 56, 74, 20, 84,128, 8, 60,125, 32, 72, 80, 56,201, 5, 94, /* 0x c90 */
72, 0, 0,100, 57, 41,255,251,125, 41, 3,166, 61, 96, 0,255, /* 0x ca0 */
97,107,255,255,127,136, 88, 64,127, 12,232, 0, 84,169, 64, 46, /* 0x cb0 */
87, 90, 8, 60, 65,157, 0, 24, 65,154, 1, 52,136, 12, 0, 0, /* 0x cc0 */
85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, 85, 8,248,126, /* 0x cd0 */
127,133, 64, 64, 65,156, 0, 12,124,168, 40, 80, 99, 90, 0, 1, /* 0x ce0 */
66, 0,255,196, 56, 0, 0, 4,124, 9, 3,166, 87, 90, 32, 54, /* 0x cf0 */
56,216, 6, 68, 60,128, 0,255, 96,132,255,255, 59,128, 0, 1, /* 0x d00 */
59,224, 0, 1,127,136, 32, 64, 87,231, 8, 60,127, 12,232, 0, /* 0x d10 */
84,169, 64, 46,124,255, 59,120, 65,157, 0, 24, 65,154, 0,208, /* 0x d20 */
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x d30 */
125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0, /* 0x d40 */
127,133, 80, 64,124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, /* 0x d50 */
125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16,125, 72, 83,120, /* 0x d60 */
124, 6, 59, 46, 72, 0, 0, 20,124,170, 40, 80, 59,231, 0, 1, /* 0x d70 */
125,102, 59, 46,127, 90,227,120, 87,156, 8, 60, 66, 0,255,136, /* 0x d80 */
55, 90, 0, 1, 65,130, 0, 72,127,154,200, 64, 56, 99, 0, 2, /* 0x d90 */
65,157, 0, 92,124, 26,200, 80,127,245, 0,174, 56, 99,255,255, /* 0x da0 */
127,249,169,174, 59, 57, 0, 1, 49, 99,255,255,125, 43, 25, 16, /* 0x db0 */
124, 20,200, 16,124, 0, 1, 16,124, 0, 0,208,125, 43, 0, 57, /* 0x dc0 */
64,130,255,212,127,153,160, 64, 65,156,247,172, 60, 0, 0,255, /* 0x dd0 */
96, 0,255,255,127,136, 0, 64, 65,157, 0, 32,127,140,232, 0, /* 0x de0 */
56, 96, 0, 1, 65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, /* 0x df0 */
72, 0, 0, 28, 57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80, /* 0x e00 */
144, 14, 0, 0, 56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100, /* 0x e10 */
185,193, 0, 24,124, 8, 3,166, 56, 33, 0, 96,124, 8, 2,166, /* 0x e20 */
148, 33,255,160,189,193, 0, 24,144, 1, 0,100, 59, 32, 0, 0, /* 0x e30 */
137, 67, 0, 2,137, 99, 0, 1,138, 67, 0, 0,147, 38, 0, 0, /* 0x e40 */
147, 41, 0, 0,136, 3, 0, 1,125, 40, 3,166,124, 18, 2, 20, /* 0x e50 */
57, 32, 3, 0,125, 41, 0, 48, 56, 9, 7, 54,127,153, 0, 64, /* 0x e60 */
57, 32, 0, 1,125, 43, 88, 48,125, 41, 80, 48, 57, 41,255,255, /* 0x e70 */
57,107,255,255,145, 33, 0, 8,124,206, 51,120,124,147, 35,120, /* 0x e80 */
124,245, 59,120,125, 20, 67,120,145, 97, 0, 12, 59, 3, 0, 4, /* 0x e90 */
59,224, 0, 0, 58,224, 0, 0, 59, 64, 0, 1, 58, 32, 0, 1, /* 0x ea0 */
58, 0, 0, 1, 57,224, 0, 1, 57, 32, 0, 0, 64,156, 0, 28, /* 0x eb0 */
124, 9, 3,166, 57, 96, 4, 0, 85, 32, 8, 60,125,120, 3, 46, /* 0x ec0 */
57, 41, 0, 1, 66, 0,255,244,127,179, 42, 20,126,108,155,120, /* 0x ed0 */
56,160, 0, 0, 57, 0,255,255, 57, 96, 0, 0,127,140,232, 0, /* 0x ee0 */
57,107, 0, 1, 47, 11, 0, 4, 84,169, 64, 46, 65,158, 8,156, /* 0x ef0 */
136, 12, 0, 0, 57,140, 0, 1,125, 37, 3,120, 64,153,255,224, /* 0x f00 */
127,153,160, 64, 64,156, 8,100, 62,192, 0,255, 98,214,255,255, /* 0x f10 */
128, 1, 0, 8,127,136,176, 64,127, 35, 0, 56, 86,224, 32, 54, /* 0x f20 */
124, 0, 26, 20, 84, 6, 8, 60, 65,157, 0, 32,127,140,232, 0, /* 0x f30 */
65,158, 8, 88,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x f40 */
85, 8, 64, 46, 57,140, 0, 1,124,230,194, 46, 85, 0,170,254, /* 0x f50 */
125, 64, 57,214,127,133, 80, 64, 64,156, 1,172,128, 1, 0, 12, /* 0x f60 */
47,151, 0, 6,127, 41, 0, 56, 32, 18, 0, 8,127,224, 6, 48, /* 0x f70 */
125, 41,144, 48,125, 41, 2, 20, 29, 41, 6, 0, 32, 7, 8, 0, /* 0x f80 */
124, 0, 46,112,124, 7, 2, 20,125, 56, 74, 20,124, 6,195, 46, /* 0x f90 */
125, 72, 83,120, 56,201, 14,108, 56, 96, 0, 1, 64,157, 0,180, /* 0x fa0 */
124, 26,200, 80, 63, 96, 0,255,127,245, 0,174, 99,123,255,255, /* 0x fb0 */
87,255, 8, 60, 87,252, 5,238,127,136,216, 64, 87,128, 8, 60, /* 0x fc0 */
84,100, 8, 60,124, 6, 2, 20,127, 12,232, 0, 84,169, 64, 46, /* 0x fd0 */
124,224, 34, 20, 65,157, 0, 24, 65,154, 7,176,136, 12, 0, 0, /* 0x fe0 */
85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120,161,103, 2, 0, /* 0x ff0 */
85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64, /* 0x1000 */
124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, 47, 28, 0, 0, /* 0x1010 */
125,105, 88, 80,124,131, 35,120,125, 10, 64, 80, 64,156, 0, 20, /* 0x1020 */
176, 7, 2, 0,125, 72, 83,120, 65,186, 0, 24, 72, 0, 0, 28, /* 0x1030 */
177,103, 2, 0,124,170, 40, 80, 56,100, 0, 1, 65,154, 0, 12, /* 0x1040 */
47,131, 0,255, 64,157,255,108, 47,131, 0,255, 65,157, 0,132, /* 0x1050 */
63,224, 0,255, 99,255,255,255,127,136,248, 64, 84,103, 8, 60, /* 0x1060 */
127, 12,232, 0, 84,169, 64, 46,124,227, 59,120, 65,157, 0, 24, /* 0x1070 */
65,154, 7, 24,136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1, /* 0x1080 */
125, 37, 3,120,125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, /* 0x1090 */
32, 11, 8, 0,127,133, 80, 64,124, 0, 46,112, 85,105,217,126, /* 0x10a0 */
124, 11, 2, 20,125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16, /* 0x10b0 */
125, 72, 83,120,124, 6, 59, 46, 72, 0, 0, 16,124,170, 40, 80, /* 0x10c0 */
125,102, 59, 46, 56,103, 0, 1, 47,131, 0,255, 64,157,255,140, /* 0x10d0 */
47,151, 0, 3, 84,127, 6, 62,127,249,169,174, 59, 57, 0, 1, /* 0x10e0 */
65,157, 0, 12, 58,224, 0, 0, 72, 0, 6,120, 47,151, 0, 9, /* 0x10f0 */
65,157, 0, 12, 58,247,255,253, 72, 0, 6,104, 58,247,255,250, /* 0x1100 */
72, 0, 6, 96,125, 10, 64, 80,127,136,176, 64, 84,224,217,126, /* 0x1110 */
124, 0, 56, 80, 86,233, 8, 60,124, 6,195, 46,124,170, 40, 80, /* 0x1120 */
124,248, 74, 20, 65,157, 0, 32,127,140,232, 0, 65,158, 6, 92, /* 0x1130 */
137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, /* 0x1140 */
57,140, 0, 1,161,103, 1,128, 85, 0,170,254,125, 64, 89,214, /* 0x1150 */
127,133, 80, 64, 64,156, 0, 64, 32, 11, 8, 0, 47,151, 0, 6, /* 0x1160 */
124, 0, 46,112,124, 11, 2, 20,176, 7, 1,128,126, 15,131,120, /* 0x1170 */
125, 72, 83,120,126, 48,139,120, 56, 0, 0, 0,127, 81,211,120, /* 0x1180 */
64,157, 0, 8, 56, 0, 0, 3,124, 23, 3,120, 56,216, 6,100, /* 0x1190 */
72, 0, 2, 24,125, 10, 64, 80,127,136,176, 64, 85, 96,217,126, /* 0x11a0 */
124, 0, 88, 80,124,170, 40, 80,176, 7, 1,128, 65,157, 0, 32, /* 0x11b0 */
127,140,232, 0, 65,158, 5,212,137, 44, 0, 0, 84,160, 64, 46, /* 0x11c0 */
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,161,103, 1,152, /* 0x11d0 */
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0,188, /* 0x11e0 */
32, 11, 8, 0,127,138,176, 64,124, 0, 46,112, 86,233, 40, 52, /* 0x11f0 */
124, 11, 2, 20,125, 56, 74, 20, 84,107, 8, 60,176, 7, 1,152, /* 0x1200 */
125, 72, 83,120,124,233, 90, 20, 65,157, 0, 32,127,140,232, 0, /* 0x1210 */
65,158, 5,120,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x1220 */
85, 72, 64, 46, 57,140, 0, 1,161,103, 1,224, 85, 0,170,254, /* 0x1230 */
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 72, 32, 11, 8, 0, /* 0x1240 */
47,153, 0, 0,124, 0, 46,112,124, 11, 2, 20,176, 7, 1,224, /* 0x1250 */
125, 72, 83,120, 65,158, 5, 52, 47,151, 0, 6, 57, 32, 0, 9, /* 0x1260 */
64,157, 0, 8, 57, 32, 0, 11,124, 26,200, 80,127,245, 0,174, /* 0x1270 */
125, 55, 75,120,127,249,169,174, 59, 57, 0, 1, 72, 0, 4,228, /* 0x1280 */
85, 96,217,126,124, 0, 88, 80,124,170, 40, 80,125, 10, 64, 80, /* 0x1290 */
176, 7, 1,224, 72, 0, 0,252,125, 10, 64, 80,127,136,176, 64, /* 0x12a0 */
85, 96,217,126,124, 0, 88, 80,124,170, 40, 80,176, 7, 1,152, /* 0x12b0 */
65,157, 0, 32,127,140,232, 0, 65,158, 4,208,137, 44, 0, 0, /* 0x12c0 */
84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1, /* 0x12d0 */
161,103, 1,176, 85, 0,170,254,125, 64, 89,214,127,133, 80, 64, /* 0x12e0 */
64,156, 0, 32, 32, 11, 8, 0,124, 0, 46,112,124, 11, 2, 20, /* 0x12f0 */
125, 72, 83,120,126, 41,139,120,176, 7, 1,176, 72, 0, 0,140, /* 0x1300 */
125, 10, 64, 80,127,136,176, 64, 85, 96,217,126,124, 0, 88, 80, /* 0x1310 */
124,170, 40, 80,176, 7, 1,176, 65,157, 0, 32,127,140,232, 0, /* 0x1320 */
65,158, 4,104,137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, /* 0x1330 */
85, 8, 64, 46, 57,140, 0, 1,161,103, 1,200, 85, 0,170,254, /* 0x1340 */
125, 64, 89,214,127,133, 80, 64, 64,156, 0, 32, 32, 11, 8, 0, /* 0x1350 */
124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120,126, 9,131,120, /* 0x1360 */
176, 7, 1,200, 72, 0, 0, 32, 85, 96,217,126,124, 0, 88, 80, /* 0x1370 */
125,233,123,120,176, 7, 1,200,124,170, 40, 80,125, 10, 64, 80, /* 0x1380 */
126, 15,131,120,126, 48,139,120,127, 81,211,120,125, 58, 75,120, /* 0x1390 */
47,151, 0, 6, 56, 0, 0, 8, 64,157, 0, 8, 56, 0, 0, 11, /* 0x13a0 */
124, 23, 3,120, 56,216, 10,104,127,136,176, 64, 65,157, 0, 32, /* 0x13b0 */
127,140,232, 0, 65,158, 3,212,137, 44, 0, 0, 84,160, 64, 46, /* 0x13c0 */
124, 5, 75,120, 85, 8, 64, 46, 57,140, 0, 1,161,102, 0, 0, /* 0x13d0 */
85, 0,170,254,125, 64, 89,214,127,133, 80, 64, 64,156, 0, 48, /* 0x13e0 */
32, 11, 8, 0, 84,105, 32, 54,125, 38, 74, 20,124, 0, 46,112, /* 0x13f0 */
124, 11, 2, 20,125, 72, 83,120, 56,137, 0, 4, 59,128, 0, 0, /* 0x1400 */
59, 96, 0, 3,176, 6, 0, 0, 72, 0, 0,156,125, 10, 64, 80, /* 0x1410 */
127,136,176, 64, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x1420 */
176, 6, 0, 0, 65,157, 0, 32,127,140,232, 0, 65,158, 3, 92, /* 0x1430 */
137, 44, 0, 0, 84,160, 64, 46,124, 5, 75,120, 85, 8, 64, 46, /* 0x1440 */
57,140, 0, 1,161,102, 0, 2, 85, 0,170,254,125, 64, 89,214, /* 0x1450 */
127,133, 80, 64, 64,156, 0, 48, 32, 11, 8, 0, 84,105, 32, 54, /* 0x1460 */
125, 38, 74, 20,124, 0, 46,112,124, 11, 2, 20,125, 72, 83,120, /* 0x1470 */
56,137, 1, 4, 59,128, 0, 8, 59, 96, 0, 3,176, 6, 0, 2, /* 0x1480 */
72, 0, 0, 36, 85, 96,217,126,124, 0, 88, 80,124,170, 40, 80, /* 0x1490 */
176, 6, 0, 2,125, 10, 64, 80, 56,134, 2, 4, 59,128, 0, 16, /* 0x14a0 */
59, 96, 0, 8,127,105, 3,166, 63,224, 0,255, 99,255,255,255, /* 0x14b0 */
56, 96, 0, 1,127,136,248, 64, 84,103, 8, 60,127, 12,232, 0, /* 0x14c0 */
84,169, 64, 46,124,227, 59,120, 65,157, 0, 24, 65,154, 2,188, /* 0x14d0 */
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x14e0 */
125,100, 58, 46, 85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0, /* 0x14f0 */
127,133, 80, 64,124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, /* 0x1500 */
125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16,125, 72, 83,120, /* 0x1510 */
124, 4, 59, 46, 72, 0, 0, 16,124,170, 40, 80, 56,103, 0, 1, /* 0x1520 */
125,100, 59, 46, 66, 0,255,144, 56, 0, 0, 1, 47,151, 0, 3, /* 0x1530 */
124, 0,216, 48,124, 96, 24, 80,124, 99,226, 20, 65,157, 1,232, /* 0x1540 */
47,131, 0, 3, 58,247, 0, 7,124,105, 27,120, 64,157, 0, 8, /* 0x1550 */
57, 32, 0, 3, 85, 41, 56, 48,125, 56, 74, 20, 56,201, 3, 96, /* 0x1560 */
57, 32, 0, 6,125, 41, 3,166, 63,224, 0,255, 99,255,255,255, /* 0x1570 */
56,128, 0, 1,127,136,248, 64, 84,135, 8, 60,127, 12,232, 0, /* 0x1580 */
84,169, 64, 46,124,228, 59,120, 65,157, 0, 24, 65,154, 1,252, /* 0x1590 */
136, 12, 0, 0, 85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120, /* 0x15a0 */
125,102, 58, 46, 85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0, /* 0x15b0 */
127,133, 80, 64,124, 0, 46,112, 85,105,217,126,124, 11, 2, 20, /* 0x15c0 */
125, 10, 64, 80,125,105, 88, 80, 64,156, 0, 16,125, 72, 83,120, /* 0x15d0 */
124, 6, 59, 46, 72, 0, 0, 16,124,170, 40, 80, 56,135, 0, 1, /* 0x15e0 */
125,102, 59, 46, 66, 0,255,144, 56,132,255,192, 47,132, 0, 3, /* 0x15f0 */
124,154, 35,120, 64,157, 1, 40, 47,132, 0, 13,124,137, 14,112, /* 0x1600 */
84,128, 7,254, 57,105,255,255, 96, 26, 0, 2,125,105, 3,166, /* 0x1610 */
65,157, 0, 32,127, 90, 88, 48, 87, 73, 8, 60,125, 56, 74, 20, /* 0x1620 */
84,128, 8, 60,125, 32, 72, 80, 56,201, 5, 94, 72, 0, 0,100, /* 0x1630 */
57, 41,255,251,125, 41, 3,166, 61, 96, 0,255, 97,107,255,255, /* 0x1640 */
127,136, 88, 64,127, 12,232, 0, 84,169, 64, 46, 87, 90, 8, 60, /* 0x1650 */
65,157, 0, 24, 65,154, 1, 52,136, 12, 0, 0, 85, 8, 64, 46, /* 0x1660 */
57,140, 0, 1,125, 37, 3,120, 85, 8,248,126,127,133, 64, 64, /* 0x1670 */
65,156, 0, 12,124,168, 40, 80, 99, 90, 0, 1, 66, 0,255,196, /* 0x1680 */
56, 0, 0, 4,124, 9, 3,166, 87, 90, 32, 54, 56,216, 6, 68, /* 0x1690 */
60,128, 0,255, 96,132,255,255, 59,128, 0, 1, 59,224, 0, 1, /* 0x16a0 */
127,136, 32, 64, 87,231, 8, 60,127, 12,232, 0, 84,169, 64, 46, /* 0x16b0 */
124,255, 59,120, 65,157, 0, 24, 65,154, 0,208,136, 12, 0, 0, /* 0x16c0 */
85, 8, 64, 46, 57,140, 0, 1,125, 37, 3,120,125,102, 58, 46, /* 0x16d0 */
85, 0,170,254,125, 64, 89,214, 32, 11, 8, 0,127,133, 80, 64, /* 0x16e0 */
124, 0, 46,112, 85,105,217,126,124, 11, 2, 20,125, 10, 64, 80, /* 0x16f0 */
125,105, 88, 80, 64,156, 0, 16,125, 72, 83,120,124, 6, 59, 46, /* 0x1700 */
72, 0, 0, 20,124,170, 40, 80, 59,231, 0, 1,125,102, 59, 46, /* 0x1710 */
127, 90,227,120, 87,156, 8, 60, 66, 0,255,136, 55, 90, 0, 1, /* 0x1720 */
65,130, 0, 72,127,154,200, 64, 56, 99, 0, 2, 65,157, 0, 92, /* 0x1730 */
124, 26,200, 80,127,245, 0,174, 56, 99,255,255,127,249,169,174, /* 0x1740 */
59, 57, 0, 1, 49, 99,255,255,125, 43, 25, 16,124, 20,200, 16, /* 0x1750 */
124, 0, 1, 16,124, 0, 0,208,125, 43, 0, 57, 64,130,255,212, /* 0x1760 */
127,153,160, 64, 65,156,247,172, 60, 0, 0,255, 96, 0,255,255, /* 0x1770 */
127,136, 0, 64, 65,157, 0, 32,127,140,232, 0, 56, 96, 0, 1, /* 0x1780 */
65,158, 0, 40, 72, 0, 0, 12, 56, 96, 0, 1, 72, 0, 0, 28, /* 0x1790 */
57,140, 0, 1,125, 40, 2,166,124, 19, 96, 80,144, 14, 0, 0, /* 0x17a0 */
56, 96, 0, 0,147, 41, 0, 0,128, 1, 0,100,185,193, 0, 24, /* 0x17b0 */
124, 8, 3,166, 56, 33, 0, 96,128, 33, 0, 0,128, 1, 0, 8, /* 0x17c0 */
124, 8, 3,166, 78,128, 0, 32, 85, 80, 88, 33,161,216,208,213, /* 0x17d0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x17e0 */
0, 0, 0, 0, 0, 0, 0, 45,116,109,112, 47,112,111,119,101, /* 0x17f0 */
114,112, 99, 45,108,105,110,117,120, 46,107,101,114,110,101,108, /* 0x1800 */
46,118,109,108,105,110,117,120, 46, 98,105,110, 58, 32, 32, 32, /* 0x1810 */
32, 32,102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108, /* 0x1820 */
102, 51, 50, 45,112,111,119,101,114,112, 99, 10, 10, 83,101, 99, /* 0x1830 */
116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, /* 0x1840 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, /* 0x1850 */
32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, /* 0x1860 */
32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, /* 0x1870 */
32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, /* 0x1880 */
32, 76, 73, 78, 85, 88, 48, 48, 48, 32, 32, 32, 32, 32, 32, 48, /* 0x1890 */
48, 48, 48, 48, 48, 48, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x18a0 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x18b0 */
48, 48, 48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, /* 0x18c0 */
84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, /* 0x18d0 */
65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 76, 73, 78, 85, 88, /* 0x18e0 */
48, 49, 48, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x18f0 */
56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1900 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 99, 32, /* 0x1910 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1920 */
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1930 */
10, 32, 32, 50, 32, 76, 73, 78, 85, 88, 48, 50, 48, 32, 32, 32, /* 0x1940 */
32, 32, 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 48, 48, 48, /* 0x1950 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1960 */
32, 48, 48, 48, 48, 48, 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, /* 0x1970 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, /* 0x1980 */
78, 76, 89, 10, 32, 32, 51, 32, 76, 73, 78, 85, 88, 48, 51, 48, /* 0x1990 */
32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x19a0 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x19b0 */
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 97, 56, 32, 32, 50, 42, /* 0x19c0 */
42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x19d0 */
65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 66, /* 0x19e0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,102, /* 0x19f0 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1a00 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 97, 56, 32, /* 0x1a10 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1a20 */
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1a30 */
10, 32, 32, 53, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, /* 0x1a40 */
32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 99, 32, 32, 48, 48, 48, /* 0x1a50 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1a60 */
32, 48, 48, 48, 48, 48, 49, 57, 56, 32, 32, 50, 42, 42, 48, 32, /* 0x1a70 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, /* 0x1a80 */
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 78, /* 0x1a90 */
82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, /* 0x1aa0 */
48, 48, 49, 52, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ab0 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1ac0 */
50, 99, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x1ad0 */
78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, /* 0x1ae0 */
79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 32, 32, 32, /* 0x1af0 */
32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1b00 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1b10 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 48, 99, 32, 32, 50, /* 0x1b20 */
42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1b30 */
69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, /* 0x1b40 */
95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1b50 */
56, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1b60 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 48, 99, /* 0x1b70 */
32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x1b80 */
44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x1b90 */
89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, /* 0x1ba0 */
32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, /* 0x1bb0 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1bc0 */
32, 32, 48, 48, 48, 48, 48, 52, 57, 48, 32, 32, 50, 42, 42, 48, /* 0x1bd0 */
32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, /* 0x1be0 */
79, 78, 76, 89, 10, 32, 49, 48, 32, 76, 90, 77, 65, 95, 68, 69, /* 0x1bf0 */
67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, /* 0x1c00 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1c10 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 48,101, 50, 99, 32, 32, 50, /* 0x1c20 */
42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1c30 */
69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 76, 90, 77, 65, /* 0x1c40 */
95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1c50 */
49, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1c60 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 99, 56, /* 0x1c70 */
32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x1c80 */
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 50, 32, 85, /* 0x1c90 */
80, 88, 49, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, /* 0x1ca0 */
48, 48, 48, 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1cb0 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, /* 0x1cc0 */
55,100, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x1cd0 */
78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, /* 0x1ce0 */
77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, /* 0x1cf0 */
48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 73, 78, /* 0x1d00 */
85, 88, 48, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, /* 0x1d10 */
73, 78, 85, 88, 48, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1d20 */
32,108, 32, 32, 32, 32,100, 32, 32, 76, 73, 78, 85, 88, 48, 51, /* 0x1d30 */
48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 73, 78, 85, 88, /* 0x1d40 */
48, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x1d50 */
32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, /* 0x1d60 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, /* 0x1d70 */
67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x1d80 */
32, 32,100, 32, 32, 76, 73, 78, 85, 88, 48, 48, 48, 9, 48, 48, /* 0x1d90 */
48, 48, 48, 48, 48, 48, 32, 76, 73, 78, 85, 88, 48, 48, 48, 10, /* 0x1da0 */
48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x1db0 */
32, 76, 73, 78, 85, 88, 48, 49, 48, 9, 48, 48, 48, 48, 48, 48, /* 0x1dc0 */
48, 48, 32, 76, 73, 78, 85, 88, 48, 49, 48, 10, 48, 48, 48, 48, /* 0x1dd0 */
48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, /* 0x1de0 */
50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, /* 0x1df0 */
66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1e00 */
100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x1e10 */
48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1e20 */
32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, /* 0x1e30 */
48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, /* 0x1e40 */
48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, /* 0x1e50 */
90, 77, 65, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, /* 0x1e60 */
65, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1e70 */
100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, /* 0x1e80 */
48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, /* 0x1e90 */
48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1ea0 */
100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, /* 0x1eb0 */
48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, /* 0x1ec0 */
48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1ed0 */
100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, /* 0x1ee0 */
48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, /* 0x1ef0 */
48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x1f00 */
100, 32, 32, 85, 80, 88, 49, 72, 69, 65, 68, 9, 48, 48, 48, 48, /* 0x1f10 */
48, 48, 48, 48, 32, 85, 80, 88, 49, 72, 69, 65, 68, 10, 48, 48, /* 0x1f20 */
48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, /* 0x1f30 */
85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32,102,105, /* 0x1f40 */
108,116,101,114, 95,108,101,110,103,116,104, 10, 48, 48, 48, 48, /* 0x1f50 */
48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, /* 0x1f60 */
68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32,102,105,108,116, /* 0x1f70 */
101,114, 95, 99,116,111, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1f80 */
32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, /* 0x1f90 */
48, 48, 48, 48, 48, 48, 32,101,111,102, 95,110,114,118, 10, 10, /* 0x1fa0 */
82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, /* 0x1fb0 */
68, 83, 32, 70, 79, 82, 32, 91, 76, 73, 78, 85, 88, 48, 48, 48, /* 0x1fc0 */
93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, /* 0x1fd0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, /* 0x1fe0 */
76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, /* 0x1ff0 */
80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, 32, 32, 32, 76, /* 0x2000 */
73, 78, 85, 88, 48, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 52, /* 0x2010 */
32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, /* 0x2020 */
32, 32, 32, 76, 73, 78, 85, 88, 48, 50, 48, 10, 10, 82, 69, 76, /* 0x2030 */
79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, /* 0x2040 */
70, 79, 82, 32, 91, 76, 73, 78, 85, 88, 48, 49, 48, 93, 58, 10, /* 0x2050 */
79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x2060 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x2070 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 95, /* 0x2080 */
65, 68, 68, 82, 51, 50, 32, 32, 32, 32, 32, 32,102,105,108,116, /* 0x2090 */
101,114, 95,108,101,110,103,116,104, 10, 48, 48, 48, 48, 48, 48, /* 0x20a0 */
48, 52, 32, 82, 95, 80, 80, 67, 95, 65, 68, 68, 82, 51, 50, 32, /* 0x20b0 */
32, 32, 32, 32, 32,102,105,108,116,101,114, 95, 99,116,111, 10, /* 0x20c0 */
10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, /* 0x20d0 */
82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, /* 0x20e0 */
10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, /* 0x20f0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, /* 0x2100 */
69, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, 95, 80, 80, 67, /* 0x2110 */
95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32,101,111,102, /* 0x2120 */
95,110,114,118, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, /* 0x2130 */
32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, /* 0x2140 */
86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, /* 0x2150 */
89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2160 */
32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, 32, /* 0x2170 */
82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, /* 0x2180 */
32, 32,101,111,102, 95,110,114,118, 10, 10, 82, 69, 76, 79, 67, /* 0x2190 */
65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, /* 0x21a0 */
82, 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, /* 0x21b0 */
84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x21c0 */
32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, /* 0x21d0 */
48, 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, /* 0x21e0 */
32, 32, 32, 32, 32, 32, 32,101,111,102, 95,110,114,118, 10, 10, /* 0x21f0 */
82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, /* 0x2200 */
68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, /* 0x2210 */
48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, /* 0x2220 */
80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x2230 */
86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, /* 0x2240 */
95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, /* 0x2250 */
32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 43, 48,120, 48, 48, /* 0x2260 */
48, 48, 48, 48, 49, 48, 10 /* 0x2270 */
};
+6 -3
View File
@@ -67,7 +67,8 @@ def do_file(fn):
elif opts.bfdname == "elf32-i386" and opts.elfosabi == "linux": elif opts.bfdname == "elf32-i386" and opts.elfosabi == "linux":
if e_ident[4:7] != "\x01\x01\x01": if e_ident[4:7] != "\x01\x01\x01":
raise Exception, "%s is not %s" % (fn, opts.bfdname) raise Exception, "%s is not %s" % (fn, opts.bfdname)
write("\x00Linux\x00\x00\x00") ##write("\x00Linux\x00\x00\x00")
write("\x00" * 9)
elif opts.bfdname == "elf32-i386" and opts.elfosabi == "openbsd": elif opts.bfdname == "elf32-i386" and opts.elfosabi == "openbsd":
if e_ident[4:7] != "\x01\x01\x01": if e_ident[4:7] != "\x01\x01\x01":
raise Exception, "%s is not %s" % (fn, opts.bfdname) raise Exception, "%s is not %s" % (fn, opts.bfdname)
@@ -75,11 +76,13 @@ def do_file(fn):
elif opts.bfdname == "elf32-powerpc" and opts.elfosabi == "linux": elif opts.bfdname == "elf32-powerpc" and opts.elfosabi == "linux":
if e_ident[4:7] != "\x01\x02\x01": if e_ident[4:7] != "\x01\x02\x01":
raise Exception, "%s is not %s" % (fn, opts.bfdname) raise Exception, "%s is not %s" % (fn, opts.bfdname)
write("\x00Linux\x00\x00\x00") ##write("\x00Linux\x00\x00\x00")
write("\x00" * 9)
elif opts.bfdname == "elf64-x86_64" and opts.elfosabi == "linux": elif opts.bfdname == "elf64-x86_64" and opts.elfosabi == "linux":
if e_ident[4:7] != "\x02\x01\x01": if e_ident[4:7] != "\x02\x01\x01":
raise Exception, "%s is not %s" % (fn, opts.bfdname) raise Exception, "%s is not %s" % (fn, opts.bfdname)
write("\x00Linux\x00\x00\x00") ##write("\x00Linux\x00\x00\x00")
write("\x00" * 9)
else: else:
done = 0 done = 0
else: else:
+38 -27
View File
@@ -54,56 +54,67 @@ def add_dep(state, fn, mode):
fn = os.path.normcase(fn) fn = os.path.normcase(fn)
if fn in files: if fn in files:
return return
# FIXME: could use samestat() etc. # FIXME: could use os.path.samestat() etc.
files.append(fn) files.append(fn)
files_st[fn] = os.stat(fn) files_st[fn] = os.stat(fn)
def not_found(l, s, state): def not_found(state, l, inc, fatal=None):
if opts.fatal: if fatal is None:
raise Exception, "%s:%d: include file %s not found" % (state[0], state[2], s) fatal = opts.fatal
if fatal:
raise Exception, "%s:%d: include file %s not found" % (state[0], state[2], inc)
return l return l
def handle_inc_c(l, state, ofp): def parse_comment(state, l, comment):
m = re.search(r"^\s*\#\s*include\s+([\"\<].+)", l) cf = {}
if not comment: return cf
m = re.search(r"gpp_inc:(.+?):", comment.strip())
if not m: return cf
flags = re.split(r"\s+", m.group(1).strip())
for f in flags:
assert f, (f, flags, m.groups(), comment)
if f == "ignore=0": cf["fatal"] = 1
elif f == "ignore=1": cf["fatal"] = 0
else:
raise Exception, "%s:%d: bad flags %s %s" % (state[0], state[2], f, str(flags))
return cf
def handle_inc_c(state, l, ofp):
m = re.search(r"^\s*\#\s*include\s+([\"\<])(.+?)([\"\>])(.*)$", l)
if not m: if not m:
return l return l
s = m.group(1).strip() q1, inc, q2, comment = m.groups()
# FIXME: strip comments ? cf = parse_comment(state, l, comment)
if len(s) < 3: if q1 == '<' and q2 == '>':
return not_found(l, s, state)
if s[0] == '<' and s[-1] == '>':
dirs = opts.includes dirs = opts.includes
elif s[0] == '"' and s[-1] == '"': elif q1 == '"' and q2 == '"':
dirs = [state[1]] + opts.includes dirs = [state[1]] + opts.includes
else: else:
raise Exception, "syntax error: include line " + l raise Exception, "syntax error: include line " + l
inc = s[1:-1]
for dir in dirs: for dir in dirs:
fn = os.path.join(dir, inc) fn = os.path.join(dir, inc)
if os.path.isfile(fn): if os.path.isfile(fn):
add_dep(state, fn, s[0] == '<') add_dep(state, fn, q1 == '<')
handle_file(fn, ofp, state) handle_file(fn, ofp, state)
return None return None
return not_found(l, s, state) return not_found(state, l, inc, cf.get("fatal"))
def handle_inc_nasm(l, state, ofp): def handle_inc_nasm(state, l, ofp):
m = re.search(r"^\s*\%\s*include\s+([\"\<].+)", l) m = re.search(r"^\s*\%\s*include\s+([\"\<])(.+?)([\"\>])(.*)$", l)
if not m: if not m:
return l return l
s = m.group(1).strip() q1, inc, q2, comment = m.groups()
# FIXME: strip comments ? cf = parse_comment(state, l, comment)
if len(s) < 3: if q1 == '<' and q2 == '>':
return not_found(l, s, state)
if s[0] == '<' and s[-1] == '>':
pass pass
elif s[0] == '"' and s[-1] == '"': elif q1 == '"' and q2 == '"':
pass pass
else: else:
raise Exception, "syntax error: include line " + l raise Exception, "syntax error: include line " + l
inc = s[1:-1]
# info: nasm simply does concat the includes # info: nasm simply does concat the includes
for prefix in opts.includes + [""]: for prefix in opts.includes + [""]:
fn = prefix + inc fn = prefix + inc
@@ -111,7 +122,7 @@ def handle_inc_nasm(l, state, ofp):
add_dep(state, fn, False) add_dep(state, fn, False)
handle_file(fn, ofp, state) handle_file(fn, ofp, state)
return None return None
return not_found(l, s, state) return not_found(state, l, inc, cf.get("fatal"))
def handle_file(ifn, ofp, parent_state=None): def handle_file(ifn, ofp, parent_state=None):
@@ -121,9 +132,9 @@ def handle_file(ifn, ofp, parent_state=None):
state[2] += 1 # line counter state[2] += 1 # line counter
l = l.rstrip("\n") l = l.rstrip("\n")
if opts.mode == "c": if opts.mode == "c":
l = handle_inc_c(l, state, ofp) l = handle_inc_c(state, l, ofp)
elif opts.mode == "nasm": elif opts.mode == "nasm":
l = handle_inc_nasm(l, state, ofp) l = handle_inc_nasm(state, l, ofp)
if l is not None: if l is not None:
ofp.write(l + "\n") ofp.write(l + "\n")
+3
View File
@@ -88,6 +88,7 @@ def create_bindump(bindump_fn, dump_fn):
e = f[1], int(f[2], 16), int(f[5], 16), int(f[6][3:], 10), len(sections) e = f[1], int(f[2], 16), int(f[5], 16), int(f[6][3:], 10), len(sections)
sections.append(e) sections.append(e)
assert not section_names.has_key(e[0]), e assert not section_names.has_key(e[0]), e
assert not e[0].endswith(":"), ("bad section name", e)
section_names[e[0]] = e section_names[e[0]] = e
##print sections ##print sections
# preprocessSymbols # preprocessSymbols
@@ -100,6 +101,8 @@ def create_bindump(bindump_fn, dump_fn):
assert f[1] in "gl", (l, f) assert f[1] in "gl", (l, f)
assert f[2] in "dFO", (l, f) assert f[2] in "dFO", (l, f)
section = section_names[f[3]] section = section_names[f[3]]
elif len(f) == 5 and f[2] == "*ABS*":
pass
elif len(f) == 5: elif len(f) == 5:
assert f[1] in "gl", (l, f) assert f[1] in "gl", (l, f)
section = section_names[f[2]] section = section_names[f[2]]
+4 -1
View File
@@ -8,10 +8,12 @@ __dir_list += ../../../../../.. ../../../../../../.. ../../../../../../../..
__dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3) __dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3)
top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND) top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND)
endif endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
vpath %.c $(top_srcdir)/src/stub/src/c vpath %.c $(top_srcdir)/src/stub/src/c
STUBS = STUBS =
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),) include $(top_srcdir)/src/stub/src/c/Makevars.lzma
ifneq ($(UPX_LZMA_VERSION),)
STUBS += lzma_d_cf.S lzma_d_cs.S STUBS += lzma_d_cf.S lzma_d_cs.S
endif endif
@@ -36,6 +38,7 @@ $c += -Os -fomit-frame-pointer
$c += -fno-unit-at-a-time $c += -fno-unit-at-a-time
$c += -ffunction-sections $c += -ffunction-sections
$c += -fwrapv $c += -fwrapv
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR) $c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src $c += -I$(top_srcdir)/src
+4 -1
View File
@@ -8,10 +8,12 @@ __dir_list += ../../../../../.. ../../../../../../.. ../../../../../../../..
__dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3) __dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3)
top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND) top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND)
endif endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
vpath %.c $(top_srcdir)/src/stub/src/c vpath %.c $(top_srcdir)/src/stub/src/c
STUBS = STUBS =
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),) include $(top_srcdir)/src/stub/src/c/Makevars.lzma
ifneq ($(UPX_LZMA_VERSION),)
STUBS += lzma_d_cf.S lzma_d_cs.S STUBS += lzma_d_cf.S lzma_d_cs.S
endif endif
@@ -39,6 +41,7 @@ $c += -Os -fomit-frame-pointer
$c += -fno-unit-at-a-time $c += -fno-unit-at-a-time
$c += -ffunction-sections $c += -ffunction-sections
$c += -fwrapv $c += -fwrapv
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR) $c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src $c += -I$(top_srcdir)/src
+4
View File
@@ -128,7 +128,11 @@
#include "lzma_d_cs.S" #include "lzma_d_cs.S"
section LZMA_DEC20 section LZMA_DEC20
#if 1 /*{*/
#include "lzma_d_cf.S" #include "lzma_d_cf.S"
#else /*}{*/
#include "lzma_d-arm.S"
#endif /*}*/
section LZMA_DEC30 section LZMA_DEC30
+4 -1
View File
@@ -8,10 +8,12 @@ __dir_list += ../../../../../.. ../../../../../../.. ../../../../../../../..
__dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3) __dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3)
top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND) top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND)
endif endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
vpath %.c $(top_srcdir)/src/stub/src/c vpath %.c $(top_srcdir)/src/stub/src/c
STUBS = STUBS =
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),) include $(top_srcdir)/src/stub/src/c/Makevars.lzma
ifneq ($(UPX_LZMA_VERSION),)
STUBS += lzma_d_cf.S lzma_d_cs.S STUBS += lzma_d_cf.S lzma_d_cs.S
endif endif
@@ -37,6 +39,7 @@ $c += -Os -fomit-frame-pointer
$c += -fno-unit-at-a-time $c += -fno-unit-at-a-time
$c += -ffunction-sections $c += -ffunction-sections
$c += -fwrapv $c += -fwrapv
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR) $c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src $c += -I$(top_srcdir)/src
+1 -1
View File
@@ -35,7 +35,7 @@
.endm .endm
.macro loadcon8 reg,val8 .macro loadcon8 reg,val8
.byte \val8, \reg<<4, 0xa0, 0xe3 /* mov \reg,#\val8 */ .long (0xe3<<24)|(0xa0<<16)|((\reg<<4)<<8)+(\val8) /* mov \reg,#\val8 */
.endm .endm
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+296
View File
@@ -0,0 +1,296 @@
MAKEFLAGS += -rR
.SUFFIXES:
.SECONDEXPANSION:
ifndef top_srcdir
__dir_list = . .. ../.. ../../.. ../../../.. ../../../../..
__dir_list += ../../../../../.. ../../../../../../.. ../../../../../../../..
__dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3)
top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND)
endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
vpath %.c $(top_srcdir)/src/stub/src/c
STUBS =
include $(top_srcdir)/src/stub/src/c/Makevars.lzma
ifneq ($(UPX_LZMA_VERSION),)
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
STUBS += lzma_d_cf.S lzma_d_cs.S
endif
endif
default.targets = all
ifeq ($(strip $(STUBS)),)
STUBS = NO_STUBS
all.targets =
endif
include $(top_srcdir)/src/stub/Makefile
# /***********************************************************************
# //
# ************************************************************************/
# enumerate the names of all environment variables
# FIXME: "origin" does not work for things like "export LC_ALL = C"
##__minienv_varlist = $(foreach v,$1,$(if $(findstring environment,$(origin $v)),$v))
__minienv_varlist = $(foreach v,$1,$(if $($v),$v))
# enumerate the names of all environment variables
__minienv_expand = $(foreach v,$(call __minienv_varlist,$1),$v='$($v)')
DOSBOX = true
DOSBOX = dosbox
DOSBOX = /usr/bin/time -p dosbox -exit
ifneq ($(wildcard /usr/bin/wine /usr/local/bin/wine),)
WINEENV = @env
WINEENV = @env -i $(call __minienv_expand,DISPLAY HOME LANG LC_ALL PATH USER TERM)
winedir_s = z:$(shell winepath -s $(realpath $1))
winedir_w = $(shell winepath -w $(realpath $1))
else
WINEENV = false 'WINEENV'
winedir_s = $1
winedir_w = $1
endif
# work around limitations of wine's cmd.exe
define mkbat
$(ECHO_E) '@set PATH=$3;%PATH%' > $1
$(ECHO_E) '@set INCLUDE=$4' >> $1
$(ECHO_E) '@set LIB=$5' >> $1
$(ECHO_E) '@set a=%1 %2 %3 %4 %5 %6 %7 %8 %9' >> $1
$(ECHO_e) '@shift\n@shift\n@shift\n@shift\n@shift' >> $1
$(ECHO_e) '@shift\n@shift\n@shift\n@shift' >> $1
$(ECHO_E) '@set b=%1 %2 %3 %4 %5 %6 %7 %8 %9' >> $1
$(ECHO_e) '@shift\n@shift\n@shift\n@shift\n@shift' >> $1
$(ECHO_e) '@shift\n@shift\n@shift\n@shift' >> $1
$(ECHO_E) '$2 %a% %b% %1 %2 %3 %4 %5 %6 %7 %8 %9' >> $1
$(UNIX2DOS) $1
endef
TMP_DEPS = tmp/.tmp-stamp tmp/bcc.bat tmp/cl.bat tmp/dmc.bat
tmp/bcc.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
@$(call mkbat,$@,bcc.exe,$(call winedir_w,$(BC502DIR)/bin))
tmp/cl.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
@$(call mkbat,$@,cl.exe,$(call winedir_w,$(VC152DIR)/bin),$(call winedir_w,$(VC152DIR)/include),$(call winedir_w,$(VC152DIR)/lib))
tmp/dmc.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
@$(call mkbat,$@,dmc.exe,$(call winedir_w,$(DM849DIR)/bin))
# /***********************************************************************
# // method-lzma
# ************************************************************************/
lzma_d_c% : tc_list = method-lzma arch-i086 default
lzma_d_c% : tc_bfdname =
# gcc
c := tc.arch-i086.gcc
$c += -MF /dev/null
$c += -Wall -W
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src
# Borland C/C++ 5.02
ifneq ($(wildcard $(BC502DIR)/bin/bcc.exe),)
c := tc.method-lzma.bcc
$c = $(WINEENV) wine cmd.exe /c tmp/bcc.bat
$c += -ms
$c += -O1 -1
$c += -w
$c += -D__INT_MAX__=32767
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
ifeq ($(UPX_LZMA_VERSION),0x449)
$c += -I$(subst \,/,$(call winedir_w,$(UPX_LZMADIR)/C/Compress/Lzma))
else
$c += -I$(subst \,/,$(call winedir_w,$(UPX_LZMADIR)/C/7zip/Compress/LZMA_C))
endif
$c += -I$(top_srcdir)/src
endif
# Digital Mars C/C++ 8.49
# http://www.digitalmars.com/download/freecompiler.html
ifneq ($(wildcard $(DM849DIR)/bin/dmc.exe),)
c := tc.method-lzma.dmc
$c = $(WINEENV) DMC1='$(DMC1)' DMC2='$(DMC2)' wine cmd.exe /c tmp/dmc.bat
$c += -ms -R
$c += -NS
$c += -w- -w7 -r
$c += @DMC1 @DMC2
DMC1 := -o -0
DMC1 += -D__INT_MAX__=32767
DMC1 += -DWITH_LZMA=$(UPX_LZMA_VERSION)
DMC2 := -I$(call winedir_w,$(UPX_LZMADIR))
DMC2 += -I$(call winedir_w,$(top_srcdir)/src)
endif
# Visual C/C++ 1.52 (8.00c)
ifneq ($(wildcard $(VC152DIR)/bin/cl.exe),)
c := tc.method-lzma.cl
$c = $(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/cl.bat
$c += -AS -Gd
$c += -Gy
$c += -O2 -Gf -Gs -G0
$c += -W4
CL := -nologo
CL += -D__INT_MAX__=32767
CL += -DWITH_LZMA=$(UPX_LZMA_VERSION)
CL += -I$(call winedir_s,$(UPX_LZMADIR))
CL += -I$(call winedir_s,$(top_srcdir)/src)
endif
# Open Watcom C/C++ 1.6
# http://www.openwatcom.com/
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
c := tc.method-lzma.wcl
$c = PATH='$(WATCOM)/binl:$(PATH)' $(WATCOM)/binl/wcl -zq -bt=dos
$c += -ms -ecc
$c += -zm -zc
$c += -os -s -0 -d0
$c += -w5 -we -fr=/dev/null
$c += -D__INT_MAX__=32767
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src
endif
ifneq ($(UPX_LZMA_VERSION),)
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
lzma_d_c%.S : tmp/lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
$(PYTHON) cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
tmp/lzma_d_c%.i : lzma_d_c.c wdis2gas.py $(MAKEFILE_LIST) $(TMP_DEPS)
rm -f tmp/$T*.i tmp/$T*.o tmp/$T*.obj tmp/$T*.S
# compile
ifneq ($(wildcard $(BC502DIR)/bin/bcc.exe),)
## $(call tc,bcc) $(PP_FLAGS) -c -otmp/$T_bc.obj $<
## $(call tc,wdis) tmp/$T_bc.obj | $(RTRIM) > tmp/$T_bc.obj.disasm
endif
ifneq ($(wildcard $(DM849DIR)/bin/dmc.exe),)
$(call tc,dmc) $(PP_FLAGS) -c -otmp/$T_dm.obj $<
$(call tc,wdis) tmp/$T_dm.obj | $(RTRIM) > tmp/$T_dm.obj.disasm
endif
ifneq ($(wildcard $(VC152DIR)/bin/cl.exe),)
$(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T_vc.obj $<
$(call tc,wdis) tmp/$T_vc.obj | $(RTRIM) > tmp/$T_vc.obj.disasm
endif
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
$(call tc,wcl) $(PP_FLAGS) -c -fo=tmp/$T_wc.obj $<
$(call tc,wdis) tmp/$T_wc.obj | $(RTRIM) > tmp/$T_wc.obj.disasm
endif
# convert
$(PYTHON) wdis2gas.py tmp/$T_wc.obj.disasm tmp/$T.S
$(call tc,gcc) -c -o tmp/$T.o tmp/$T.S
$(call tc,f-objstrip,tmp/$T.o)
$(call tc,objdump) -b elf32-i386 -m i8086 -M intel -dr -j .text.LzmaDecode --no-show -w tmp/$T.o | $(RTRIM) | $(PERL) -pe 's/\bDWORD\b/dword/g; s/\bWORD\b/word/g; s/\bBYTE\b/byte/g; s/\bPTR\b/ptr/g;' > $@
.PRECIOUS: lzma_d_c%.i tmp/lzma_d_c%.i
endif
endif
lzma_d_cf.% : PP_FLAGS = -DFAST
lzma_d_cs.% : PP_FLAGS = -DSMALL
lzma_d_cf.% : LABEL_PREFIX = .Lf
lzma_d_cs.% : LABEL_PREFIX = .Ls
# /***********************************************************************
# // cc_test
# ************************************************************************/
ifneq ($(wildcard $(WATCOM)/binl/wdis),)
CC_TEST_DEPS = $(MAKEFILE_LIST) $(TMP_DEPS)
ifneq ($(wildcard $(BC502DIR)/bin/bcc.exe),)
cc_test_bc : tc_list = method-lzma arch-i086 default
cc_test_bc: cc_test.c $(CC_TEST_DEPS)
$(call tc,bcc) $(PP_FLAGS) -c -otmp/$T.obj $<
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
cc_test_all: cc_test_bc
endif
ifneq ($(wildcard $(DM849DIR)/bin/dmc.exe),)
cc_test_dm : tc_list = method-lzma arch-i086 default
cc_test_dm: cc_test.c $(CC_TEST_DEPS)
$(call tc,dmc) $(PP_FLAGS) -c -otmp/$T.obj $<
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
cc_test_all: cc_test_dm
endif
ifneq ($(wildcard $(VC152DIR)/bin/cl.exe),)
cc_test_vc : tc_list = method-lzma arch-i086 default
cc_test_vc: cc_test.c $(CC_TEST_DEPS)
$(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T.obj $<
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
cc_test_all: cc_test_vc
endif
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
cc_test_wc : tc_list = method-lzma arch-i086 default
cc_test_wc: cc_test.c $(CC_TEST_DEPS)
$(call tc,wcl) $(PP_FLAGS) -c -fo=tmp/$T.obj $<
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
cc_test_all: cc_test_wc
endif
.PHONY: cc_test_all
endif # wdis
# /***********************************************************************
# // l_test
# ************************************************************************/
L_TEST_DEPS = lzma_d_c.c $(MAKEFILE_LIST) $(TMP_DEPS)
tmp/l_test_gcc_i386.% : tc_list = arch-i086 default
tmp/l_test_gcc_i386.out: l_test.c $(L_TEST_DEPS)
$(call tc,gcc) -O0 -g -o $@ $<
./$@
l_test_all: tmp/l_test_gcc_i386.out
ifneq ($(wildcard $(BC502DIR)/bin/bcc.exe),)
tmp/l_test_bc.% : tc_list = method-lzma arch-i086 default
tmp/l_test_bc.exe: l_test.c $(L_TEST_DEPS)
$(call tc,bcc) -o$(subst /,\\,$@) $<
@rm -f l_test.o l_test.obj
cp -p $@ tmp/test.exe && $(DOSBOX) tmp/test.exe
##l_test_all: tmp/l_test_bc.exe
endif
ifneq ($(wildcard $(DM849DIR)/bin/dmc.exe),)
tmp/l_test_dm.% : tc_list = method-lzma arch-i086 default
tmp/l_test_dm.exe: l_test.c $(L_TEST_DEPS)
$(call tc,dmc) -ml -o$(subst /,\\,$@) $<
@rm -f l_test.o l_test.obj
cp -p $@ tmp/test.exe && $(DOSBOX) tmp/test.exe
l_test_all: tmp/l_test_dm.exe
endif
ifneq ($(wildcard $(VC152DIR)/bin/cl.exe),)
tmp/l_test_vc.% : tc_list = method-lzma arch-i086 default
tmp/l_test_vc.exe: l_test.c $(L_TEST_DEPS)
$(call tc,cl) -Fe$(subst /,\\,$@) $<
@rm -f l_test.o l_test.obj
cp -p $@ tmp/test.exe && $(DOSBOX) tmp/test.exe
l_test_all: tmp/l_test_vc.exe
endif
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
tmp/l_test_wc.% : tc_list = method-lzma arch-i086 default
tmp/l_test_wc.exe: l_test.c $(L_TEST_DEPS)
$(call tc,wcl) -fe=$@ $<
@rm -f l_test.o l_test.obj
cp -p $@ tmp/test.exe && $(DOSBOX) tmp/test.exe
l_test_all: tmp/l_test_wc.exe
endif
.PHONY: l_test_all
+110
View File
@@ -0,0 +1,110 @@
/* cc_test.c -- examine compiler-generated library calls
This file is part of the UPX executable compressor.
Copyright (C) 2006-2007 Markus Franz Xaver Johannes Oberhumer
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer
<mfx@users.sourceforge.net>
*/
#if 0 && defined(__WATCOMC__)
#define __cdecl __watcall
#endif
/*************************************************************************
//
**************************************************************************/
typedef short int16_t;
typedef unsigned short uint16_t;
typedef long int32_t;
typedef unsigned long uint32_t;
#if 1
// simulated 32-bit pointer
typedef char __huge* hptr;
typedef long hptrdiff_t;
typedef unsigned long hsize_t;
#elif 1
// ignore segment overflow
typedef char __far* hptr;
typedef long hptrdiff_t;
typedef unsigned long hsize_t;
#else
// no segment
typedef char __near* hptr;
typedef short hptrdiff_t;
typedef unsigned short hsize_t;
#endif
// pia - pointer add
hptr __cdecl pia(hptr a, hsize_t d) { return a + d; }
hptr __cdecl pia1(hptr a) { return a + 1; }
// pis - pointer subtract
hptr __cdecl pis(hptr a, hsize_t d) { return a - d; }
hptr __cdecl pis1(hptr a) { return a - 1; }
// pts - pointer diff
hptrdiff_t __cdecl pts(hptr a, hptr b) { return a - b; }
// ptc - pointer compare (__PTC sets zero and carry flags)
int __cdecl ptc_eq(hptr a, hptr b) { return a == b; }
int __cdecl ptc_ne(hptr a, hptr b) { return a != b; }
int __cdecl ptc_lt(hptr a, hptr b) { return a < b; }
int __cdecl ptc_le(hptr a, hptr b) { return a <= b; }
int __cdecl ptc_gt(hptr a, hptr b) { return a > b; }
int __cdecl ptc_ge(hptr a, hptr b) { return a >= b; }
// u4m - unsigned multiplication
uint32_t __cdecl u4m(uint32_t a, uint32_t b) { return a * b; }
uint32_t __pascal u4m_p(uint32_t a, uint32_t b) { return b * a; }
// i4m - signed multiplication
int32_t __cdecl i4m(int32_t a, int32_t b) { return a * b; }
int32_t __pascal i4m_p(int32_t a, int32_t b) { return b * a; }
// just for testing
uint16_t __cdecl u2m(uint16_t a, uint16_t b) { return a * b; }
int16_t __cdecl i2m(int16_t a, int16_t b) { return a * b; }
uint32_t __cdecl u2m4(uint16_t a, uint16_t b) { return a * b; }
int32_t __cdecl i2m4(int16_t a, int16_t b) { return a * b; }
uint16_t __cdecl u2shl8 (uint16_t a) { return a << 8; }
uint32_t __cdecl u4shl8 (uint32_t a) { return a << 8; }
uint16_t __cdecl u2shl12(uint16_t a) { return a << 12; }
uint32_t __cdecl u4shl12(uint32_t a) { return a << 12; }
uint32_t __cdecl u4shl16(uint32_t a) { return a << 16; }
uint32_t __cdecl u4shl24(uint32_t a) { return a << 24; }
uint16_t __cdecl u2shlv(uint16_t a, unsigned v) { return a << v; }
uint32_t __cdecl u4shlv(uint32_t a, unsigned v) { return a << v; }
void __pascal p4nshlv_v(unsigned char v, uint32_t __near *a) { *a <<= v; }
void __pascal p4fshlv_v(unsigned char v, uint32_t __far *a) { *a <<= v; }
uint32_t __pascal p4nshlv(unsigned char v, uint32_t __near *a) { return *a <<= v; }
uint32_t __pascal p4fshlv(unsigned char v, uint32_t __far *a) { return *a <<= v; }
hptrdiff_t __cdecl hptr2int(hptr a) { return (hptrdiff_t) a; }
hptr __cdecl int2hptr(hptrdiff_t a) { return (hptr) a; }
/* vim:set ts=4 et: */
+409
View File
@@ -0,0 +1,409 @@
#! /usr/bin/env python
## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-
#
# cleanasm.py --
#
# This file is part of the UPX executable compressor.
#
# Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
# All Rights Reserved.
#
# UPX and the UCL library are free software; you can redistribute them
# and/or modify them under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING.
# If not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Markus F.X.J. Oberhumer Laszlo Molnar
# <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
#
import getopt, os, re, string, sys
class opts:
label_prefix = ".L"
verbose = 0
# optimizer flags
auto_inline = 1
call_rewrite = 1
loop_rewrite = 1
inline_map = {
"__aNNalshl": ["M_aNNalshl", 1],
"__aNahdiff": ["M_aNahdiff", 1],
"__PIA": ["M_PIA", 999],
"__PTS": ["M_PTS", 999],
"__PTC": ["M_PTC", 999],
"__U4M": ["M_U4M", 999],
}
# /***********************************************************************
# // main
# ************************************************************************/
def main(argv):
shortopts, longopts = "qv", [
"label-prefix=", "quiet", "verbose"
]
xopts, args = getopt.gnu_getopt(argv[1:], shortopts, longopts)
for opt, optarg in xopts:
if 0: pass
elif opt in ["-q", "--quiet"]: opts.verbose = opts.verbose - 1
elif opt in ["-v", "--verbose"]: opts.verbose = opts.verbose + 1
elif opt in ["--label-prefix"]: opts.label_prefix = optarg
else: assert 0, ("getopt problem:", opt, optarg, xopts, args)
#
assert opts.label_prefix
assert len(args) == 2
ifile = args[0]
ofile = args[1]
# read ifile
lines = open(ifile, "rb").readlines()
lines = filter(None, map(string.rstrip, lines))
#
#
labels = {}
def parse_label(inst, args):
k = v = None
m = re.search(r"^(.*?)\b(2|R_386_PC16)\s+(__\w+)$", args)
if m and k is None:
# external 2-byte label
k, v = m.group(3).strip(), [1, 2, None, 0]
m = re.search("^0x([0-9a-z]+)$", args)
if m and k is None:
# local label
k, v = m.group(1).strip(), [0, 0, None, 0]
m = re.search("^([0-9a-z]+)\s+<", args)
if m and k is None:
# local label
k, v = m.group(1).strip(), [0, 0, None, 0]
assert k and v, (inst, args)
v[2] = k # new name
if labels.has_key(k):
assert labels[k][:2] == v[:2]
return k, v
def add_label(k, v):
if labels.has_key(k):
assert labels[k][:2] == v[:2]
else:
labels[k] = v
labels[k][3] += 1 # usage counter
return k
olines = []
def omatch(pos, mlen, m, debug=0):
assert len(m) >= abs(mlen)
def sgn(x):
if x < 0: return -1
if x > 0: return 1
return 0
def match(a, b):
if b is None:
return False
if "^" in a or "*" in a:
# regexp
return re.search(a, b.lower())
else:
return a.lower() == b.lower()
mpos = []
while len(mpos) != abs(mlen):
if pos < 0 or pos >= len(olines):
return []
o = olines[pos]
if o[1] != "*DEL*":
mpos.append(pos)
pos += sgn(mlen)
if mlen < 0:
mpos.reverse()
if debug and 1: print mlen, m, [olines[x] for x in mpos]
dpos = []
i = -abs(mlen)
while i < 0:
pos = mpos[i]
o = olines[pos]
assert o[1] != "*DEL*"
assert len(m[i]) == 2, (i, m)
m0 = match(m[i][0], o[1])
m1 = match(m[i][1], o[2])
if not m0 or not m1:
return []
dpos.append([pos, m0, m1])
i += 1
assert len(dpos) == abs(mlen)
return dpos
def orewrite_inst(i, inst, args, dpos):
for pos, m0, m1 in dpos:
olines[pos][1] = "*DEL*"
olines[i][1] = inst
olines[i][2] = args
olines[i][3] = None
def orewrite_call(i, k, v, dpos):
for pos, m0, m1 in dpos:
olines[pos][1] = "*DEL*"
v[2] = k
olines[i][2] = None
olines[i][3] = add_label(k, v)
#
# pass 1
func = None
for i in range(len(lines)):
l = lines[i]
m = re.search(r"^0{8,16}\s*<(\.text\.)?(\w+)>:", l)
if m:
func = re.sub(r"^_+|_+$", "", m.group(2))
if not func in ["LzmaDecode"]:
continue
m = re.search(r"^(\s*[0-9a-z]+):\s+(\w+)(.*)", l)
if not m:
continue
label = m.group(1).strip()
inst = m.group(2).strip()
args = ""
if m.group(3): args = m.group(3).strip()
#
if inst in ["movl",] and re.search(r"\b[de]s\b", args):
# fix bug in objdump
inst = "movw"
m = re.search(r"^(.+?)\b0x0\s+(\w+):\s+(1|2|R_386_16|R_386_PC16)\s+(__\w+)$", args)
if m:
# 1 or 2 byte reloc
args = m.group(1) + m.group(4)
olines.append([label, inst, args, None])
#
# pass 2
for i in range(len(olines)):
label, inst, args, args_label = olines[i]
#
if inst == "*DEL*":
continue
#
if opts.call_rewrite and inst in ["call"]:
k, v = parse_label(inst, args)
if v[:2] == [1, 2]: # external 2-byte
if k == "__aNahdiff":
s = [
["push", "word ptr [bp+8]"],
["push", "word ptr [bp+6]"],
["push", r"word ptr \[bp([+-]\d+)\]$"],
["push", r"word ptr \[bp([+-]\d+)\]$"],
]
dpos = omatch(i-1, -4, s)
if dpos:
orewrite_inst(i, "*DEL*", "", dpos)
continue
if k in ["__LMUL", "__U4M",]:
s1 = [
["mov", "bx,0x300"],
["xor", "cx,cx"],
]
s2 = [
["shl", "ax,1"],
["rcl", "dx,1"],
]
dpos1 = omatch(i-1, -2, s1)
dpos2 = omatch(i+1, 2, s2)
if dpos1 and dpos2:
orewrite_inst(i, "M_U4M_dxax_0x0600", "", dpos1 + dpos2)
continue
s = [
["mov", "bx,word ptr [bx]"],
["xor", "cx,cx"],
]
dpos = omatch(i-1, -2, s, debug=0)
if 0 and dpos:
orewrite_inst(i, "M_U4M_dxax_00bx_ptr", "", dpos)
continue
dpos = omatch(i-1, -1, s)
if dpos:
orewrite_inst(i, "M_U4M_dxax_00bx", "", dpos)
continue
if k == "__PIA":
s = [
["mov", "bx,0x1"],
["xor", "cx,cx"],
]
dpos = omatch(i-1, -2, s)
if dpos:
orewrite_inst(i, "M_PIA1", "", dpos)
continue
if k == "__PTC":
s = [
["jne", "(.*)"],
]
dpos = omatch(i+1, 1, s)
if dpos:
olines[i][1] = "M_PTC_JNE"
k, v = parse_label("jne", dpos[0][2].group(1))
orewrite_call(i, k, v, dpos)
continue
if opts.loop_rewrite and inst in ["loop"]:
s = [
["mov", r"^c[lx],0xb$"],
["shr", "dx,1"],
["rcr", "ax,1"],
]
dpos = omatch(i-1, -3, s)
if dpos:
orewrite_inst(i, "M_shrd_11", "", dpos)
continue
s = [
["mov", r"^c[lx],0x8$"],
["shl", "ax,1"],
["rcl", "dx,1"],
]
dpos = omatch(i-1, -3, s)
if dpos:
orewrite_inst(i, "M_shld_8", "", dpos)
continue
s1 = [
["mov", r"^c[lx],0x8$"],
["shl", "si,1"],
["rcl", "di,1"],
]
s2 = [
["les", r"^bx,dword ptr \[bp([+-]\d+)\]$"],
]
dpos1 = omatch(i-1, -3, s1)
dpos2 = omatch(i+1, 1, s2)
if 1 and dpos1 and dpos2:
# bx and cx are free for use
orewrite_inst(i, "M_shld_disi_8_bxcx", "", dpos1)
continue
s1 = [
["mov", "ax,si"],
["mov", r"^c[lx],0x8$"],
["shl", "ax,1"],
["rcl", "di,1"],
]
s2 = [
["mov", "si,ax"],
["les", r"^bx,dword ptr \[bp([+-]\d+)\]$"],
]
dpos1 = omatch(i-1, -4, s1)
dpos2 = omatch(i+1, 2, s2)
if 1 and dpos1 and dpos2:
# bx and cx are free for use
orewrite_inst(i, "M_shld_diax_8_bxcx", "", dpos1[-3:])
continue
s1 = [
["mov", r"^c[lx],0x8$"],
["shl", r"^word ptr \[bp([+-]\d+)\],1$"],
["rcl", r"^word ptr \[bp([+-]\d+)\],1$"],
]
s2 = [
["mov", r"^dx,word ptr"],
["mov", r"^ax,word ptr"],
]
s3 = [
["mov", r"^ax,word ptr"],
["mov", r"^dx,word ptr"],
]
dpos1 = omatch(i-1, -3, s1)
dpos2 = omatch(i+1, 2, s2)
dpos3 = omatch(i+1, 2, s3)
if dpos1 and (dpos2 or dos3):
bp_dx, bp_ax = dpos1[-1][2].group(1), dpos1[-2][2].group(1)
m = "M_shld_8_bp %s %s" % (bp_dx, bp_ax)
orewrite_inst(i, m, "", dpos1)
continue
s1 = [
["mov", r"^word ptr \[bp([+-]\d+)\],si$"],
["mov", r"^word ptr \[bp([+-]\d+)\],di$"],
["mov", r"^c[lx],0xb$"],
["shr", r"^word ptr \[bp([+-]\d+)\],1$"],
["rcr", r"^word ptr \[bp([+-]\d+)\],1$"],
]
s2 = [
["mov", r"^bx,word ptr"],
["mov", r"^bx,word ptr"],
["mov", r"^ax,word ptr \[bp([+-]\d+)\]$"],
["mov", r"^dx,word ptr \[bp([+-]\d+)\]$"],
]
dpos1 = omatch(i-1, -5, s1)
dpos2 = omatch(i+1, 4, s2)
if dpos1 and dpos2:
bp_dx, bp_ax = dpos1[-2][2].group(1), dpos1[-1][2].group(1)
bp_di, bp_si = dpos1[-4][2].group(1), dpos1[-5][2].group(1)
assert bp_dx == dpos2[-1][2].group(1)
assert bp_ax == dpos2[-2][2].group(1)
assert bp_dx == bp_di
assert bp_ax == bp_si
m = "M_shrd_11_disi_bp %s %s" % (bp_dx, bp_ax)
orewrite_inst(i, m, "", dpos1 + dpos2[-2:])
continue
#
if inst in [
"call", "ja", "jae", "jb", "jbe", "jcxz", "je",
"jg", "jge", "jl", "jle", "jmp", "jne", "loop",
]:
k, v = parse_label(inst, args)
olines[i][2] = None
olines[i][3] = add_label(k, v)
#
# pass 3
digits, i = 1, len(labels)
while i >= 10:
digits += 1
i /= 10
format = "%s0%dd" % ("%", digits)
counter = 0
for i in range(len(olines)):
label, inst, args, args_label = olines[i]
# rewrite local labels
v = labels.get(label)
if v is not None:
assert v[:3] == [0, 0, label], (label, v)
v[2] = opts.label_prefix + format % counter
counter += 1
# handle inlining
if opts.auto_inline and inst == "call":
v = labels[args_label]
if v[:2] == [1, 2]: # external 2-byte
x = inline_map.get(v[2])
if x and v[3] <= x[1]: # max. number of calls
##print "inline", v, x
if x:
olines[i][1] = x[0]
olines[i][2] = "/* inlined */"
olines[i][2] = ""
olines[i][3] = None
#
# write ofile
ofp = open(ofile, "wb")
for label, inst, args, args_label in olines:
if labels.has_key(label):
if opts.verbose:
ofp.write("%s: /* %d */\n" % (labels[label][2], labels[label][3]))
else:
ofp.write("%s:\n" % (labels[label][2]))
if inst == "*DEL*":
continue
if args_label:
if opts.verbose:
args = "%s /* %d */" % (labels[args_label][2], labels[args_label][3])
else:
args = labels[args_label][2]
l = "%8s%-7s %s" % ("", inst, args)
ofp.write(l.rstrip() + "\n")
ofp.close()
##print olines
if __name__ == "__main__":
sys.exit(main(sys.argv))
+127
View File
@@ -0,0 +1,127 @@
/* l_test.c --
This file is part of the UPX executable compressor.
Copyright (C) 2007-2007 Markus Franz Xaver Johannes Oberhumer
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer
<mfx@users.sourceforge.net>
*/
#include "stub/src/c/lzma_d_c.c"
#if (ACC_ARCH_I086)
#define bytep unsigned char __huge *
typedef unsigned long uint32_t;
#else
#define bytep unsigned char *
typedef unsigned int uint32_t;
#endif
#if (ACC_OS_DOS16)
# if (ACC_CC_BORLANDC || ACC_CC_TURBOC)
int __cdecl printf(const char *, ...);
void * __cdecl malloc(unsigned);
void __far * __cdecl farmalloc(unsigned long);
# define acc_halloc(x) ((void __huge *) farmalloc(x))
# elif (ACC_CC_DMC || ACC_CC_MSC)
# include <stdio.h>
# include <malloc.h>
# define acc_halloc(x) _halloc(x,1)
# elif (ACC_CC_WATCOMC)
int __watcall printf(const char *, ...);
void * __watcall malloc(unsigned);
void __huge * __watcall halloc(long, unsigned);
# define acc_halloc(x) halloc(x,1)
# else
# endif
#else
# define printf __builtin_printf
# define malloc(x) __builtin_malloc(x)
# define acc_halloc(x) malloc(x)
#endif
/*************************************************************************
//
**************************************************************************/
/*
>>> import pylzma; d="\1" + "\0"*131070 + "\2"; print len(d)
>>> c=pylzma.compress(d, eos=0)[5:]; print len(c), map(ord, c)
*/
static const unsigned char c_data[92] = {
0, 0, 128, 65, 72, 1, 140, 46, 188, 80, 161, 51, 135, 75, 212, 2, 20, 181, 241, 145, 230, 34, 107, 72, 201, 86, 118, 176, 70, 120, 214, 184, 247, 212, 250, 132, 59, 160, 44, 112, 185, 177, 245, 126, 103, 190, 14, 145, 73, 36, 148, 246, 166, 58, 41, 192, 68, 167, 144, 98, 122, 42, 61, 195, 135, 248, 98, 136, 254, 191, 96, 21, 192, 75, 86, 63, 228, 231, 15, 70, 52, 239, 169, 194, 249, 109, 126, 11, 123, 48, 0, 0
};
int main()
{
uint32_t i;
int r;
uint32_t src_len = sizeof(c_data);
uint32_t dst_len = 131072ul;
uint32_t src_out = 0;
uint32_t dst_out = 0;
const bytep src;
bytep dst;
CLzmaDecoderState *s;
printf("Decompress %lu %lu\n", (long)src_len, (long)dst_len);
s = (CLzmaDecoderState *) malloc(32768u);
src = c_data;
dst = (bytep) acc_halloc(dst_len);
if (!s || !dst) {
printf("ERROR: Out of memory!\n");
return 1;
}
for (i = 0; i != dst_len; ++i)
dst[i] = 255;
s->Properties.lc = 3; s->Properties.lp = 0; s->Properties.pb = 2;
r = LzmaDecode(s, src, src_len, &src_out, dst, dst_len, &dst_out);
if (r != 0 || src_out != src_len || dst_out != dst_len)
{
printf("ERROR: Decompression error %d %lu %lu\n", r, (long)src_out, (long)dst_out);
return 1;
}
i = 0;
if (dst[i] != 1)
goto data_error;
while (++i != dst_len - 1)
if (dst[i] != 0)
goto data_error;
if (dst[i] != 2)
goto data_error;
printf("Decompression test passed. All done.\n");
return 0;
data_error:
printf("ERROR: Decompression data error at offset %lu.\n", (long)i);
return 1;
}
/* vim:set ts=4 et: */
+147
View File
@@ -0,0 +1,147 @@
/*
; lzma_d.ash -- 16-bit assembly
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 2006-2007 Markus Franz Xaver Johannes Oberhumer
; All Rights Reserved.
;
; UPX and the UCL library are free software; you can redistribute them
; and/or modify them under the terms of the GNU General Public License as
; published by the Free Software Foundation; either version 2 of
; the License, or (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; see the file COPYING.
; If not, write to the Free Software Foundation, Inc.,
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
;
; Markus F.X.J. Oberhumer
; <markus@oberhumer.com>
; http://www.oberhumer.com/opensource/upx/
;
; ------------- DECOMPRESSION -------------
; Input:
; ds:si - source
; es:di - dest
; cld
; Output:
*/
/*************************************************************************
//
**************************************************************************/
// init
section LZMA_DEC00
//.byte 0xcc
mov bp, sp
#if 0
// DEBUG - check for enough stack
lea bx, [bp + lzma_stack_adjust - 256]
cmp bp, bx
1: jcs 1b
#endif
lea bx, [bp + lzma_stack_adjust]
#if 0
// clear stack
xor ax, ax
1: push ax
cmp sp, bx
jnzs 1b
#else
mov sp, bx
#endif
inc si
inc si
push bx // &outSizeProcessed __near [bp + 24]
mov ax, offset lzma_u_len_hi // outSize
push ax // [bp + 22]
mov ax, offset lzma_u_len
push ax // [bp + 20]
push es // out [bp + 18]
push di // [bp + 16]
add bx, 4
push bx // &inSizeProcessed __near [bp + 14]
mov ax, offset lzma_c_len_hi // inSize
push ax // [bp + 12]
mov ax, offset lzma_c_len
push ax // [bp + 10]
push ds // in [bp + 8]
push si // [bp + 6]
add bx, 4
push bx // &state __near [bp + 4]
// enter small memory model
push ds // save ds && dummy for call
push ss
pop ds
// fill properties
movw [bx], offset lzma_properties
movw [bx+2], offset lzma_properties_hi
ignore_reloc_overflow lzma_u_len
ignore_reloc_overflow lzma_c_len
ignore_reloc_overflow lzma_properties
#define ret
section LZMA_DEC10
.arch i8086, nojumps
#define SMALL 1
#include "lzma_m.h"
#include "lzma_d_cs.S"
#undef SMALL
section LZMA_DEC20
.arch i8086, nojumps
#define FAST 1
#include "lzma_m.h"
#include "lzma_d_cf.S"
#undef FAST
.arch i8086, jumps
#undef ret
// cleanup
section LZMA_DEC30
pop ds
section LZMA_DEC31
// clear dirty stack
mov sp, bp
mov bx, offset clear_dirty_stack_low
xor ax, ax
1: push ax
cmp sp, bx
jnzs 1b
section LZMA_DEC32
mov sp, bp
mov di, offset lzma_u_len
ignore_reloc_overflow lzma_u_len
section LZMA_DEC33
pop ax
push ax
add ax, offset lzma_u_len_segment
mov es, ax
// vi:ts=4:et
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More