环顾四周,我看到的主要是关于解码C ++符号而不是如何破坏它们的问题。是的,可以使用g++
选项在包含要修改的符号的一些虚拟代码上调用-S
,然后检查生成的程序集,但我还没有找到关于GCC名称修改的良好参考或规范。我能找到的最接近的是http://www.int0x80.gr/papers/name_mangling.pdf,但它似乎没有涵盖名称模板实例化被破坏或为什么_Z3fooIN3BarEE3FooIXT_EEv
会转化为Foo<Bar> foo<Bar>()
等事情(尽管我可以看到怎么样,但到底是什么IXT_EE
?为什么N
之后没有_Z
?这甚至意味着什么?)。
答案 0 :(得分:18)
来自gcc的来源(https://github.com/gcc-mirror/gcc/blob/master/gcc/cp/mangle.c):
此文件根据IA64 C ++实现了对C ++名称的修改 ABI规范。
以下是此规范的规则: https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling