2013-03-21 2 views
5

Sto cercando di trovare lo spazio indirizzo del kernel in cui il mio modulo del kernel caricabile viene trasferito da insmod.Trovare l'indirizzo del kernel di un modulo kernel caricabile

Sono venuto a sapere che usando le opzioni -m, -O mentre insmod'ing il modulo, possiamo vedere solo la tabella dei simboli e gli indirizzi delle sezioni dell'eseguibile dal punto di vista del modulo e non i loro spostati indirizzi, poiché quel processo di trasferimento viene eseguito quando facciamo un insmod.

Qualcuno può dire come trovare l'indirizzo trasferito di un modulo nella memoria del kernel, l'indirizzo associato al kernel in cui risiede un modulo caricato?

Grazie!

P.S Si noti che sto utilizzando un kernel Linux Redhat 2.4 in cui l'elenco/proc/modules non mostra gli indirizzi virtuali dei moduli caricati.

risposta

7

È possibile ottenere il puntatore della sezione centrale (indirizzo virtuale, non indirizzo di memoria fisico, ma può essere convertito in indirizzo fisico) e la dimensione dell'impronta del modulo dal file/proc/modules.

Come parte del file sulla mia macchina Linux:

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

Ciao @tian_yufeng, grazie! Comunque sto usando un kernel Linux Redhat 2.4 in cui l'elenco/proc/modules non mostra l'indirizzo virtuale come modificato nella mia domanda. Sai come ottenere l'indirizzo del kernel dei moduli caricati in questo kernel 2.4? – freax

+0

2.4 kernel è un po 'fuori. Penso che le modifiche ai codici siano necessarie per supportare la funzionalità che desideri. Puoi dirmi la versione di dettaglio del tuo kernel? Quindi posso scaricarne uno per avere un assegno. –

+0

Sto usando il kernel Redhat 2.4.20-24.7 Ho trovato gli indirizzi dei moduli usando il puntatore "__this_module.next" che credo siano virtuali. Puoi dirmi come convertire questi indirizzi virtuali in indirizzi fisici? Grazie! – freax

10

Vai alla cartella /sys/module/<module-name>/sections/.text - mostrerà in cui il codice viene caricato /sys/module/<module-name>/sections/.data mostrerà la sezione dei dati e .bss per la sezione del bss modulo.

+3

Un consiglio rapido: è necessario il root per ottenere il file cat /sys/module/module-name-here/sections/.* roba da utilizzare (altrimenti visualizza solo il valore 0x0). – kaiwan

+0

@kaiwan Il tuo consiglio salva la mia giornata! – mkdong