Machine-Specific Register
Diese Seite ist ein Artikel, welcher mehr haben könnte.. Wenn du mehr darüber weißt oder recherchieren willst, bist du aufgerufen, dies zu tun. Wenn du dir in einer Sache nicht sicher bist, dann stell es auf die Diskussionsseite. |
Die Machine-Specific Registers bzw. Model-Specific Registers (MSR) sind Prozessorregister. Sie können im Gegensatz zu anderen Registern nur mit den Instruktionen rdmsr und wrmsr (x86 und x86-64) angesprochen werden. Außerdem sind diese Register spezifisch für eine bestimmte Prozessorfamilie/-generation, d.h. sie müssen von folgenden Prozessoren nicht bzw. nicht genauso implementiert werden.
Ob eine bestimmte CPU MSRs besitzt und somit die Befehle rdmsr und wrmsr ohne Exception ausführt, kann per CPUID herausgefunden werden. Ist nach einem cpuid-Befehl mit EAX = 0x00000001 in EDX Bit 5 gestzt, dann werden diese Instruktionen unterstützt (s. auch EDX - Featureflags im CPUID-Artikel).
WRMSR/RDMSR
Mit folgendem Code kann man auf die MSRs zugreifen: <c>uint64_t rdmsr(uint32_t msr) {
uint32_t low, high;
__asm__ __volatile__ ("rdmsr" : "=a" (low), "=d" (high) : "c" (msr));
return ((uint64_t)high << 32) | low;
}
void wrmsr(uint32_t msr,
uint64_t value)
{
uint32_t low = value & 0xFFFFFFFF; uint32_t high = value >> 32;
__asm__ __volatile__ ("wrmsr" :: "a"(low), "c"(msr), "d"(high));
}</c>
Auswahl einiger MSRs
Nummer | Name | Inhalt |
---|---|---|
0x1B | IA32_APIC_BASE_MSR | Basisadresse des Local-APIC |
0x174 | IA32_SYSENTER_CS | CS für SYSENTER |
0x175 | IA32_SYSENTER_ESP | ESP für SYSENTER |
0x176 | IA32_SYSENTER_EIP | EIP für SYSENTER |
0xC0000080 | IA32_EFER | Erweiterte Features. Beispiele: Bit 0 - Aktiviert syscall/sysret im 64-Bit-Modus; Bit 8 - Schaltet den Long Mode ein |
0xC0000081 | STAR | EIP für SYSCALL im Protected Mode |
0xC0000082 | LSTAR | RIP für SYSCALL im Long Mode |
0xC0000083 | CSTAR | RIP für SYSCALL im Compability Mode |
Weblinks
- http://www.intel.com/Assets/PDF/manual/253669.pdf - "Intel Architectures Software Developer's Manual Volume 3B: System Programming Guide" - Anhang B