Может ли кто-нибудь объяснить столбцы, отображаемые в таблице символов, используя readelf
?
Каковы значения столбцов таблицы символов, отображаемые readelf?
Ответ 1
Рассмотрим следующее:
Таблица символов .symtab
содержит 1203 записи:
Num: Value Size Type Bind Vis Ndx Name
310: a0008120 0 NOTYPE GLOBAL DEFAULT ABS _gp
734: a0000010 32 OBJECT GLOBAL DEFAULT 77 v
818: 9d000018 496 FUNC GLOBAL DEFAULT 71 main
849: a0000124 4 OBJECT GLOBAL DEFAULT 78 phrase
955: a0000000 9 OBJECT GLOBAL DEFAULT 77 peppers
1020: a000023c 192 OBJECT GLOBAL DEFAULT 80 bins
-
Num:
= Номер символа -
Value
= Адрес символа -
Size
= Размер символа -
Type
= тип символа:Func
= Функция,Object
,File
(имя исходного файла),Section
= раздел памяти,Notype
= нетипированный абсолютный символ или undefined -
Bind
=GLOBAL
привязка означает, что символ виден вне файла.LOCAL
привязка видна только в файле.WEAK
похож на глобальный, символ может быть переопределен. -
Vis
= Символы могут быть по умолчанию, защищены, скрыты или внутренними. -
Ndx
= Номер раздела, в котором находится символ. ABS означает абсолютное: не настроено на любое перемещение адреса раздела -
Name
= имя символа
Ответ 2
Вы можете:
man readelf
или посмотрите эти руководства:
Ответ 3
Я думаю, что поле Ndx показывает номер раздела, где этот символ определен.
Сделайте a readelf -a <file>
и узнайте, в какой секции соответствует адрес для данного символа.
Я уверен, что номер раздела этого раздела появится в поле Ndx.
Ответ 4
Хорошо, этот вопрос старый, но старый добрый Google дает его, если вы ищете символьный символ readelf и NDX;
Вот что я узнал:
Код C, скомпилированный с помощью avr-gcc:
int XYZ = 123;
int ABC;
когда сгенерированный файл elf анализируется с помощью
readelf --symbols KoreOS.elf
вы получаете как вывод:
Num: Value Size Type Bind Vis Ndx Name
...
148: 0080200b 2 OBJECT GLOBAL DEFAULT 2 XYZ
...
258: 00803878 2 OBJECT GLOBAL DEFAULT 3 ABC
...
Я использую столбец NDX как подсказку, если переменная инициализирована или нет. Но я не нашел документации нигде, поэтому я просто догадываюсь.
привет, Dominik