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 lub b dla niezainicjowanej sekcji danych (tzw. BSS)
  • D lub d dla zainicjowanej sekcji danych
  • G lub g 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 lub r dla sekcji danych tylko do odczytu
  • S lub s dla niezainicjowanej sekcji danych dla małych obiektów
  • T lub t dla sekcji tekstowej (kodu).
  • U dla nieokreślonego
  • V lub v dla słabego obiektu
  • W lub w 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

Zobacz też