GCC C++ 名称修改参考
GCC C++ Name mangling reference
环顾四周,我看到的问题主要是关于分解 C++ 符号而不是如何分解它们。是的,可以调用 g++
,使用 -S
选项,在一些包含要被破坏的符号的虚拟代码上,然后检查生成的程序集,但我一直无法找到一个好的参考或关于 GCC 名称修改的规范。我能找到的最接近的东西是 http://www.int0x80.gr/papers/name_mangling.pdf,但它似乎没有涵盖诸如名称模板实例化如何被破坏或为什么 _Z3fooIN3BarEE3FooIXT_EEv
会转换为 Foo<Bar> foo<Bar>()
之类的内容(尽管我可以看看如何,但是 IXT_EE
到底是什么?为什么这个 _Z
后面没有 N
?那是什么意思?)。
引自source code of gcc's implementation of name mangling:
This file implements mangling of C++ names according to the IA64 C++
ABI specification.
这是此规范中的规则:
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling
环顾四周,我看到的问题主要是关于分解 C++ 符号而不是如何分解它们。是的,可以调用 g++
,使用 -S
选项,在一些包含要被破坏的符号的虚拟代码上,然后检查生成的程序集,但我一直无法找到一个好的参考或关于 GCC 名称修改的规范。我能找到的最接近的东西是 http://www.int0x80.gr/papers/name_mangling.pdf,但它似乎没有涵盖诸如名称模板实例化如何被破坏或为什么 _Z3fooIN3BarEE3FooIXT_EEv
会转换为 Foo<Bar> foo<Bar>()
之类的内容(尽管我可以看看如何,但是 IXT_EE
到底是什么?为什么这个 _Z
后面没有 N
?那是什么意思?)。
引自source code of gcc's implementation of name mangling:
This file implements mangling of C++ names according to the IA64 C++ ABI specification.
这是此规范中的规则: https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling