Выполнение инструкций RDMSR и WRMSR из кода C / C

#c #c #cpu #masm #cpu-registers

#c #c #процессор #masm #регистры процессора

Вопрос:

Мне нужно управлять конфигурацией C-State. В частности, я, вероятно, хотел бы выполнить следующий asm-код:

 __asm
{
    rdmsr
    and eax, 0x00
    or eax, 0x01
    wrmsr
}
  

В настоящее время я получил это исключение в rdmsr строке:

Необработанное исключение в 0x00e3139e в MessWithCStates.exe: 0xC0000096: Привилегированная инструкция.

Как я могу (навсегда) повысить привилегии моего приложения, чтобы оно могло выполнять приведенный выше код? Я использую VS 2010.

ПРИМЕЧАНИЕ: Это возможно без написания драйвера режима ядра. Посмотрите R / W все.

Комментарии:

1. Добро пожаловать в Stack Overflow! Несмотря на ваше ЗАМЕЧАНИЕ , я подозреваю, что это невозможно без написания драйвера режима ядра. Эта страница , похоже, подразумевает, что R / W-Everything использует драйвер.

2. Да. Не должно быть возможности вносить изменения MSR из Ring3. Теоретически это может быть атаковано несколькими способами, помимо написания драйвера, но, похоже, создание драйвера ядра (WDK) было бы самым простым способом.

3. Подобные программы встраивают драйвер в EXE, разворачивают и загружают его во время выполнения. Классический трюк SysInternals. RDMSR требует привилегий ring 0, которые получают только драйверы.

4. Я бы согласился, что это никоим образом не может быть сделано непосредственно из пользовательского режима. Для этого потребуется драйвер устройства.

5. Спасибо Алексу, Робу, qdot, Хансу и Omnifarious за интересные и точные ответы. Я собираюсь узнать больше о написании драйверов для режима ядра.

Ответ №1:

Скорее всего, вы запускаете этот код на процессоре x86 в кольце 3. У вас нет привилегий для выполнения этой команды. Точка. Это аппаратное ограничение. Единственный способ выполнить эту инструкцию — перейти в кольцо 0, и, скорее всего, ваша ОС не позволит вам этого сделать. Для выполнения этого вам нужно будет написать драйвер режима ядра.

Редактировать: http://faydoc.tripod.com/cpu/rdmsr.htm содержит дополнительную информацию.

Комментарии:

1. Спасибо, что просветили меня. Собираюсь узнать, как написать драйвер для режима ядра.