C R6035 błąd czasu wykonywania
Biblioteki Microsoft Visual C++ Runtime, R6035 błąd - moduł w tej aplikacji jest inicjowanie modułu zabezpieczeń globalnych w pliku cookie, gdy funkcja, polegając na tego pliku cookie zabezpieczeń jest aktywny.Wywołanie __security_init_cookie wcześniej.
__security_init_cookiemusi zostać wywołana przed pierwszym użyciem cookie zabezpieczeń globalnych.
Plik cookie zabezpieczeń globalnych jest używane do ochrony przepełnienie buforu w kod skompilowany z / GS (kontrola zabezpieczeń buforu) i w kodzie, który używa structured exception handling.Zasadniczo przy wjeździe do funkcji chronione przekroczenie, plik cookie jest umieszczana na stosie i przy wyjeździe z globalnego pliku cookie jest porównywane wartości na stosie.Wszelkie różnice między nimi wskazuje wystąpiło przepełnienie buforu, a powoduje natychmiastowe rozwiązanie programu.
R6035 błąd wskazuje, że wywołanie do __security_init_cookie został złożony po chronionych funkcja została wprowadzona.Gdyby kontynuować wykonywanie, przekroczenie buforu zakłócającej byłoby wykryte, ponieważ plik cookie na stosie już dopasuje globalnego pliku cookie.
Rozważmy następujący przykład biblioteki DLL.Punkt wejścia DLL jest ustawiona na DllEntryPoint przez program łączący / WEJŚCIA (Symbol punktu wejścia) opcji.To pominięcie inicjowania CRT, które normalnie byłyby zainicjować cookie zabezpieczeń globalnych tak sama biblioteka DLL musi wywołać __security_init_cookie.
// Wrong way to call __security_init_cookie
DllEntryPoint(...) {
DllInitialize();
...
__try {
...
} __except()... {
...
}
}
void DllInitialize() {
__security_init_cookie();
}
W tym przykładzie wygeneruje błąd R6035, ponieważ DllEntryPoint używa structured exception handling i dlatego używa plików cookie zabezpieczeń do wykrywania przepełnienia bufora.Do czasu, który nosi nazwę DllInitialize plik cookie zabezpieczeń globalnych już został wprowadzony na stosie.
Prawidłowy sposób wykazano w tym przykładzie:
// Correct way to call __security_init_cookie
DllEntryPoint(...) {
__security_init_cookie();
DllEntryHelper();
}
void DllEntryHelper() {
...
__try {
...
} __except()... {
...
}
}
W tym przypadku DllEntryPoint nie jest chroniony przed przepełnienia bufora (posiada żadne bufory ciąg lokalnej i nie używa structured exception handling); dlatego można bezpiecznie wywołać __security_init_cookie.Następnie wywołuje funkcję pomocnika, który jest chroniony.
[!UWAGA]
Komunikat o błędzie R6035 jest generowana tylko przez x 86 debug CRT i tylko w przypadku structured exception handling, ale warunek jest błąd na wszystkich platformach i dla wszystkich formularzy obsługi, takie jak C++ EH wyjątków.