Ich versuche zu verstehen, wie Linux ein Programm startet. Ich habe irgendwo gelesen, dass eine Funktion in glibc die Hauptfunktion aufruft. Profiling mit Callgrind und Blick auf die Call-Graphen in Kcachegrind, sehe ich below main
, die Main aufruft. Aber ich verstehe das nicht, eine Funktion kann nicht so genannt werden. Also meine Frage ist, welche Funktion in der glibc tatsächlich die Hauptfunktion startet.
Nach Valgrinds eigener Hilfe finden Sie diese Erklärung für die Option - show-below-main :
Standardmäßig zeigen Stack-Traces für Fehler keine Funktionen, die erscheinen unter dem Main, weil es meistens uninteressant ist C Bibliothekszeug und / oder Kauderwelsch. Alternativ, wenn main nicht ist Im Stack-Trace enthalten Stack-Traces keine Funktionen unterhalb von main-ähnlichen Funktionen wie glibcs __libc_start_main. Wenn darüber hinaus main-like-Funktionen in der Ablaufverfolgung vorhanden sind, sind sie normalisiert als (unter main), um die Ausgabe mehr zu machen deterministisch.
Daher ist unterhalb von main nicht die Funktion, die main selbst aufruft, sondern __ libc_start_main .