Interested Article - System.map
- 2020-07-29
- 1
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/
[
значимость факта?
]
.
Примечания
- . Дата обращения: 20 сентября 2011. Архивировано из 10 мая 2017 года.
Ссылки
- Alavoor Vasudevan. (англ.) (4 мая 2003). — Описание файла System.map. Дата обращения: 20 сентября 2011.
- (англ.) . — Информация о символах, символьных таблицах и файле System.map. Дата обращения: 20 сентября 2011. Архивировано из 19 мая 2012 года.
|
Это
заготовка статьи
о
программном обеспечении
. Помогите Википедии, дополнив её.
|
- 2020-07-29
- 1