问题标签 [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.

0 投票
1 回答
2373 浏览

python - 私有名称修改功能

Python 标准库中是否有一个函数可以用“私有”属性名称重现 Python 的名称修改方案?似乎会有,但我一生都找不到它。

我写了这个,但如果有更好的方法,我会全力以赴。

0 投票
1 回答
4967 浏览

c# - 如何使用 DumpBin.exe 获取损坏的名称

嗨,我创建了一个 C++ DLL,我将其导入 C# 应用程序以重用函数。C ++中的功能代码是static bool IsSomethingAttached(char *Arg1[])

当我在 C# 程序中使用如下 DllImport 时,[DllImport("DllName")] 我收到错误为 EntryPointNotFound 异常。

我用了

**DumpBin /symbols Dllname.dll**获取损坏的名称。

1)但我不知道如何准确地得到损坏的名称。很少有帖子说我们应该使用 /exports ,而/exports不是/symbols只给出摘要,而且我没有得到错误的名称。请帮忙

2) 如何使用undname.exe从未修饰名称中获取修饰名称?

0 投票
0 回答
359 浏览

c# - 例外 - 入口点在dll中找不到

我创建了一个 C++ DLL,我将其导入 C# 应用程序以重用函数。C ++中的功能代码是static bool IsDisplayDeviceAttached(char *Arg1[])

当我在 C# 程序中使用如下 DllImport 时,

我仍然收到错误为 EntryPointNotFound 异常。我也ExactSpelling = true与上面一起使用,但都导致错误。

1)任何人都可以指导代码还有什么问题吗?

2) 另外,为什么我们要给 _Cdecl 和 ExactSpelling 参数等(想知道我们为什么在 DllImport 中编写它们)

0 投票
1 回答
797 浏览

c# - 将导出的 c++ 成员函数中的名称修改为 C# (Unity)

可能重复:
Unity 的 C++ 插件“EntryPointNotFoundExeption”

我了解如何防止在 c++ 中的单个函数上使用 extern "C" 进行名称修改,但是在导出成员函数时有什么方法可以防止它?

WMIWrapper.cpp

WMIWrapper.h

现在,当我想在 Unity 中使用这些函数时,我需要反编译 dll 以找出函数名称的 EntryPoints 是什么。我不想这样做。

我知道我对外部“C”有点过分热情......

0 投票
4 回答
1821 浏览

c++ - 在 C++ 中处理 C 库匿名结构类型

我们有一个大型的、旧的 C++ 应用程序,其中包含大量遗留代码和一些用 C 编写的外部库。这些库很少更新 - 只有当我们发现错误并且供应商提供补丁时。这发生在上周的一个库中,在集成新版本后,我们发现如果我们不在本地修改库(显然我们对上一个版本所做的),我们的构建会因以下错误消息而中断:

这是由于库声明了许多这样的句柄类型:

我们在某些类的函数签名中使用它:

这会产生上述错误,因为编译器无法为函数创建正确的名称错位名称,因为 _Opaque 结构没有名称。

我们目前的解决方法是修补库头文件,显式地为结构命名:

这显然很糟糕,因为如果可能的话,我们不想碰图书馆。另一个更糟糕的选择是将类型转换为void*所有函数签名并将它们转换回各自的类型。用纯 C 重写每个受影响的函数是最糟糕的选择......

所以,我的问题是:有没有比修补库更好的选择?我忽略了一个简单的解决方案吗?解决这个问题的最佳方法是什么?

0 投票
1 回答
627 浏览

c++ - 当我尝试使用异常 [CodeBlocks, C++] 时得到名称修饰

我第一次尝试使用异常,但即使这是一个非常简单的示例,我也无法编译它,我查看了几个示例并尝试以多种不同的方式对其进行编码,但我什至不确定问题到底出在哪里,因为当我引入 catch/try/throw 时,我得到了名称处理,这是我的代码,希望它真的很愚蠢:)


提前感谢您的帮助!

编辑:对不起,我忘了发布错误信息:它是

0 投票
3 回答
414 浏览

linker - C++ 中的符号——它们是在非调试版本中导出的吗?

C++ 会破坏符号名称。然后可以在调试时使用这些名称——但前提是没有剥离二进制文件。其他使用场景是共享库——符号名称可以导出并在库中可见。

但在两者中:

一种。剥离构建,

湾。和正常的非共享库构建

二进制文件中应该没有可用的符号?例如,字符串工具不会输出任何符号?

0 投票
2 回答
1705 浏览

c++ - C/C++ 中的字符串处理

我正在寻找一种在 C/C++ 中进行字符串修饰的方法。该软件的要求是不存在纯文本字符串(不需要加密,只需修改),我正在尝试找出满足此要求的阻力最小的路径。类名的混淆和修改是通过相对容易获得的工具来解决的,但字符串修改似乎是一个更难跨越的障碍。

如果这是标准答案,我对软件的后处理感到满意。他们的工具是否已经为此编写了,还是我需要破解自己的脚本来处理字符串?

我也明白,对静止的琴弦进行修饰并不是真正的安全。我明白了,你可能也明白了,但是嘿,这是软件上的一个要求,所以我必须满足它。

谢谢!斯蒂芬

0 投票
2 回答
959 浏览

visual-c++ - 如何在 MinGW 中使用audiere dll

我正在使用用 MinGW g++ 编译器编译的 wxWidgets 构建一个项目。我也在使用 wxWidgets 平台的一个组件来播放 mp3 声音片段,但它不可靠,所以我去寻找另一个解决方案。我找到了 audiere 并从他们的网站下载了 1.9.4 版本。该软件包包含一个 *.lib 文件和一个 *.dll。我试图将它添加到我的项目中,但它不起作用(我认为是因为我下载的包是在 MSVC 中编译的)。

我使用名为 lib2a 的工具创建了一个 *.def 文件,以将 MSVC 库转换为可以与 MinGW 一起使用的 .a 库。def 文件有这些定义...

LIBRARY "audiere.dll" EXPORTS _AdrCreateLoopPointSource@4 _AdrCreateMemoryFile@8 _AdrCreatePinkNoise@0 _AdrCreateSampleBuffer@20 _AdrCreateSampleBufferFromSource@4 _AdrCreateSquareWave@8 _AdrCreateTone@8 _AdrCreateWhiteNoise@0 _AdrEnumerateCDDevices@0 _AdrGetSampleSize@4 _AdrGetSupportedAudioDevices@0 _AdrGetSupportedFileFormats@0 _AdrGetVersion@0 _AdrOpenCDDevice@4 _AdrOpenDevice @8 _AdrOpenFile@8 _AdrOpenMIDIDevice@4 _AdrOpenSampleSource@8 _AdrOpenSampleSourceFromFile@8 _AdrOpenSound@12 _AdrOpenSoundEffect@12

当我去链接我的项目时,我收到以下错误:

* MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x8291): 未定义引用_imp__AdrOpenDevice@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x82db): undefined reference toimp _AdrOpenSampleSource@8' * MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x830f): 未定义引用_imp__AdrOpenSound@12' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x87ce): undefined reference toimp _AdrOpenDevice@ 8' * MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x8818): 未定义对_imp__AdrOpenSampleSource@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x884c): undefined reference toimp _AdrOpenSound@12' 的引用

例如,在我的代码中,函数是“OpenDevice”...在 def 文件中它是 >“_AdrOpenDevice@8”,但在我的未定义引用链接错误中,它是“ imp _AdrOpenDevice@8”。所以我的头在旋转,不知道此时该做什么。

有没有一种简单的方法可以解决 dll 中的名称修改问题?

也许用二进制编辑器编辑它以“修复”名称并让它与我现有的代码一起工作(没有下载整个audiere代码来重新编译和创建dll [如果可能的话]使用MinGW ...我想避免如果可以的话)...我的起点是一个 *.lib 文件和一个在 MSVC 中创建的 dll,但我需要在 MinGW 中使用它。

有人对如何做到这一点有任何线索吗?

0 投票
4 回答
1474 浏览

c++ - 使用 C 中的 C++ 重整函数

我有一个 .lib 文件,我没有它的源代码。

我需要一个导出的函数,但我是用 C 语言编写的,并且该函数是 C++ 名称损坏的。我不会写extern "C",因为我没有源代码。

如何在没有源代码的情况下链接损坏的函数并切换到 C++?