Jas*_*n R 16 c++ gcc name-mangling objdump
我有一个C++对象文件,其中包含一些C++模板函数的实例.有问题的目标文件为模板参数的几种不同组合实例化相同的功能.我正在尝试调试一个问题,并希望查看模板函数的特定实例化的反汇编(也就是说,我知道我想要检查的函数的模板参数).我通常会这样做objdump
来反汇编目标文件,但它(至少在默认情况下)不能解析C++函数名称.有没有办法做到这一点?目标文件是使用gcc 4.6.1创建的.
Cir*_*四事件 16
objdump -C
该-C
标志启用了解码:
printf '
template<typename T>
T add(T x, T y) {
return x + y;
}
void h() {
add(1, 2);
add(1.0, 2.0);
}
' > a.cpp
g++ -g -std=c++11 a.cpp
objdump -CS a.out
Run Code Online (Sandbox Code Playgroud)
输出包含demangled名称:
int main() {
add(1, 2);
60c: e8 28 00 00 00 callq 639 <int add<int>(int, int)>
add(1.0, 2.0);
62d: e8 1b 00 00 00 callq 64d <double add<double>(double, double)>
0000000000000639 <int add<int>(int, int)>:
000000000000064d <double add<double>(double, double)>:
Run Code Online (Sandbox Code Playgroud)
没有-C
,它包含错误的名称:
0000000000000639 <_Z3addIiET_S0_S0_>:
000000000000064d <_Z3addIdET_S0_S0_>:
Run Code Online (Sandbox Code Playgroud)
man objdump
说:
将低级符号名解码(解码)为用户级名称.除了删除系统前面的任何初始下划线外,这使得C++函数名称可读.不同的编译器具有不同的修改样式.可选的demangling样式参数可用于为编译器选择适当的demangling样式.
nm
也有-C
选择权.
经测试在Ubuntu 18.04,g++
7.3.0,objdump
2.30.
smp*_*kes 15
管它通过c++filt
?可能需要-n
根据符号是否带有前导下划线来给出它.
归档时间: |
|
查看次数: |
8951 次 |
最近记录: |