【问题标题】:C++ name mangling decoder for g++?用于g ++的C ++名称修饰解码器?
【发布时间】:2011-05-27 00:12:15
【问题描述】:

是否有任何用于 g++ 的 C++ 名称修饰解码器?

【问题讨论】:

  • 有些人很快就会回答c++filt
  • 投票重新打开:stackoverflow.com/questions/4465872/… 显然要求它来自代码内部,并且仅适用于从未出现在目标文件中的类型(与函数相反)。这通常被解释为“在命令行的目标文件上”。
  • 它老了,但这个网站帮了我很多demangler.com

标签: c++ name-mangling name-decoration


【解决方案1】:

您可以使用 c++filt 对 c++ 符号进行反编码。比如

$ c++filt -n _Z1fv
f()

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      您可能还对objdump-C 选项感兴趣:

      objdump -CSr main.o
      

      它对重定位引用进行分解,例如:

        char *sn = new char[4];
      10:   bf 04 00 00 00          mov    $0x4,%edi
      15:   e8 00 00 00 00          callq  1a <main+0x1a>
                            16: R_X86_64_PC32       operator new[](unsigned long)-0x4
      

      如果没有-C,它将显示损坏的名称_Znam

      另请参阅:Can objdump un-mangle names of C++ template functions?

      还有Is there an online name demangler for C++?提到的一些在线解包器,比如http://demangler.com/,如果存在,那就是它的SaaS。

      nm 也有一个-C 选项。

      【讨论】:

      • 甚至objdump -CSr main.o | less --pattern=_Znam
      猜你喜欢
      • 2017-11-28
      • 2011-09-25
      • 2011-02-25
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多