【问题标题】:Check if DLL uses SSE instructions检查 DLL 是否使用 SSE 指令
【发布时间】:2016-04-15 23:24:07
【问题描述】:

我在 Windows 7(目标平台 = Windows XP Embedded)上使用 Visual Studio 2012 Express 交叉编译 C++ 应用程序。目标 CPU 不支持 SSE 或 SSE2 指令。因此,我希望能够仔细检查我构建的 DLL 和 EXE 是否不使用任何 SSE 或 SSE2 指令。我该怎么做?

【问题讨论】:

  • 当您可以简单地正确设置编译选项时,重复检查没有意义。
  • @HansPassant 我知道那个编译选项,我正在使用它。但是,我注意到我们自己构建的 QtCore4.dll 由于非法指令而在目标平台上崩溃。在与 OllyDbg 核对之后,发现它内部仍然有 SSE 指令,尽管我使用 -no-sse 和 -no-sse2 选项配置了 Qt 4.8.6。我现在试图理解为什么 DLL 仍然有 SSE 指令。我试图找出我们在 Qt 构建中忘记 /arch:IA32 选项的位置。我打算写一些脚本,所以这篇文章。
  • objdump -d | grep xmm 可能是一个很好的初步近似值。
  • 一些编译器使用 SSE/SSE2 进行标量 FP 数学运算,即使在 32 位二进制文​​件中也是如此。例如float 使用 SSE,double 使用 SSE2。 mulsd = FP 乘以标量双精度。 (mulpd = 压缩双精度,即 SIMD 向量,而不仅仅是向量寄存器中的低位元素。)

标签: visual-c++ assembly dll x86 sse


【解决方案1】:

这就是你如何快速而肮脏地做到这一点:

  1. 运行 Visual Studio 命令提示符
  2. 致电dumpbin /disasm required.dll > dll_disasm.asm
  3. 寻找常见的 SSE/SSE2 指令,例如movssxmm0xmm1

如果在 DLL 中找不到 SSE 指令/寄存器,除非 DLL 加载其他内容,否则一切正常。

【讨论】:

    猜你喜欢
    • 2016-01-22
    • 2018-06-01
    • 2013-06-11
    • 2010-10-09
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多