Kiedy i jak korzystać z funkcji ochrony stosu GCC?
Włączyłem-Wstack-protector
ostrzeżenie podczas kompilowania projektu, nad którym pracuję (komercyjny silnik wieloplatformowy C ++, kompilacja na Mac OS X 10.6 z GCC 4.2). Ta flaga ostrzega o funkcjach, które nie będą chronione przed zniszczeniem stosu-fstack-protector
jest włączony. GCC emituje ostrzeżenia podczas budowania projektu:
funkcja nie chroniąca: brak bufora o długości co najmniej 8 bajtów
nie chroni zmiennych lokalnych: bufor o zmiennej długości
W przypadku pierwszego ostrzeżenia odkryłem, że możliwe jest dostosowanie minimalnego rozmiaru, który bufor musi mieć, gdy jest używany w funkcji, aby ta funkcja była chroniona przed rozbijaniem stosu:--param ssp-buffer-size=X
może być użyty, gdzie X wynosi domyślnie 8 i może być tak niski jak 1.
W drugim ostrzeżeniu nie mogę powstrzymać jego wystąpienia, chyba że przestanę używać-Wstack-protector
.
-fstack-protector
być użytym? (jak na przykład przez cały czas podczas dev lub po prostu podczas śledzenia błędów?)Kiedy należy-fstack-protector-all
być użytym?Co jest-Wstack-protector
mówiąc mi? Czy to sugeruje, że zmniejszam minimalny rozmiar bufora?Jeśli tak, czy są jakieś wady, aby ustawić rozmiar na 1?Wygląda na to, że-Wstack-protector
nie jest flagą, którą chcesz włączyć przez cały czas, jeśli chcesz zbudować bez ostrzeżenia. Czy to jest poprawne?