让VS2010支持Windows2000
2015-10-20 14:21
447 查看
用Visual Studio 2010编译的程序无法在Windows 2000,Windows XP SP1上运行,经分析主要原因是VS2010的运行库调用了kernel32.dll的DecodePointer和EncodePointer两个函数,而这两个函数仅在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.obj添加到需要支持Windows 2000的项目里,直接添加即可,无需其他配置。编译后用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
相关文章推荐
- sencha touch使用sencha cmd 5.0 创建项目、打包
- 最快速度找到内存泄漏
- 有趣有用的apk应用
- 【转】android:DDMS查看Threads--不错
- 利用fiddler抓取Android app数据包
- leetcode之LRU Cache
- 转载一些值得收藏的文章
- Android控件GridView的属性
- java提高篇(三十)-----Iterator
- 给超链接(a标签)加onclick事件
- ORACLE 超长字符串问题的解决办法
- 《C++并发编程实战》读书笔记2---在线程间共享数据
- Understanding SCSI Sense
- PHP Yii框架过滤器用法详解
- Graphic 矢量图形的区域填充与缠绕规则
- 关于多人协同开发时,程序组成的问题
- 使用Grunt构建自动化开发环境
- c#提取word文档中的图片
- jQuery 中bind(),live(),delegate(),on() 区别
- 仿QQ侧滑菜单