2012-05-17 21 views
8

Próbuję zrozumieć, jak Linux uruchamia program. Czytałem gdzieś, że niektóre funkcje w glibc wywołują główną funkcję. Profilowanie za pomocą callgrind i przeglądanie wywołań w Kcachegrind, widzę below main, który dzwoni do głównego. Ale nie rozumiem tego, funkcja nie może być nazwana tak. Moje pytanie brzmi więc, która funkcja w glibc faktycznie rozpoczyna główną funkcję.Która funkcja w glibc wywołuje główną funkcję?

+2

__libc_start_main() Myślę, http://linuxgazette.net/issue84/hawk.html – user1399238

+2

[ '__libc_start_main'] (http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic /LSB-Core-generic/baselib---libc-start-main-.html) zdefiniowane w Linux Standard Base. – birryree

+0

Sprawdź również następujące pytania: http://stackoverflow.com/questions/8668913/elf-binary-compiled-by-gcc-what-happens-from-entry-point-to-main i http://stackoverflow.com/ pytania/524826/linux-is-it-to-to-write-a-working-program-to-nie-polegaj-na-libc – birryree

Odpowiedz

11

następujących Valgrind własna pomoc znajdziesz to wyjaśnienie dla opcji --show-poniżej-main:

Domyślnie stos ślady za błędy nie wykazują żadnych funkcji, które pojawiają się pod głównym ponieważ przez większość czasu jest nieinteresujący C rzeczy biblioteki i/lub gobbledygook. Alternatywnie, jeśli główny nie jest obecny w zapisie stosu, ślady stosu nie będą wyświetlały żadnych funkcji podrzędnych, takich jak funkcje __libc_start_main glibc. Ponadto, jeśli w śledzeniu występują funkcje główne, są one znormalizowane jako (poniżej głównego), aby wynik był bardziej deterministyczny.

Jako takie, poniżej głównego nie jest funkcja, która nazywa się główny, ale __libc_start_main.

Powiązane problemy