Zwischen jedem Buchstaben stehen noch andere Zeichen (unter anderem der dateiname).
Wenn ich raten soll, dann liegt es daran, dass du in
syscall_wrappers.c, Zeile 134 für die Deskriptoren 0-2 printf verwendest und die Länge ignorierst: Möglicherweise nutzt FASM den Syscall für jeden Buchstaben einzeln und hinter dem Puffer, in dem die Buchstaben stehen, steht hello.
Zweites Problem: die neue-programm datei wird korrekt angelegt und beschrieben. (siehe den cat aufruf). Aber wenn ich versuche, hello auszuführen, hat es angeblich nicht die richtige magic.
Ich hab keine Idee, was die Ursache sein könnte, aber deine Ausgabe in
elf32.c, Zeile 65 liest den Header um 1 Byte verschoben aus. Es ist erstmal sehr unelegant einfach die Variable header zu dereferenzieren, weil das eine Kopie davon auf dem Stack anlegt. Vielleicht kann dein printf damit nicht umgehen. Du solltest die ersten vier Bytes im ident-Feld einmal einzeln ausgeben, um das zu prüfen. Wenn auch diese Ausgabe den Header um 1 verschoben ausgibt, dann solltest du bei deinen Ladefunktionen weiterforschen, wo da eine 1 addiert werden könnte. Ich habe auf die Schnelle nichts gefunden, aber mit gezielten Debugausgaben könntest du da vielleicht vorankommen.