64位WINDOWS系统环境下应用软件开发的兼容性问题

上传人:公**** 文档编号:473265778 上传时间:2022-08-15 格式:DOC 页数:10 大小:533KB
返回 下载 相关 举报
64位WINDOWS系统环境下应用软件开发的兼容性问题_第1页
第1页 / 共10页
64位WINDOWS系统环境下应用软件开发的兼容性问题_第2页
第2页 / 共10页
64位WINDOWS系统环境下应用软件开发的兼容性问题_第3页
第3页 / 共10页
64位WINDOWS系统环境下应用软件开发的兼容性问题_第4页
第4页 / 共10页
64位WINDOWS系统环境下应用软件开发的兼容性问题_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《64位WINDOWS系统环境下应用软件开发的兼容性问题》由会员分享,可在线阅读,更多相关《64位WINDOWS系统环境下应用软件开发的兼容性问题(10页珍藏版)》请在金锄头文库上搜索。

1、. .应用软件开发的64位WINDOWS系统环境兼容性1. 64位CPU硬件目前的64位CPU分为两类:x64和IA64。x64的全称是x86-64,从名字上也可以看出来它和x86是兼容的,原先的32位程序可以在x64上运行得很好,这也就是为什么在x64的CPU上能够成功安装32位的Windows操作系统。现在市场上卖的家用电脑的CPU通常都是x64。两家顶级CPU公司Intel和AMD分别推出了EM64T(Extended Memory 64 Technology)和AMD64(Advanced Micro Devices 64)。这两款x64 CPU的指令集有很多相似之处,Intel追加的

2、大多数64位指令也与AMD64指令集相兼容,因此Microsoft就不用为两家公司的64位处理器开发各自的64位操作系统。比方Vista x64和SQL2005 x64即可以在EM64T上运行,也可以在AMD64上运行。IA64是真正的64位CPU,指令集较x86有很大变化,它不兼容32位的程序。微软的很多产品都不支持IA64 ,特别是面向个人用户的一系列产品。但是面向效劳器的一些产品还是有IA64版本的,比方Windows 2003,SQL server 2005等等。由于IA64没有x64这么普及,所以本文中讨论的64位CPU如果不加特别说明,指的是x64。CPU从32位开展到64位的最大

3、的驱动力就是为了让内存突破4GB的限制。目前的操作系统和应用软件都越做越大,4GB的限制成了软件开展的瓶颈。然而64位的到来一下子解决了这个问题,让软件开展的前途一片光明。64位CPU使用64位来表示地址空间,也就是2的64次方,是一个天文数字:16EB!这个范围就目前来看太大了,当前任何软件都用不了这么多空间,所以AMD64 CPU目前的实现只用了64位中的48位来表示地址空间。它们分为两块,一块是从00000000 00000000到00007FFF FFFFFFFF,还有一块是从FFFF8000 00000000到FFFFFFFF FFFFFFFF,一共是256TB如以下图的左边,在Wi

4、ndows下,低位的128T是给应用程序使用(User Mode),高位128TB是给系统使用(Kernel Mode)。如果将来有需要的话,可以扩展成56位如上图的中间,最终还可以使用全部的64位(Full 64bit implementation),这样的话,虚拟内存空间将是2的64次方,共16 EB。将来可以把大文件整个的映射到内存里,通常来说,这样会使文件的读写速度会比现在快很多。上面所说的是虚拟内存,在物理内存方面,AMD64目前的实现支持40位的物理内存,共1 TB,这个系统架构以后可以扩展成52位,共4PB。内存地址空间变成了64位,那也就是意味着存放器也是64位。先来看看最具有

5、代表性的RAX存放器。从16位时代的AX,到32位时代被扩展成EAX,现在扩展成64位的RAX,它们之间的关系如图RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP和RIP都从原来的32位(EAX, EBX, ECX等等)变成了64位,并且还新增加了许多新的64位存放器和128位存放器。2. 64位Windows系统的32位代码兼容性设计WOW系统能安装64位操作系统的机器,其CPU必然是64位的。根据IA64和X64架构的区别,MS分别推出了支持IA64以及X64的WINDOWS操作系统,包括XP,VISTA,2003SERVER,2021SERVER等。之前的32

6、位程序要在64位系统上运行,除了CPU要兼容32位代码IA64采用软件模拟方式兼容IA32和X86指令,效率不高,在操作系统层面必然也要有一定的措施进展兼容。由于IA64的系统并不常见,因此我们的讨论针对X64架构的硬件和软件系统。64位Windows为了兼容32位应用程序,微软采用了WOW64技术。WOW的全称是Windows On Windows,前一个Windows指32位,后一个是64位,意思就是说在64位Windows上的32位Windows。WOW技术的目的是兼容以前的32位应用程序,使得它们在64位Windows上运行结果和在32位Windows上运行结果一样。在64位环境下,S

7、ystem32目录下存放的是64位DLL。为了能兼容32位应用程序,64位Windows也提供了一整套32位的系统DLL。他们存放在Syswow64目录下。从名字上看有点混淆:System32是放64位DLL的,Syswow64是放32位DLL的。在Windows x64环境中,用32位的Task Explorer查看32位应用程序的进程,可以发现,相关联接的系统DLL根本上都是在Syswow64目录下的。如果使用64位的Task Explorer查看32位的程序,会发现多出了3个特殊的DLL:wow64,wow64win和wow64cpu和一个64位的ntdll.dll。其中64位的ntdl

8、l.dll是64位系统下WINDOWS进程都加载的系统DLL,主要提供相关的系统调用的接口。另外三个DLL就是用来创立64位系统下的模拟32位系统环境。Wow64.dll管理进程和线程的创立,截获异常分发处理(Exception Dispatching)和系统调用(ntolkrnl.exe所暴露出来的系统调用),这个DLL还实现了文件系统重定向(File System Redirection),注册表重定向(Registry Redirection),和注册表反射(Registry Reflection)。这三种技术会在后面详细介绍。Wow64cpu.dll管理wow里每个正在运行的线程的32

9、位CPU上下文,并且控制CPU在32位模式和64位模式之间的切换。Wow64win.dll截获GUI系统调用,这些调用是Win32k.sys暴露出来的。由此可以看出,在64位系统下得32位程序,用到的系统内核是64位而不是32位的。上面所说的三个DLL共同实现了在64位Windows上WOW技术。如以下图。在32位系统中,默认情况下,应用程序可以使用2G内存,另外2G是系统使用的;通过修改配置,应用程序能使用3G内存,这时系统使用1G内存。在WOW64环境下,一个32位应用程序能使用最多全部的32位地址空间:4G!只需要在编译程序的时候,设置IMAGE_FILE_LARGE_ADDRESS_A

10、WARE标志(/LARGEADDRESSAWARE开关),如果不翻开这个开关,就和原来一样,只能使用2G内存。文件系统重定向器(File System Redirector) 在32位Windows上的程序system32目录里的DLL,这些DLL是32位的。在64位windows中System32目录里是64位的DLL,所以32位程序在64位环境下需要另外一个目录作为它system32目录,这个目录就是syswow64,WOW64提供了文件系统重定向器(File System Redirector)。在WOW64环境下,32位程序system32目录里的文件,都会被重定向到syswow64目

11、录。比方在32位程序中想%windir%system32user32.dll,那它实际上的是%windir%syswow64user32.dll。重定向也有一些例外,下面这些目录是不需要被重定向的: %windir%system32catroot %windir%system32catroot2 %windir%system32driversetc %windir%system32logfiles %windir%system32spool 使用如下的一个小程序。先输出system32下的notepad.exe文件大小,再输出system32driversetchosts的文件大小。然后调用W

12、OW API:Wow64DisableWow64FsRedirection把文件系统重定向器制止掉,然后再次输出两个文件的大小。void PrintFileSize(PCWSTR wszFileName) wprintf(L%ls , wszFileName); HANDLE hFile = CreateFile(wszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); / Check hFile value. If opening file succeeded, print file size wpr

13、intf(LFile Size: %d Bytesrn, GetFileSize(hFile, NULL); CloseHandle(hFile); void wmain(int, WCHAR*) PrintFileSize(Lc:windowssystem32notepad.exe); PrintFileSize(Lc:windowssystem32driversetchosts); PVOID pOldValue; Wow64DisableWow64FsRedirection(&pOldValue); / disable redirection PrintFileSize(Lc:windo

14、wssystem32notepad.exe); PrintFileSize(Lc:windowssystem32driversetchosts); Wow64RevertWow64FsRedirection(pOldValue); / restore redirection 程序编译成32位后,在64位Windows上运行的结果是:可以看到在没有禁用文件系统重定向器之前,notepad.exe的大小是151040字节,禁用后是169472字节,翻开“我的电脑到Syswow64目录下找到notepad.exe,它的大小是151040,而system32下那么是169472,虽然在程序中写的都是s

15、ystem32下的notepad.exe,实际上的却是两个不同的文件。再看一下hosts文件,它在禁用前后的大小是一模一样的761字节,说明它没有被重定向过,可以翻开%windir%system32driversetc目录看一下,hosts文件就是761字节。注册表重定向器(Registry Redirector) 和目录重定向类似,注册表的一些键也需要重定向,它们是:HKEY_LOCAL_MACHINESoftware HKEY_USERS*SoftwareClasses HKEY_USERS*_Classes 上面的星号(*)表示用户的SID(Security ID)。也就是说32位程序HKEY_LOCAL_MACHINESoftware*X和64位程序HKEY_LOCAL_MACHINESoftware*X是完全独立,不相关的。比方在32位程序在HKEY_LOCAL_MACHINESoftware下新建了一个值

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号