32-битное приложение, работающее на 64-битной Windows, все еще должно быть скомпилировано с SAFESEH? - PullRequest
0 голосов
/ 09 июня 2019

32-битное приложение, работающее под WOW64 в 64-битной версии Windows, по-прежнему выигрывает от компиляции с флагом SAFESEH?

Я понимаю, что это не имеет значения для 64-битных приложений, однако я не был уверен в 32-битных приложениях в вышеуказанном контексте и не смог найти ответ во время поиска в Google.

1 Ответ

0 голосов
/ 09 июня 2019

TL; DR: Да.

/ SAFESEH действует только при связывании для целей x86. / SAFESEH не поддерживается для платформ, на которых уже отмечены обработчики исключений . Например, на x64 и ARM все обработчики исключений отмечены в PDATA

Даже при работе под WOW64 32-разрядное приложение x86 будет по-прежнему использовать регистр FS для хранения цепочки SEH, и все обычные проблемы безопасности применимы. / SAFESEH добавит таблицу обработчиков в PE-файл, который используется точно так же, как и в 32-разрядной версии Windows. SAFESEH - это функция компилятора + ОС (WinXP.SP2?), И часть Windows находится в NTDLL, а не в ядре. Если компонент ОС отсутствует (более старая версия Windows), он будет действовать как обычный SEH.

Вы также можете подумать об этом по-другому: вы не знаете заранее, собирается ли пользователь запускать ваше приложение в 32- или 64-разрядной версии Windows.

...