我是一名UNIX开发人员,现在正在帮助维护一些Windows软件,在修复一个bug的同时查看.DEF
生成器。它会从导出中排除以__xmm
、__real
和__imp
为前缀的符号。
我一直试图弄清楚这些符号到底是什么。显然它们不需要出现在.DEF
文件中(如果它们需要在DLL接口上导出,编译器会自动用__declspec(dllexport)
注释它们),但是...它们是什么?
排除__imp
前缀的目的似乎是为了排除函数调用thunks。对吗?
在MSDN上搜索__xmm
或__real
并没有提供有用的信息(顺便说一句,使用site:msdn.microsoft.com
搜索时,social.msdn.microsoft.com
是msdn.microsoft.com
的子域名,非常恼人)。
因此,为了理解正在发生的事情,有人能够解释(或链接到)以__xmm
和__real
为前缀的符号是什么吗?
示例:
1B8 00000000 SECT5C notype External | __real@4132d68700000000
307 00000000 SECTB8 notype External | __real@4059000000000000
目前我的编译没有产生任何 __xmm
符号,因此我无法展示这些的例子。在这个测试中,我使用的是Windows SDK 7.1和cl 116,在Windows 7 x64 SP1 上编译PostgreSQL,使用自动生成的MSBuild文件和VC项目。
??_C
符号是字符串常量,它们出现在符号表中,以便在链接期间在对象之间进行去重。目前还不知道NULL_THUNK_DATA*
、__IMPORT_DESCRIPTOR*
、__NULL_IMPORT*
、@comp.id
、@feat.00
、@__security_check_cookie@4
、___security_cookie
或以(
开头的符号的含义。文档非常有限。 - Craig Ringer@comp.id
指定用于生成 pecoff 的内部编译器版本。@feat.00
包含特征标志:0x01 用于安全 seh,0x02 和 0x04 用于 MSIL 图像分别识别“纯净”和“安全”。__security_cookie
与 /GS 一起使用。 - josh poley