32位程序访问64位Windows操作系统存放64位系统文件的 \Windows\System32 目录时将遇到重定向目录问题

    为了检测 exe、dll、ocx 等类型的文件是 32 位还是 64 位,网上有文章推荐使用 EXE 64bit Detector 之类的工具软件。EXE 64bit Detector 的官网是:http://securityxploded.com/exe-64bit-detector.php ,使用 EXE 64bit Detector 查看一般普通目录中文件的位数是有效的,但是如果用它查看 64 位 Windows 的系统目录下的文件就有可能出问题。

    例如,在 64 位 Windows 7 操作系统中,在 C:\Windows\SysWOW64 目录和 C:\Windows\System32 目录下,都有一个名为 aaclient.dll 的文件,这两个文件虽然同名,但是内容并不相同。使用博文: http://blog.csdn.net/henter/article/details/78678029 中介绍的 QuickHash 工具分别计算这两个文件的 Hash 值,可以看到 Hash 值不同,计算结果如下:





  64 位 Windows 操作系统在 C:\Windows\SysWOW64 目录中存放 32 位程序, 在 C:\Windows\System32 目录中存放 64 位程序,所以 C:\Windows\SysWOW64\aaclient.dll 是一个 32 位的 dll 文件,C:\Windows\System32\aaclient.dll 是一个 64 位的 dll 文件。

    如果将 32 位的 aaclient.dll 拷贝到临时创建的 C:\Temp\dll_bit_num\32bits 目录下,将 64 位的 aaclient.dll 拷贝到临时创建的C:\Temp\dll_bit_num\64bits 目录下,使用 EXE 64bit Detector 工具检测 dll 文件的位数,能够正确识别。如下图:



    可是如果直接使用 Exe64bitDetector 分别检测 64 位 Windows 系统目录 C:\Windows\SysWOW64 下和 C:\Windows\System32 下的 aaclient.dll 文件,检测结果就会出错,会将这两个文件都识别为 32 位的 dll 文件。如下图:



    出现这个错误的原因在于:当前使用的工具软件 Exe64bitDetector.exe 是一个 32 位的可执行程序,在 64 位的 Windows 操作系统中,当一个 32 位的可执行程序试图访问 64 位系统目录 \Windows\System32 下面的文件时,Windows 操作系统会自动将访问的目标路径重定向到 \Windows\SysWOW64 下。即 32 位的程序实际上访问不到  \Windows\System32 下面的文件!只能访问到对应的  \Windows\SysWOW64 下的同名文件(前提是同名文件存在)。而  64 位的可执行程序既能够正常访问 32 位系统目录 \Windows\SysWOW64 下的文件,又能够正常访问 64 位系统目录 \Windows\System32 下的文件。

    再举一个例子,工具软件 Dependency Walker 的官网 http://dependencywalker.com 上提供了 32 位和 64 位程序的下载,如下图:


    在 64 位 Windows 7 平台上,如果使用 32 位的 Dependency Walker 查看 C:\Windows\SysWOW64\aaclient.dll 文件,显示如下:



    如果使用 32 位的 Dependency Walker 查看 C:\Windows\System32\aaclient.dll 文件,显示如下:


    可以看出 32 位的 Dependency Walker 对 C:\Windows\System32\aaclient.dll 的文件位数判断是错误的!原因是它在打开文件时,被 64 位的 Windows 操作系统重定向到了 C:\Windows\SysWOW64\aaclient.dll 文件,所以此时它判断的是 C:\Windows\SysWOW64\aaclient.dll 的文件类型,当然就是 32 位的 dll 文件了。

    如果使用 64 位的 Dependency Walker 查看 C:\Windows\SysWOW64\aaclient.dll 文件,显示如下:



    如果使用 64 位的 Dependency Walker 查看 C:\Windows\System32\aaclient.dll 文件,显示如下:


    可以看出 64 位的 Dependency Walker 对 C:\Windows\SysWOW64\aaclient.dll 和 C:\Windows\System32\aaclient.dll 的文件位数所做的判断都是正确的。

    在 C:\Windows\System32\ 目录下有一个名为 aitstatic.exe 文件,而在 C:\Windows\SysWOW64 目录下不存在同名文件。如果启动 32 位的 Dependency Walker,从资源管理器窗口中将 C:\Windows\System32\aitstatic.exe 文件图标拖拽到 Dependency Walker 界面窗口中,会出现找不到文件的错误提示,如下图:


  但是该文件明明是存在的,出现这种错误的原因就在于 32 位的程序不能访问到 64 位 Windows 下的 \Windows\System32 目录。

  如果使用 64 位的 Dependency Walker,从资源管理器窗口中将 C:\Windows\System32\aitstatic.exe 文件图标拖拽到 Dependency Walker 界面窗口中,能够正常识别出该文件是一个 64 位的 exe 程序,显示如下:



    从上面的分析可知,32 位的可执行程序在 64 位 Windows 中执行时,如果访问存放 64 位系统文件的系统目录 \Windows\System32 ,就会被 64 位的 Windows 操作系统自动重定向为访问 \Windows\SysWOW64 系统目录。这种自动重定向可能会带来很多问题,在实际应用中一定要小心。

  网上有一位作者也注意到了这个问题,有兴趣的读者可以看一下他写的博文:http://www.cnblogs.com/hbccdf/p/dllchecktoolandsyswow64.html

    在 64 位的 Windows 7 下,通常将 32 位的应用程序安装在 C:\Program Files (x86) 目录下,将 64 位的应用程序安装在 C:\Program Files 目录下。使用 32 位的应用程序访问 C:\Program Files 目录下的文件,操作系统不会自动重定向到 C:\Program Files (x86) 目录下。因为这些目录是应用程序的存放目录,不是 Windows 系统文件的存放目录。使用 32 位的工具软件 Exe64bitDetector 分别检测 C:\Program Files (x86)\Internet Explorer\iexplore.exe 与 C:\Program Files\Internet Explorer\iexplore.exe 文件,发现能够正确识别文件位数,这说明操作系统此时并没有进行自动重定向处理。如下图:



    有一个工具软件  CFF Explorer,其官网是:http://www.ntcore.com/exsuite.php 。该软件可以被用来查看Windows PE文件内部的信息。这个软件的开发者功力深厚,意识到了 64 位 Windows 操作系统存在的系统目录重定向问题,进行过有针对性的处理。现在从其官网上下载安装的是 64 位 exe,但是还可以在网上找到早期的 32 位版本的 CFF Explorer。即使用户使用 32 位的 CFF Explorer,如下图:


    32 位的 CFF Explorer能够不受 64 位 Windows 操作系统自动重定向系统目录的影响。比如使用 32 位的 CFF Explorer 查看 C:\Windows\SysWOW64\aaclient.dll 文件,显示如下:



    使用 32 位的 CFF Explorer 查看 C:\Windows\System32\aaclient.dll 文件,显示如下:



   可以看出 32 位的 CFF Explorer 可以不受 64 位 Windows 操作系统自动重定向系统目录的影响,能够访问到 64 位系统文件存放目录 \Windows\System32\ 下面的文件。32 位的 CFF Explorer 是一个例外,而 32 位的 Exe64bitDetector、32 位的 Dependency Walker 都会受到 64 位 Windows 操作系统自动重定向系统目录的影响,所以在 64 位 Windows 操作系统中,应当使用这些软件的 64 位版本。在写本文时,Dependency Walker已发布了 64 位版本的程序,而 Exe64bitDetector 只有 32 位版本,尚未发布 64 位版。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xp系统中的 \windows\system32\config\system 文件是一个非常重要的系统文件,它包含了系统的注册表信息,其中包括系统配置、用户配置、硬件配置等。当这个文件损坏或丢失,系统将无法正常启动,因此如果需要重新下载这个文件,需要采取以下步骤: 1. 首先,我们需要找到一个可靠、安全的来源来下载系统文件。强烈建议只从官方或可信赖的网站上下载系统文件,以避免下载到恶意软件或病毒。 2. 打开浏览器,输入相关关键词来搜索下载系统文件的网站,比如“xp系统 \windows\system32\config\system 文件下载”。 3. 在搜索结果中,选择一个官方或可信赖的网站,这些网站通常比较正规且有一定的信誉。避免点击一些不明来源、可疑的链接。 4. 在所选的网站上搜索并下载所需的系统文件。一般来说,这些文件会按照操作系统版本和位数进行分类,选择与自己系统匹配的文件进行下载。 5. 下载完成后,将文件保存在一个安全的位置,比如桌面或者一个新创建的文件夹中。 6. 在将新下载的系统文件替换到原来的位置之前,最好先备份原始的系统文件,以防止意外情况发生。 7. 然后,将新下载的系统文件复制到 \windows\system32\config\ 目录下,并将原文件替换掉。 8. 最后,重新启动计算机,系统应该能够正常加载并运行。 需要注意的是,下载和替换系统文件是一个操作系统较为敏感的操作,如果没有足够的经验或技术知识,最好请专业人员协助。此外,为了避免类似问题的再次发生,建议定期备份系统或使用系统修复工具来维护系统文件的完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值