代码之家  ›  专栏  ›  技术社区  ›  Sergio

用于“取消定义”可重定位ELF符号表中的符号的工具

  •  0
  • Sergio  · 技术社区  · 4 年前

    是否有任何实用程序修补ELF符号表中的任意符号,以便定义的符号变为未定义的符号?例如,这里是 readelf --syms

    Symbol table '.symtab' contains 8 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
         0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
         ...
         5: 0000000000000000    13 FUNC    WEAK   DEFAULT    3 my_message
         6: 0000000000000000    19 FUNC    GLOBAL DEFAULT    5 print_msg
         7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts
    

    这里是相同二进制文件的预期输出,其中 my_message 未定义:

    Symbol table '.symtab' contains 8 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
         0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
         ...
         5: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND my_message
         6: 0000000000000000    19 FUNC    GLOBAL DEFAULT    5 print_msg
         7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts
    

    ELF文件本身是可重定位的。修改应该只改变符号表。包含原始符号定义的实际部分应保持不变。 objcopy 可能是我正在寻找的,但到目前为止,我还没有找到任何选项(或组合)可以让我做出上述行为。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Serge C    4 年前

    你可以看看“匿名者”的例子 ELFIO

    不完全是工具,而是允许实现此类工具的库。