MinGW for Windows: how to amazingly compress your .exe

Shotokan - martedì 3 settembre

Vi piace il Cippiuppiu’ ma non vi piace codare con visual studio, troppo casino, per un cacchio di Hello, World! dovete creaare il progeetto, aggiungere il nuovo file, compilare, ed avete ottenuto l’eseguibile che e’ piccolissimo per carita’, ma ci mancano tutte le dipendenze quindi dovete installare sul pc dove volete “portare” questo .exe anche le altre dipendenze. (E che palle.)
Allora vi installate mingw per Windows, vi mettete zio sublime, mettete mingw/bin nella variabile d’ambiente PATH di windows e vi divertite a codare direttamente con Sublime. Ma.. un cacchio di Hello World! Pesa 1.08 MB!
Vediamo come ridurre di molto le dimensioni di questi exe senza fare sforzi particolari! 😉

“Luke, I’m your father.”
“Oh gosh, I knew I was adopted! Nobody loved me!”

Si, era un titolo senza senso because FU*K YOU.

Prendiamo in considerazione il seguente codice C++ per il test che stiamo per fare, molto semplice, due include “giusto per metterci qualcosa”.

(Io l’ho chiamato test.cpp, fate come volete.)


Salviamo (CTRL+S) e compiliamo (CTRL+B se avete messo mingw nella path)

…aand boom!


Ecco che da 131 byte di C++ e’ uscito un mostro da 1MB.

“E come lo comprimo?”

Mi informo e sento molti che mi consigliano UPX.
Scarichiamo, proviamo.

Sposto upx nella directory di lavoro e lancio:


e beh, il miglioramento sicuramente c’e’ stato, ma..


Siamo ancora a 630KB per un cacchio di hello world! Neppure meta’ sono riuscito a comprimere..

Poteva anche andarmi bene a dire il vero, ma 630kb per l’hello world non mi andava bene per principio.

La soluzione mi e’ passata di mano lasciando perdere completamente la compressione.

“I am a hacker, and this is my manifesto. You may stop this individual, but you can’t stop us all… after all, we’re all alike.” Loyd Blankenship

Si, perdonate la banalita’ nel titolo, ma da come avrete capito, parliamo di file .manifest

“Ma cosa centrano i manifest?? Parlavamo di compressione!” Lettore, stai buono e prosegui con la lettura.

Ok, allora procediamo creando un manifest standard, che all’esecuzione non richiede privilegi particolari o nulla di che (potete tranquillamente cambiare il level, il metodo funziona ugualmente.)


Per il mio gaudio e grande fantasia ho chiamato questo manifest appunto: “manifest.manifest”.

Ora torniamo al progetto C++, ricompiliamolo in modo da riottenere l’eseguibile decompresso, o decomprimetelo con upx, come volete.

Scarichiamo MT.EXE (Cos’e’ MT.EXE?) (e si, l’ho riempito dei peggio troggian zirodei) e spostiamolo nella directory di lavoro.

Eseguiamo:


..per aggiungere al file il manifest precedentemente creato, ora osserviamo:


Ma… E’ poco piu’ di quel che aveva compresso UPX! (SICSICSICS! SATAN LAICS VET FAIL)

Ed il file non e’ stato ancora compresso con UPX 😀

Proviamo allora a comprimere con UPX il file con il manifest gia’ incluso:


…E godiamoci il risultato:


Quindi un buon 83% di compressione!

Lascio qui una ‘tabella riassuntiva’:


Enjoy.

Theme made by Koala