home *** CD-ROM | disk | FTP | other *** search
- Documentation for:
- -------------------
- LZEXE.EXE v0.91 (ß-release) (c) 1989 Fabrice BELLARD
- Compressor for EXE files.
-
-
- This program is in the public domain (FREEWARE), and you can therefore
- use, copy and distribute it freely. You can also utilize it commercially,
- i.e. you can use it on programs you intend to sell. However, the sale of
- LZEXE.EXE itself is forbidden.
-
-
- Requirements: PC and compatibles. 80286 or 80386 microprocessors are
- recommended for greater execution speed.
- Memory requirements: 128K minimum are needed to run LZEXE.
-
-
- 1-Introduction
- --------------
-
- This utility compresses EXE files, namely executable files.
- You know that there are many other compressors for such files, such as
- the excellent PKZIP or LHARC. This uniqueness of the present method
- consists in the fact that the compressed files can be run directly!
- For almost all EXE files the decompression time is so short that it is
- negligible ! In addition the decompression does not use any extra space
- on disk or in RAM. It simply uses the amount of RAM normally allocated
- for the uncompressed file. The compressor algorithm has been optimized
- not only for speed but also for efficiency: EXE files are reduced almost
- to the size of their ZIPped counterparts. I am working on future releases
- which I hope will be even better.
-
- 2-Using LZEXE
- -------------
-
- Usage is very simple: just enter the command line
-
- LZEXE filename
-
- where filename is the EXE file to be compressed. The extension .EXE is
- implied by default. "path" is optional: it refers to the directory where
- the compacted file and the temporary working file LZTMP.EXE are to be
- located.
-
- Warning! Certain files are EXE only by name! For DOS it is not the
- extension EXE that characterizes an 'EXE' file, but the presence of a header
- with the letters "MZ" followed by information on the length of the file
- the space occupied in RAM, etc... Thus if you change the COM extension to
- EXE, LZEXE will refuse to process the file.
-
- There is a way to force LZEXE to accept a COM file: just use COMTOEXE by the
- same author. It works like EXE2BIN in reverse.
-
- For greater safety LZEXE does not erase the original EXE file, but it renames
- it with the extension .OLD. In addition it creates the temporary file
- LZEXE.TMP which is renamed with the name of the original program only at the
- end of the compression process.
-
- 3-Usage tips
- ------------
-
- Certain files can not be compressed for various reasons:
-
- - The file is not a true EXE file. Solution: use COMTOEXE.EXE.
- - The relocation table is too large. To understand this you need to know
- the internal structure of an EXE file: such a file can occupy several
- segments unlike COM files. Thus it must contain a table specifying where
- to branch and where to call subprograms, etc... And if the program is
- rather large it may confuse the compressor. I have provided for a table
- with up to 16,000 relocation addresses, which should suffice for almost
- all EXE files.
- - The file you wish to compress has already been compressed by LZEXE.
- Notice that there exists another compressor: Microsoft's EXEPACK.EXE,
- which however is far less efficient than LZEXE. LZEXE can further
- compress an EXEPACKed file, if you use UPACKEXE to unpack what EXEPACK
- has done.
- - Sometimes the compression factor is not significant. This may happen with
- very small files (less than 2K). Normally the compression is quite
- substantial.
-
-
- - A more serious problem: certain compressed EXE file may hang the system:
-
- - If the program checks its size (like Turbo Debugger for example).
- - If it checks for its integrity on disk.
- - If it uses overlays, which must be loaded later and thus must occupy
- occupy fixed position in the file. LZEXE 0.91 warns you of the
- presence of such overlays.
- - Programs that require Microsoft's Windows: they are not true EXE
- and will not work properly if compressed with LZEXE.
- - This list may grow, since I have not experimented with all types
- of EXE files.
-
-
- - A less serious problem: Certain programs use configuration options that
- modify the code (Turbo Pascal, for example).
- In this case, first configure the program, then compress it. (Always
- keep an uncompressed version for safety.)
-
-
- 4-Some technical notes
- ----------------------
-
- The compression algorithm used is based on the Ziv Lempel method,
- uses a circular (ring) buffer, and a tree-lile method for finding byte
- sequence repeats. The encoding of the position and length of the repeating
- sequences is optimized via an auxiliary algorithm based on the Huffman
- method. Uncompressed bytes are kept unchanged since any further method
- (such as Adaptive Huffman, as in LHARC, or Shanon-Fano trees, as in PKZIP)
- would have entailed a much longer decompression time, and above all, a much
- more complex and larger decompressor, which would have decreased excessively
- the compression factor.
-
- The decompressor is located at the end of the compressed EXE file
- and is 330 bytes long (in version 0.91). Its functions are:
-
- - Check the CRC to ensure that the file has not be tampred with (useful
- against viruses). If the test files, the message "CRC Error" is
- displayed. However, I've removed this from version 0.91 because it
- increased the size of the file and the time spent i decompressing. Further,
- the crc check was only done on the decompressor.
- - Locate itself in high RAM, then move the compressed code in order to
- leave sufficient room to the EXE file.
- - Decompress the code, checking that it is correct, and adjust the sgments
- if more than 64K (this was a hard problem, in terms of speed!).
- - Decompress the relocation table, and update the relocatable addresses
- of the EXE file. Improvements have been made in this version to getter
- better compression.
- - Run the program, updating the CS,IP,SS,SP registers.
-
- That's all!!!
-
- This decompressor is by itself a little jewel of 8086 assembler
- programming. It goes without saying that it was hard work. But the
- compressor was not much easier, particularly with regard to the updating
- all the pointers that the decompressor needs in order to function.
-
-
- 5-LZEXE and the other compressors
- ---------------------------------
-
- PKARC (latest version): LZEXE is much better: "crunching" (alias
- Shrinking for PKZIP) is outdated...
-
- PKZIP v0.92: LZEXE is better in most cases.
-
- PKZIP v1.02: better than LZEXE with large files due to "imploding", since this
- algorithm is a subset of mine, but the decompressor is slower than mine. On
- smaller files the difference is minimal.
-
- LHARC v1.01: better than LZEXE due to "freezing", but same remark as
- for PKZIP v1.02.
-
- LARC: LZEXE is better.
-
- Important notes:
-
- - One can not truly compare LZEXE with these other products. since the
- files compressed with my method contain a decompressor which runs the
- programs by itself. It is true that the other compressor can create
- "self-extracting" files, but they do so on disk, are slow and add sveral
- scores of K to the compressed files (except for PKARC and LHARC, which add
- only 1 or 2K., but only decompress to disk, unfortunately.)
- - In almost all cases. the compressors mentioned can not further compress
- a file already compressed with LZEXE, which demonstrates the high
- efficiency of thismethod.
-
-
- 6-The future...
- ---------------
-
- - I want to develop soon a decompressor which allows the recreation of the
- original EXE file from the compressed one. Its usefulness is questionable,
- - I intend to optimize further the decompressor for speed, and the
- compressor for efficiency, by further reducing the relocation table, for
- example (I already have a few ideas...); adding a password system, and
- creating an 80836 version which should speed things quite abit.
- - I intend to develop a decompressor for Microsoft's EXEPACKed files, which
- is interesting because my compressor works better on files which have not
- been treated with EXEPACK.
- - I am also thinking of an automatic document-decompressor of the LIZEMOI.COM
- or LIST.COM type, which should be very handy.
- - Finally, I hope to create a "universal" compressor, like PKZIP or LHARC,
- slower than LZEXE in decompression, but better than the existing ones.
-
-
-
- 7-Warnings...
- -------------
-
- I hope that LZEXE and the files it can create may become very popular...
- a good incentive for further work.
-
- I shall not be responsible in any way for any loss of data caused by LZEXE>
- But rest assured: the algorithms are reliable and I do not believe there
- are many bugs. If the EXE program created by LZEXE functions properly the
- first time, then it will always do so!
-
- Warning! I advise against compressing and distributing commercial software
- protected by copyright. The authors may not like it...
-
- But if you create a piece of FREEWARE or SHAREWARE, or even a commercial
- product, nothing prevents you from compressing it with LZEXE. In fact, I
- urge youto do so:
-
- - Your EXE files will be smaller and people may even think you programmed
- them in assembler. Your competitors will be amazed by your software, which
- does what their does butis 30% smaller.
- In addition you will have more space on your floppy and hard disks. Space
- is always at a premium...
- - Compressed programs are always less vulnerable to viruses, since any
- interference will cause the "CRC error" to appear or the system to hang.
- - The compression constitutes an excellent encryption system, preventing
- unscrupulous people from hacking your messages or examine your algorithms.
- The only way would be to disassemble the decompressor, which is not going
- to be easy, I tell you!
-
-
- That's it! I hope you enjoy this utility. Please remember it is
- still in its ß-state!
-
-
- Fabrice.
-
- If you would like more information on the algorithms used, or in case of
- difficulties, here is my address:
-
- Fabrice BELLARD
- 451 chemin du mas de Matour
- 34790 GRABELS (FRANCE)
-
- Changes in v0.91:
- ----------------
- -The dash, "-", is now acceptable character in file names.
- -LZEXE now points out the presence of internal overlays
- -LZEXE indicates if the file has been packed with EXEPACK
- -A bug under v0.90 has been fixed. It made programs occupy too
- much memory when running.
- -The relocation table has been improved
- -CRC control has been removed
- -The compression tail's size has been reduced from 385 to 330 bytes.
-
-