mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
Final 1.10 patches.
committer: mfx <mfx> 977313794 +0000
This commit is contained in:
parent
f6e5623eaa
commit
a24af0ce74
27
BUGS
27
BUGS
|
@ -13,8 +13,12 @@
|
|||
http://upx.tsx.org
|
||||
|
||||
|
||||
Things not (yet) supported:
|
||||
===========================
|
||||
Limitations and other things which are not (yet) supported:
|
||||
===========================================================
|
||||
|
||||
djgpp2/coff
|
||||
-----------
|
||||
* all overlays (except Allegro pakfiles) are silently stripped
|
||||
|
||||
dos/exe
|
||||
-------
|
||||
|
@ -22,30 +26,27 @@ dos/exe
|
|||
* max ~24000 relocation records (...should be enough for everyone ;-)
|
||||
* exe + sys combined images
|
||||
|
||||
wc/le
|
||||
-----
|
||||
watcom/le
|
||||
---------
|
||||
* 16-bit selector alias fixups
|
||||
* 16-bit offset relocation for objects larger than 4 kbyte
|
||||
* 16-bit offset relocation for objects larger than 4 kB
|
||||
* 16:16 fixups
|
||||
|
||||
If you need any of the above (they're very rare), send us an url of a
|
||||
If you need any of the above (they're very rare), send us an URL of a
|
||||
test file.
|
||||
|
||||
* 16-bit objects are not loaded into DOS memory
|
||||
* There is still a problem with the wdosx extender: if you compress a
|
||||
wc/le file which does NOT contain the wdosx extender, and after this
|
||||
watcom/le file which does NOT contain the wdosx extender, and after this
|
||||
you bind the wdosx stub to the compressed file, then it will work.
|
||||
Otherwise it won't.
|
||||
* unpacked pmwlite compressed programs might not work when compressed
|
||||
with upx (pmwunlite bug mainly :-)
|
||||
with UPX (this is a bug in pmwunlite)
|
||||
|
||||
win32/pe
|
||||
--------
|
||||
* writeable shared sections (`--force' *may* work)
|
||||
* certificates in the image
|
||||
* compressing files containing big BSS requires lots of memory
|
||||
|
||||
djgpp2/coff
|
||||
-----------
|
||||
* all overlays (except Allegro pakfiles) are silently stripped
|
||||
* compressing files which contain a big BSS requires lots of memory
|
||||
during compression
|
||||
|
||||
|
|
23
README
23
README
|
@ -13,11 +13,27 @@
|
|||
http://upx.tsx.org
|
||||
|
||||
|
||||
|
||||
WARNING - UNSTABLE BETA VERSION
|
||||
===============================
|
||||
|
||||
All versions 1.1x are unstable beta releases - use them only for testing,
|
||||
and never distribute a program that is packed with them !
|
||||
There will be hidden bugs. Really.
|
||||
|
||||
The current stable release is 1.04, and the next stable release
|
||||
will be called version 1.20.
|
||||
|
||||
The main news since 1.04 are support for bootable Linux kernels ("vmlinuz/386")
|
||||
and direct Linux ELF-to-memory decompression ("linux/elf386"), so there's
|
||||
no reason to use the unstable versions unless you want to try the new formats.
|
||||
|
||||
|
||||
WELCOME
|
||||
=======
|
||||
|
||||
Welcome to UPX 1.00, the first production release (after almost two years
|
||||
of beta testing).
|
||||
Welcome to UPX 1.0x, the first production release after almost two years
|
||||
of beta testing.
|
||||
|
||||
Please don't forget to read the new LICENSE - UPX is now distributed
|
||||
under the GNU General Public License (GPL) with special exceptions
|
||||
|
@ -38,7 +54,8 @@ and run exactly as before, with no runtime or memory penalty for most
|
|||
of the supported formats.
|
||||
|
||||
UPX supports a number of different executable formats, including
|
||||
Win95/98/2000/NT programs and DLLs, DOS programs, and Linux executables.
|
||||
Win95/98/ME/NT/2000 programs and DLLs, DOS programs, and Linux
|
||||
executables and kernels.
|
||||
|
||||
UPX is free software distributed under the term of the GNU General
|
||||
Public License. Full source code is available.
|
||||
|
|
28
README.1ST
Normal file
28
README.1ST
Normal file
|
@ -0,0 +1,28 @@
|
|||
ooooo ooo ooooooooo. ooooooo ooooo
|
||||
`888' `8' `888 `Y88. `8888 d8'
|
||||
888 8 888 .d88' Y888..8P
|
||||
888 8 888ooo88P' `8888'
|
||||
888 8 888 .8PY888.
|
||||
`88. .8' 888 d8' `888b
|
||||
`YbodP' o888o o888o o88888o
|
||||
|
||||
|
||||
The Ultimate Packer for eXecutables
|
||||
|
||||
|
||||
|
||||
WARNING - UNSTABLE BETA VERSION
|
||||
===============================
|
||||
|
||||
All versions 1.1x are unstable beta releases - use them only for testing,
|
||||
and never distribute a program that is packed with them !
|
||||
There will be hidden bugs. Really.
|
||||
|
||||
The current stable release is 1.04, and the next stable release
|
||||
will be called version 1.20.
|
||||
|
||||
The main news since 1.04 are support for bootable Linux kernels ("vmlinuz/386")
|
||||
and direct Linux ELF-to-memory decompression ("linux/elf386"), so there's
|
||||
no reason to use the unstable versions unless you want to try the new formats.
|
||||
|
||||
|
|
@ -350,7 +350,7 @@ Introduction
|
|||
("linux/386").
|
||||
|
||||
We will start with a general discussion first, but please
|
||||
also read the relevant docs for each of the formats.
|
||||
also read the relevant docs for each of the individual formats.
|
||||
|
||||
Also, there is special support for bootable kernels - see the
|
||||
description of the vmlinuz/386 format.
|
||||
|
@ -537,7 +537,7 @@ How it works:
|
|||
the file into low memory, then maps the shell (and its PT_INTERP),
|
||||
and passes control to the shell with the entire decompressed file
|
||||
as the argument after "-c". Known shells are sh, ash, bash, bsh, csh,
|
||||
ksh, tcsh, pdksh. Restriction: UPX 1.10 cannot use this method
|
||||
ksh, tcsh, pdksh. Restriction: UPX cannot use this method
|
||||
for shell scripts which use the one optional string argument after
|
||||
the shell name in the script (example: "#! /bin/sh option3\n".)
|
||||
|
||||
|
|
25
src/Makefile
25
src/Makefile
|
@ -48,6 +48,10 @@ override target = vc6
|
|||
endif
|
||||
|
||||
|
||||
# util var for use in the rules - basename of the current target
|
||||
override T = $(basename $@)
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
# // object files
|
||||
# ************************************************************************/
|
||||
|
@ -120,7 +124,7 @@ LDFLAGS = -g
|
|||
else
|
||||
LDFLAGS = -s
|
||||
endif
|
||||
LDFLAGS += -Wl,-Map,$(basename $@).map
|
||||
LDFLAGS += -Wl,-Map,$T.map
|
||||
LDLIBS =
|
||||
LDLIBS = -lz
|
||||
LIBDIRS =
|
||||
|
@ -230,7 +234,7 @@ CFLAGS = -W4 -WX
|
|||
CXXFLAGS1 = $(CFLAGS) -GR -GX -EHa
|
||||
CXXFLAGS2 = $(CFLAGS)
|
||||
LDFLAGS =
|
||||
LINK_LDFLAGS = /link /map:$(basename $@).map
|
||||
LINK_LDFLAGS = /link /map:$T.map
|
||||
|
||||
ifneq ($(strip $(DOS_LIBDIRS)),)
|
||||
LIB := $(DOS_LIBDIRS);$(LIB)
|
||||
|
@ -245,8 +249,7 @@ ifeq (1,2)
|
|||
else
|
||||
# link against msvcrt.dll
|
||||
CC += -MD
|
||||
##LDLIBS = $(u).lib zlib.lib setargv.obj
|
||||
LDLIBS = $(u).lib setargv.obj
|
||||
LDLIBS = $(DOS_LDLIBS) zlib.lib setargv.obj
|
||||
endif
|
||||
ifeq ($(DEBUG),1)
|
||||
CFLAGS += -Od -ZI
|
||||
|
@ -306,8 +309,7 @@ CXXFLAGS1 = $(CFLAGS)
|
|||
CXXFLAGS2 = $(CFLAGS)
|
||||
CFLAGS_OUTPUT = -o$@
|
||||
LDFLAGS =
|
||||
##LDLIBS = $(u).lib zlib.lib
|
||||
LDLIBS = $(u).lib
|
||||
LDLIBS = $(DOS_LDLIBS) zlib.lib
|
||||
|
||||
ifneq ($(strip $(DOS_LIBDIRS)),)
|
||||
LIB := $(DOS_LIBDIRS);$(LIB)
|
||||
|
@ -363,6 +365,17 @@ $(upx_exe): $(OBJECTS) $(LIBS)
|
|||
$(LINK_EXE)
|
||||
$(STUBEDIT_EXE)
|
||||
|
||||
|
||||
ifeq ($(target),djgpp2)
|
||||
cwsbind: $(upx_exe)
|
||||
-rm -f $T.cof
|
||||
$(upx_exe) -1 --coff -o $T.cof $(upx_exe)
|
||||
cat $(DJDIR)/bin/cwsdstub.exe $T.cof > $(upx_exe)
|
||||
$(upx_exe) -d $(upx_exe)
|
||||
$(upx_exe) --best $(upx_exe)
|
||||
endif
|
||||
|
||||
|
||||
unupx:
|
||||
$(MAKE) target=vc6 unupx.dll
|
||||
|
||||
|
|
|
@ -26,10 +26,12 @@ DOS_LIBDIRS := $(DOS_LIBDIRS);$(UDIR)
|
|||
endif
|
||||
|
||||
LDLIBS += -l$(u)
|
||||
DOS_LDLIBS += $(u).lib
|
||||
|
||||
|
||||
DEFS := $(DEFS)
|
||||
INCLUDES := $(INCLUDES)
|
||||
LIBDIRS := $(LIBDIRS)
|
||||
LDLIBS := $(LDLIBS)
|
||||
DOS_LDLIBS := $(DOS_LDLIBS)
|
||||
|
||||
|
|
11
src/conf.h
11
src/conf.h
|
@ -227,11 +227,6 @@ typedef RETSIGTYPE (SIGTYPEENTRY *sig_type)(int);
|
|||
# define MODE_T int
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_STRCHR)
|
||||
# if defined(HAVE_INDEX)
|
||||
# define strchr index
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(HAVE_STRCASECMP)
|
||||
# if defined(HAVE_STRICMP)
|
||||
# define strcasecmp stricmp
|
||||
|
@ -299,8 +294,10 @@ typedef RETSIGTYPE (SIGTYPEENTRY *sig_type)(int);
|
|||
#endif
|
||||
|
||||
|
||||
// avoid warnings about shadowing that obsolete index() function
|
||||
#define index upx_index
|
||||
// avoid warnings about shadowing global functions
|
||||
#define basename upx_basename
|
||||
#define index upx_index
|
||||
#define outp upx_outp
|
||||
|
||||
// a dummy statement
|
||||
#define nop ((void)0)
|
||||
|
|
51
src/help.cpp
51
src/help.cpp
|
@ -127,9 +127,21 @@ void show_help(int x)
|
|||
con_fprintf(f,"Overlay options:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --overlay=skip don't compress a file with an overlay\n"
|
||||
" --overlay=copy copy any extra data attached to the file [default]\n"
|
||||
" --overlay=strip strip any extra data attached to the file [dangerous]\n"
|
||||
" --overlay=skip don't compress a file with an overlay\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for djgpp2/coff:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --coff produce COFF output [default: EXE]\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for dos/com:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --8086 make compressed com work on any 8086\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for dos/exe:\n");
|
||||
|
@ -139,24 +151,12 @@ void show_help(int x)
|
|||
" --no-reloc put no relocations in to the exe header\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for dos/com:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --8086 make compressed com work on any 8086\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for dos/sys:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --8086 make compressed sys work on any 8086\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for djgpp2/coff:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --coff produce COFF output [default: EXE]\n"
|
||||
"\n");
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for watcom/le:\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
|
@ -177,7 +177,7 @@ void show_help(int x)
|
|||
"\n");
|
||||
#if 0
|
||||
fg = con_fg(f,FG_YELLOW);
|
||||
con_fprintf(f,"Options for linux/i386\n");
|
||||
con_fprintf(f,"Options for linux/386\n");
|
||||
fg = con_fg(f,fg);
|
||||
con_fprintf(f,
|
||||
" --script use /usr/local/lib/upx/upx[bd] as decompressor\n"
|
||||
|
@ -189,12 +189,23 @@ void show_help(int x)
|
|||
con_fprintf(f,
|
||||
" file.. executables to (de)compress\n"
|
||||
"\n"
|
||||
"This version supports: dos/exe, dos/com, dos/sys, djgpp2/coff, watcom/le,\n"
|
||||
" win32/pe, rtm32/pe, tmt/adam, atari/tos\n"
|
||||
" linux/elf386, linux/sh386, linux/386\n"
|
||||
"%s",
|
||||
"\nUPX comes with ABSOLUTELY NO WARRANTY; for details visit http://upx.tsx.org\n"
|
||||
//"\nUPX comes with ABSOLUTELY NO WARRANTY; for details type `upx -L'.\n"
|
||||
"This version supports:\n "
|
||||
"atari/tos, "
|
||||
"bvmlinuz/386, "
|
||||
"djgpp2/coff, "
|
||||
"dos/com, "
|
||||
"dos/exe, "
|
||||
"dos/sys,\n "
|
||||
"linux/386, "
|
||||
"linux/elf386, "
|
||||
"linux/sh386, "
|
||||
"rtm32/pe, "
|
||||
"tmt/adam, "
|
||||
"vmlinuz/386,\n "
|
||||
"watcom/le, "
|
||||
"win32/pe"
|
||||
"\n\nUPX comes with ABSOLUTELY NO WARRANTY; for details visit http://upx.tsx.org\n"
|
||||
//"\n\nUPX comes with ABSOLUTELY NO WARRANTY; for details type `upx -L'.\n"
|
||||
"");
|
||||
|
||||
|
||||
|
|
|
@ -1136,6 +1136,14 @@ int main(int argc, char *argv[])
|
|||
fg = con_fg(f,fg);
|
||||
}
|
||||
#endif
|
||||
#if 1 && !defined(WITH_NRV)
|
||||
{
|
||||
FILE *f = stdout;
|
||||
int fg = con_fg(f,FG_GREEN);
|
||||
con_fprintf(f,"\nINFO: this version does not use the NRV library - compression ratio is worse\n");
|
||||
fg = con_fg(f,fg);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0 && defined(__GLIBC__)
|
||||
//malloc_stats();
|
||||
|
|
|
@ -130,7 +130,7 @@ void PackLinuxI386elf::patchLoader()
|
|||
upx_compress_config_t conf; memset(&conf, 0xff, sizeof(conf));
|
||||
conf.c_flags = 0;
|
||||
upx_uint result_buffer[16];
|
||||
size_t cprLsize;
|
||||
upx_uint cprLsize;
|
||||
upx_compress(
|
||||
loader + fold_begin, lsize - fold_begin,
|
||||
cprLoader, &cprLsize,
|
||||
|
|
|
@ -110,7 +110,7 @@ void PackLinuxI386sh::patchLoader()
|
|||
upx_compress_config_t conf; memset(&conf, 0xff, sizeof(conf));
|
||||
conf.c_flags = 0;
|
||||
upx_uint result_buffer[16];
|
||||
size_t cprLsize;
|
||||
upx_uint cprLsize;
|
||||
upx_compress(
|
||||
loader + fold_begin, lsize - fold_begin,
|
||||
cprLoader, &cprLsize,
|
||||
|
|
|
@ -447,8 +447,8 @@ void PackLinuxI386::patchLoader()
|
|||
upx_compress_config_t conf; memset(&conf, 0xff, sizeof(conf));
|
||||
conf.c_flags = 0;
|
||||
upx_uint result_buffer[16];
|
||||
size_t const uncLsize = lsize - fold_begin;
|
||||
size_t cprLsize;
|
||||
upx_uint const uncLsize = lsize - fold_begin;
|
||||
upx_uint cprLsize;
|
||||
upx_compress(
|
||||
loader + fold_begin, uncLsize,
|
||||
cprLoader, &cprLsize,
|
||||
|
|
Loading…
Reference in New Issue
Block a user