我们的一个客户需要在没有SSE的情况下构建我们的程序,因为他在相当旧的硬件上。我的问题是,即使我全面修改我们的项目设置,也要取消所有库的SSE设置。二进制文件似乎仍然存在一个依赖SSE指令编译的依赖,导致应用程序崩溃。
我的问题是:有没有办法获取二进制文件或库并检测它是否包含特定版本SSE的SSE指令?
我们使用VS而且语言是C ++,因此适用于该工具集的任何工具都会非常棒。
答案 0 :(得分:4)
反汇编所有相关的二进制文件,然后在反汇编中搜索SSE指令助记符。
答案 1 :(得分:1)
由于您已经在编译器中关闭了SSE指令生成,因此问题出在其中一个静态库中。要缩小范围,基本上你有两种方法:
编辑:获取.lib文件反汇编的另一种方法是使用Visual Studio附带的DUMPBIN实用程序。此外,STATUS_ACCESS_DENIED建议的minidump方法是一个很好的主意。
答案 2 :(得分:0)
使用描述为here的方法,以便从客户处获取minidump文件。即让客户运行您的构建。一旦崩溃,就应该创建一个minidump文件,你可以使用它 - 验尸 - 来准确分析崩溃的位置。其中,与调试符号(和/或映射文件)一起,实际上会告诉您造成严重破坏的确切库。
它归结为AlefSin建议的解决方案中的第2点。但是,客户不必运行调试器。对于内核模式驱动程序,这通常是获取有关问题的有意义信息的唯一方法。但是,用户模式代码存在相同的功能。使用它。