像任何其他符号一样,main
被归类为静态符号,
所以当二进制被剥离时,这通常会消失。
然而,昨天我发现这个main
函数并没有在pie
二进制文件中被剥离。
我在示例 C 程序中定义了几个符号,myfunc1
, myfunc2
, ... 和main
.
我发现当我剥离二进制文件时任何其他符号确实消失了,但 main
剥离后符号仍然存在。
我检查了原因,发现与其他任何用户定义的符号不同 ,它main
被归类为动态符号。
Symbol table '.dynsym' contains 13 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab
// ...omitted...
10: 000005e0 43 FUNC GLOBAL DEFAULT 13 main
11: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
12: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable
问题:
为什么二进制main
中被归类为动态符号
(我认为脱衣舞会没问题,就像它在.) pie
main
non-pie binary