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.

Kiedy należy-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?

questionAnswers(2)

yourAnswerToTheQuestion