gpt4 book ai didi

c - MSVC 生成的符号表中 __real、__imp、__xmm 符号的含义

转载 作者:可可西里 更新时间:2023-11-01 10:24:29 25 4
gpt4 key购买 nike

我是一名 UNIX 开发人员,负责帮助维护一些 Windows 软件,我正在查看 .DEF生成器同时修复错误。它不包括 __xmm , __real__imp - 来自导出的前缀符号。

我一直在努力弄清楚这些符号到底是什么。很明显,它们不需要出现在 .DEF 中。文件(如果它们需要在 DLL 接口(interface)上导出,编译器将 __declspec(dllexport) 对其自身进行注释)但是......它们是什么?

看起来排除__imp的目的前缀是排除function call thunks .正确吗?

搜索 MSDN 未提供有关 __xmm 的信息或 __real (顺便说一句,使用 social.msdn.microsoft.com 搜索时,msdn.microsoft.comsite:msdn.microsoft.com 的子域,这令人难以置信)。

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

例子:

1B8 00000000 SECT5C notype       External     | __real@4132d68700000000

307 00000000 SECTB8 notype External | __real@4059000000000000

(我当前的构建似乎没有产生任何 __xmm syms,所以我无法展示这些示例。在此测试中,我在 Windows 7 x64 SP1 上使用带有 cl 116 的 Windows SDK 7.1,编译PostgreSQL 使用自动生成的 MSBuild 文件和 VC 项目)。

最佳答案

__real 是浮点字面量/常量,不能内联,因为没有可以作用于 fp 立即数的操作码(对此有一个异常(exception),即堆栈 -基于 fp 参数,这些参数被预编码并作为立即数推送),因此它们在二进制文件的数据或 const 部分中分配了一个地址,并以 __real 为前缀;所有具有相同值的常量都被聚合到一个符号中(冗余消除)。 __xmm 几乎是同一回事,但对于存储为常量/静态的 SIMD/SSE 原语。

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

关于c - MSVC 生成的符号表中 __real、__imp、__xmm 符号的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21656520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com