我有一个关于ELF动态符号表的问题。对于类型为FUNC的符号,我注意到某些二进制文件中的值为0。但在其他二进制文件中,它有一些非零值。这两个二进制文件都是由gcc生成的,我想知道为什么这个区别?有没有编译器选项来控制它?ELF动态符号表
编辑:这是readelf --dyn-SYMS的输出PROG1的 “printf的” 符号是82f0这恰好是对printf的PLT表项的地址
Symbol table '.dynsym' contains 5 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
2: 000082f0 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4 (2)
3: 00008314 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4 (2)
4: 000082fc 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4
这里值。 readelf --dyn-SYMS的
输出PROG2
Symbol table '.dynsym' contains 6 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
2: 00000000 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4 (2)
3: 00000000 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4 (2)
4: 00000000 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4 (2)
5: 00000000 0 FUNC GLOBAL DEFAULT UND [email protected]_2.4
这里的值,所有符号都为零。
什么是创建prog1和prog2的确切命令? – Jens
prog2:gcc -o prog2 prog2.c。但关于prog1,我不知道。我想知道是否有任何选项来创建这样的二进制文件。 –