c++filt解码已损坏的函数名称

https://linux.die.net/man/1/c++filt
https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.2/com.ibm.xlcpp1312.aix.doc/proguide/cppfilt.html
https://github.com/nico/demumble

c++filt 是用于对已损坏的函数名称进行解码的过滤器。


在linux下执行:
c++filt _ZN6apsara5pangu15ScopedChunkInfoINS0_12RafChunkInfoEED1Ev
c++filt _ZNK4Json5ValueixEPKc1Ev

在window下借助cygwin执行,linux也可以执行

c++filt -n _Z1fv
c++filt -n _ZN6apsara5pangu15ScopedChunkInfoINS0_12RafChunkInfoEED1Ev
c++filt -n _ZNK4Json5ValueixEPKc1Ev
echo _Z1fv, | c++filt -n
c++filt -n _ZN6apsara5pangu15ScopedChunkInfoINS0_12RafChunkInfoEED1Ev  --format=auto

命令显示目标文件中包含的符号 functions.o,生成包含字段宽度为40个字符的受损和已消除名称的并排列表:

c++filt -m -w 40 functions.o

gdb查看寄存器 i r   查看有程序指针pc或eip 寄存器指向, 函数后面的+num(行数)
然后在gdb中用反汇编指令disassemble,
在指定行下看编译信息 _ZN6apsara5pangu15ScopedChunkInfoINS0_12RafChunkInfoEED1Ev

c++函数在linux系统下编译之后会变成类似下面的样子:

_ZN6apsara5pangu15ScopedChunkInfoINS0_12RafChunkInfoEED1Ev

在linux命令行使用c++filter:
c++filt _ZN6apsara5pangu15ScopedChunkInfoINS0_12RafChunkInfoEED1Ev
Json::Value::operator[](char const*) const

这样就得到函数的原始名称

扫描二维码关注公众号,回复: 10402877 查看本文章
发布了789 篇原创文章 · 获赞 274 · 访问量 327万+

猜你喜欢

转载自blog.csdn.net/earbao/article/details/88600013
今日推荐