Каковы значения столбцов таблицы символов, отображаемых readelf? - PullRequest
43 голосов
/ 18 июня 2010

Может ли кто-нибудь объяснить столбцы, показанные в таблице символов, с помощью readelf?

Ответы [ 4 ]

43 голосов
/ 18 июня 2010

Рассмотрим следующее:

Таблица символов .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 = нетипизированный абсолютный символ или неопределенный
  • Bind = GLOBAL привязка означает, что символ виден вне файла. LOCAL привязка видна только в файле. WEAK как глобальный, символ может быть переопределен.
  • Vis = Символы могут быть по умолчанию, защищенными, скрытыми или внутренними.
  • Ndx = Номер раздела, в котором находится символ. ABS означает абсолютный: не настроен на перемещение адреса раздела
  • Name = имя символа
2 голосов
/ 18 июня 2010
0 голосов
/ 19 июля 2012

Я думаю, что поле Ndx показывает номер раздела, где этот символ определен.

Сделайте readelf -a <file> и выясните, какому разделу соответствует адрес для данного символа.

Бьюсь об заклад, номер раздела этого раздела появится в поле Ndx.

0 голосов
/ 08 июня 2011

Хорошо, этот вопрос старый, но старый добрый Google выдает его, если вы ищете readelf symboltable и NDX;

Вот что я узнал:

Код C, скомпилированный с помощью avr-gcc:

int XYZ = 123;
int ABC;

когда сгенерированный файл эльфа анализируется с использованием

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

...