Таблица символов

Поделись знанием:
Перейти к: навигация, поиск
К:Википедия:Статьи без источников (тип: не указан)

В информатике таблица символов (от англ. symbol table «таблица идентификаторов») — это структура данных, используемая транслятором (компилятором или интерпретатором), в которой каждый идентификатор переменной или функции из исходного кода ассоциируется с информацией, связанной с его объявлением или появлением в коде: типом данных, областью видимости и в некоторых случаях местом в памяти (смещением).





Реализация

Общеиспользуемой реализацией является хеш-таблица. Компилятор может как использовать единую таблицу для символов, так и разделять символы на несколько иерархических таблиц по разным областям видимости. Бывают также реализации в виде деревьев, линейных и самоорганизовываемых списков.

Применение

Объектный модуль (англ. object file) содержит таблицу символов для внешне видимых (публичных) идентификаторов. При связывании (линковке) разных объектных модулей компоновщик использует таблицы символов для разрешения межмодульных упоминаний.

Таблица символов может существовать лишь на протяжении трансляции, но иногда она вкладывается в вывод этого процесса для дальнейшего использования, например, во время интерактивной отладки, или как источник для форматирования диагностического отчета во время или после исполнения программы.

Во время реверс-инжиниринга многие утилиты с помощью таблицы проверяют, каким адресам принадлежат глобальные переменные и известные функции. Если таблица символов была убрана из объектных модулей до линковки (например, с помощью strip из GNU binutils), утилитам будет сложнее определить адреса важных мест программы и проанализировать её.

При доступе к переменным и динамическом распределении памяти компилятор должен осуществить множество работ, отсюда — расширенной модели стека при динамическом распределении необходима таблица символов.[прояснить]

Хорошим примером использования таблицы символов могут послужить модульные ядра ОС семейства Unix: таблица символов может использоваться подгружаемыми модулями ядра (например, драйверами) для доступа к неким символам. Однако это не является обязательным, если модуль не обращается к ядру, не использует внутренние функции, переменные, и т. д.[1] Возможно обойтись без таблицы символов и обращаться к памяти внутри ядра напрямую, но в этом случае будет потеряна переносимость модулей, так как при разных конфигурациях ядра одинаковый код будет размещён в разных местах.К:Википедия:Статьи без источников (тип: не указан)[источник не указан 3944 дня]

Пример

Снизу приведена таблица символов небольшой программы. Для её создания использовалась утилита nm из комплекта GNU binutils. В таблице размечен один символ данных (отмечен как тип «D») и множество функций (как из стандартной библиотеки, так и принадлежащие самой программе). Первая колонка содержит адрес смещения в памяти, вторая — [sourceware.org/binutils/docs-2.17/binutils/nm.html#nm тип символа], третья — его название.

Пример таблицы
Адрес Тип Имя
00000020 a T_BIT
00000040 a F_BIT
00000080 a I_BIT
20000004 t irqvec
20000008 t fiqvec
2000000c t InitReset
20000018 T _main
20000024 t End
20000030 T AT91F_US3_CfgPIO_useB
2000005c t AT91F_PIO_CfgPeriph
200000b0 T main
20000120 T AT91F_DBGU_Printk
20000190 t AT91F_US_TxReady
200001c0 t AT91F_US_PutChar
200001f8 T AT91F_SpuriousHandler
20000214 T AT91F_DataAbort
20000230 T AT91F_FetchAbort
2000024c T AT91F_Undef
20000268 T AT91F_UndefHandler
20000284 T AT91F_LowLevelInit
200002e0 t AT91F_DBGU_CfgPIO
2000030c t AT91F_PIO_CfgPeriph
20000360 t AT91F_US_Configure
200003dc t AT91F_US_SetBaudrate
2000041c t AT91F_US_Baudrate
200004ec t AT91F_US_SetTimeguard
2000051c t AT91F_PDC_Open
2000059c t AT91F_PDC_DisableRx
200005c8 t AT91F_PDC_DisableTx
200005f4 t AT91F_PDC_SetNextTx
20000638 t AT91F_PDC_SetNextRx
2000067c t AT91F_PDC_SetTx
200006c0 t AT91F_PDC_SetRx
20000704 t AT91F_PDC_EnableRx
20000730 t AT91F_PDC_EnableTx
2000075c t AT91F_US_EnableTx
20000788 T __aeabi_uidiv
20000788 T __udivsi3
20000884 T __aeabi_uidivmod
2000089c T __aeabi_idiv0
2000089c T __aeabi_ldiv0
2000089c T __div0
200009a0 D _data
200009a0 A _etext
200009a0 D holaamigosh
200009a4 A __bss_end__
200009a4 A __bss_start
200009a4 A __bss_start__
200009a4 A _edata
200009a4 A _end

См. также

Напишите отзыв о статье "Таблица символов"

Примечания

  1. Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. Гл. 2: Сборка и запуск модулей; Символьная таблица ядра // [dmilvdv.narod.ru/Translate/LDD3/index.html?ldd_kernel_symbol_table.html Linux Device Drivers, Third Edition]. — O'Reilly Media, 2005. — ISBN 0-596-00590-3.

Отрывок, характеризующий Таблица символов

Здоровье графини все не поправлялось; но откладывать поездку в Москву уже не было возможности. Нужно было делать приданое, нужно было продать дом, и притом князя Андрея ждали сперва в Москву, где в эту зиму жил князь Николай Андреич, и Наташа была уверена, что он уже приехал.
Графиня осталась в деревне, а граф, взяв с собой Соню и Наташу, в конце января поехал в Москву.



Пьер после сватовства князя Андрея и Наташи, без всякой очевидной причины, вдруг почувствовал невозможность продолжать прежнюю жизнь. Как ни твердо он был убежден в истинах, открытых ему его благодетелем, как ни радостно ему было то первое время увлечения внутренней работой самосовершенствования, которой он предался с таким жаром, после помолвки князя Андрея с Наташей и после смерти Иосифа Алексеевича, о которой он получил известие почти в то же время, – вся прелесть этой прежней жизни вдруг пропала для него. Остался один остов жизни: его дом с блестящею женой, пользовавшеюся теперь милостями одного важного лица, знакомство со всем Петербургом и служба с скучными формальностями. И эта прежняя жизнь вдруг с неожиданной мерзостью представилась Пьеру. Он перестал писать свой дневник, избегал общества братьев, стал опять ездить в клуб, стал опять много пить, опять сблизился с холостыми компаниями и начал вести такую жизнь, что графиня Елена Васильевна сочла нужным сделать ему строгое замечание. Пьер почувствовав, что она была права, и чтобы не компрометировать свою жену, уехал в Москву.
В Москве, как только он въехал в свой огромный дом с засохшими и засыхающими княжнами, с громадной дворней, как только он увидал – проехав по городу – эту Иверскую часовню с бесчисленными огнями свеч перед золотыми ризами, эту Кремлевскую площадь с незаезженным снегом, этих извозчиков и лачужки Сивцева Вражка, увидал стариков московских, ничего не желающих и никуда не спеша доживающих свой век, увидал старушек, московских барынь, московские балы и Московский Английский клуб, – он почувствовал себя дома, в тихом пристанище. Ему стало в Москве покойно, тепло, привычно и грязно, как в старом халате.
Московское общество всё, начиная от старух до детей, как своего давно жданного гостя, которого место всегда было готово и не занято, – приняло Пьера. Для московского света, Пьер был самым милым, добрым, умным веселым, великодушным чудаком, рассеянным и душевным, русским, старого покроя, барином. Кошелек его всегда был пуст, потому что открыт для всех.
Бенефисы, дурные картины, статуи, благотворительные общества, цыгане, школы, подписные обеды, кутежи, масоны, церкви, книги – никто и ничто не получало отказа, и ежели бы не два его друга, занявшие у него много денег и взявшие его под свою опеку, он бы всё роздал. В клубе не было ни обеда, ни вечера без него. Как только он приваливался на свое место на диване после двух бутылок Марго, его окружали, и завязывались толки, споры, шутки. Где ссорились, он – одной своей доброй улыбкой и кстати сказанной шуткой, мирил. Масонские столовые ложи были скучны и вялы, ежели его не было.
Когда после холостого ужина он, с доброй и сладкой улыбкой, сдаваясь на просьбы веселой компании, поднимался, чтобы ехать с ними, между молодежью раздавались радостные, торжественные крики. На балах он танцовал, если не доставало кавалера. Молодые дамы и барышни любили его за то, что он, не ухаживая ни за кем, был со всеми одинаково любезен, особенно после ужина. «Il est charmant, il n'a pas de seхе», [Он очень мил, но не имеет пола,] говорили про него.
Пьер был тем отставным добродушно доживающим свой век в Москве камергером, каких были сотни.
Как бы он ужаснулся, ежели бы семь лет тому назад, когда он только приехал из за границы, кто нибудь сказал бы ему, что ему ничего не нужно искать и выдумывать, что его колея давно пробита, определена предвечно, и что, как он ни вертись, он будет тем, чем были все в его положении. Он не мог бы поверить этому! Разве не он всей душой желал, то произвести республику в России, то самому быть Наполеоном, то философом, то тактиком, победителем Наполеона? Разве не он видел возможность и страстно желал переродить порочный род человеческий и самого себя довести до высшей степени совершенства? Разве не он учреждал и школы и больницы и отпускал своих крестьян на волю?
А вместо всего этого, вот он, богатый муж неверной жены, камергер в отставке, любящий покушать, выпить и расстегнувшись побранить легко правительство, член Московского Английского клуба и всеми любимый член московского общества. Он долго не мог помириться с той мыслью, что он есть тот самый отставной московский камергер, тип которого он так глубоко презирал семь лет тому назад.