问题标签 [demangler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
74 浏览

c++ - C++ 过滤器不起作用。C++ 名称拆解

链接映射文件中的符号

使用 c++flit:

结果:

__ZZZZZZZZZZN5kinda16FillCardInfoPage6renderEvENK3

我认为这个符号是一个未命名的 lambda 类型。我们能得到真正的范围和原始名称吗?

0 投票
0 回答
109 浏览

c++ - 在 Windows 上使用 c++filt 进行拆解 - gnu-v3

我正在尝试正确解开从 DWARF 输出中获取的一些符号。

在 Linux 上,当我这样做时c++filt --format gnu-v3。我可以转换_ZZNV9SomeClass5afuncEiE1xSomeClass::afunc(int) volatile::x

在 Windows 上,我安装了包含 c++filt 的 Mingw32。相同的命令行产生输入,这意味着它无法解开。

什么可能导致这种情况?我认为指定格式(gnu-v3)足以使其跨​​平台工作。

0 投票
2 回答
134 浏览

c++ - LLVM 是否有用于解除 Microsoft C++ 重整的工具?

我在 Windows 上使用 LLVM,我想知道是否有一个命令行工具可以解开 MSVC C++ 重整。我说的是命令行工具,例如 llvm-cxxfilt。

我在 LLVM 中看到了一些提交,但不确定这些提交是作为某种工具公开还是只是 C++ API。

我尝试在我的 LLVM 安装文件夹中查找这些提交中提到的 llvm-undname,但什么也没找到。

0 投票
0 回答
61 浏览

c++ - dll的Objdump demangle样式

我在 dll 上使用带有 -C 选项的 objdump 来对输出进行解组,但解组不起作用。

我猜(可能是错误的)它来自风格。根据文档, --demangle 选项可以采用以下样式:

-C, --demangle[=STYLE] 解码损坏/处理的符号名称 STYLE,如果指定,可以是'auto'、'gnu'、'lucid'、'arm'、'hp'、'edg'、'gnu -v3','java','gnat'

但是当我尝试一种风格时:

或者

我收到以下错误:

objdump:未知的拆解风格 gnu

我的机器:x86_64 GNU/Linux

0 投票
0 回答
40 浏览

c++ - 如何在 Qt6 中对 QStringList 进行 demangle,使其不会转换为“QList“?

我在 Qt5 中使用这个功能已经有一段时间了:

自从开始使用Qt6,

现在生产

这个小烦恼破坏了我创建的图书馆。这没什么大不了的,但我想知道是否可以“修复” demangle 函数以准确反映类型名。

0 投票
2 回答
78 浏览

c++ - 去错名称的格式有多可靠?

我正在开发一个非常动态的 C++ 程序,它允许用户定义自己的数据结构,然后在输出HDF5数据文件中序列化这些数据结构。我没有要求用户定义新的 HDF5 数据类型,而是将他们的数据结构“拆分”为 HDF5 子组,在其中存储不同的成员变量数据集。我有兴趣使用写入其中的数据结构类型标记具有子组成员的 HDF5 组,以便数据文件的未来用户将更多地了解如何使用其中包含的数据。

所有这些背景都让我想到了标题中的问题。去杂化的名称有多可靠?问题的症结可以用下面的例子来概括(boost以 demangle 为例,不是必须的)。如果我使用

要在具有给定编译器的一个系统上获取 demangled 名称,MyType如果我在具有可能不同编译器的不同系统上使用相同的代码,我会得到相同的结果吗?tn_sys_with_clang == tn_sys_with_gcc只要MyType是同一类型,我可以安全地相信这种相等性吗?

在我看来,答案显然是肯定的,我在 Compiler Explorer 上检查了许多不同编译器的几个示例;但是,我想确信我没有遗漏任何边缘情况。此外,我不确定编译器之间的拆解过程有何不同,以及这如何导致引入不同数量的空白。

这里的重点是唯一改变的变量是系统和编译器。我知道更改定义MyType或将其移动到不同的命名空间或包含讨厌的using指令或更改我的 demangle 可能会更改 demangle 的字符串输出。我想关注一个更有限的问题,只有编译器和系统会发生变化。

0 投票
1 回答
19 浏览

c++ - abi::__cxa_demangle 不能对符号进行解串?

我不确定为什么这无法解开符号:

标准输出:

在 docker 下编译(C++11):

在主机上执行: