Philipp Otte schrieb:
[...] Also vielleicht ist das verständlicher: Baut das Betriebssystem den Stack für ein Programm oder erledigt das auch diese startup-Funktion, die vor main() aufgerufen wird?
OK, ich rate mal mit und behaupte: Der Speicher für den Stack wird vom Betriebssystem beim Erzeugen des Prozesses reserviert, unter Unix vermutlich beim fork(). Der Code zum Anlegen von Objekten auf dem Stack wird, zumindest bei IA32, vom Compiler generiert. Bei RISC-Prozessoren mag das anders sein. Der Startup-Code ist zur Aufbereitung der Prozeß-Umgebung zuständig (main()-Parameter, Environment-Block, ...).
[...] Und wie kommt man dahin? Wie kann man da eingreifen?
Wieder nur geraten: Eine Startup-Routine kannst Du selbst schreiben, und sie in einer Library ablegen. Du mußt sie dann nur den ertellten Programmen hinzulinken. Falls die Einsprungadresse stimmt und main() aufgerufen wird, könnte dann sogar etwas funktionieren. Die Linux Kernel-Sourcen könnten ein ganz guter Ansatzpunkt sein, herauszufinden, wie man das tatsächlich machen kann. Vor kurzem wurde in einem suse-linux-Thread gemutmaßt, daß es auf kernel.org auch noch die Sourcen zum Kernel 0.1 geben müsse - ist wahrscheinlich deutlich weniger komplex, als der aktuelle 2.6er ;-) -- Viele Grüße, Alex