2013-03-21 7 views
5

Ich versuche den Kerneladressraum zu finden, in den mein ladbares Kernelmodul durch insmod verschoben wird.Ermitteln der Kerneladresse eines ladbaren Kernelmoduls

Ich kam zu wissen, dass durch die Verwendung der -m, -O-Schalter beim Modulwechsel nur die Symboltabelle und die Adressen der ausführbaren Abschnitte vom Standpunkt des Moduls aus gesehen werden können und nicht verschoben werden Adressen, da dieser Prozess der Verlagerung ausgeführt wird, wenn wir ein insmod machen.

Kann jemand sagen, wie man die verschobene Adresse eines Moduls im Kernspeicher findet, d. H. Die Adresse, die innerhalb des Kernels gebunden ist, wo sich ein geladenes Modul befindet?

Danke!

P.S Bitte beachten Sie, dass ich einen Redhat 2.4 Linux-Kernel verwende, in dem die Liste/proc/modules die virtuellen Adressen der geladenen Module nicht anzeigt.

Antwort

7

Sie können den Kernbereichszeiger (virtuelle Adresse, nicht physische Speicheradresse, kann aber in physische Adresse konvertiert werden) und die Größe des Footprints des Moduls aus der Datei/proc/modules abrufen.

Solche als Teil der Datei auf meinem Linux-Box:

autofs4 29253 3 - Live 0xf9014000 
hidp 23105 2 - Live 0xf900d000 
rfcomm 42457 0 - Live 0xf8f84000 
+0

Hallo @tian_yufeng, danke! Allerdings verwende ich einen Redhat 2.4 Linux-Kernel, in dem die/proc/modules-Liste nicht die virtuelle Adresse zeigt, die in meiner Frage bearbeitet wurde. Weißt du, wie man die Kernel-Adresse von geladenen Modulen in diesem 2.4-Kernel bekommt? – freax

+0

2.4 Kernel ist ein wenig out. Ich denke Codes müssen geändert werden, um die gewünschte Funktion zu unterstützen. Können Sie mir die Detailversion Ihres Kernels nennen? Also kann ich einen herunterladen, um einen Scheck zu bekommen. –

+0

Ich benutze Redhat 2.4.20-24.7 Kernel haben die Adressen der Module mit "__this_module.next" Zeiger, die ich glaube, sind virtuelle gefunden. Können Sie mir sagen, wie diese virtuellen Adressen in physikalische Adressen umgewandelt werden? Vielen Dank! – freax

10

in das Verzeichnis gehen /sys/module/<module-name>/sections/.text - wird zeigen, wo der Code geladen wird /sys/module/<module-name>/sections/.data den Datenabschnitt und .bss für den bss Abschnitt der Show Modul.

+3

Ein kurzer Tipp: Sie benötigen root, um die cat /sys/module/module-name-here/sections/.* Zeug zu arbeiten .. (sonst zeigt es nur den Wert 0x0). – kaiwan

+0

@kaiwan Ihr Tipp rettet meinen Tag! – mkdong

Verwandte Themen