让VS2010支持Windows2000

本文介绍如何使Visual Studio 2010编译的程序能在Windows 2000上运行,通过创建并链接一个汇编文件以解决对kernel32.dll中特定函数的依赖问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考网址:http://blog.youkuaiyun.com/pb8/article/details/49276775

用Visual Studio 2010编译的程序无法在Windows 2000,Windows XP SP1上运行,经分析主要原因是VS2010的运行库调用了kernel32.dll的DecodePointer和EncodePointer两个函数,而这两个函数仅在Windows XP SP2及以上版本的Windows中才有,关于这两个函数的信息,网上有大量的信息可以参考,不再赘述,我们仅从实用角度说明如何让VS2010支持Windows 2000。

如何看vs2010的运行库有没有依赖kernel32.dll。在C盘搜索depends, 一般在c/Program Files(x86)/Microsoft Visual Studio 8/Common7/Tools/Bin/Depends.Exe , 知道Depends.Exe运行,将需要查看的dll拖进去,便如下图所示:
Windows 2000下,VS2010编译程序的导出表

Windows 2000下,VS2010编译程序的导出表


而这四个函数仅在Windows XP SP2及以上版本的Windows中才有,关于这两个函数的信息,网上有大量的信息可以参考,不再赘述,我们仅从实用角度说明如何让VS2010支持Windows 2000。


第一步,首先生成一个crack.asm文件,内容如下:
.model flat

.data
__imp__EncodePointer@4 dd dummy
__imp__DecodePointer@4 dd dummy
EXTERNDEF __imp__EncodePointer@4 : DWORD
EXTERNDEF __imp__DecodePointer@4 : DWORD

.code
dummy proc
mov eax, [esp+4]
ret 4
dummy endp

end

第二步,然后进入VS2010的命令行模式,一定要进入VS2010的命令行模式,不能简单的执行cmd,废话少说,继续,执行以下命令编译crack.asm:
ml -c crack.asm
编译完得到crack.obj
如果想生成crack.o的形式,请用 ml /Focrack.o /c crack.asm   实际上ml 的使用方式可以使用 ml -help 来提示。
第三步,将得到的crack.obj添加到需要支持Windows 2000的项目里,直接添加即可(此添加在脚本中是指添加到 LD 后),无需其他配置。编译后用depends看一下对kernel32的依赖,发现已经没有了EncodePointer和DecodePointer的依赖。

如果不习惯使用obj文件,也可以用以下命令将obj编成lib文件:
lib crack.obj
将得到的crack.lib文件添加到项目中即可,但必须确保链接顺序先于kernel32.lib。

如果运行时出现不是合法的Win32程序,注意以下两处:
1. targetver.h文件中的_WIN32_WINNT值,VS2010默认使用SDK的最高版本,需要手动改为需要的版本:
#define _WIN32_WINNT 0x0500
#include <SDKDDKVer.h>
2. Minimum Required Version,此设置影响PE文件头中的VERSION信息,VS2010默认设置为5.1,需要手动改为需要的版本:
对于Win2000为 5.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值