home *** CD-ROM | disk | FTP | other *** search
- Documentation pour:
- -------------------
- LZEXE.EXE v0.91 (c) 1989 Fabrice BELLARD
- Compacteur de fichiers EXE.
-
-
- Ce programme fait parti du domaine public (FREEWARE), donc vous pouvez
- l'utiliser, le copier et le distribuer sans problème. Et vous pouvez même
- en faire un usage commercial, c'est à dire compacter des fichiers EXE que
- vous allez vendre. Mais la vente de LZEXE.EXE est interdite.
-
-
- Matériel: PC et compatibles, microprocesseur 80286 ou 80386 recommandé
- pour une plus grande vitesse d'exécution.
- Mémoire nécessaire: 128 Ko minimum pour lancer LZEXE.
-
-
- 1-Présentation
- --------------
-
- Ce logiciel compacte des fichiers EXE, c'est-à-dire les fichiers
- EXEcutable du monde des PC. Mais vous pourriez me dire que beaucoup de
- logiciels compactent des fichiers EXE mieux que celui-ci, ne serait-ce
- que l'excellent PKZIP ou bien LHARC. Mais l'avantage de ce programme
- c'est que vos fichiers EXE une fois compactés peuvent être lancés ! Et le
- décompactage est si rapide que pour pratiquement tous les fichiers, ce
- temps de décompactage est négligeable ! De plus le décompacteur n'utilise
- aucun espace supplémentaire sur disque ou en mémoire vive dans un disque
- virtuel par exemple: il n'utilise que la RAM réservée normalement au
- fichier EXE décompacté. De plus j'ai beaucoup optimisé mon algorithme de
- compactage en vitesse mais aussi en efficacité: les fichiers EXE sont
- presque aussi petits que les fichiers ZIP correspondants et bien plus
- compacts que les anciens fichiers ARC. Mais d'autres versions de LZEXE
- suivront qui je l'espère iront encore plus vite et genèreront des
- fichiers plus compacts.
-
- 2-Utilisation de LZEXE
- ----------------------
-
- C'est très simple: il suffit de taper sous DOS:
-
- LZEXE nomfichier[.EXE]
-
- où "nomfichier" est le nom du fichier EXE que vous voulez compacter.
- L'extension .EXE est ajoutée par défaut. Le fichier compacté est créé
- dans le répertoire par défaut.
-
- Attention ! Certains fichiers ne sont EXE que par leur nom: en effet,
- pour le DOS, ce n'est pas l'extension .EXE qui caractérise ce type de
- fichier, c'est le fait qu'il y ait au début les lettres "MZ" suivies de
- quelques octets qui indiquent la longueur du fichier, la taille mémoire
- qu'il occupe, etc... Ainsi certaines personnes n'hésitent pas à renommer
- des fichiers COM en EXE, et cela explique que LZEXE refuse certains
- fichiers EXE qui ne sont que des COM renommés.
-
- Mais il existe une méthode pour faire accepter des fichiers COM à
- LZEXE: il suffit d'utiliser COMTOEXE du même auteur qui convertit ces
- derniers en EXE (il fait l'inverse de EXE2BIN).
-
- Pour plus de sûreté, LZEXE n'efface pas votre ancien fichier EXE: il le
- renomme en *.OLD. De plus, il crée le fichier temporaire LZEXE.TMP qui
- n'est renommé en *.EXE qu'à la fin du compactage.
-
- 3-Conseils d'utilisation
- ------------------------
-
- Pour certains fichiers, le compactage peut ne pas fonctionner pour
- plusieurs raisons:
-
- - Le fichier que vous avez spécifié n'est pas un vrai EXE. Solution:
- utiliser COMTOEXE.EXE
- - La table de relocation est trop grande. Pour comprendre ce message,
- il est nécessaire de connaître la structure interne d'un fichier EXE: un
- tel fichier peut s'étaler sur plusieurs segments à la différence des
- fichiers COM. C'est pourquoi il lui faut une table de valeurs qui indique
- dans quel segment se font les branchements ou les appels de sous
- programmes par exemple. Et si le fichier est très long, cette table peut
- être très encombrante et empêcher le compacteur d'agir. Néanmoins, j'ai
- prévu 16000 adresses de relocation, ce qui devrait suffire pour tous les
- fichiers EXE, même les plus gros.
- - Le fichier que vous avez spécifié a déjà été compacté avec LZEXE.
-
- Notons qu'un autre compacteur de fichiers existe: EXEPACK.EXE de
- Microsoft. Mais il est de loin beaucoup moins efficace que le mien, et
- même si votre fichier EXE est déjà compacté avec ce programme, LZEXE
- pourra encore beaucoup compacter. Mais dans ce cas, un message de mise en
- garde vous est présenté, car il existe un autre utilitaire du même
- auteur: UPACKEXE qui permet de décompacter ces fichiers et ainsi les
- gains sont encore plus importants.
-
- - Le compactage n'a pas été assez efficace et fait perdre de l'espace
- sur disque: Hé oui, ça peut arriver, mais généralement avec les petits
- EXE (moins de 2 Ko). Sinon, vous pourrez pratiquement toujours gagner
- quelques octets.
-
- - Le fichier EXE contient des overlays internes: ce sont des morceaux
- de programme qui se trouvent dans le fichier EXE mais qui sont chargés
- seulement quand le programme principal en a besoin. LZEXE ne peut pas les
- compacter car il faudrait modifier le routines de chargement qui sont
- dans le programme principal, et malheureusement ces routines dépendent du
- compilateur et du programmeur. Dans la version 0.91, LZEXE vous met en
- garde de leur présence. Mais dans beaucoup de cas, la différence entre la
- longueur du fichier EXE sur disque et la longueur du code chargé est
- minime (moins de 1024 octets) : dans ce cas, vous pouvez quand même
- compacter car il s'agit de "marques" laissées par certains compilateurs.
-
-
- Plus grave: certains fichiers EXE compactés "planteront" la machine:
-
- - Si le programme EXE fait un test sur la taille ou sur son intégrité
- sur disque (c'est très rare).
- - S'il contient des overlays, qui doivent être chargés ensuite et donc
- qui doivent occuper des positions fixes dans le fichier.
- - Pour les programmes qui marchent sous Windows (de Microsoft): ce ne
- sont pas de vrais EXE, donc ils refuseront de fonctionner correctement
- sous l'intégrateur.
- (cette liste n'est pas exhaustive)
-
-
- Moins grave: Certains programmes possèdent des options de configuration
- qui modifient le fichier EXE (Turbo Pascal par exemple). Dans ce cas, il
- faut d'abord configurer le programme puis le compacter et conserver une
- version non compactée pour pouvoir la modifier.
-
-
- 4-Du point de vue technique (pour les connaisseurs !)
- -----------------------------------------------------
-
- L'algorithme de compactage que j'ai fait est fondé sur la fameuse
- méthode de Ziv Lempel utilisant un buffer "circulaire" (ring buffer) et
- une méthode de recherche des répétitions de séquences d'octets par des
- arbres. Le codage de la position et la longueur de la chaîne qui se
- répètent est optimisé par un algorithme annexe inspiré de la méthode de
- Huffman. Les octets non compactés sont envoyés tels quels dans le fichier
- car un algorithme de compression annexe ( comme "Adaptive Huffman" (voir
- LHARC) ou avec des arbres de Shanon-Fano (voir PKZIP)) aurait nécessité
- un temps de décompactage plus important et surtout un décompacteur plus
- complexe et long, ce qui aurait en fait allongé le fichier EXE compacté.
-
- Le décompacteur est logé à la fin du fichier EXE et fait 395 octets de
- long pour la version 0.90 et 330 pour la version 0.91. Il doit:
- - Contrôler le CRC pour s'assurer que personne ne l'a modifié (utile
- contre les virus). Si oui, afficher le message: "CRC Error". Cette option
- a été enlevée dans LZEXE v0.91 car elle allonge inutilement le fichier
- EXE et le temps de décompactage. De plus le contrôle du CRC n'était fait
- que sur le décompacteur.
- - Se déplacer en haut de la RAM, puis déplacer le code compacté pour
- laisser un peu de place au fichier EXE
- - Décompacter le code, en contrôlant qu'il est correct, et surtout
- ajuster les segments si on dépasse 64 Ko (ce qui m'a posé des problèmes
- en terme de vitesse)
- - Décompacter la table de relocation, et mettre à jour les adresses
- relogeables de fichiers EXE. C'est ici que LZEXE v0.91 a été modifié: la
- table de relocation est beaucoup mieux compactée.
- - Lancer le programme en mettant à jour CS,IP,SS,SP
-
- C'est tout !!!
-
- Ce décompacteur est à lui seul un petit chef-d'oeuvre de programmation
- en assembleur 8086: inutile de vous dire que sa mise au point a été assez
- longue.
- Mais le compacteur m'a aussi posé pas mal de problèmes, notamment pour
- mettre à jour tous les pointeurs que le décompacteur utilise par la
- suite.
-
-
- 5-LZEXE version 0.91 et les autres compacteurs
- ----------------------------------------------
-
- PKARC (dernière version): LZEXE fait beaucoup mieux, le "crunching"
- (alias Shrinking pour PKZIP) étant un algorithme dépassé...
-
- PKZIP v0.92: LZEXE mieux dans pratiquement tous les cas.
-
- PKZIP v1.02: sur les gros fichiers, LZEXE fait mieux. sinon, la
- différence est assez faible.
- LHARC v1.01: il fait mieux que LZEXE avec "freezing" sur les petits
- fichiers.
-
- LARC: LZEXE fait mieux.
-
- Remarques importantes:
- - On ne peut pas vraiment comparer ce que fait LZEXE avec les autres
- compacteurs puisque dans les fichiers EXE compactés par mon soft il y a
- aussi un décompacteur qui le lance tout seul. Néanmoins les autres
- compacteurs peuvent faire des fichiers "self-extracting", mais ils
- décompactent sur disque, sont lents et ajoutent plusieurs dizaines de Ko
- aux fichier compactés (sauf pour LARC et LHARC qui n'ajoutent qu'1 ou 2
- Ko, mais qui ne décompactent que sur disque malheureusement).
- - Dans presque tous les cas, les compacteurs que j'ai cités ne pourront
- pas recompacter plus un fichier déjà réduit avec LZEXE, ce qui montre son
- efficacité. Seul LHarc arrive à gagner quelques octets.
-
-
- 6-L'avenir...
- -------------
-
- - je pense aussi à un décompacteur automatique de documentation du
- genre de LISEZMOI.COM ou LIST.COM qui serait très commode et peut être
- que je vais en faire un.
- - Enfin, j'espère faire un compacteur "universel" comme PKZIP ou LHARC
- plus lent que LZEXE en décompactage mais qui fera beaucoup mieux que ces
- derniers.
-
-
- 7-Mises en garde et voeux...
- ---------------------------
-
- J'espère que LZEXE et les fichiers EXE compactés par lui seront
- beaucoup diffusés ce qui m'incitera à faire d'autres versions plus
- rapides...
-
- Je décline toute responsabilité en cas de perte d'information
- occasionné par LZEXE. Mais rassurez-vous, les algorithmes sont fiables et
- je ne crois pas qu'il y ait beaucoup de bugs.
-
- Attention ! Je ne vous conseille pas de compacter et de diffuser des
- logiciels commerciaux protégés par un copyright: les auteurs risquent
- d'êtres mécontents...
-
- Mais si vous faites un FREEWARE, un SHAREWARE, ou même un programme
- commercial, rien ne vous empêche de le compacter avec LZEXE, et même je
- vous le conseille:
- - Vos fichiers EXE seront plus petits et on croira que vos programmes
- compilés seront faits en assembleur. Que dirons vos concurrents quand ils
- verront des programmes qui font la même chose que les leurs mais 30% plus
- petits ? De plus vous pourrez mettre sur disquette (et sur disque dur)
- plus de programmes, car on a toujours besoin d'une plus grande mémoire de
- masse...
- - Le compactage constitue un excellent codage qui peut empêcher des
- personnes peu recommandables de modifier les messages ou bien de voir vos
- algorithmes secrets à moins de désassembler le décompacteur, ce qui
- risque de n'être pas très facile, c'est moi qui vous le dit !
-
-
- Voilà, en espérant que ce soft vous servira et qu'il ne possède pas
- trop de bugs !
-
- Fabrice.
-
- Voici mon adresse si vous voulez des infos sur les algorithmes ou si
- vous avez des problèmes:
-
- Fabrice BELLARD
- 451,chemin du mas de Matour
- 34790 GRABELS (FRANCE)
-
-
-
- Mon pseudo sur RTEL ou QBBS: FAB
-
-
-
- Evolution des versions:
-
- LZEXE v0.91:
- ------------
- - Le tiret "-" n'était pas accepté dans le noms de fichiers, cela a été
- corrigé.
- - LZEXE signale la présence des overlays internes.
- - LZEXE indique si le fichier a déjà été compacté avec EXEPACK de
- Microsoft.
- - Un bug de la version 0.90 faisait occuper trop de mêmoire aux
- fichiers EXE: cela a été corrigé.
- - Le compactage de la table de relocation a été amélioré.
- - Le contrôle du CRC a été enlevé.
- - La taille du décompacteur est passée de 395 à 330 octets.
-
-
-