从intel software developer manual 3b,我了解到MSR(10H)等于RDTSC。所以我想在我的程序中使用如下代码验证它:
asm volatile("rdmsr":"=a"(lo),"=d"(hi):"c"(0x10));
但是当我运行我的程序时它显示段错误。然后 a 意识到它只在特权级别 0 下工作的警告。所以我再次使用 sudo 访问运行该程序。这次程序运行时没有出现段错误,但是 asm volatile(..) 之后的语句没有被执行。即便如此也无法解决问题。
我应该怎么做才能让 rdmsr 在我的程序中工作? (我在支持这些计数器的 i7 内核上使用 linux。我验证了它。)
一些相关的帖子是Cannot read back from MSR和 rdmsr,wrmsr from c/c++ code
最佳答案
您将 CPU/硬件权限(对执行指令的限制、内存访问)与操作系统/系统权限(操作系统功能、文件等)混淆了。根应用程序不会以与普通用户代码不同的 CPU 特权级别运行。它只是有更多的操作系统功能。
您必须从通常在 ring 0 运行的操作系统内核运行该指令。
关于c - 如何从 C 程序访问 rdmsr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160329/