使用c++filt工具demangle C++符号

2023-05-16

demangle符号名

在调试C++程序时, 经常会遇到未demangle的C++符号名, 不了解mangle的规则时, 并不太容易确定具体是哪个API. 比如, 使用objdump将boost日志动态库的符号表导出, 你是否能够很快辨别出对应的实际的函数名称.

[jinguang1@centos7-dev ~]$ objdump -T /usr/lib/libboost_log.so

/usr/lib/libboost_log.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*	0000000000000000  GLIBCXX_3.4 _ZNSs6appendEPKcm
0000000000000000      DO *UND*	0000000000000000  GLIBCXX_3.4 _ZTVSt16invalid_argument
0000000000000000      DF *UND*	0000000000000000  GLIBCXX_3.4 _ZNSt8bad_castD2Ev
0000000000000000      DF *UND*	0000000000000000  GLIBCXX_3.4 _ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale
0000000000000000      DF *UND*	0000000000000000  GLIBCXX_3.4 _ZSt20__throw_length_errorPKc
0000000000000000      DF *UND*	0000000000000000  GLIBCXX_3.4 _ZNSt9basic_iosIwSt11char_traitsIwEE5imbueERKSt6locale
0000000000000000      DF *UND*	0000000000000000  GLIBCXX_3.4 _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode

c++filt工具

c++filt能够将上面的mangle过的符号表转换(demangel)成我们能够看懂的符号名, 以上面最后一个符号名为例子:

[jinguang1@centos7-dev ~]$ c++filt _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode
std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::seekoff(long, std::_Ios_Seekdir, std::_Ios_Openmode)

详细的使用方法可以参考man手册:

C++FILT(1)                                                              GNU Development Tools                                                             C++FILT(1)

NAME
       c++filt - Demangle C++ and Java symbols.

SYNOPSIS
       c++filt [-_|--strip-underscore]
               [-n|--no-strip-underscore]
               [-p|--no-params]
               [-t|--types]
               [-i|--no-verbose]
               [-s format|--format=format]
               [--help]  [--version]  [symbol...]

DESCRIPTION
       The C++ and Java languages provide function overloading, which means that you can write many functions with the same name, providing that each function takes
       parameters of different types.  In order to be able to distinguish these similarly named functions C++ and Java encode them into a low-level assembler name
       which uniquely identifies each different version.  This process is known as mangling. The c++filt [1] program does the inverse mapping: it decodes
       (demangles) low-level names into user-level names so that they can be read.

       Every alphanumeric word (consisting of letters, digits, underscores, dollars, or periods) seen in the input is a potential mangled name.  If the name decodes
       into a C++ name, the C++ name replaces the low-level name in the output, otherwise the original word is output.  In this way you can pass an entire assembler
       source file, containing mangled names, through c++filt and see the same source file containing demangled names.

       You can also use c++filt to decipher individual symbols by passing them on the command line:

               c++filt <symbol>

       If no symbol arguments are given, c++filt reads symbol names from the standard input instead.  All the results are printed on the standard output.  The
       difference between reading names from the command line versus reading names from the standard input is that command line arguments are expected to be just
       mangled names and no checking is performed to separate them from surrounding text.  Thus for example:

               c++filt -n _Z1fv

       will work and demangle the name to "f()" whereas:

               c++filt -n _Z1fv,

       will not work.  (Note the extra comma at the end of the mangled name which makes it invalid).  This command however will work:

               echo _Z1fv, | c++filt -n

       and will display "f(),", i.e., the demangled name followed by a trailing comma.  This behaviour is because when the names are read from the standard input it
       is expected that they might be part of an assembler source file where there might be extra, extraneous characters trailing after a mangled name.  For
       example:

                   .type   _Z1fv, @function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用c++filt工具demangle C++符号 的相关文章

  • 关于openstack错误-cirros镜像-无法启动

    链接 xff1a https www cnblogs com learn2teach p 12456635 html
  • 双机调试和windbg的命令

    各位大牛以及和我一样还是菜鸟的朋友们 xff0c 大家好 xff0c 今天在调试驱动程序时 xff0c 由于要做双机调试 xff0c 所以顺便再论坛发给以后需要的朋友 xff0c 相对网上其他教程我的这个 算是比较详细了 xff0c 因为我
  • 【无标题】

    Java中的类 类可以看成是创建 Java 对象的模板 通过下面一个简单的类来理解下 Java 中类的定义 xff1a public class Dog String breed int age String color void bark
  • sdwan和传统专线,二者的区别在哪里?

    传统的企业网络通常由园区 分支和数据中心组成 xff0c 通过企业WAN网络相互连接 长期以来 xff0c 为了保证服务质量 xff0c 企业WAN网络互联通常采用运营商的传统专线 虽然网络质量有保证 xff0c 但业务开通繁琐 xff0c
  • <a>标签用法总结

    说起a标签真实功能强大呀 xff0c 所以做个总结怕自己忘了 a标签的强大功能都要归咎于href属性可以为多种类型 1 lt a href 61 34 34 gt 的作用 xff1a 点击标签链接到网页的顶端 lt a href 61 34
  • 我的2011-没有011,只是比较2

    很多东西和算法一样古老 xff0c 但很实用 企鹅们每天吃饭睡觉打豆豆久了 xff0c 也会去思考从老巢到觅食地两点之间的最短路线问题 实际上各种生物都不缺乏探索的精神 xff0c 不管是迫于生存还是寻求更好的发展 xff0c 这种迁移包括
  • mybatis-plus简单使用

    1 导包 lt mysql 驱动 gt lt dependency gt lt groupId gt mysql lt groupId gt lt artifactId gt mysql connector java lt artifact
  • FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

    目录 一 为什么要学习FreeRTOS 二 前言 从0到1认识FreeRTOS 1 逻辑系统与多任务系统 1 1 裸机系统 xff1a 裸机系统通常分成轮询系统和前后台系统 1 2 多任务系统 2 数据结构 列表与列表项 三 任务 3 1基
  • Ubuntu16.04下turtlebot的DQN算法进行路径规划及其安装运行

    环境安装 利用anoconda创建虚拟环境 xff0c 取名为tensorflow 最好用anoconda3 取名可随便取 conda create span class token operator span n tensorflow p
  • Debian使用Kde,并以root用户登陆

    一 修改 etc sudoer的权限 xff0c 如果不修改权限会导致后面配置后登陆不了系统 xff0c 以及使用一些root命令出现 不知sudoers文件中 等问题 1 修改方法 xff1a vi etc sudoers 查找到Allo
  • java 17个IDEA最常用的快捷键 介绍及演示

    目录 一 前言 二 17个常用快捷键的演示 xff1a 1 撤销和反撤销 Ctrl 43 z 和 Ctrl 43 y 注意Ctrl 43 y 2 复制当前行 xff08 可多选 xff09 Ctrl 43 d 3 删除当前行 xff08 可
  • linux如何手动kill vnc端口并修改分辨率

    linux如何手动kill vnc端口并修改分辨率 一 正常的kill端口流程及修改分辨率流程 在新的端口上su 需要kill的vnc的用户名 xff0c 并正确输入密码 xff1b span class token variable su
  • Docker 解决容器时间与主机时间不一致的问题三种解决方案

    Docker容器时间与主机时间不一致 通过date命令查看时间 查看主机时间 root 64 localhost date 2016年 07月 27日 星期三 22 42 44 CST 查看容器时间 root 64 b43340ecf5ef
  • 项目管理:项目开发类型、模型、流程以及案例介绍

    前言 职能部门越卖力 xff0c 企业越像官僚 xff1f 赔钱的项目也要 xff0c 老板是不是疯了 xff1f 日报 xff0c 周报 xff0c 月报 然并卵 xff0c 项目照旧失控 xff0c 都是惹不起的 爷 xff0c 先招呼
  • Linux命令+shell脚本大全:用 aptitude 安装软件包

    免费教程推荐 xff1a python C 43 43 Java JS Rust Go语言入门完全手册 xff08 6合1 xff09 zip Python文档类资源 CSDN下载 了解了怎样在系统中列出软件包信息之后 xff0c 本节将带
  • Jetson 关闭Gnome桌面

    有时我们不需要桌面环境 xff0c 关掉桌面环境可以节约内存 sudo systemctl set default multi user target 启动时禁止桌面启动 sudo systemctl set default graphic
  • 神经网络_BP算法推导

    简单的 双层神经网络 只包含一个隐藏层和输出层 假设隐层和输出层的都使用sigmoid函数 定义需要的变量 正向传播计算 第h个隐层神经元的输入 第h个隐层神经元的输出 第j个输出层神经元的输入 第j个输出层神经元的输出 反向计算 BP算法

随机推荐

  • 黑苹果教程-DELL Inspiron 14R 3x37, 5x37, 7x37 hackintosh

    0x00简介 给pc安装黑苹果算是我很久的梦想了 xff0c 正好假期有几天不愿意干正事 xff0c 就又顺手搜了一下 xff0c 看了一些教程和资料 xff0c 加上各种大神的一些验证和文件 xff0c 终于算是把黑苹果啃下来了 简单说一
  • pip 提速方法和conda install命令,利用pip安装到conda 特定环境中

    1 pip 提速 在 pip install 包名 后面加上 i 43 镜像地址 xff0c 这样 pip 安装时即可成倍的提速了 后面的地址主要是国内的一些镜像地址 xff0c 速度会快一些 国内主要镜像地址如下 xff1a 清华 xff
  • Ubuntu:Terminal终端命令

    终端命令的基本形式 command options parameter1 parameter2 说明 xff1a 命令中第一个输入的部分绝对是 命令 xff08 command xff09 或 可执行文件 xff1b 按下 Enter 键则
  • 读取SIM卡号

    SIM 卡检测 1 at 43 ccid SIM 卡认证 43 CCID 34 89860092199936694421 34 2 at 43 cnum 读取本地ID 43 CNUM 34 80535A4E07FFFF 34 34 1392
  • 修改Mysql管理员密码(详细)

    Mysql修改管理员密码 你是否遇到mysql久了不登陆了 xff0c 就忘记密码的情况 xff0c 然后耗费不少时间瞎捉摸 那么今天 xff0c 来我这里一招教你解决问题 一 直接登录修改 xff1a 1 登录 mysql u root
  • Redis穿透、雪崩、击穿以及在生产环境中的解决办法

    Redis穿透 雪崩 击穿以及在生产中的解决办法 redis 经典八股文 xff0c 以及生产中的应对方式 一 缓存穿透 redis缓存和数据库中都没有相关数据的情况下 xff0c 由于redis中没有相关的数据 xff0c 无法拦截 xf
  • 地点主机号的最大值和最小值

    某单位分配到一个B类IP地址 xff0c 其网络号为129 250 0 0 该单位有4000台机器 xff0c 平均分布16个不同的地点 如选用子网掩码255 255 255 0 试给每一个地点分配一个子网号码 xff0c 并算出每个地点主
  • cas单点登录-自定义登录界面 / 自定义主题风格(三)

    cas单点登录 自定义登录界面 自定义主题风格 xff08 三 xff09 在前面的文章中 xff0c 介绍了使用cas实现SSO单点登录 xff0c 静态登录 xff0c 使用mysql数据库登录 但是在登录时都是跳转到了同一个登录界面
  • 切片地图服务器

    地图服务 收集了一些切片地图的URL xff0c 以后慢慢完善 天地图提供四种类型的地图 1 天地图地形 http t span class hljs list 0 7 span tianditu com DataServer T 61 t
  • Linux应用程序开发笔记:nanopi-m4(rk3399)opencv

    参考资料 xff1a OpenCV中文网站 OpenCV官网手册 图像处理 xff1a opencv的目标追踪方法总结 qt利用opencv3 4进行人脸识别和特征点提取 基于OpenCV下 多红外目标检测 跟踪 质心坐标提取 跟踪目标排序
  • samba服务免密码访问配置一

    A 安装前的准备工作 xff1a SELINUX 61 disabled 关闭防火墙 xff1a service iptables stop B 执行如下命令安装samba xff1a root 64 samba yum install s
  • androidmediacodec强制申请关键帧

    https github com AnyRTC anyRTC RTMP OpenSource issues 49 V H264Encoder RequestKeyFrame Android 6 0推送全是I 帧 或者全是P帧 急急急 49
  • C#的Convert 类使用

    C 的Convert 类使用 一 从基类型转换 二 Convert 类的常用方法说明 2 1 ChangeType Object Type 2 2 GetTypeCode Object 2 3 Convert ToByte 2 4 Conv
  • XTDrone简明安装教程

    XTDrone简明安装教程 XTDrone是基于PX4 ROS与Gazebo的无人机通用仿真平台 支持多旋翼飞行器 xff08 包含四轴和六轴 xff09 固定翼飞行器 复合翼飞行器 xff08 包含quadplane xff0c tail
  • 我的算法学习之路

    xfeff xfeff xfeff 关于 严格来说 xff0c 本文题目应该是我的数据结构和算法学习之路 xff0c 但这个写法实在太绕口 况且CS中的算法往往暗指数据结构和算法 xff08 例如算法导论指的实际上是数据结构和算法导论 xf
  • 个人面试经验分享

    九月 十月是收获的季节 xff0c 也是奔波的季节 我也不例外 xff0c 没有特殊的机遇 xff0c 也是经历了一次残酷的海选啊 xff0c 把我经历简单的分享给各位学弟学妹们 我数了一下大概面了六家公司 xff1a 阿里 xff0c 华
  • ImageField用法的一个例子

    本文以注册头像为例讲解一下ImageField怎么用 第1步我们要定义一个ImageField 在models py里面定义 这个是用来写到数据库里面的 def custom path instance filename ext 61 fi
  • ubuntu20.04配置远程连接sshd服务

    ubuntu20 04配置远程连接sshd服务 1 为什么要配置 xff1f 两种可能 xff1a 本机虚拟机上安装的系统 这种情况就是为了方便 xff0c 因为在虚拟机上只能操作不是很方便 xff01 远程机房的服务器 这种是必须的 xf
  • 使用adb从手机拉取apk包

    1 找到app对应的包名 xff1a 2 3 1 adb shell am monitor 2 启动需要获取包名的应用 3 窗口就会打印出来当前应用的包名 或者 xff1a 查看手机上所有app包名 xff1a adb shell pm l
  • 使用c++filt工具demangle C++符号

    demangle符号名 在调试C 43 43 程序时 经常会遇到未demangle的C 43 43 符号名 不了解mangle的规则时 并不太容易确定具体是哪个API 比如 使用objdump将boost日志动态库的符号表导出 你是否能够很