Skip to content
Nullum-IdeaPublic
forked from osmhpi/rdmsr

About

Ein Programmrahmen zur Untersuchung von privilegierten Instruktionen im User- und Kernelmode

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

OSM RDMSR playground

--

Ein einfacher Programmrahmen. Ihnen zur Hilfe um Ihren Tutoren die Unterschiede zwischen Kernel- und Usermode zu demonstrieren (auf Linux 3+).

In rdmsr.h ist ein direkter Aufruf der privilegierten x86_64-Instruktion Read Model Specific Register mithilfe von Inline-Assembler vordefiniert. Dort finden Sie auch einige Beispiele für interessante Registernummern, die Sie mithilfe von __assembly_rdmsr auslesen können und Wege um die Ergebnisse zu prüfen.

Es müssen die Kernel-Header, ein C-Compiler und make installiert sein. Auf Debian-basierenden Linux-Distributionen hierzu folgendes ausführen:

sudo apt-get install build-essential linux-headers-`uname -r`

Beim Aufruf von make werden folgende Dateien erzeugt:

  • user_rdmsr: Ein im Userspace ausführbares Programm.
  • kernel_rdmsr.ko: Ein nachladbares Kernelmodul (vergleichbar mit einem Gerätetreiber).

Sicherheitshinweise

Damit das Kernelmodul gebaut werden kann, darf der Pfad zu Ihrem Quelltext keine Leer- oder Sonderzeichen enthalten.

Caution

Führen Sie Ihren Kernelcode nicht auf Ihrem Produktivsystem aus. Nutzen Sie lieber eine VM!

Moderne Linux-Systeme versuchen einfache Fehler (Oops) abzufangen. Sie können dies (temporär) deaktivieren:

sudo sh -c 'echo 1 > /proc/sys/kernel/panic_on_oops'

Cheat-Sheet

Kommando Bedeutung
sudo insmod kernel_rdmsr.ko Kernelmodul laden
sudo rmmod kernel_rdmsr Kernelmodul entfernen (ohne .ko!)
lsmod Geladene Kernelmodule auflisten
dmesg Kernelausgaben anzeigen (z.B. printk)
sudo dmesg -c Neue Ausgaben seit dem letzten -c Aufruf zeigen
make CFLAGS=-g clean user_rdmsr Debugsymbole für gdb einfügen (Userspace)

Ergebnis

Kernel Mode:

[ 2847.523440] Hello, kernel space!
[ 2847.523921] value at 139 = 1005022347264
[ 2847.524430] value at 3221225603 = 0
[ 2847.524874] value at 16 = 8820310975045
[ 2849.530066] Goodbye, kernel space!

User Mode:

Programm bricht mit "Segmentation fault" ab.

[ 2852.578787] traps: user_rdmsr[10373] general protection fault ip:560a59ff5158 sp:7ffde488e150 error:0 in user_rdmsr[1158,560a59ff5000+1000]

About

Ein Programmrahmen zur Untersuchung von privilegierten Instruktionen im User- und Kernelmode

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages