En un sistema x86, tengo un módulo de kernel de Linux ("módulo de vigilante") que recibe la notificación del kernel cada vez que se carga un módulo kernel particular ("objetivo"). Casi cualquier módulo kernel puede ser un objetivo. Uso esto en an instrumentation system en el que estoy trabajando.¿Hay alguna manera de que un módulo kernel encuentre direcciones de sección de otro módulo cargado?
Cuando el módulo del vigilante maneja tal notificación, podría ser conveniente por alguna razón, si el vigilante conocía las direcciones de las secciones ELF del módulo de destino cargado. ¿Alguna idea de cómo se puede obtener esta información en el espacio del kernel?
Por supuesto, probablemente podría obtener el contenido de los archivos apropiados en /sys/module/<target_name>/sections/
en el espacio de usuario tan pronto como se cargue el objetivo y de alguna manera pasar estos datos al módulo de observador, pero esto es demasiado torpe. Me gustaría encontrar una forma de obtener esta información directamente en el espacio del kernel.
Por lo que he visto en las fuentes del cargador de módulos, no almacena direcciones de sección en struct module
, solo crea archivos sysfs para las secciones. ¿Puede ser posible encontrar de algún modo los objetos kernel correspondientes a esos archivos y leer los datos necesarios de estos objetos? ¿O probablemente use algún otro enfoque?
Parece que el kobject contenía 'struct module' (' mkobj.kobj' field) participa en la representación del módulo en sysfs. Profundizaré en esto cuando tenga tiempo. Es posible acceder a los atributos que contienen los nombres y las direcciones de las secciones utilizando ese kobject como punto de partida. – Eugene