【发布时间】:2014-02-09 07:32:13
【问题描述】:
我是一名帮助维护一些 Windows 软件的 UNIX 开发人员,我正在查看.DEF 生成器,同时修复一个错误。它从导出中排除 __xmm、__real 和 __imp 前缀符号。
我一直试图弄清楚这些符号到底是什么。很明显,它们不需要出现在 .DEF 文件中(如果它们需要在 DLL 接口上导出,编译器会 __declspec(dllexport) 自行注释它们)但是......它们是什么?
看起来排除__imp前缀的目的是排除function call 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 syms,所以我无法显示这些示例。我在此测试中使用带有 cl 116 的 Windows SDK 7.1,在 Windows 7 x64 SP1 上编译PostgreSQL 使用自动生成的 MSBuild 文件和 VC 项目)。
【问题讨论】:
-
它必须对浮点数做一些事情。也许 msvc 将浮点值存储为单独的符号?
-
对于其他任何人来说,
??_C符号是字符串常量,它们出现在符号表中,因此可以在链接期间在对象之间进行重复数据删除。不知道NULL_THUNK_DATA*、__IMPORT_DESCRIPTOR*、__NULL_IMPORT*、@comp.id、@feat.00、@__security_check_cookie@4、___security_cookie或以(开头的符号是什么意思。文档是……有限的。 -
@comp.id指定用于生成 pecoff 的内部编译器版本。@feat.00包含功能标志:0x01 用于安全 seh,0x02 和 0x04 用于分别识别“纯”和“安全”的 MSIL 图像。__security_cookie与 /GS 一起使用 -
@joshpoley 谢谢。非常感激。找到任何相关文档或刚刚从反汇编、杂项文章等中学习?
标签: c windows visual-c++