Может ли кто-нибудь объяснить столбцы, отображаемые в таблице символов, используя 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