add2.c:
int counter=0;
int a=0;
int b;
int c;
int add(int a, int b) {
return a+b;
}
компиляция: gcc -c add2.c -o add2.o
чтение таблицы символов: readelf --symbols add2.o
Symbol table '.symtab' contains 12 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS add2.c
2: 00000000 0 SECTION LOCAL DEFAULT 1
3: 00000000 0 SECTION LOCAL DEFAULT 2
4: 00000000 0 SECTION LOCAL DEFAULT 3
5: 00000000 0 SECTION LOCAL DEFAULT 5
6: 00000000 0 SECTION LOCAL DEFAULT 4
7: 00000000 4 OBJECT GLOBAL DEFAULT 3 counter
8: 00000004 4 OBJECT GLOBAL DEFAULT 3 a
9: 00000004 4 OBJECT GLOBAL DEFAULT COM b
10: 00000004 4 OBJECT GLOBAL DEFAULT COM c
11: 00000000 14 FUNC GLOBAL DEFAULT 1 add
Что означает «COM» в столбце Ndx? Я понимаю, что "counter" и "a" определены в разделе № 3 (т.е. .bss) и что "add" определено в разделе № 1 (т.е., .text), но я ожидал "b" и "c" также следует определить в разделе .bss, и поэтому в столбце Ndx будет стоять "3".
Спасибо