Linux命令c++filt

原创 2016年08月31日 00:27:55

一个简单的linux命令, 确实不值得大费周折, 但是, 在实际的开发过程中,却帮助很大,在编译cgi,修改函数的调用之后获得函数的符号名,就可以看到这个函数的定义。


C/C++语言在编译以后,函数的名字会被编译器修改,改成编译器内部的名字,这个名字会在链接的时候用到。如果用backtrace之类的函数打印堆栈时,显示的就是被编译器修改过的名字,比如说_Z3foov 。 那么这个函数真实的名字是什么呢?

每个编译器都有一套自己内部的名字,这里只是针对linux下g++而言。
以下是基本的方法:
每个方法都是以_Z开头,对于嵌套的名字(比如名字空间中的名字或者是类中间的名字,比如Class::Func)后面紧跟N , 然后是各个名字空间和类的名字,每个名字前是名字字符的长度,再以E结尾。(如果不是嵌套名字则不需要以E结尾)

比如上面的_Z3foov 就是函数foo() , v 表示参数类型为void .
又如N:C:Func 经过修饰后就是 _ZN1N1C4FuncE, 这个函数名后面跟参数类型。 如果跟一个整型,那就是_ZN1N1C4FuncEi

另外在linux下有一个工具可以实现这种转换,这个工具是c++filt , 注意不是c++filter.

$ c++filt _ZN1N1C4FuncEi
N::C::Func(int)


相见恨晚:linux下的c++filt 命令

一个简单的linux命令, 确实不值得大费周折, 但是, 如果能与实际开发工作联系起来, 解决实际开发中的困惑, 在生动的实际场景中学习命令, 那无疑是棒棒哒的感觉。 最近刚好用c++filt解决了相...
  • stpeace
  • stpeace
  • 2016年05月15日 11:42
  • 4525

c++filt看函数名

gdb查看寄存器 i r   查看有意义的信息 函数后面的+num(行数) 然后在gdb中用反汇编指令disassemble 在指定行下看编译信息 _ZN6apsara5pangu15ScopedCh...
  • jimmy1357
  • jimmy1357
  • 2015年07月09日 18:35
  • 3552

程序猿的自我修养,笔记

print "test"a good test/start.
  • fa11ing1eaf
  • fa11ing1eaf
  • 2016年12月20日 21:21
  • 90

FrameModel - 登录验证页面Filter.压缩包1和3

  • 2014年05月31日 12:04
  • 84B
  • 下载

linux下c++filter查看函数修饰名

c++函数在编译之后会变成类似下面的样子: _ZNK4Json5ValueixEPKc   在linux命令行使用c++filter: root@SSDEV016:~ $ c++filt _ZNK4J...
  • yufei_email
  • yufei_email
  • 2014年07月11日 10:31
  • 4445

用ldd -r, c++filt, nm搞定一个so库缺符号的问题

最近, 编译了一个detailpage.so库, 直接放到测试环境, 准备验证业务功能, 结果, 服务重启的时候显示: failed to open ....        1. 这个问题一看就知道原...
  • stpeace
  • stpeace
  • 2017年04月15日 01:55
  • 1057

主题:C/C++编译器的选用

特别说明:鉴于时不时的有人问关于用什么编译器的问题,我翻译了Bjarne Stroustrup主页上compilers栏目的一篇文章,希望对大家有点指导意义。这个翻译稿的粘贴过程中失去了所有超级连接(...
  • lgw26046044
  • lgw26046044
  • 2009年11月14日 22:44
  • 1102

Matlab资料汇总暨MATLAB中文论坛帖子整理(一)

本资料所有问题及代码均摘选自matlab中文论坛,主要供自己学习使用。非常感谢论坛的所有提出以及解答问题的会员。 目 录 1、GUI新手之——教你读懂GUI的M文件... 10 2、GUI程...
  • nonmarking
  • nonmarking
  • 2015年03月04日 21:31
  • 3332

相见恨晚:linux下的c++filt 命令

一个简单的linux命令, 确实不值得大费周折, 但是, 如果能与实际开发工作联系起来, 解决实际开发中的困惑, 在生动的实际场景中学习命令, 那无疑是棒棒哒的感觉。 最近刚好用c++filt解决了相...
  • stpeace
  • stpeace
  • 2016年05月15日 11:42
  • 4525

相见恨晚:linux下的c++filt 命令

一个简单的Linux命令, 确实不值得大费周折, 但是, 如果能与实际开发工作联系起来, 解决实际开发中的困惑, 在生动的实际场景中学习命令, 那无疑是棒棒哒的感觉            最...
  • zerokkqq
  • zerokkqq
  • 2016年11月10日 13:59
  • 254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux命令c++filt
举报原因:
原因补充:

(最多只允许输入30个字)