2016-05-11 3 views
0

Von Intel Software-Entwickler Handbuch 3b, lernte ich MSR (10H) gleich RDTSC kennen. Also wollte ich es mit Stück Code, um zu überprüfen, wie in meinem Programm folgt:Wie rdmsr von c-Programm zugreifen?

asm volatile("rdmsr":"=a"(lo),"=d"(hi):"c"(0x10)); 

Aber wenn ich mein Programm laufen zeigte Segmentierungsfehler. Dann erkannte ich die Warnung, dass es nur in Privilegstufe 0 funktioniert. Also starte ich das Programm erneut mit sudo access. Dieses Mal lief das Programm ohne seg-Fehler, aber die Anweisung nach asm volatile (..) wird nicht ausgeführt. Selbst wenn es nicht klappt.

Was soll ich tun, damit rdmsr in meinem Programm funktioniert? (ich benutze Linux auf i7 Kern, der diese Zähler unterstützt. Ich überprüfte es.)

Einige verwandte Beiträge sind Cannot read back from MSR und rdmsr,wrmsr from c/c++ code

+0

Privilege Level 0 ist Kernel-Modus. Es ist keine Wurzel. – immibis

Antwort

1

Sie verwirren CPU/Hardware-Berechtigungen (Beschränkungen, Befehle auszuführen, greift auf den Speicher) mit OS/Systemrechten (Betriebssystemfunktionen, Dateien usw.). Eine Root-Anwendung läuft nicht auf einer anderen CPU-Berechtigungsstufe als der Code eines normalen Benutzers. Es hat nur mehr Spielraum für Betriebssystemfunktionen.

Sie haben diese Anweisung von der OS-Kernel laufen, die typischerweise bei Ring läuft 0

+0

oh, danke @Olaf Aber eine Idee, wie man es von OS Kernel-Ebene ausführen.? – ANTHONY

+0

Um Code auf OS-Kernel-Ebene auszuführen, können Sie ein Kernel-Modul entwickeln. Linux Kernel Module laufen in Ring 0. – desowin

+0

@ANTHONY: Wie desowin schrieb: Wenn nur der Kernel in Ring 0 läuft, brauchst du anscheinend ein Kernelmodul. Beachten Sie, dass dies nicht wie ein einfaches C-Programm ist und Schäden an Hardware und Dateisystem verursachen kann, bis hin zum vollständigen Datenverlust - denn Ring 0 erlaubt Code grundsätzlich ** alles ** zu tun. – Olaf

Verwandte Themen