MSVC 函数分解
MSVC function demangling
我有下一个功能:
namespace TEST {
class TEST {
int a;
int b;
};
}
namespace UNION_TEST {
union UNION_TEST {
int a;
int b;
};
}
union UNION_TEST_NEW {
int a;
int b;
};
namespace NAMESPACE_1 {
namespace NAMESPACE_2 {
union UNION_NAMESPACE_2 {
int a, b;
};
}
}
void f1(UNION_TEST::UNION_TEST t, UNION_TEST::UNION_TEST t1) {
return;
}
void f2(UNION_TEST::UNION_TEST t, TEST::TEST c, UNION_TEST::UNION_TEST t1) {
return;
}
void f3(UNION_TEST_NEW u) {
return;
}
void f4(NAMESPACE_1::NAMESPACE_2::UNION_NAMESPACE_2 u, TEST::TEST c, UNION_TEST::UNION_TEST t1) {
return;
}
对应的错位符号是:
0x000034e0 2 .text ?f1@@YAXTUNION_TEST@1@0@Z
0x00003500 2 .text ?f2@@YAXTUNION_TEST@1@VTEST@2@0@Z
0x00003520 2 .text ?f3@@YAXTUNION_TEST_NEW@@@Z
0x00003530 2 .text ?f4@@YAXTUNION_NAMESPACE_2@NAMESPACE_2@NAMESPACE_1@@VTEST@4@TUNION_TEST@5@@Z
根据这个 http://www.agner.org/optimize/calling_conventions.pdf(第 27 页),我们有联合 X -> TX@@,那么为什么函数 f1、f2 末尾没有 @@ 以及联合时如何区分with 命名空间是结束并开始下一个参数?
感谢您的关注和帮助。
如您所见,关于联合名称 X
转换为 TX@@
的声明并不是对您的 MSVC 版本使用的名称改编的正确描述。请注意,"agner.org" 与 Microsoft 没有关联,并且不提供官方文档。
至于你的问题,一个错位名称的不同部分是如何分开的,看起来一个@就足够了。
我有下一个功能:
namespace TEST {
class TEST {
int a;
int b;
};
}
namespace UNION_TEST {
union UNION_TEST {
int a;
int b;
};
}
union UNION_TEST_NEW {
int a;
int b;
};
namespace NAMESPACE_1 {
namespace NAMESPACE_2 {
union UNION_NAMESPACE_2 {
int a, b;
};
}
}
void f1(UNION_TEST::UNION_TEST t, UNION_TEST::UNION_TEST t1) {
return;
}
void f2(UNION_TEST::UNION_TEST t, TEST::TEST c, UNION_TEST::UNION_TEST t1) {
return;
}
void f3(UNION_TEST_NEW u) {
return;
}
void f4(NAMESPACE_1::NAMESPACE_2::UNION_NAMESPACE_2 u, TEST::TEST c, UNION_TEST::UNION_TEST t1) {
return;
}
对应的错位符号是:
0x000034e0 2 .text ?f1@@YAXTUNION_TEST@1@0@Z
0x00003500 2 .text ?f2@@YAXTUNION_TEST@1@VTEST@2@0@Z
0x00003520 2 .text ?f3@@YAXTUNION_TEST_NEW@@@Z
0x00003530 2 .text ?f4@@YAXTUNION_NAMESPACE_2@NAMESPACE_2@NAMESPACE_1@@VTEST@4@TUNION_TEST@5@@Z
根据这个 http://www.agner.org/optimize/calling_conventions.pdf(第 27 页),我们有联合 X -> TX@@,那么为什么函数 f1、f2 末尾没有 @@ 以及联合时如何区分with 命名空间是结束并开始下一个参数?
感谢您的关注和帮助。
如您所见,关于联合名称 X
转换为 TX@@
的声明并不是对您的 MSVC 版本使用的名称改编的正确描述。请注意,"agner.org" 与 Microsoft 没有关联,并且不提供官方文档。
至于你的问题,一个错位名称的不同部分是如何分开的,看起来一个@就足够了。