System.map
В Linux System.map Файл представляет собой таблицу символов, используемую ядром .
Таблица символов — это поиск имен символов и их адресов в памяти. Имя символа может быть именем переменной или именем функции. System.map требуется, когда требуется адрес имени символа или имя символа адреса. Это особенно полезно для отладки паники ядра и ошибок ядра . Ядро само выполняет преобразование адреса в имя, когда CONFIG_KALLSYMS
включен, поэтому такие инструменты, как ksymoops, не требуются. [1]
Внутренности
[ редактировать ]Нижеследующее является частью System.map
файл: [2]
c041bc90 b packet_sklist c041bc94 b packet_sklist_lock c041bc94 b packet_socks_nr c041bc98 A __bss_stop c041bc98 A _end c041c000 A pg0 ffffe400 A __kernel_vsyscall ffffe410 A SYSENTER_RETURN ffffe420 A __kernel_sigreturn ffffe440 A __kernel_rt_sigreturn
Поскольку адреса могут меняться от одной сборки к другой, новый System.map
генерируется для каждой сборки ядра. [3]
Типы символов
[ редактировать ]Символ между адресом и символом (разделенный пробелами) является типом символа. nm
Утилита в системах Unix перечисляет символы из объектных файлов. System.map
напрямую связано с ним, поскольку этот файл создается nm
во всей программе ядра – точно так же, как nm
перечисляет символы и их типы для любых небольших объектных программ. [4]
Некоторые из этих типов: [4]
A
для абсолютногоB
илиb
для секции неинициализированных данных (называемой BSS)D
илиd
для раздела инициализированных данныхG
илиg
для раздела инициализированных данных для небольших объектов (глобально)i
для разделов, специфичных для DLLN
для символа отладкиp
для секции размотки штабеляR
илиr
для раздела данных только для чтенияS
илиs
для неинициализированной секции данных для небольших объектовT
илиt
для текстового (кодового) разделаU
для неопределенногоV
илиv
для слабого объектаW
илиw
для слабых объектов, которые не были помечены так-
для символа stabs в объектном файле a.out?
для «тип символа неизвестен»
Расположение файловой системы
[ редактировать ]После сборки ядра Linux System.map
находится в корне исходного каталога. Однако некоторые дальнейшие шаги по установке программного обеспечения предполагают, что файл будет найден в другом месте: [5]
- как
/boot/System.map-$(uname -r)
- при построении SVGAlib рассчитывает найти
/lib/modules/$(uname -r)/build/System.map
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Часто задаваемые вопросы/System.map — новички в ядре Linux» . kernelnewbies.org. 14 апреля 2006 г. Проверено 6 апреля 2014 г.
- ^ Питер Джей Зальцман (28 мая 2003 г.). «Файл system.map» . Rlworkman.net . Проверено 6 апреля 2014 г.
- ^ «Ядро-HOWTO» . faqs.org . Проверено 6 апреля 2014 г.
- ^ Jump up to: а б «nm(1): символы из объектных файлов — справочная страница Linux» . Linux.die.net . Проверено 6 апреля 2014 г.
- ^ «Заметки Питера: System.map» . Linuxmafia.com. 29 мая 2003 г. Проверено 6 апреля 2014 г.