ラベル 関数リファレンス の投稿を表示しています。 すべての投稿を表示
ラベル 関数リファレンス の投稿を表示しています。 すべての投稿を表示

2008/12/14

BUG

[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

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