1

像任何其他符号一样,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
mainnon-pie binary

4

0 回答 0