Celem ochrony Bezpieczna strukturalna obsługa wyjątków (SafeSEH) jest zapobieganie nadpisywaniu i używaniu struktur SEH przechowywanych na stosie. Jeśli program jest kompilowany i linkowany z opcją linkera /SafeSEH, nagłówek tego pliku binarnego będzie zawierał tabelę wszystkich prawidłowych obsługi wyjątków; tabela ta będzie sprawdzana, gdy zostanie wywołana obsługa wyjątków, aby upewnić się, że znajduje się ona na liście. Sprawdzanie jest wykonywane jako część procedury RtlDispatchException w ntdll.dll, która wykonuje następujące testy:
- Zapewnia, że rekord wyjątku znajduje się na stosie bieżącego wątku.
- Zapewnia, że wskaźnik obsługi nie wskazuje z powrotem na stos.
- Zapewnia, że obsługa jest zarejestrowana na autoryzowanej liście obsługi.
- Zapewnia, że obsługa znajduje się w obrazie pamięci, który jest wykonywalny.
Jak widać, mechanizm ochrony SafeSEH podejmuje kroki w celu ochrony obsługi wyjątków, ale jak zaraz zobaczysz, nie jest on niezawodny.