Interested Article - System.map

System.map — файл, внутри которого находится символьная таблица адресов функций и процедур, используемых ядром операционной системы Linux . В этой таблице перечислены имена переменных и функций и их адреса в памяти компьютера . Эта таблица весьма полезна при отладке ядра в случае Kernel panic или Linux oops . System.map генерируется при компиляции ядра.

Символьная таблица адресов для загруженного ядра также находится в файле /proc/kallsyms .

Создание файла

Файл System.map можно создать командой nm -n vmlinux > System.map . При компиляции ядра используется следующая команда (скрипт /usr/src/linux/scripts/mksysmap , версия ядра 2.6.35): $NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2 , где $1 — файл vmlinux , $2 — файл System.map .

Внутренности

Пример содержимого файла System.map :

c040f4ec b local_apic_timer_verify_ok
c040f4f0 b calibration_result
c040f4f4 b enabled_via_apicbase
c040f4f8 b apic_phys
c040f500 b apic_pm_state
c040f538 B nmi_active
c040f53c B nmi_watchdog_enabled
c040f540 B unknown_nmi_panic
c040f544 b backtrace_mask
c040f548 b lock.19318
c040f54c b nmi_pm_active
c040f550 b last_irq_sums
c040f560 b alert_counter

System.map создается при каждой сборке ядра ввиду того, что в разных версиях могут быть разные адреса процедур .

Типы символов

Вторая колонка обозначает тип символа (заглавные буквы означают глобальный или экспортируемый символ, строчные — локальный):

  • A — абсолютное значение.
  • B или b — символ в секции неинициализированных данных (обычно обозначается как BSS).
  • D или d — символ в секции инициализированных данных.
  • G или g — символ в секции инициализированных данных для глобальных малых объектов.
  • i — секция, специфичная для DLL.
  • N — отладочный символ.
  • p — секция раскрутки стека.
  • R или r — символ в секции с доступом только на чтение.
  • S или s — символ в секции неинициализированных данных для малых объектов.
  • T или t — символ в секции кода.
  • U — неопределённый символ.
  • V или v — слабый объект.
  • W или w — слабый объект, который не был так помечен
  • — означает символ заглушки в объектном файле a.out
  • ? означает неопределённый тип символа

Расположение на файловой системе

После сборки ядра Linux файл System.map находится в каталоге /usr/src/linux/ . Однако некоторые программы требуют его в других местах и, иногда, с другим именем, например, /boot/System.map-$( uname -r) .

Так, например, для сборки SVGAlib необходимо наличие файла System.map в каталоге /lib/modules/$(uname -r)/build/ [ значимость факта? ] .

Примечания

  1. . Дата обращения: 20 сентября 2011. Архивировано из 10 мая 2017 года.

Ссылки

  • Alavoor Vasudevan. (англ.) (4 мая 2003). — Описание файла System.map. Дата обращения: 20 сентября 2011.
  • (англ.) . — Информация о символах, символьных таблицах и файле System.map. Дата обращения: 20 сентября 2011. Архивировано из 19 мая 2012 года.
Источник —

Same as System.map