Nell’attesa che qualche programmatore, o programmatrice, di casa nostra ci invii un prodotto italiano da recensire e diffondere, continuiamo la nostra rubrica con un programma che ritengo estremamente utile ed efficace.
Il programma di questo mese è LZEXE di Fabrice Bellard, utilizzato anche da noi per rendere più piccola la parte eseguibile di KULT
Underground. La versione in mio possesso è la 0.91 e ignoro se ce ne siano di successive, ma anche questa, probabilmente poco più che una Beta, è perfettamente funzionante e non abbiamo mai avuto problemi di gestione.
Ma che cos’è esattamente questo programma? Contrariamente da quello che molti di voi potranno pensare non è un normale compressore. Non è una utility che riduce la dimensione di file creando un formato privato, come ad esempio i più famosi PKZIP o ARJ. Non è neppure qualcosa di simile a quei programmi che servono per rendere “autoscompattanti” gli archivi
.ZIP, o .LZH.
Se infatti uno comprime un eseguibile con il PKZIP per utilizzarlo sarà costretto a decomprimerlo, e a lanciarlo successivamente, rendendo il tutto macchinoso e scomodo. Lo scopo di un compressore normale è infatti solamente quello di archiviare in uno spazio minore un insieme di file
(anche eseguibili, volendo) perchè non si necessita di utilizzarli al momento, oppure perchè, dovendo inviarli via Modem, questo riduce i tempi di trasmissione.
Quello che il programma LZEXE è in grado di fare è invece di comprimere file eseguibili lasciandoli eseguibili. Ma facciamo un esempio.
Entrate nella directory DOS, e, se possedete la versione 6.0 avrete un file chiamato MOVE.EXE di lunghezza 18713 bytes. Lanciate il programma
LZEXE con il parametro MOVE.EXE. Dopo qualche riga squisitamente in francese potrete leggere qualcosa che tradotto diventa: copiato il file MOVE.EXE in MOVE.OLD; compresso il file MOVE.EXE.
Facendo adesso DIR MOVE.EXE vedrete come il programma sia diventato di
12760 bytes, e, provando ad utilizzarlo, nonostante questo calo di dimensione potrete notare come continui a funzionare esattamente come prima.
Come è possibile? Semplicissimo, almeno dal punto di vista concettuale.
Il PKZIP operando su un file ne crea una copia compressa su disco, e il
PKUNZIP quando la elabora, crea una nuova copia decompressa ancora su disco.
Quando l’LZEXE comprime il file, invece di riversare su disco solo la parte compressa, la fa precedere da una parte di codice che serve per decomprimere in memoria quello che segue. Perciò, lanciando questo nuovo eseguibile in realtà lanciate una parte dell’LZEXE che a sua volta si occuperà di rimettere le cose a posto per il file originale in modo che possa funzionare come prima.
Ovviamente, perchè questo sia possibile in un tempo ragionevole, è necessario che le routines di decompressione siano estremamente veloci, e generalmente questo vuol dire minore complessità di algoritmo, a scapito del rapporto di compressione. Ma provando a comprimere l’originale
MOVE.EXE con il PKZIP si ci rende conto che dopotutto non c’è un calo rilevante di qualità, anzi. Il file zippato di MOVE.EXE diviene lungo
11723, poco più di 1000 byte più corto di quello generato con l’LZEXE, che, ricordiamolo, è ancora eseguibile.
Su file più lunghi gli algoritmi di un compressore normale danno risultati che si discostano sempre di più da quelli di questo programma francese, ma, sinceramente non tanto da valutare questo prodotto poco potente.
Nota
La PKWARE ha sviluppato un programma, chiamato PKLITE, che funziona allo stesso modo, ed in più, oltre a molte altre caratteristiche, comprime, lasciandoli eseguibili, anche i file .COM. La versione che ho dell’LZEXE è datata 1989, mentre la prima versione che ho avuto del programma Shareware
PKLITE è del 1990, ma non so quale dei due programmi sia stato concepito prima.
Personalmente, tra i due preferisco usare quello francese, non forse per qualità, ma per simpatia verso la gente che mette FREEWARE qualcuno dei loro prodotti (per onor di cronaca verso la PKWARE, comunque il PKLITE sul file MOVE.EXE comprime ottenendo 12663 bytes, ben 7 in meno dell’LZEXE).
Conclusione
Non lanciatevi immediatamente nella compressione di tutti i vostri eseguibili, perchè ci sono infatti alcune cose da tener presenti. Prima di tutte alcuni file controllano se stessi alla partenza per verificare se qualcuno ha fatto delle modifiche non consentite (ad esempio per sproteggerli) e solitamente la maggior parte di questi non tollerano di essere compressi. In secondo luogo se comprimete un file che è stato colpito da un virus con l’LZEXE vi taglierete da soli le gambe, perchè nessun antivirus sarà in grado di capire che è infetto, e lo trasformerete in una sorta di involontario Cavallo di Troia. Infine molti programmi che hanno overlay o dati in coda possono non funzionare una volta compressi, ed è inutile provare a compattare dei file sotto Windows.
A parte queste limitazioni non è sicuramente una cattiva idea comprimere i propri programmi (renderete più complessi, se non impossibili, tentativi di reverse engineering sul vostro codice), e tutti quegli eseguibili che usate di frequente, e, magari, siete soliti portarvi appresso su dischetto.
Ritengo l’LZEXE un ottimo programma, non banale, e probabilmente utile quasi a chiunque. E, a parte il commento scherzoso di prima, un ottimo sostituto per chi ne ha bisogno seriamente e non vuole registrarsi per l’uso del PKLITE che costa 46 dollari.
Ah, FREEWARE non vuole comunque dire che se volete mandare dei soldi agli autori questi si offenderanno…
Per fare il dowload di LZEXE.ZIP (LZEXE.EXE + LZEXE.DOC) cliccate con il mouse qui.