MSVC生成的符号表中__real,__ imp,__ xmm符号的含义

时间:2014-02-09 07:32:14

标签: c windows visual-c++

我是一名UNIX开发人员,帮助维护一些Windows软件,我在修复错误时正在查看.DEF生成器。它会从导出中排除__xmm__real__imp - 前缀符号。

我一直试图弄清楚这些符号到底是什么。很明显它们不需要出现在.DEF文件中(如果它们需要在DLL接口上导出,编译器会__declspec(dllexport)注释它们自己)但是......它们是什么?< / p>

排除__imp前缀的目的似乎是排除function call thunks。正确的吗?

搜索MSDN并未提供__xmm__real的信息(在旁注中,social.msdn.microsoft.com在使用{搜索时msdn.microsoft.com的子域名时非常烦人{1}})。

因此,为了理解正在发生的事情,是否有人能够解释(或链接到引用)site:msdn.microsoft.com__xmm前缀符号是什么?

示例:

__real

(我的当前构建似乎没有产生任何1B8 00000000 SECT5C notype External | __real@4132d68700000000 307 00000000 SECTB8 notype External | __real@4059000000000000 syms,所以我无法显示这些的示例。我在Windows 7 x64 SP1上使用Windows SDK 7.1和cl 116进行此测试,使用自动生成的MSBuild文件和VC项目编译PostgreSQL。

1 个答案:

答案 0 :(得分:2)

__real是浮点文字/常量,不能内联,因为没有可以作用于fp immediates的操作码(这是一个例外,它是基于堆栈的fp参数,它们被预编码并作为immediates推送),因此它们被分配一个地址在二进制数据或const部分和前缀__real;具有相同值的所有常量将聚合为单个符号(冗余消除)。 __xmm与存储为常量/静态的SIMD / SSE基元完全相同。

__imp及其类似用于从外部dll导入的符号(静态链接库不会生成这些前缀)。