可能很多人都不会碰到这个问题, 甚至都不会想到有这个问题, 可能有人会问, 这3个软件在一起会有什么冲突么? 有的, 不过这要求你同时安装了这3个软件,而且用VC来写驱动时直接用VC的编译功能(用Build则正常)我这里给出问题和解决方案,以供碰到这种问题的朋友参考
我以前一直装着VC++6.0和DriverStudio,用它们来开发驱动程序. 今天想尝尝鲜, 于是安装了Intel C++ Compiler 9.1试用版, 装完一切正常, VC启动正常, 试着新建一个Win32工程, 依次用VC编译器和Intel编译器编译了一下并作了比较, 发现Intel编译器确实是个好东西, 到现在为止一切正常. 接着我打开驱动工程, 想编译编译, 却提示编译器版本不够(Win2K3 DDK 中的ntddk.h中有这么一句: #if _MSC_VER_ < 1300 #error xxxxxxx, 即要求编译器13.00以上的版本, Visual Studio .net 2002以上的编译器都满足要求), 想想也正常,Intel的编译器不大适合开发这种东西. 然而我把编译器切换回Microsoft的编译器时,问题发生了,同样提示"编译器版本太低"!
我一看, Visual Studio 6的编译器版本才12, 难怪版本不够! 可是想想也有问题, 以前用VC 6的时候并没有出现过这种情况啊! 怎么这次不行了呢?
分析一下, 既然VC6自带的编译器是不行的, 而以前编译却总是能够通过,说明DriverStudio设置了环境变量,使得VC调用的编译器不是自己的,是什么? 想想就知道是DDK的编译器.那现在为什么不行了呢? 看看编译输出, 一行信息引起了我的注意
xicl6.exe
execute D:\Program Files\Microsoft Visual Studio\VC\bin\cl.exe
明白了,Intel直接用绝对路径调用了VC6的编译器, 所以无法通过编译, 以前是通过环境变量(编译驱动时, 环境变量由setDDKgo工具设置)来调用正确的编译器编译, 现在Intel却把它换成了绝对路径,才会出问题
怎么办?Intel 编译器还没玩够呢,不想卸载, 那只有从xicl6.exe上找问题了
用OD调试xicl16.exe,发现它会读取以下几个重要的注册表键
[HKEY_CURRENT_USER\Software\Intel\Intel Tools\Select Compiler\IDE\6]
"Path64"=""
"MSVC_binary_dir"="D:\Program Files\Microsoft Visual Studio\VC\bin\"
"Compiler"="91032"
"Use_Intel_Cxx"=dword:00000000
"Languages"=dword:00000001
"Compiler_List"="91032"
调试过程冗长复杂,其间xicl6.exe还做了很多其他事,如枚举环境变量,但是对我们的结论影响大多不大,这里就不列出来了,当然,要是列出来,可能还能混个精华,不过大部分人可能都没有太多的耐心看冗长复杂的汇编码,况且它做的很多事都与主题关系不大,就不列出来了(老实说,看得我自己都没有耐心了),可能大家更多是要结论
其中,MSVC_binary_dir就是VC6的路径, Use_Intel_Cxx指明是否用Intel编译器编译,Compiler指明用哪个Intel编译器编译,后面的91032是版本号
做完一切后,如果当前配置是用Microsoft编译器,会执行 MSVC_binary_dir\cl.exe 参数
因此解决方法如下
很简单, 把MSVC_binary_dir的值设为空字符串即可
回头打开VC6, 驱动编译一切正常
顺便问问高人一个问题, DriverWorks 3.2 For IA64的WDM lib (vdw_wdm.lib)一直无法编译成功,我不想乱修改库的源代码, 毕竟x86版本的编译正常.不知哪位知道好一点的或者官方的(如果有的话)解决方法
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)