首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏酷酷的哀殿

    为什么 demangle 会失败?

    h$n()v c++filt 在了解 name mangle 具有不同的“方言”后,很容易就猜测到“demangle 失败的原因可能是不同版本的 c++filt 工具存在不同解析方式”。 经过测试,笔者电脑中的 c++filt 可以正常进行对符号进行 demangle 操作。 ? 通过 which 命令,我们对比一下两台电脑中 c++filt 的区别。 在 demangle 失败的电脑中,c++filt 命令对应执行文件是 /usr/bin/c++filt 。 /usr/bin/c++filt 。 很明显,对于 iOS 开发者,我们应该选择 Xcode 工具自带的 c++filt 才更加合适 总结 本文介绍了 name mangle 存在不同的版本,同时, c++filt 工具也存在不同的版本,两者必须互相匹配才能正常进行

    1.7K31发布于 2020-10-26
  • 来自专栏debugeeker的专栏

    《coredump问题原理探究》Linux x86版6.5节虚函数的coredump例子

    s3_exC2Ev> 0x08048608 <+40>: mov %ebx,0x18(%esp) 可知,esp+0x18存放着类xuzhina_dump_c6_s3_ex(shell c+ 0x00000000 0x00000000 可以看到,它是偏移_ZTV21xuzhina_dump_c6_s3_ex,而_ZTV21xuzhina_dump_c6_s3_ex是 (gdb) shell c+ 0000192c R_386_JUMP_SLOT strstr 00001930 R_386_JUMP_SLOT __cxa_finalize [buckxu@xuzhina 3_ex]$ c+ +filt _ZTI21xuzhina_dump_c6_s3_ex typeinfo for xuzhina_dump_c6_s3_ex [buckxu@xuzhina 3_ex]$ c++filt _ ZN21xuzhina_dump_c6_s3_ex8parseValEPc xuzhina_dump_c6_s3_ex::parseVal(char*) [buckxu@xuzhina 3_ex]$ c+

    73900发布于 2018-09-20
  • 来自专栏HappenLee的技术杂谈

    C++雾中风景15:聊聊让人抓狂的Name Mangling

    ::basic_string<char, std::char_traits<char>, std::allocator<char> > > > Happen::MyClass::* 2.2 使用nm或c+ +filt进行Name Demangling 通过代码进行名字辨析确实会带来诸多不便,所以Linux提供了两个好用的工具: nm与c++filt,它们可以作用在二进制文件,函数链接库等之上(nm其实就是 nm -C bin/.so/.a 或者也可以通过c++filt来实现同样的功能 nm bin/.so/.a | c++filt 3.C语言的Name Mangling C++能够支持调用C语言的函数,同样也支持实现函数库被

    1.2K41发布于 2020-09-28
  • 来自专栏自学气象人

    Linux 动态库 undefined symbol 原因定位与解决方法

    0000000000008150 T __ZN13SXVideoEngine6Public7License26IsStadardTemplateSupportedEv # nm 返回的并不是原始函数名,通过 c+ +filt 获取原始名称 $ c++filt __ZN13SXVideoEngine6Public7License10SetLicenseEPKc SXVideoEngine::Public::License /SXVideoEngine-Core-Lib/blend2d/linux/lib] c++filt 用于获取符号的原始名 $ c++filt __ZN13SXVideoEngine6Public7License10SetLicenseEPKc

    9.6K10编辑于 2023-06-20
  • 来自专栏遊俠扎彪

    C++ 的 Name Mangling

    GNU Binutils中Name De-Mangling的相关工具 GNU Binutils工具集中提供了Name De-Mangling相关的工具,最典型的c++filt和nm,使用举例如下: c++filt _ZN9NS_QZSOCK10CTcpClient11SendAndRecvEPciRiRjd NS_QZSOCK::CTcpClient::SendAndRecv(char*, int

    6.5K20发布于 2017-05-12
  • 来自专栏蓝天

    C/C++编程可用的Linux自带工具

    c++filt - (解码C++名字工具,使用nm看到是编码后的名字)Filter to demangle encoded C++ symbols.

    1.5K20发布于 2018-08-06
  • 来自专栏程序员互动联盟

    【专业技术】在C/C++程序中打印当前函数调用栈

    这里介绍如何用命令来demangle,通过c++filt命令便可以: wuzesheng@ubuntu:~/work/test$c++filt<<<"_Z16print_stacktracev" print_stacktrace

    3.8K40发布于 2018-03-12
  • 来自专栏爱可生开源社区

    第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?

    可以看到前面这串文字是一个函数签名的编码,用 c++filt 还原编码以后,可以看到完整的函数签名。 红框内的这串信息的意思就是崩溃位置是 一个函数起始位置 + 偏移量。

    1K20发布于 2020-11-11
  • 来自专栏上善若水

    如何识别C++编译以后的函数名

    如果跟一个整型,那就是_ZN1N1C4FuncEi 另外在linux下有一个工具可以实现这种转换,这个工具是c++filt , 注意不是c++filter. xuyang@ubuntu15:~/blog $ c++filt _ZN1N1C4FuncEi N::C::Func(int) native: #05 pc 003f0bcb /system/lib/libart.so (_ZN3art25JniMethodEndWithReferenceEP8

    2.9K20发布于 2018-09-28
  • 来自专栏FreeBuf

    oss-fuzz-gen:一款基于LLM的模糊测试对象生成与评估框架

    OpenAI GPT-3.5-turbo OpenAI GPT-4 工具要求 Python 3.11 pip python3.11-venv Git Docker Google Cloud SDK c+

    1.2K10编辑于 2024-03-18
  • 来自专栏debugeeker的专栏

    《coredump问题原理探究》Linux x86版3.8节栈布局之栈溢出coredump例子

    而_Z8wrapper1iPc则可以这样知道原型: (gdb) shell c++filt _Z8wrapper1iPc wrapper1(int, char*) 由于wrapper2申请了0x18个字节的局部变量空间 研究一下_Z8overflowiPc: (gdb) shell c++filt _Z8overflowiPc overflow(int, char*) (gdb) disassemble overflow

    98020发布于 2018-09-20
  • 来自专栏Postgresql源码分析

    Pglog高压下日志瓶颈分析

    showcpuutilization -g --no-children --stdio perf top -n -g --no-children 使用gprof2dot处理数据图形化展示结果 perf script | c+

    31720编辑于 2022-05-12
  • 来自专栏算法之美

    每日一问(11) 什么是虚函数

    <vtable for Derived+16>}, <No data fields>} (gdb) (gdb) p /a *((void**)0x555555755d48) (gdb) shel c+

    63930发布于 2021-02-03
  • 来自专栏debugeeker的专栏

    《coredump问题原理探究》Linux x86版7.2节vector coredump例子

    0x080487e4 <+112>: mov %eax,(%esp) 0x080487e7 <+115>: call 0x8048a3e <_ZNSt6vectorIiSaIiEE5beginEv> 用c+ _ZNSt6vectorIiSaIiEEC2Ev和_ZNSt6vectorIiSaIiEE5beginEv是 [xuzhina@localhost s1_ex]$ c++filt _ZNSt6vectorIiSaIiEEC2Ev std::vector<int, std::allocator<int> >::vector() [xuzhina@localhost s1_ex]$ c++filt _ZNSt6vectorIiSaIiEE5beginEv

    1.4K10发布于 2018-09-20
  • 来自专栏算法之美

    声明和定义的区别(深入理解)

    () { long c = ABC( 10, 20 ); } 编译没有问题 运行期间出错: undefined symbol xxx 问题定位: nm a.out||grep xx |c+

    1.6K100发布于 2018-04-13
  • 来自专栏CDN及云技术分享

    C++ 协程篇一:co_yield和co_return

    stack trace), after the compiler transformed it, filter (or perhaps _Z6filter9Generatori.actor, which c+ 在源代码中),该filter函数有两个参数(Generator和int),但在物理上(在堆栈跟踪中),在编译器转换它之后,filter(或者可能是 _Z6filter9Generatori.actor,c+

    3.6K30编辑于 2023-02-25
  • 来自专栏悟空被FFmpeg玩

    定制交叉编译环境-gcc

        php         readelf arm-linux-ar         arm-linux-gcc        arm-linux-ld.bfd  arm-linux-readelf  c+

    2.7K50发布于 2019-03-05
  • 来自专栏linjinhe的专栏

    现代 C++:自动类型推导

    typeid(T).name() 的输出可以通过 c++filt 工具转换成实际可读的类型名称。 相比 auto,decltype 用得少很多。

    1.9K30发布于 2020-06-02
  • 来自专栏KAAAsS's Blog

    浅谈C语言中的类型声明

    *(*a)(); cout << demangle(typeid(a)) << endl; return 0; } 于是输出就变成了: int* (*)() 当然,也可以通过c+ λ c++filt -t PFPivE int* (*)() 阅读重整化类型(GCC,cross-vendor C++ ABI) 不过,去重整完的类型名似乎并不太能提供多少关于这个类型的信息,反倒是重整过的类型名表达的更加清楚

    2.1K20编辑于 2022-01-14
  • 来自专栏C/C++基础

    认识目标文件的符号

    binutils里面提供了一个叫 c++filt 的工具可以用来解析被修饰过的名称,比如: c++filt _ZN1N1C4funcEi N::C::func(int) 对于全局变量来说,它跟函数一样都是一个全局可见的名称

    2K40发布于 2019-06-24
领券