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 查看本文章