W systemie x86 mam moduł jądra Linux ("moduł obserwatora"), który otrzymuje powiadomienie przez jądro za każdym razem, gdy ładowany jest konkretny moduł jądra ("cel"). Prawie każdy moduł jądra może być celem. Używam tego w an instrumentation system Nad którym pracuję.Czy istnieje sposób, aby moduł jądra znajdował adresy sekcji innego załadowanego modułu?
Gdy moduł obserwatora obsługuje takie powiadomienie, może być wygodny z jakiegoś powodu, jeśli obserwator zna adresy sekcji ELF załadowanego modułu docelowego. Jakieś pomysły, w jaki sposób można uzyskać te informacje w przestrzeni jądra?
Oczywiście prawdopodobnie mógłbym pobrać zawartość odpowiednich plików w /sys/module/<target_name>/sections/
w przestrzeni użytkownika zaraz po załadowaniu celu, a następnie jakoś przekazać te dane do modułu obserwatora, ale jest to zbyt niezdarne. Chciałbym znaleźć sposób na uzyskanie tej informacji bezpośrednio w przestrzeni jądra.
O ile widziałem w źródłach modułu ładującego moduł, nie zapisuje on adresów sekcji w struct module
, tylko tworzy pliki sysfs dla sekcji. Być może jest możliwe, aby znaleźć obiekty jądra odpowiadające tym plikom i odczytać potrzebne dane z tych obiektów? A może użyjesz innego podejścia?
Wygląda na to, że kobject zawarty w 'module struct' (' mkobj.kobj' field) uczestniczy w reprezentacji modułu w sysfs. Pogłębię to jeszcze bardziej, gdy będę mieć czas. Możliwe jest uzyskanie atrybutów zawierających nazwy i adresy sekcji używających tego kobject jako punktu wyjścia. – Eugene