1
msrを読み取るのに次のコードを使用しますが、実行中にクラッシュしました。どうしてか分かりません。msrを読み取るためにインラインアセンブリコードを使用してCコードを書き込みましたが、失敗しました
#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の値を変更できないことを意味しますか?しかし、RWEという名前のツールがあります。どのように動作するのか知っていますか?ご回答有難うございます! –
[C/C++コードからRDMSR命令とWRMSR命令を実行する]の可能な複製(https://stackoverflow.com/questions/5875778/execute-rdmsr-and-wrmsr-instructions-from-cc-code) –