[BUG]
(i386の場合)ud2命令を実行し,未定義命令例外を発生させる.
[BUG_ON]
真ならBUGを呼ぶ(パニックで落ちる).
【参考】
Omicron Linux-カーネルハッキング入門
アジアのペンギン アセンブラの勉強方法 3
2008/12/11
RDMSR / WRMSR
// RDMSR
ECXで指定したアドレスのMSRを読み込む.
読み込んだデータはEDX:EAXに格納される.
特権レベル0でのみ実行可能.
(ex)
unsigned low, high;
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));
// WRMSR
ECXで指定したアドレスのMSRにEDX:EAXを書き込む.
特権レベル0でのみ実行可能.
(ex)
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");
// Reference
wrmsr()/linux2.6 - LinuxKernelHackJapan
rdmsr()/linux2.6 - LinuxKernelHackJapan
ECXで指定したアドレスのMSRを読み込む.
読み込んだデータはEDX:EAXに格納される.
特権レベル0でのみ実行可能.
(ex)
unsigned low, high;
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));
// WRMSR
ECXで指定したアドレスのMSRにEDX:EAXを書き込む.
特権レベル0でのみ実行可能.
(ex)
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");
// Reference
wrmsr()/linux2.6 - LinuxKernelHackJapan
rdmsr()/linux2.6 - LinuxKernelHackJapan
2008/11/30
CPUID
【命令】
[引数]
EAX:
[返値]
EAX, EBX, ECX, EDX:
※
引数の値によって取得できるCPU情報が変わる.
詳しくはintel manual vol.2AのCPUIDの項を参照.
【補足】
linuxではCPUIDから抽出した情報を出力するcpuinfoがある.
# cat /proc/cpuinfo
【例】
unsigned int a, b, c, d;
asm volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(0));
【参考資料】
Intel® 64 and IA-32 Architectures Software Developer's Manuals
sandpile.org -- IA-32 architecture -- CPUID
LHR-proc-cpuinfo - SyncHack
/proc/cpuinfoの中身 [備忘録]
CPUID - Wikipedia
[引数]
EAX:
[返値]
EAX, EBX, ECX, EDX:
※
引数の値によって取得できるCPU情報が変わる.
詳しくはintel manual vol.2AのCPUIDの項を参照.
【補足】
linuxではCPUIDから抽出した情報を出力するcpuinfoがある.
# cat /proc/cpuinfo
【例】
unsigned int a, b, c, d;
asm volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(0));
【参考資料】
Intel® 64 and IA-32 Architectures Software Developer's Manuals
sandpile.org -- IA-32 architecture -- CPUID
LHR-proc-cpuinfo - SyncHack
/proc/cpuinfoの中身 [備忘録]
CPUID - Wikipedia
登録:
投稿 (Atom)