>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
HTML

L'art d'écrire du code illisible

Imaginez ouvrir un fichier source et au lieu des boucles et conditionnels habituels, vous voyez de l'art ASCII en forme de train ou de carte du monde. Vous lancez la compilation, et ce « dessin » se transforme soudain en calculatrice fonctionnelle ou en moteur d'échecs. Ce n'est pas de la magie — c'est l'IOCCC, le plus ancien concours sur internet pour écrire le code C le plus obfusqué.

Le dépôt winner est une archive massive de toutes les œuvres qui ont gagné l'International Obfuscated C Code Contest depuis 1984. Ce n'est pas juste un dépôt de fichiers étranges, mais une véritable encyclopédie des recoins sombres de la norme C et de l'ingéniosité humaine.

D'où vient l'idée de tourmenter le code

Tout a commencé en mars 1984. Landon Curt Noll et Larry Bassel travaillaient chez National Semiconductor et essayaient de corriger des bugs dans l'ancien code du Bourne shell et de l'utilitaire finger. Le code était si horrible, surchargé de macros et non structuré, que Landon s'est demandé : et si les gens commençaient à écrire du mauvais code exprès ?

C'est ainsi qu'est né le concours, avec deux objectifs. Premièrement, montrer par contraste pourquoi la propreté du code est importante. Deuxièmement, tester les limites des compilateurs et la connaissance des nuances du langage. Les auteurs l'appellent « programmation satirique ».

Ce qu'on peut trouver dans cette archive

Dans le dépôt, les dossiers sont organisés par année. Chacun contient des fichiers sources des programmes, un Makefile pour la compilation, et des fichiers avec les explications des juges.

Programmes casse-têtes

Beaucoup de soumissions ressemblent à un ensemble aléatoire de caractères. Vous regardez le code et ne comprenez pas ce qu'il fait tant que vous ne le compilez pas. Par exemple, un programme peut calculer Pi, alors que le texte source lui-même est visuellement formaté en cercle.

Utiliser les macros à l'extrême

Les participants utilisent souvent le préprocesseur C de telle manière qu'il réécrit complètement la logique du programme avant la compilation. C'est un excellent moyen d'apprendre comment fonctionnent réellement les #define et comment ils peuvent être détournés.

Exploiter les règles C non évidentes

L'archive regorge d'exemples utilisant la précédence des opérateurs que la plupart des développeurs ignorent. Cela vous force à plonge dans la norme du langage et à comprendre pourquoi a[i] est identique à i[a], et comment cette connaissance aide à cacher la logique.

Comment étudier ces œuvres maestres

Ouvrir simplement un fichier dans VS Code et essayer de le lire est une mauvaise idée. La plupart du temps, vous verrez un désordre de variables d'une seule lettre et de constantes étranges. Les juges du concours suggèrent leur propre algorithme d'investigation.

D'abord, vous devriez passer le code au préprocesseur. Une commande comme gcc -E prog.c supprimera tous les commentaires et développera les macros. C'est légèrement plus clair, mais pas beaucoup.

L'étape suivante consiste à utiliser des utilitaires de formatage (beautifiers). Mais attention : certains programmes sont écrits de manière si intelligente que les formatters plantent ou cassent la logique si elle est liée à des macros qui définissent la structure des blocs.

La méthode la plus fiable est d'exécuter le code. Chaque dossier contient des instructions sur les arguments à passer et la sortie attendue. Parfois le programme nécessite des drapeaux de compilation spécifiques qui sont spécifiés dans le Makefile.

Quel est l'intérêt pratique pour un développeur normal

On pourrait se demander pourquoi regarder du code qui viole toutes les règles de décence ? En fait, c'est un excellent terrain d'entraînement.

  1. Compréhension approfondie du langage. En analysant les gagnants de l'IOCCC, vous en apprenez davantage sur les effets secondaires, les règles de promotion de type et la gestion de la mémoire que dans n'importe quel manuel.
  2. Débogage et refactorisation. Si vous pouvez comprendre comment un programme de 512 octets formaté comme le logo Linux fonctionne, alors le code « legacy » ordinaire au travail vous semblera un conte pour enfants.
  3. Comprendre comment fonctionnent les compilateurs. Vous verrez quelles optimisations font les compilateurs modernes et sur quels constructs ils trébuchent.

Faut-il regarder dans ce dépôt

Si vous aimez les casse-têtes et voulez tester vos connaissances en C à fond — certainement oui. C'est comme un musée d'art numérique où les expositions peuvent (et doivent) être exécutées.

Surtout, n'essayez pas de copier ce style dans vos projets professionnels. Les auteurs du projet eux-mêmes préviennent : « Veuillez ne pas écrire de code dans ce style ! ». Ce dépôt existe pour montrer un extrême et ne jamais s'en approcher dans la vraie vie.

Il vaut mieux commencer par les premières années, par exemple 1984 ou 1985. Les programmes y sont encore relativement courts et plus faciles à décompiler dans sa tête. Plus on se rapproche de notre époque, plus les techniques d'obfuscation deviennent sophistiquées.

Projets similaires