1
我使用以下代碼讀取msr,但運行時崩潰。我不知道爲什麼。我使用內聯彙編代碼編寫c代碼來讀取msr,但失敗
#include <stdio.h>
#include <stdlib.h>
int main()
{
register long ecx asm("%ecx");
register long eax asm("%eax");
register long edx asm("%edx");
asm("mov %1, %0":"=r"(ecx):"i"(0x1B0));
asm("rdmsr");
/*
asm("xor %1, %0":"+r"(eax):"r"(eax));
asm("xor %1, %0":"+r"(edx):"r"(edx));
asm("mov %1, %0":"=r"(eax):"i"(0x01));
printf("%ld %ld %ld",ecx,eax,edx);
*/
}
rdmsr的[docs](http://www.felixcloutier.com/x86/RDMSR.html)表示'該指令必須在特權級別0執行。換句話說:您必須是設備驅動程序或內核的一部分。 –
這意味着我無法通過我的代碼修改msr值?但有一個名爲RWEverything的工具可以做到這一點,你知道它是如何工作的嗎?感謝您的回答! –
[從C/C++代碼執行RDMSR和WRMSR指令]可能重複(https://stackoverflow.com/questions/5875778/execute-rdmsr-and-wrmsr-instructions-from-cc-code) –