经典难忘VC6

    虽然我也使用Visual Studio的较新版本,比如2013和2015,但我仍然很喜爱经典的Visual C++ 6.0(简称VC6)。原因主要有两个,一是它轻便快捷,开启和关闭都是瞬间完成,二是用它编译出来的应用程序发布时不需要安装运行时,因为那几个DLL(msvcrt.dll、msvcp60.dll,mfc42.dll)老早就已经是Windows系统的自带模块了(inbox)。
    因为此,这么多年里我的电脑上一直都有VC6,算起来超过15年了,这款经典的软件陪伴我从青年到中年(不情愿的承认自己不属于青年了)。

    因为很多朋友知道的原因,我最近换了新的工作电脑。很多软件都需要重新安装,包括经典的VC6。缺少这个老朋友,就觉得眼前的电脑还不是自己的。

    今天找到了一些空闲时间,于是开始安装VC6。安装这个软件无数次,但今天是第一次在Windows 10上安装。VC6是1998年发布的,距今快20年了,让它还能在Windows 10上跑起来真的有点难为它了。这有点像是要把一辆陈旧的马车跑到铁轨上的味道。

    解压好安装文件,以管理员身份运行setup.exe,熟悉的界面出现了。点击熟悉的安装向导,一步步继续。每一步的界面都很朴素,但是所提的问题都很实在,如同老朋友见面,没有什么虚话套话,聊的都是彼此关心的切实问题。比如下面这一步就让喜欢调试的我很觉得贴心,它提示如何安装操作系统的调试符号(提到的还是古老的.DBG格式)。abb06eecf6f840ae2cc15c04b67a08cd.png

    安装向导部分很顺利,几秒钟就完成了,接下来就开始复制文件了。我松了口气将其切换到后台,给它时间慢慢跑。

    过了几分钟,我想检查一下进度,试图将安装程序切换到前台,但发现无法切换到前台,将所有其它窗口缩小,看到VC6的安装界面的窗口标题出现未响应三个字。看来安装程序没有响应了。

4829526ed2f4c839c3601d99b9e54d68.png

    观察任务管理器,安装程序占的CPU很高,25%,占满了一个CPU。或许它在忙什么,来不及响应窗口消息。于是我决定精心等待一会,拿起一本书读,边读边等。

    过了十几分钟,情况没有好转,于是我意识到这个老朋友遇到意外了。观察状态提示,“安装程序正在更新您的系统”,看到这么优雅的中文提示,我觉得Windows系统的兼容性还是令人赞叹的。

    从提示信息看,复制文件阶段应该完成了,现在如果杀掉安装程序,或许大多数文件都在了,但是可能很多环境设置要手工做了。

    怎么办呢?犹豫了一下,一个声音在耳边想起,“上调试器”。

    是的,上调试器。

    唤出WinDBG,附加上去,列出所有线程,只有一个线程,真是好。怀念那个纯真的单线程时代!

    轻敲k命令观察栈回溯,看到了负责动态打补丁的缓解机制核心模块AcHelp.dll,线程正在执行的操作是RegOpenKeyEx,看来安装程序在操作注册表,这与刚才的提示信息是一致的。

    单步跟踪一会,发现安装程序的某个函数在反复操作注册表,看起来的确陷入了死循环。

c606b84327f0334515debd9a69778a22.png

    花了一分钟分析一下循环的范围,发觉就是上图中的比较指令导致程序兜圈子。比较EDI和ESI,如果相等就跳上去循环。观察这两个寄存器,而者的确都是0。执行 r edi=1 将EDI改为1,再单步比较指令,轻松走出了循环,再r edi=0将其复位为0。然后执行g让程序全速跑,安装程序果然复活了,“未响应”三个字消失,而且很快就有了成功安装的消息。

e442b90bb32185de7c3cce1b58ace66f.png

  很高兴看到调试之剑又发挥了威力。点击“确定”按钮关闭安装程序,然后启动VC6,打开一个项目,编译链接,都没有问题,而且一如既往的迅速。

f9f32e3c6737c12061fc2df0eb77df60.png
    接下来把VC6的图标固定(pin)在任务栏上,让它与我喜爱的另外两个经典软件WinDBG和WinCMD排在一起。几位老朋友齐了,新一年与老雷一起行走江湖。

欢迎关注格友公众号!
正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生。

    08760221667b777d730053ecc0aa8f30.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值