Author Topic: 4ko sous Linux  (Read 13685 times)

0 Members and 1 Guest are viewing this topic.

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
4ko sous Linux
« on: 18 May 2011 à 22:53:04 »
Salut,

Est-ce que quelqu'un a déjà essayé de faire des 4k sous Linux ?
Je suis en train de bosser là dessus, et je cherche à diminuer la taille de l'exécutable de base, j'aimerais savoir si vous avez quelques trucs et astuces.

  • J'utilise bien sûr la technique du dropper avec lzma (mais lzma me fait souvent des read error à la décompression, c'est complètement aléatoire et parfois ça marche).
  • Je linke avec -nostdlib, et je remplace la fonction main par _start, en finissant par un exit(0)
  • J'utilise strip --strip-all --remove-section=.comment --remove-section=.note (je voulais utiliser sstrip des Elfkickers, mais il est introuvable depuis quelques temps apparemment)
  • J'utilise -Os à la compilation
  • J'utilise  -Wl,--gc-sections à l'édition des liens (je ne sais pas ce que ça fait mais j'ai lu quelque part que ça à un effet sur la taille... et en effet oui)
  • Je compile en 32 bits, mais cela implique que l'utilisateur doit avoir la version 32 bits de SDL sur sa machine...
  • J'ai essayé le linker Bold de Alrj, il fait vraiment de tout petits exécutables, mais (sur ma machine en tout cas) ils font un segfault ;(

Et actuellement je teste le chargement dynamique des fonctions de bibliothèques avec dlopen/dlsym, on verra ce que ça va donner...

J'ai essayé d'écrire le code en asm, mais mes premiers essais n'ont pas été très concluants : rien que pour ouvrir une fenêtre SDL et quitter tout de suite, on dépasse les 2ko (avant compression), du coup je ne sais pas si ça vaut le coup de faire un tel investissement...

Donc voilà si vous avez d'autres astuces, je suis preneur !

Offline LLB

  • Base
    • Pouet.net
    • Coup de coeur
    • View Profile
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : 4ko sous Linux
« Reply #1 on: 19 May 2011 à 00:17:27 »
J'avais gardé ce lien passionnant de côté : http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
À la fin, c'est vraiment limite (bidouilles du header elf), mais il y a pas mal d'astuces utiles avant.

nystep

  • Guest
Re : 4ko sous Linux
« Reply #2 on: 19 May 2011 à 08:16:29 »
http://in4k.untergrund.net/index.php?title=Linux

il faut vraiment tout leur dire rah la la c'est pas vrai ça ;)

Offline xtrium

  • Base
    • Pouet.net
    • Coup de coeur
    • Slengpung
    • View Profile
    • Homepage Frequency
  • Ancienneté: 2007
  • Groupe: Frequency
  • Rôle: Coder, musicien
  • Ville: Lille
Re : 4ko sous Linux
« Reply #3 on: 19 May 2011 à 09:39:55 »
Avec TiTS on a fait pas mal d'expérimentations pour les 4k sous nux, en gros ce qui en ressort, c'est :
- avec gcc, le -Os n'est pas forcément l'idéal après compression - essayer -O1 voire -O2 peut permettre de grignoter quelques octets.
- Comme dit plus haut, GC masher est d'une aide précieuse, les ELF kickers aussi... sstrip est vraiment bien utile ;)
- pour le chargement des libs avec dlopen, Wiz avait pondu un truc pas mal du tout, faudrait que je retrouve ça.

Le dropper avec lzma est actuellement le mieux qui puisse se faire sous nux. Je n'ai jamais eu un seul souci avec ça de mon côté, peut être que ton stub shell déconne... . Le seul inconvénient majeur étant que si on veut transmettre les arguments à l'exécutable droppé on doit rallonger pas mal ledit stub... bon, pour une 4k, en général, osef, mais pour mon synthé par exemple c'est gênant.
Après, j'ai lu quelque part qu'UPX permet désormais de compresser en lzma... à confirmer.

Si tu veux, flure, j'ai sstrip en version elf32, et un build custom pour elf64... je pourrai te faire une petite archive en rentrant ce soir :)

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #4 on: 19 May 2011 à 09:40:05 »
LLB : j'avais déjà vu ton lien, effectivement sur la fin il est un peu hardcore, je voulais essayer d'éviter d'aller jusque là :)
nystep : merci pour le lien, je le connaissais pas. Le trick de l'intro qui se compile à l'exécution, c'est GENIAL !!! Je vais tester ça dès que possible :D

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #5 on: 19 May 2011 à 09:43:29 »
xtrium : ah ouais je veux bien ton sstrip :)

Offline xtrium

  • Base
    • Pouet.net
    • Coup de coeur
    • Slengpung
    • View Profile
    • Homepage Frequency
  • Ancienneté: 2007
  • Groupe: Frequency
  • Rôle: Coder, musicien
  • Ville: Lille
Re : 4ko sous Linux
« Reply #6 on: 19 May 2011 à 10:18:54 »
En fait, j'ai accès au git d'ici, donc j'ai pu te faire la petite archive qui va bien.
reduce est un script qui s'occupe de strip/sstrip/lzma+stub sur l'exe que tu lui passe, en choisissant automatiquement le bon sstrip selon l'archi pour laquelle l'exe a été compilé.

Cadeau ! :)

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #7 on: 19 May 2011 à 10:28:49 »
Et sinon, vous pensez quoi du trick de compresser le code source, et que le stub décompresse et compile juste avant l'exécution ?
Normalement le code source devrait mieux compresser que l'exécutable non ?

Offline LLB

  • Base
    • Pouet.net
    • Coup de coeur
    • View Profile
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : 4ko sous Linux
« Reply #8 on: 19 May 2011 à 11:21:16 »
Et dans quelques jours, tu demanderas à Shader Minifier d'accepter le C en entrée ? :)


Offline maracuja

  • Base
    • View Profile
Re : 4ko sous Linux
« Reply #9 on: 19 May 2011 à 11:41:14 »
upx sait comprimer en lzma.

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #10 on: 19 May 2011 à 11:59:04 »
LLB : comment t'as deviné ? :P
Bon par contre cette soluce de compresser le source me paraît difficile quand on a de la musique sous forme d'objet précompilé, genre 4klang... Mais ça doit être jouable quand même, juste que le dropper deviendra un peu plus gros ;)

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #11 on: 23 May 2011 à 22:42:29 »
Quelqu'un a déjà chargé des fonctions de la SDL et OpenGL via dlopen/dlsym (équivalents de LoadLibrary et GetProcAddress sous Windows) ?
Là je galère, pour la SDL aucun problème, mais dès que je charge les fonctions OpenGL elles sont bien chargées (j'ai checké les pointeurs et dlerror) mais ça fige... en fait ça n'ouvre carrément pas la fenêtre...

[EDIT] j'ai trouvé. il faut faire un dlclose sur la lib OpenGL avant de passer à la suite. Par contre SDL ne pose pas ce soucis !
[re-EDIT] c'est même pire que ça, il faut faire un dlclose pour OpenGL mais il ne faut pas le faire pour SDL !!! je tombe des nues là...
« Last Edit: 23 May 2011 à 22:46:49 by flure »

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #12 on: 23 May 2011 à 22:58:12 »
Euh non en fait c'est pire que tout. Dès que j'utilise une fonction OpenGL, ça me fait un segfault... Je crois qu'il faut que j'arrête pour ce soir sinon je vais m'énerver comme Patapom :P

Offline Patapom

  • Base
    • View Profile
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #13 on: 23 May 2011 à 23:41:24 »
JE SUIS PAS ENERVE !!! >:(
.  Pom  .

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : 4ko sous Linux
« Reply #14 on: 23 May 2011 à 23:44:22 »
Hahaha mais bien sûr :D

Bon moi par contre je suis un peu deg : j'ai viré tous les chargements dynamiques, j'ai compilé en linkant de manière "traditionnelle"... Et là, oh stupeur. Mon exe final (compression comprise) est plus petit d'une centaine d'octets... GRUMPF, ça valait le coup que je me prenne la tête :/