Napisałem aplikację w C i próbuję zrozumieć, jaki jest cel polecenia -fno-stack-protector podczas kompilowania. W przypadku mojej konkretnej aplikacji nie ma znaczenia, czy użyję tego polecenia, czy nie, jeśli chodzi o ochronę przed przepełnieniem bufora.Jaki jest pożytek z -fno-stack-protector?
Przeczytałem w Internecie, że polecenia -fstack-protector i -fno-stack-protector włączają i wyłączają odpowiednio ochronę przed rozbiciem stosu, ale jeśli sam kompiluję aplikację, w jaki sposób można wcześniej włączyć protektora ? Czy użycie polecenia może być zależne od systemu, na którym działa aplikacja?
Dzięki
Z definicji nie byłoby niczego kompilowanego na systemie z ochroną stosu na domyślnie połączonym z bibliotekami zbudowanymi z ochroną stosu, ponieważ one z kolei zostałby skompilowany w systemie z włączoną ochroną stosu? – tbert
Zakładam, że masz do czynienia z drugą częścią mojej odpowiedzi (komentarze o tym, dlaczego jest problematyczna), a jeśli tak, to w takim przypadku odpowiedź brzmi "nie". Kod nieprzeznaczony do działania w ekosystemie przestrzeni użytkownika hosta nie będzie połączony z żadną biblioteką hosta. (Na przykład jądro nie jest połączone z żadnymi bibliotekami przestrzeni użytkownika, inne to kod bootloadera, moduły przeznaczone do odczytu i używane jako szablony przez emulator dynrec/JIT, itp.) –
Nie mówiłem o przestrzeni jądra, ale przestrzeń użytkownika; Kompilacja JIT nie jest wykonywana z kompilatorem C; więc muszę zapytać, jaki jest problem z włączaniem ochrony stosu w przestrzeni użytkownika, może poza ustawieniem "-fno-stack-protector" w kompilacji argumentów dla jądra Linuxa? – tbert