- 论坛徽章:
- 0
|
原帖由 web_surf 于 2007-9-19 17:11 发表 ![]()
如果不strip, 所有的函数,变量都都可以通过符号名访问到. 而strip之后, 符号表被删除了,只能通过地址访问.
而在连接的时候,是通过符号名查找的.所以连接stripped的库/目标文件会失败.
不同意
对于.so库,strip过后仍然可以被链接。因为用于链接的.dynsym节仍在。
对于.o文件,strip过后确实不能在连接编译成目标文件。因为.o文件不是目标文件,和.so文件不同,它并没有.dynsym节用于导出符号给外部程序。所以我认为编译器用于链接成目标文件的符号表就是我们objdump出来看到的那张,即:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000052 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 00000088 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000088 2**2
ALLOC
3 .rodata 00000007 00000000 00000000 00000088 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .note.GNU-stack 00000000 00000000 00000000 0000008f 2**0
CONTENTS, READONLY
5 .comment 0000002e 00000000 00000000 0000008f 2**0
CONTENTS, READONLY
SYMBOL TABLE:
00000000 l df *ABS* 00000000 t.c
00000000 l d .text 00000000
00000000 l d .data 00000000
00000000 l d .bss 00000000
00000000 l d .rodata 00000000
00000000 l d .note.GNU-stack 00000000
00000000 l d .comment 00000000
00000000 g F .text 00000018 ppp
00000000 *UND* 00000000 printf
00000018 g F .text 0000003a main |
而strip .o文件,去掉的也正是这张表。所以strip后的.o文件不能再链接成目标文件。
(关于.o文件是我自己的猜想,我个人没找到证据证明,如果有了解的朋友请指正) |
|