/SAFESEH (Obraz ma bezpieczną obsługę wyjątków)
/SAFESEH[:NO]
Kiedy opcja /SAFESEH jest określona, konsolidator generuje obraz tylko, jeśli może utworzyć również tabelę bezpiecznej obsługi wyjątków obrazu.Ta tabela określa dla systemu operacyjnego, które programy obsługi wyjątków są prawidłowe dla obrazu.
/SAFESEH jest prawidłowy tylko podczas łączenia do elementów docelowych architektury x86./SAFESEH nie jest obsługiwany na platformach, które mają już zapisaną procedurę obsługi wyjątków.Na przykład, na x64 i ARM, wszystkie obsługi wyjątków są zapisane w PDATA.ML64.exe obsługuje dodawanie adnotacji, które emitują informację strukturalnej obsługi wyjątków (XDATA i PDATA) do obrazu, pozwalając na odpoczynek, dzięki funkcji ml64.Aby uzyskać więcej informacji, zobacz MASM dla wersji x64 (ml64.exe).
Jeśli /SAFESEH nie zostanie określona, program łączący wyprodukuje obraz z tabeli obsługi bezpiecznych wyjątków, jeśli wszystkie moduły są zgodne z funkcją obsługi wyjątków bezpiecznych.Jeśli wszystkie moduły nie były zgodne z funkcją obsługi bezpiecznych wyjątków, obraz wynikowy nie będzie zawierać tabeli obsługi bezpiecznych wyjątków.Jeśli /SUBSYSTEM określa WINDOWSCE lub jedną z opcji EFI_ * konsolidator nie będzie próbował utworzyć obrazu z tabeli obsługi wyjątków bezpiecznych, ponieważ żaden z tych podsystemów, nie może wykorzystać informacji.
Jeśli /SAFESEH:NO nie zostanie określony, konsolidator nie wyprodukuje obrazu z tabeli obsługi bezpiecznych wyjątków, jeśli wszystkie moduły są zgodne z funkcją obsługi wyjątków bezpiecznych.
Najczęstszą przyczyną, dla której konsolidator nie może wyprodukować obrazu, jest brak zgodności z funkcją obsługi bezpiecznych wyjątków z konsolidatorem, przez jeden lub więcej plików wejściowych (modułów).Częstą przyczyną niezgodności modułu z obsługą bezpiecznych wyjątków jest utworzenie modułu, przy użyciu kompilatora poprzednich wersji programu Visual C++.
Funkcję można zarejestrować jako obsługę wyjątków strukturalnych, za pomocą .SAFESEH.
Nie istnieje możliwość oznaczenia istniejących danych binarnych jako posiadające obsługę wyjątków bezpiecznych (lub brak obsługi wyjątków); informację na temat obsługi wyjątków bezpiecznych muszą zostać dodane w czasie kompilacji.
Konsolidator posiada możliwość utworzenia tabeli obsługi bezpiecznych wyjątków zależnych od aplikacji, przy użyciu biblioteki środowiska uruchomieniowego C.Jeśli łączysz się z /NODEFAULTLIB i chcesz uzyskać tabelę obsługi wyjątków bezpiecznych, konieczne jest podanie ustawień obciążeń struct (można je znaleźć w pliku źródłowym loadcfg.c CRT), który zawiera wszystkie wpisy, które są zdefiniowane dla Visual C++.Na przykład:
#include <windows.h>
extern DWORD_PTR __security_cookie; /* /GS security cookie */
/*
* The following two names are automatically created by the linker for any
* image that has the safe exception table present.
*/
extern PVOID __safe_se_handler_table[]; /* base of safe handler entry table */
extern BYTE __safe_se_handler_count; /* absolute symbol whose address is
the count of table entries */
typedef struct {
DWORD Size;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD GlobalFlagsClear;
DWORD GlobalFlagsSet;
DWORD CriticalSectionDefaultTimeout;
DWORD DeCommitFreeBlockThreshold;
DWORD DeCommitTotalFreeThreshold;
DWORD LockPrefixTable; // VA
DWORD MaximumAllocationSize;
DWORD VirtualMemoryThreshold;
DWORD ProcessHeapFlags;
DWORD ProcessAffinityMask;
WORD CSDVersion;
WORD Reserved1;
DWORD EditList; // VA
DWORD_PTR *SecurityCookie;
PVOID *SEHandlerTable;
DWORD SEHandlerCount;
} IMAGE_LOAD_CONFIG_DIRECTORY32_2;
const IMAGE_LOAD_CONFIG_DIRECTORY32_2 _load_config_used = {
sizeof(IMAGE_LOAD_CONFIG_DIRECTORY32_2),
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&__security_cookie,
__safe_se_handler_table,
(DWORD)(DWORD_PTR) &__safe_se_handler_count
};
Aby ustawić opcję konsolidatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu.Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie właściwości projektu programu Visual C++.
Wybierz folder Konsolidator.
Wybierz stronę właściwości Wiersz polecenia.
Wprowadź opcje do pola Dodatkowe opcje.
Aby programowo ustawić opcję konsolidatora
- Zobacz AdditionalOptions.