ein*_*ica 5 c++ gcc abi name-mangling object-files
我想以编程方式修改 C++ 函数或变量的名称 - 以获取将出现在编译的目标文件中的符号名称。我正在使用 Linux 和 GCC。
现在,为什么这不是一件小事呢?例如typeid(foo).name()?因为这不符合您的要求:考虑以下程序:
#include <iostream>
extern int foo(int x) { return 0; }
extern double bar(int x) { return 1.0; }
int main()
{
std::cout << typeid(foo).name() << std::endl;
std::cout << typeid(bar).name() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
让我们看看这给了我们什么:
$ g++ -o a.o -O0 -c a.cpp
$ objdump -t a.o | egrep "(bar|foo)"
00000000000000dd l F .text 0000000000000015 _GLOBAL__sub_I__Z3fooi
0000000000000000 g F .text 000000000000000e _Z3fooi
000000000000000e g F .text 000000000000001b _Z3bari
$ ./a
FiiE
FiiE
Run Code Online (Sandbox Code Playgroud)
根本不是同一件事。
笔记: