Mapa systemu
W systemie Linux plik System.map jest tablicą symboli używaną przez jądro .
Tablica symboli to wyszukiwanie między nazwami symboli a ich adresami w pamięci. Nazwą symbolu może być nazwa zmiennej lub nazwa funkcji. System.map jest wymagany, gdy potrzebny jest adres nazwy symbolu lub nazwa symbolu adresu. Jest to szczególnie przydatne do debugowania błędów jądra i błędów jądra . Jądro wykonuje samo tłumaczenie adresu na nazwę, gdy CONFIG_KALLSYMS
, więc narzędzia takie jak ksymoops nie są wymagane.
Wewnętrzne
Poniższy fragment jest częścią pliku System.map
:
c041bc90 b pakiet_sklist c041bc94 b pakiet_sklist_lock c041bc94 b pakiet_skarpety_nr c041bc98 A __bss_stop c041bc98 A _end c041c000 A pg0 ffffe400 A __kernel_vsyscall ffffe410 A SYSENTER_RETURN ffffe420 __kernel_sigreturn fffe440 __kernel_rt_sigreturn
Ponieważ adresy mogą zmieniać się z jednej kompilacji na następną, dla każdej kompilacji jądra generowany jest nowy plik System.map .
Typy symboli
Znak między adresem a symbolem (oddzielony spacjami) jest typem symbolu . Program narzędziowy nm w
systemach Unix wyświetla symbole z plików obiektowych. System.map jest z nim bezpośrednio powiązany, ponieważ ten plik jest tworzony przez nm
dla
całego programu jądra – tak jak nm
wymienia symbole i ich typy dla dowolnych programów małych obiektów.
Niektóre z tych typów to:
-
A
dla absolutu -
B
lubb
dla niezainicjowanej sekcji danych (tzw. BSS) -
D
lubd
dla zainicjowanej sekcji danych -
G
lubg
dla zainicjowanej sekcji danych dla małych obiektów (globalnie) -
i
dla sekcji specyficznych dla bibliotek DLL -
N
dla symbolu debugowania -
p
dla sekcji odwijania stosu -
R
lubr
dla sekcji danych tylko do odczytu -
S
lubs
dla niezainicjowanej sekcji danych dla małych obiektów -
T
lubt
dla sekcji tekstowej (kodu). -
U
dla nieokreślonego -
V
lubv
dla słabego obiektu -
W
lubw
dla słabych obiektów, które nie zostały tak oznaczone -
-
dla symbolu pchnięć w pliku obiektowym a.out -
?
dla „nieznany typ symbolu”
Lokalizacja systemu plików
Po zbudowaniu jądra Linuksa System.map
znajduje się w katalogu głównym katalogu źródłowego. Jednak niektóre dalsze kroki instalacji oprogramowania przewidują zlokalizowanie pliku w innym miejscu:
- as
/boot/ System.map-$( uname -r)
- budowanie SVGAlib spodziewa się znaleźć
/lib/modules/$(uname -r)/build/System.map