Spec-Zone.ru › GCC 10

Предыдущее: x86 Транзакционная память Intrinsics, Вверх: Встроенные функции, специфичные для конкретных целевых машин [Оглавление][Индекс]

6.60.37 x86 Intrinsics Защиты потока управления ¶

Функция CET: ret_type _get_ssp (void) ¶

Получить текущее значение указателя стека тени, если поддержка стека тени от Intel CET включена в оборудовании или 0 в противном случае. ret_type составляет unsigned long long для 64-битных целевых платформ и unsigned int для 32-битных целевых платформ.

Функция CET: void _inc_ssp (unsigned int) ¶

Увеличить текущий указатель стека тени на размер, указанный аргументом функции. Аргумент маскируется до значения байта по соображениям безопасности, поэтому для увеличения более чем на 255 байт необходимо вызывать функцию несколько раз.

Код разматывания стека тени выглядит следующим образом:

#include <immintrin.h>

/* Unwind the shadow stack for EH.  */
#define _Unwind_Frames_Extra(x)       \
  do                                  \
    {                                \
      _Unwind_Word ssp = _get_ssp (); \
      if (ssp != 0)                   \
        {                            \
          _Unwind_Word tmp = (x);     \
          while (tmp > 255)           \
            {                        \
              _inc_ssp (tmp);         \
              tmp -= 255;             \
            }                        \
          _inc_ssp (tmp);             \
        }                            \
    }                                \
    while (0)

Этот код выполняется безусловно на всех 64-битных процессорах. Для 32-битных процессоров код выполняется на тех, которые поддерживают многобайтовые инструкции NOP.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/x86-control-flow-protection-intrinsics.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API