标签: name-mangling

使用$ non_lazy_ptr进行OSX 10.5 Leopard符号管理

为什么Leopard会使用$ non_lazy_ptr来破坏一些符号?更重要的是,修复未定义的符号错误的最佳方法是什么,因为符号已经被$ non_lazy_ptr修改了?

macos osx-leopard non-lazy-ptr darwin name-mangling

3
推荐指数
1
解决办法
6225
查看次数

使用visual studio sdk去除函数名称

要解决Visual Studio生成的错位C++名称,您可以使用undname.exe.

但是,如果你想避免每次需要去封装时创建一个完整的流程的开销呢?
Visual Studio SDK中是否有任何等效功能(VS2005中应该支持)?

c++ visual-studio-addins visual-studio-2005 name-mangling

3
推荐指数
1
解决办法
1040
查看次数

编译器生成的Cruft

我试图使用Reg Gate的Reflector从程序集中恢复源代码.原始资源利用了几个C#3.0功能,这使得恢复有点困难.例如,这里是匿名类型的恢复源.弹出的第一件事是类标识符中的<> in.运行时类型命名规则显然比设计时规则更自由.很公平.简单的搜索和替换将解决这个问题.我必须注意哪些其他编译器修改以及如何处理它们?

[DebuggerDisplay(@"\{ OverrideType = {OverrideType}, EntityType = {EntityType} }", Type="<Anonymous Type>"), CompilerGenerated]
internal sealed class <>f__AnonymousType1<<OverrideType>j__TPar, <EntityType>j__TPar>
{
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    private readonly <EntityType>j__TPar <EntityType>i__Field;
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    private readonly <OverrideType>j__TPar <OverrideType>i__Field;

    [DebuggerHidden]
    public <>f__AnonymousType1(<OverrideType>j__TPar OverrideType, <EntityType>j__TPar EntityType)
    {
        this.<OverrideType>i__Field = OverrideType;
        this.<EntityType>i__Field = EntityType;
    }

    [DebuggerHidden]
    public override bool Equals(object value)
    {
        var type = value as <>f__AnonymousType1<<OverrideType>j__TPar, <EntityType>j__TPar>;
        return (((type != null) && EqualityComparer<> <<OverrideType>j__TPar>.Default.Equals(this.<OverrideType>i__Field, type.<OverrideType>i__Field)) && EqualityComparer<<EntityType>j__TPar>.Default.Equals(this.<EntityType>i__Field, type.<EntityType>i__Field));
    }

    [DebuggerHidden]
    public override int GetHashCode()
    {
        int num = -338316509; …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction recovery name-mangling

3
推荐指数
1
解决办法
2371
查看次数

ASP.NET名称修改是否一致?

当你有这样的ASP控件:

<asp:TreeView ID="TreeItems" runat="server"></asp:TreeView>
Run Code Online (Sandbox Code Playgroud)

它生成的html会破坏名称.如果我想直接访问生成项的ID,我可以尝试找出它破坏名称的内容并查找该ID.

生成的项目的名称是否保证以Microsoft的任何标准以特定方式完成?如果他们发布了以不同方式执行此操作的新版.NET,我只是害怕这种情况.有没有办法在代码中生成自己的名称?

asp.net name-mangling

3
推荐指数
1
解决办法
412
查看次数

导出的函数符号名称重整

我有一个D DLL,由我无法控制的C++程序加载.程序LoadLibrarys我的DLL并使用GetProcAddress查找名为"extension_load"的函数,该函数接受一个参数(一个指针).在我的D DLL中,我有:

extern (C) int extension_load(void* ptr) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此名称需要导出为ex​​tension_load,但它将作为extension_load @ 4导出,因此GetProcAddress无法找到它.如何在没有名称修改的情况下将其设为plain extension_load?

dll d export name-mangling

3
推荐指数
1
解决办法
786
查看次数

python中的私有公共保护访问说明符

我们可以在python中模拟私有和受保护的访问说明符吗?

名字莽莽

例如:

__var=10
Run Code Online (Sandbox Code Playgroud)

可以模拟私有,但它可以通过对象轻松访问外部.

object._className__var
Run Code Online (Sandbox Code Playgroud)

那么有没有一种方法我们可以直接模拟或做python一个我不知道的解决方案?

python private public name-mangling access-specifier

3
推荐指数
1
解决办法
4081
查看次数

winapi从函数的地址中获取受损的名称

在我的C++ applicatoin我有功能的虚拟地址,我希望得到他们的错位的名字.现在我只能通过使用winapi SymFromAddr函数获得未编号的名称.有没有办法获得受损的名字呢?

c++ winapi name-mangling

3
推荐指数
1
解决办法
215
查看次数

在extern中编写c ++代码

我正在尝试实现一个外部c ++头接口,它将作为共享库生成.它们的示例接口具有包含在extern"C"中的c样式功能,因为它们不希望执行名称修改.

我当前的实现依赖于qt.我现在可以将这个qt代码放在extern"C"中并期望它开箱即用吗?如果这有效的原因?

伪代码://不要指望它可以工作并且可能包含错误.

extern "C"{

void doStuff(){

   QString filename="Data.txt";
   QFile file( filename );

  if ( file.open(QIODevice::ReadWrite) )
   {
     QTextStream stream( &file );
     std::stringstream ss;
     ss<<"something"<< endl;
   }

 }
 }
Run Code Online (Sandbox Code Playgroud)

谢谢!

c c++ qt name-mangling

3
推荐指数
1
解决办法
436
查看次数

为什么名称修改对C++中的主函数没有影响?

C++编译器经常破坏函数名称以支持许多功能.Programer可以使用extern"C"方式抑制默认名称修改.但是,为什么int main(int, char **)不受影响呢?

// test.cpp

int max(int a, int b) {
    return a > b ? a : b;
}

extern "C" {
    int min(int a, int b) {
        return a < b ? a : b;
    }
}

int main (int argc, char *argv[]) {
    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

$  xcrun --sdk macosx clang -x c++ -c test.cpp -o test  
$  xcrun nm -nm test  

0000000000000000 (__TEXT,__text) external __Z3maxii  
0000000000000030 (__TEXT,__text) external _min  
0000000000000060 …
Run Code Online (Sandbox Code Playgroud)

c++ program-entry-point name-mangling

3
推荐指数
2
解决办法
206
查看次数

为什么Linux上的C++版本不是唯一的

请考虑以下C++程序:

int _Z5func2v;

void func2() {
}
Run Code Online (Sandbox Code Playgroud)

当您尝试编译它时,它会失败:

$ g++ test.cpp -c
/tmp/cc1RDxpU.s: Assembler messages:
/tmp/cc1RDxpU.s:13: Error: symbol `_Z5func2v' is already defined
/tmp/cc1RDxpU.s: Error: .size expression for _Z5func2v does not evaluate to a constant
Run Code Online (Sandbox Code Playgroud)

这是因为程序定义了一个全局变量,该变量与名称重整后的函数名称相同.

我可以想到很多方法可以解决这个问题,其中最简单的方法是在错位名称的开头使用两个下划线(两个下划线保留用于私有实现).

问题是:为什么选择的方案可以实现?

c++ g++ name-mangling

3
推荐指数
1
解决办法
67
查看次数