Su un sistema x86, ho un modulo del kernel Linux ("modulo watcher") che viene notificato dal kernel ogni volta che viene caricato un particolare modulo del kernel ("target"). Quasi tutti i moduli del kernel possono essere un bersaglio. Lo uso in an instrumentation system su cui sto lavorando.Esiste un modo per un modulo del kernel per trovare gli indirizzi di sezione di un altro modulo caricato?
Quando il modulo Watcher gestisce tale notifica, potrebbe essere conveniente per qualche motivo, se l'osservatore conosceva gli indirizzi delle sezioni ELF del modulo di destinazione caricato. Qualche idea su come ottenere queste informazioni nello spazio del kernel?
Ovviamente potrei ottenere il contenuto dei file appropriati in /sys/module/<target_name>/sections/
nello spazio utente non appena il target viene caricato e quindi in qualche modo passare questi dati al modulo watcher ma questo è troppo maldestro. Mi piacerebbe trovare un modo per ottenere queste informazioni direttamente nello spazio del kernel.
Per quanto ho visto nei sorgenti del caricatore di moduli, non memorizza gli indirizzi di sezione in struct module
, crea solo file sysfs per le sezioni. Può essere possibile trovare in qualche modo gli oggetti del kernel corrispondenti a quei file e leggere i dati necessari da questi oggetti? O probabilmente usi qualche altro approccio?
Sembra che il kobject contenuto in 'struct module' (' mkobj.campo kobj') è coinvolto nella rappresentazione del modulo in sysfs. Approfondirò ulteriormente quando avrò tempo. Potrebbe essere possibile ottenere gli attributi contenenti i nomi e gli indirizzi delle sezioni usando quel kobject come punto di partenza. – Eugene