gpt4 book ai didi

c++ - 当 Windows 在二进制文件中遇到未知指令时会发生什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:36 28 4
gpt4 key购买 nike

我们有一个使用 SSE3 优化编译的二进制文件,最终使用指令 LDDQU。现在,当此代码在仅支持 SSE1,2 的 Windows 系统(单核,XP2)上执行时(通过 CPU-Z 工具查看),应用程序会崩溃。

(924.4f0):无效的锁定序列 - 代码 c000001e(第一次机会)...001700a10 f20ff00430 lddqu xmm0,xm​​mword ptr [eax+esi] ds:0023:1e08d200=270a57364a4a77896db676459d8c40a9...

谁能告诉我这次崩溃意味着什么以及可能的修复方法?

最佳答案

应用程序编译时支持 SSE3,但在不支持 SSE3 的 CPU 上运行时会崩溃。啧啧啧,好奇怪!用于选择指令集的编译器选项必须存在,因为有一天 Microsoft 的一些程序员无聊得要命。

您有多种选择:

  • 仅使用 SSE2 指令集制作单一版本的应用程序
  • 使用不同的指令集编译不同版本的应用程序
  • 使用结构化异常处理 (SEH) 实现不支持指令的用户模式仿真。

最后一种方法比前两种更耗时,存在一些性能问题,但这些缺点远小于它给您带来的好处。如果您选择第三种解决方案,您还可以发明自己的操作码!混淆程序控制流的完美方式,这对于阻止程序的逆向工程再次非常有用,从而保护您的知识产权。

关于c++ - 当 Windows 在二进制文件中遇到未知指令时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811125/

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