Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Регистр управления представляет собой регистр процессора , который изменяет или контролирует общее поведение процессора или другого цифрового устройства. Общие задачи, выполняемые регистрами управления, включают управление прерываниями , переключение режима адресации , управление поисковым вызовом и управление сопроцессором .
Регистры управления в серии x86 [ править ]
CR0 [ править ]
Регистр CR0 имеет длину 32 бита на процессорах 386 и выше. На процессорах x64 в длинном режиме он (и другие регистры управления) имеет длину 64 бита. CR0 имеет различные управляющие флаги, которые изменяют базовую работу процессора.
Кусочек | Имя | Полное имя | Описание |
---|---|---|---|
0 | PE | Защищенный режим Включить | Если 1, система находится в защищенном режиме , иначе система в реальном режиме |
1 | Депутат | Сопроцессор монитора | Управляет взаимодействием инструкций WAIT / FWAIT с флагом TS в CR0 |
2 | ЭМ | Эмуляция | Если установлено, модуль с плавающей запятой x87 отсутствует, если сброшен, присутствует FPU x87 |
3 | TS | Задача переключена | Позволяет сохранять контекст задачи x87 при переключении задачи только после использования инструкции x87 |
4 | ET | Тип расширения | На 386 он позволял указать, какой внешний математический сопроцессор был 80287 или 80387. |
5 | NE | Числовая ошибка | Включите внутренний отчет об ошибках x87 с плавающей запятой, если он установлен, иначе включает обнаружение ошибок x87 в стиле ПК |
16 | WP | Защита от записи | Когда установлено, ЦП не может писать на страницы, доступные только для чтения, когда уровень привилегий равен 0. |
18 | ЯВЛЯЮСЬ | Маска выравнивания | Проверка выравнивания включена, если установлен AM, установлен флаг AC (в регистре EFLAGS ) и уровень привилегий равен 3 |
29 | NW | Не писать через | Глобально включает / отключает кеширование со сквозной записью |
30 | CD | Кеш отключен | Глобально включает / отключает кеш памяти |
31 год | PG | Пейджинг | Если 1, включите пейджинг и используйте регистр CR3 , иначе отключите пейджинг. |
CR1 [ править ]
Зарезервировано, ЦП выдаст исключение # UD при попытке доступа к нему.
CR2 [ править ]
Содержит значение, называемое линейным адресом ошибки страницы (PFLA). Когда происходит сбой страницы, адрес, к которому программа пыталась получить доступ, сохраняется в регистре CR2.
CR3 [ править ]
Используется, когда включена виртуальная адресация , следовательно, когда бит PG установлен в CR0. CR3 позволяет процессору преобразовывать линейные адреса в физические адреса, находя каталог страниц и таблицы страниц для текущей задачи. Как правило, старшие 20 бит CR3 становятся базовым регистром каталога страниц (PDBR), в котором хранится физический адрес записи каталога первой страницы. Если бит PCIDE в CR4 установлен, младшие 12 битов используются для идентификатора контекста процесса (PCID). [1]
CR4 [ править ]
Используется в защищенном режиме для управления такими операциями, как поддержка virtual-8086, включение точек останова ввода-вывода, увеличение размера страницы и исключения машинной проверки .
Кусочек | Имя | Полное имя | Описание |
---|---|---|---|
0 | VME | Расширения виртуального режима 8086 | Если установлен, включает поддержку флага виртуального прерывания (VIF) в режиме virtual-8086. |
1 | ПВИ | Виртуальные прерывания в защищенном режиме | Если установлен, включает поддержку флага виртуального прерывания (VIF) в защищенном режиме. |
2 | TSD | Time Stamp Disable | Если установлено, инструкция RDTSC может выполняться только в кольце 0 , в противном случае RDTSC может использоваться на любом уровне привилегий. |
3 | DE | Отладка расширений | Если установлен, включает прерывания на основе регистра отладки при доступе к пространству ввода-вывода . |
4 | PSE | Расширение размера страницы | Если не задано, размер страницы составляет 4 КиБ, в противном случае размер страницы увеличивается до 4 МБ. Если PAE включен или процессор работает в длинном режиме x86-64, этот бит игнорируется. [2] |
5 | PAE | Расширение физического адреса | Если установлено, изменяет макет таблицы страниц для преобразования 32-битных виртуальных адресов в расширенные 36-битные физические адреса. |
6 | MCE | Исключение проверки машины | Если установлено, разрешает прерывание проверки машины. |
7 | PGE | Страница Global Enabled | Если установлено, преобразования адресов (записи PDE или PTE) могут совместно использоваться между адресными пространствами. |
8 | PCE | Включить счетчик мониторинга производительности | Если установлено, RDPMC может выполняться на любом уровне привилегий, иначе RDPMC можно использовать только в кольце 0. |
9 | OSFXSR | Поддержка операционной системой инструкций FXSAVE и FXRSTOR | Если установлено, включает инструкции Streaming SIMD Extensions (SSE) и быстрое сохранение и восстановление FPU. |
10 | OSXMMEXCPT | Поддержка операционной системой немаскированных исключений с плавающей запятой SIMD | Если установлено, включает немаскированные исключения SSE. |
11 | UMIP | Предотвращение инструкций в пользовательском режиме | Если установлено, инструкции SGDT, SIDT, SLDT, SMSW и STR не могут быть выполнены, если CPL> 0. [1] |
12 | LA57 | (не указано) | Если установлено, включает 5-уровневую подкачку. [3] |
13 | VMXE | Расширения виртуальных машин включить | см. виртуализацию Intel VT- x86 . |
14 | SMXE | Включены расширения безопасного режима | см. Trusted Execution Technology (TXT) |
16 | FSGSBASE | Включает инструкции RDFSBASE, RDGSBASE, WRFSBASE и WRGSBASE. | |
17 | PCIDE | PCID Включить | Если установлено, включает идентификаторы контекста процесса (PCID). |
18 | OSXSAVE | XSAVE и расширенные состояния процессора включены | |
20 | SMEP [4] | Включение защиты выполнения в режиме супервизора | Если установлено, выполнение кода в вышестоящем кольце вызывает ошибку . |
21 год | SMAP | Включить предотвращение доступа в режиме супервизора | Если установлено, доступ к данным в вышестоящем кольце вызывает ошибку . [5] |
22 | PKE | Ключ защиты включить | См. Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32. |
CR5-7 [ править ]
Зарезервировано, тот же случай, что и CR1.
Дополнительные регистры управления в серии x86-64 [ править ]
ЭФЕР [ править ]
Регистр включения расширенных функций (EFER) - это регистр для конкретной модели, добавляемый в процессор AMD K6 , чтобы разрешить включение инструкции SYSCALL / SYSRET, а затем для входа и выхода из длительного режима . Этот регистр становится архитектурным в AMD64 и принят Intel как IA32_EFER. Его номер MSR - 0xC0000080.
Кусочек | Цель |
---|---|
0 | SCE (расширения системных вызовов) |
1 | DPE (только AMD K6: включение предварительной выборки данных) |
2 | SEWBED (только AMD K6: отключение спекулятивного EWBE #) |
3 | GEWBED (только AMD K6: глобальное отключение EWBE #) |
4 | L2D (только AMD K6: отключение кэша L2) |
5-7 | Зарезервировано, читается как ноль |
8 | LME (включение длительного режима) |
9 | Зарезервированный |
10 | LMA (активный длинный режим) |
11 | NXE ( разрешение отсутствия выполнения ) |
12 | SVME (включение защищенной виртуальной машины ) |
13 | LMSLE (включение ограничения сегмента в длинном режиме) |
14 | FFXSR (Fast FXSAVE / FXRSTOR) |
15 | TCE (расширение кэша переводов) |
16–63 | Зарезервированный |
CR8 [ править ]
CR8 - это новый регистр, доступный в 64-битном режиме с использованием префикса REX. CR8 используется для определения приоритета внешних прерываний и называется регистром приоритета задач (TPR). [2]
Архитектура AMD64 позволяет программному обеспечению определять до 15 классов приоритета внешних прерываний. Классы приоритета пронумерованы от 1 до 15, причем класс приоритета 1 является самым низким, а класс приоритета 15 - самым высоким. CR8 использует четыре младших бита для определения приоритета задачи, а оставшиеся 60 бит зарезервированы и должны быть записаны с нулями.
Системное программное обеспечение может использовать регистр TPR, чтобы временно блокировать прерывания с низким приоритетом от прерывания задачи с высоким приоритетом. Это достигается путем загрузки TPR со значением, соответствующим прерыванию с наивысшим приоритетом, которое должно быть заблокировано. Например, загрузка TPR со значением 9 (1001b) блокирует все прерывания с классом приоритета 9 или меньше, в то же время позволяя распознавать все прерывания с классом приоритета 10 или более. Загрузка TPR с 0 разрешает все внешние прерывания. Загрузка TPR с 15 (1111b) отключает все внешние прерывания.
При сбросе TPR сбрасывается на 0.
XCR0 и XSS [ править ]
XCR0 или расширенный контрольный регистр 0 - это контрольный регистр, который используется для переключения хранения или загрузки регистров, связанных с конкретными функциями ЦП, с помощью инструкций XSAVE / XRSTOR. Он также используется с некоторыми функциями для включения или отключения способности процессора выполнять соответствующие инструкции. Доступ к нему можно получить с помощью привилегированных инструкций XSETBV и непривилегированных XGETBV. [6]
Кусочек | Цель |
---|---|
0 | X87 (x87 FPU / MMX State, примечание, должно быть '1') |
1 | SSE (включение набора функций XSAVE для регистров MXCSR и XMM) |
2 | AVX (включение AVX и набор функций XSAVE можно использовать для управления регистрами YMM) |
3 | BNDREG (включение MPX и набор функций XSAVE могут использоваться для регистров BND) |
4 | BNDCSR (включение MPX и набор функций XSAVE могут использоваться для регистров BNDCFGU и BNDSTATUS) |
5 | opmask (включение AVX-512 и набор функций XSAVE можно использовать для opmask AVX, AKA k-mask, regs) |
6 | ZMM_hi256 (включение AVX-512 и набор функций XSAVE можно использовать для верхних половин нижних регистров ZMM) |
7 | Hi16_ZMM (включение AVX-512 и набор функций XSAVE можно использовать для верхних регистров ZMM) |
8 | Зарезервированный |
9 | PKRU (набор функций XSAVE может использоваться для регистра PKRU, который является частью механизма ключей защиты .) |
10 | Зарезервировано (должно быть "0") |
11 | Состояние пользователя Control-Flow Enforcement Technology (CET) |
12 | Состояние супервизора Control-Flow Enforcement Technology (CET) |
13 | XAAD (вспомогательная функция обнаружения асинхронных аномалий для включения тостера анклава [7] для криптографических подпрограмм.) |
14–63 | Зарезервировано (должно быть "0") |
Также есть IA32_XSS MSR, который находится по адресу 0DA0h. IA32_XSS MSR управляет битами XCR0, которые считаются состоянием «супервизора» и должны быть невидимы для обычных программ. Он работает с привилегированными инструкциями XSAVES и XRSTORS, добавляя состояние супервизора к данным, с которыми они работают. Проще говоря, если состояние X87 было включено в XCR0, а состояние PT было включено в IA32_XSS, инструкция XSAVE сохраняла бы только состояние X87, в то время как привилегированный XSAVES сохранял бы состояния X87 и PT. Поскольку это MSR, к нему можно получить доступ с помощью инструкций RDMSR и WRMSR.
Кусочек | Цель |
---|---|
0–7 | Зарезервированный; должно быть 0. |
8 | PT (позволяет сохранять и загружать девять MSR трассировки процессора.) |
9–12 | Зарезервированный; должно быть 0. |
13 | HDC (позволяет сохранять и загружать MSR IA32_PM_CTL1.) |
14–63 | Зарезервированный; должно быть 0. |
См. Также [ править ]
В Wikibooks есть книга по теме: Сборка X86 / Защищенный режим |
- Реестр общего назначения
- Регистр испытаний
- Реестр для конкретной модели
- Регистр отладки
- Байт флага
- Регистр статуса
Ссылки [ править ]
- ^ a b Корпорация Intel (2016 г.). «4.10.1 Идентификаторы контекста процесса (PCID)». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . Том 3A: Руководство по системному программированию, часть 1.
- ^ a b "Руководство программиста по архитектуре AMD64, том 2: Системное программирование" (PDF) . AMD . Сентябрь 2012. с. 127 и 130 . Проверено 4 августа 2017 .
- ^ «5-уровневый пейджинг и 5-уровневый EPT» (PDF) . Intel . Май 2017. с. 16 . Проверено 23 января 2018 .
- ↑ Фишер, Стивен (21 сентября 2011 г.). «Защита выполнения в режиме супервизора» (PDF) . NSA Trusted Computing Conference 2011 . National Conference Services, Inc. Архивировано из оригинального (PDF) 03.08.2016 . Проверено 4 августа 2017 .
- ^ Anvin, H. Peter (2012-09-21). «x86: Предотвращение доступа в режиме супервизора» . LWN.net . Проверено 4 августа 2017 .
- ^ «Глава 13, Управление состоянием с помощью набора функций Xsave» (PDF) . Руководство разработчика программного обеспечения для архитектур Intel (R) 64 и IA-32, том 1: Базовая архитектура . Корпорация Intel (2019) . Проверено 23 марта 2019 года .
- ^ https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/storing_keys_in_the_secure_enclave
Внешние ссылки [ править ]
- Руководство разработчика архитектур Intel 64 и IA-32: Vol. 3А
- Руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32
- Техническая документация: AMD64
- Мир Вятта: взлом Pentium III (28 мая 1999 г.)