问题标签 [name-mangling]
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.
c++ - C++中extern "C" 的作用是什么?
放入 C++ 代码到底有什么作用extern "C"
?
例如:
python - 私有名称修改有什么好处?
Python为类方法和属性提供私有名称修饰。
是否有需要此功能的具体案例,或者它只是 Java 和 C++ 的继承?
请描述一个应该使用 Python 名称修饰的用例,如果有的话?
另外,我对作者只是试图防止意外的外部属性访问的情况不感兴趣。我相信这个用例与 Python 编程模型不一致。
c++ - 在 OS/X (10.5.7) 中生成 C++ 回溯
我一直在使用 backtrace 和 backtrace_symbols 来生成程序堆栈跟踪,以用于日志记录/诊断。它似乎大致工作,但是,我得到了一点修饰,并且没有与每个函数调用相关联的随附文件/行号(正如我在 gdb bt 调用或其他东西中所期望的那样)。这是一个例子:
1 leonardo 0x00006989 _ZN9ExceptionC2E13ExceptionType + 111
2 leonardo 0x00006a20 _ZN9ExceptionC1E13ExceptionType + 24
3 leonardo 0x0000ab64 _ZN5Rules11ApplyActionER16ApplicableActionR9GameState + 1060
4 leonardo 0x0000ed15 _ZN9Simulator8SimulateEv + 2179
5 leonardo 0x0000eec9 _ZN9Simulator8SimulateEi + 37
6 leonardo 0x00009729 main + 45
7 leonardo 0x000025c6 start + 54
任何我遗漏的东西,做一些愚蠢的事情,或者这就是我在 OS/X 上的回溯中所能期望的?
其他一些花絮:
rdynamic
我正在使用的 g++ 版本(4.0.1)的链接选项。-g/-g3
没有任何区别。
abi::__cxa__demangle
似乎什么也没做
language-agnostic - 什么是名称修饰,它是如何工作的?
请解释什么是名称修饰,它是如何工作的,它解决了什么问题,以及在哪些上下文和语言中使用。名称修改策略(例如,编译器选择什么名称以及为什么选择)是一个加分项。
c++ - 如何在 Linux 上查看(C 和 C++)二进制符号?
你们都用什么工具?demangle c++ 符号如何能够将其传递给分析器工具,例如opannotate?
谢谢
c++ - 如何停止对我的 DLL 导出函数的名称修改?
我正在尝试创建一个导出名为“GetName”的函数的 DLL。我希望其他代码能够调用此函数而不必知道损坏的函数名称。
我的头文件如下所示:
我的代码如下所示:
当我构建时,DLL 仍然导出名称为:“_GetName@0”的函数。
我究竟做错了什么?
reflection - Scala:如何动态实例化对象并使用反射调用方法?
在 Scala 中,动态实例化对象并使用反射调用方法的最佳方法是什么?
我想做以下Java代码的Scala等价物:
在上面的代码中,类名和方法名都是动态传入的。上面的 Java 机制可能可以用于Foo
and hello()
,但是 Scala 类型与 Java 的类型不是一一对应的。例如,可以为单例对象隐式声明一个类。Scala 方法也允许使用各种符号作为它的名称。两者都通过名称修饰来解决。请参阅Java 和 Scala 之间的互操作。
另一个问题似乎是通过解决重载和自动装箱来匹配参数,在Reflection from Scala - Heaven and Hell中有描述。
delphi - Delphi - 解开 BPL 中的名称
是否可以在 Delphi 中解开这些名称?如果是这样,我在哪里可以获得更多信息?
在 dbrtl100.bpl 中找不到某个条目的错误消息示例 我想知道它找不到哪个确切的函数(单元、类、名称、参数等)。
我知道这是 Dbcommon 单元中的 GetTableNameFromSQLEx 方法(我有带有 RTL/VCL 源的 Delphi),但有时我会遇到并非所有代码都可用的应用程序(是的,客户应该始终为第 3 方购买所有源代码东西,但有时他们不会)。
但是假设这是一个我没有代码的例子,或者只有接口文件(BDE.INT 任何人?)它有什么参数(即哪些潜在的过载)?它有什么返回类型?
对于任何 Delphi 版本,这是否相同?
——杰伦
编辑 1:
感谢 Rob Kennedy:tdump -e dbrtl100.bpl 成功了。根本不需要-um :
编辑 2:
感谢 TOndrej 发现了这篇德语 EDN 文章(英文谷歌翻译)。那篇文章非常准确地描述了这种格式,应该可以创建一些 Delphi 代码来解决这个问题。
可惜作者提到的网站(和电子邮件)现在已经死了,但很高兴知道这个信息。
——杰伦
c++ - 使用 Visual Studio sdk 取消装饰函数名称
要取消修饰 Visual Studio 生成的错位 C++ 名称,您可以使用undname.exe
.
但是,如果您想避免每次需要取消装饰时都创建完整流程的开销,该怎么办?
Visual Studio SDK 中是否有任何等效功能(VS2005 应该支持)?
c++ - 如何截断 GDB 的反汇编命令显示的损坏的 C++ 标识符?
GDB 的反汇编命令非常适合短 C 标识符,例如main。对于冗长的、错位的 C++ 标识符,冗长是多余的。例如,使用 icpc 我看到的结果如下
在 CLI 中显示太长很烦人。它们使 GDB 的 TUI 程序集显示几乎毫无用处。
有没有办法告诉 GDB 显示截断的标识符?说剪辑除了 50 个字符之外的所有字符?