Hier gibt es zwei Projekte, die den Binärcode eines Programms bis auf das äußerste reduzieren, sodass das Programm noch funktioniert und seine Funktion erfüllt, aber teilweise nicht mehr standardkonform aufgebaut ist.

Das erste Programm soll einfach nur mit dem Wert 42 beendet werden und das zweite soll Hello World ausgeben. Beim ersten schafft man eine Reduktion auf 45 Bytes, für das zweite schafft man 142 Bytes. Dabei lernt man vor allem, wie Programme und das Betriebssystem funktionieren – unter anderem Userspace und Kernelspace – und wie Binärprogramme aufgebaut sind und verarbeitet werden.

Start von Prozessen

Die Funktion main() ist für C-Programmierer zwar der Einstieg, aber bei der tatsächlichen Programmausführung kommen noch mehr Schritte zuvor. Was genau alles vor und nach main() passiert, beschreibt der Artikel »Linux x86 Program Start Up« sehr ausführlich. Leider fehlt die Beschreibung, was zwischen dem Aufruf von execve() im alten Prozess bis zum Aufruf von _start() im neuen Prozess passiert.