【问题标题】:Execute RDMSR and WRMSR instructions from C/C++ code从 C/C++ 代码执行 RDMSR 和 WRMSR 指令
【发布时间】:2011-08-18 01:27:56
【问题描述】:

我需要控制 C-State 配置。具体来说,我可能想执行以下 asm 代码:​​

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

目前,我在rdmsr 行收到此异常:

MessWithCStates.exe 中 0x00e3139e 处未处理的异常:0xC0000096:特权指令。

我如何(永久)提升我的应用程序的权限,以便它可以执行上面的代码?我使用 VS 2010。

注意:无需编写内核模式驱动程序即可。请参阅R/W Everything

【问题讨论】:

  • 欢迎来到 Stack Overflow!尽管您有注意,但我怀疑如果不编写内核模式驱动程序,这是不可能的。 This page 似乎暗示 R/W-Everything 使用驱动程序。
  • 是的。应该不可能在 Ring3 内进行 MSR 更改。从理论上讲,除了编写驱动程序之外,它还可以通过多种方式受到攻击 - 但似乎创建内核驱动程序 (WDK) 将是最简单的方法。
  • 这样的程序将驱动程序嵌入到 EXE 中,在运行时扩展和加载它。经典 SysInternals 的把戏。 RDMSR 需要 ring 0 权限,只有驱动程序才能获得。
  • 我同意这不能以任何方式直接从用户模式完成。这将需要设备驱动程序。
  • 感谢 Alex、Rob、qdot、Hans ans Omnifarious 提供有趣且准确的回复。我将学习更多关于编写内核模式驱动程序的知识。

标签: c++ c cpu masm cpu-registers


【解决方案1】:

很有可能,您正在环 3 内的 x86 处理器上运行此代码。您没有执行此命令的权限。时期。这是硬件限制。执行该指令的唯一方法是进入 Ring 0,很可能,您的操作系统不会让您这样做。您需要编写内核模式驱动程序来完成此操作。

编辑http://faydoc.tripod.com/cpu/rdmsr.htm 有更多信息。

【讨论】:

  • 感谢您的启发。将学习如何编写内核模式驱动程序。
猜你喜欢
  • 2014-12-07
  • 2017-03-01
  • 1970-01-01
  • 2019-11-08
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多