add2.c:"COM" có nghĩa là gì trong cột Ndx của phần .symtab?
int counter=0;
int a=0;
int b;
int c;
int add(int a, int b) {
return a+b;
}
biên soạn: gcc -c add2.c -o add2.o
đọc bảng biểu tượng: --symbols readelf 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" có nghĩa là gì trong cột Ndx? Tôi hiểu rằng "counter" và "a" được định nghĩa trong phần # 3 (ví dụ, .bss) và "add" được định nghĩa trong phần # 1 (ví dụ, .text), nhưng tôi đã mong đợi "b" và "c" để được định nghĩa trong phần .bss, và vì vậy có được một "3" trong cột Ndx.
Cảm ơn bạn
Ok! Tôi hiểu rằng chúng ta không thể bây giờ mà một biểu tượng "COMMON" sẽ kết thúc bằng cách tìm kiếm một tệp đối tượng có thể định vị lại. Điều này được quyết định bởi trình liên kết, tại thời gian liên kết, trong chức năng của các tệp đối tượng có thể định vị lại khác thực hiện với biểu tượng này. Đúng không ? – user368507
Vâng, đúng vậy. –