>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
HTML

Die Kunst, unlesbaren Code zu schreiben

Stellen Sie sich vor, Sie öffnen eine Quelldatei und sehen statt der üblichen Schleifen und Bedingungen ASCII-Kunst in Form eines Zuges oder einer Weltkarte. Sie führen die Kompilierung durch, und diese „Zeichnung" verwandelt sich plötzlich in einen funktionierenden Taschenrechner oder eine Schach-Engine. Das ist kein Zauber – das ist IOCCC, der älteste Wettbewerb im Internet für das Schreiben des am stärksten verschleierten Codes in C.

Das Gewinner-Repository ist ein umfangreiches Archiv aller Werke, die seit 1984 den International Obfuscated C Code Contest gewonnen haben. Es ist nicht nur eine Ansammlung seltsamer Dateien, sondern eine wahre Enzyklopädie der dunklen Ecken des C-Standards und menschlicher Erfindungsgabe.

Woher kam die Idee, Code zu quälen?

Alles begann im März 1984. Landon Curt Noll und Larry Bassel arbeiteten bei National Semiconductor und versuchten, Bugs im alten Bourne-Shell-Code und dem Finger-Utility zu beheben. Der Code war so schrecklich, überladen mit Makros und unstrukturiert, dass Landon sich fragte: Was wäre, wenn Menschen absichtlich schlechten Code schreiben würden?

So wurde der Wettbewerb geboren, mit zwei Zielen. Erstens, durch Kontrast zu zeigen, warum sauberer Code wichtig ist. Zweitens, die Grenzen von Compilern und das Wissen über Sprachnuancen zu testen. Die Autoren nennen es „satirische Programmierung".

Was Sie in diesem Archiv finden können

Im Repository sind die Ordner nach Jahren organisiert. Jeder enthält Quelldateien für Programme, ein Makefile zum Erstellen und Dateien mit Erklärungen der Richter.

Rätsel-Programme

Viele Einsendungen sehen aus wie eine zufällige Ansammlung von Zeichen. Sie schauen sich den Code an und verstehen nicht, was er tut, bis Sie ihn kompilieren. Ein Programm könnte zum Beispiel Pi berechnen, während der Quelltext selbst visuell als Kreis formatiert ist.

Makros bis zum Äußersten ausreizen

Die Teilnehmer nutzen den C-Präprozessor oft so, dass er die Programmlogik vor der Kompilierung vollständig umschreibt. Dies ist ein großartiger Weg, um zu lernen, wie #define tatsächlich funktionieren und wie sie missbraucht werden können.

Nicht-offensichtliche C-Regeln ausnutzen

Das Archiv ist voll von Beispielen, die Operatorprioritäten nutzen, von denen die meisten Entwickler nicht einmal wissen. Das zwingt Sie, sich in den Sprachstandard zu vertiefen und herauszufinden, warum a[i] dasselbe ist wie i[a] und wie dieses Wissen hilft, Logik zu verstecken.

Wie man diese Meisterwerke studiert

Einfach eine Datei in VS Code öffnen und versuchen, sie zu lesen, ist keine gute Idee. Höchstwahrscheinlich sehen Sie ein Chaos aus einbuchstabigen Variablen und seltsamen Konstanten. Die Wettbewerbsrichter schlagen ihren eigenen Algorithmus zur Untersuchung vor.

Zuerst sollten Sie den Code durch den Präprozessor laufen lassen. Ein Befehl wie gcc -E prog.c entfernt alle Kommentare und expandiert Makros. Es wird etwas klarer, aber nicht viel.

Der nächste Schritt ist die Verwendung von Formatierungswerkzeugen (Beautifier). Aber seien Sie vorsichtig: Einige Programme sind so clever geschrieben, dass Formatter abstürzen oder die Logik zerstören, wenn sie an Makros gebunden ist, die Blockstruktur definieren.

Die zuverlässigste Methode ist, den Code auszuführen. Jeder Ordner enthält Anweisungen, welche Argumente zu übergeben sind und welche Ausgabe zu erwarten ist. Manchmal erfordert das Programm spezifische Compiler-Flags, die im Makefile angegeben sind.

Was ist der praktische Nutzen für einen normalen Entwickler?

Es könnte scheinen: Warum sollte man sich Code ansehen, der alle Regeln der Anständigkeit verletzt? Tatsächlich ist es ein großartiger Übungsplatz.

  1. Vertieftes Verständnis der Sprache. Durch die Analyse von IOCCC-Gewinnern lernen Sie Nebenwirkungen, Typ-Promotions-Regeln und Speicherverwaltung besser als aus jedem Lehrbuch.
  2. Debugging und Refactoring. Wenn Sie verstehen können, wie ein 512-Byte-Programm funktioniert, das als Linux-Logo formatiert ist, wird gewöhnlicher „Legacy"-Code bei der Arbeit wie ein Kinder-Märchen für Sie sein.
  3. Verständnis, wie Compiler funktionieren. Sie werden sehen, welche Optimierungen moderne Compiler durchführen und bei welchen Konstrukten sie scheitern.

Sollten Sie einen Blick in dieses Repository werfen?

Wenn Sie Rätsel lieben und Ihre C-Kenntnisse bis an die Grenze testen wollen – auf jeden Fall ja. Es ist wie ein Museum für digitale Kunst, wo die Exponate ausgeführt werden können (und sollten).

Nur versuchen Sie nicht, diesen Stil in Ihren Arbeitsprojekten zu kopieren. Die Projektautoren selbst warnen: „Bitte schreiben Sie keinen Code in diesem Stil!". Dieses Repository existiert, um ein Extrem zu zeigen und es im echten Leben niemals anzustreben.

Am besten beginnen Sie das Studium mit den frühen Jahren, zum Beispiel 1984 oder 1985. Die Programme dort sind noch relativ kurz und einfacher im Kopf zu dekodieren. Je näher an der Gegenwart, desto ausgefeilter werden die Verschleierungstechniken.

Ähnliche Projekte