问题标签 [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.
python - 私有名称修改功能
Python 标准库中是否有一个函数可以用“私有”属性名称重现 Python 的名称修改方案?似乎会有,但我一生都找不到它。
我写了这个,但如果有更好的方法,我会全力以赴。
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从未修饰名称中获取修饰名称?
c# - 例外 - 入口点在dll中找不到
我创建了一个 C++ DLL,我将其导入 C# 应用程序以重用函数。C ++中的功能代码是static bool IsDisplayDeviceAttached(char *Arg1[])
当我在 C# 程序中使用如下 DllImport 时,
我仍然收到错误为 EntryPointNotFound 异常。我也ExactSpelling = true
与上面一起使用,但都导致错误。
1)任何人都可以指导代码还有什么问题吗?
2) 另外,为什么我们要给 _Cdecl 和 ExactSpelling 参数等(想知道我们为什么在 DllImport 中编写它们)
c# - 将导出的 c++ 成员函数中的名称修改为 C# (Unity)
我了解如何防止在 c++ 中的单个函数上使用 extern "C" 进行名称修改,但是在导出成员函数时有什么方法可以防止它?
WMIWrapper.cpp
WMIWrapper.h
现在,当我想在 Unity 中使用这些函数时,我需要反编译 dll 以找出函数名称的 EntryPoints 是什么。我不想这样做。
我知道我对外部“C”有点过分热情......
c++ - 在 C++ 中处理 C 库匿名结构类型
我们有一个大型的、旧的 C++ 应用程序,其中包含大量遗留代码和一些用 C 编写的外部库。这些库很少更新 - 只有当我们发现错误并且供应商提供补丁时。这发生在上周的一个库中,在集成新版本后,我们发现如果我们不在本地修改库(显然我们对上一个版本所做的),我们的构建会因以下错误消息而中断:
这是由于库声明了许多这样的句柄类型:
我们在某些类的函数签名中使用它:
这会产生上述错误,因为编译器无法为函数创建正确的名称错位名称,因为 _Opaque 结构没有名称。
我们目前的解决方法是修补库头文件,显式地为结构命名:
这显然很糟糕,因为如果可能的话,我们不想碰图书馆。另一个更糟糕的选择是将类型转换为void*
所有函数签名并将它们转换回各自的类型。用纯 C 重写每个受影响的函数是最糟糕的选择......
所以,我的问题是:有没有比修补库更好的选择?我忽略了一个简单的解决方案吗?解决这个问题的最佳方法是什么?
c++ - 当我尝试使用异常 [CodeBlocks, C++] 时得到名称修饰
我第一次尝试使用异常,但即使这是一个非常简单的示例,我也无法编译它,我查看了几个示例并尝试以多种不同的方式对其进行编码,但我什至不确定问题到底出在哪里,因为当我引入 catch/try/throw 时,我得到了名称处理,这是我的代码,希望它真的很愚蠢:)
提前感谢您的帮助!
编辑:对不起,我忘了发布错误信息:它是
linker - C++ 中的符号——它们是在非调试版本中导出的吗?
C++ 会破坏符号名称。然后可以在调试时使用这些名称——但前提是没有剥离二进制文件。其他使用场景是共享库——符号名称可以导出并在库中可见。
但在两者中:
一种。剥离构建,
湾。和正常的非共享库构建
二进制文件中应该没有可用的符号?例如,字符串工具不会输出任何符号?
c++ - C/C++ 中的字符串处理
我正在寻找一种在 C/C++ 中进行字符串修饰的方法。该软件的要求是不存在纯文本字符串(不需要加密,只需修改),我正在尝试找出满足此要求的阻力最小的路径。类名的混淆和修改是通过相对容易获得的工具来解决的,但字符串修改似乎是一个更难跨越的障碍。
如果这是标准答案,我对软件的后处理感到满意。他们的工具是否已经为此编写了,还是我需要破解自己的脚本来处理字符串?
我也明白,对静止的琴弦进行修饰并不是真正的安全。我明白了,你可能也明白了,但是嘿,这是软件上的一个要求,所以我必须满足它。
谢谢!斯蒂芬
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 to
imp _AdrOpenSampleSource@8' * MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x830f): 未定义引用_imp__AdrOpenSound@12' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x87ce): undefined reference to
imp _AdrOpenDevice@ 8' * MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x8818): 未定义对_imp__AdrOpenSampleSource@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x884c): undefined reference to
imp _AdrOpenSound@12' 的引用
例如,在我的代码中,函数是“OpenDevice”...在 def 文件中它是 >“_AdrOpenDevice@8”,但在我的未定义引用链接错误中,它是“ imp _AdrOpenDevice@8”。所以我的头在旋转,不知道此时该做什么。
有没有一种简单的方法可以解决 dll 中的名称修改问题?
也许用二进制编辑器编辑它以“修复”名称并让它与我现有的代码一起工作(没有下载整个audiere代码来重新编译和创建dll [如果可能的话]使用MinGW ...我想避免如果可以的话)...我的起点是一个 *.lib 文件和一个在 MSVC 中创建的 dll,但我需要在 MinGW 中使用它。
有人对如何做到这一点有任何线索吗?
c++ - 使用 C 中的 C++ 重整函数
我有一个 .lib 文件,我没有它的源代码。
我需要一个导出的函数,但我是用 C 语言编写的,并且该函数是 C++ 名称损坏的。我不会写extern "C"
,因为我没有源代码。
如何在没有源代码的情况下链接损坏的函数并切换到 C++?