为何没有Debug64.exe?

来源:互联网 发布:淘宝网上购物流程图 编辑:程序博客网 时间:2024/04/19 04:41

debug.exe 是DOS下的一款调试工具。从DOS年代走过来的程序人应该都比较怀念它,我也常常想起当年在学校里用它破解游戏的那些往事。

 

用上XP以后,偶然在网上发现debug32.exe,于是很高兴地把它放到 system32 目录中,用来做一些小小的汇编语句测试,真的很快捷方便,不用为了一两个汇编指令去启动那些图形界面的大型调试器了。久而久之,居然忘了debug32.exe是从网上下载的,还当作是XP系统自带的。

 

后来装上了64位XP以后,想试验一些64位指令时很郁闷地发现,64位XP里面没有debug64.exe。上网找了很久都没找到。最后突然想通了其中道理:

 

原来,debug32.exe 本身也是16位应用程序,为DOS而设计。由于386CPU的特性,即使工作在实模式下,它也能执行大部分使用32位寄存器的32位非特权指令。由于16位指令和32位指令不使用共同的前缀,即使它们共存于同一个代码段也不会混淆。在386CPU16位工作模式(实模式及虚拟86模式)中16位指令和非特权32位指令可以在同一个程序段里共存;而在386的32位模式(保护模式)中,仅允许使用32位指令。debug32.exe和debug.exe能运行在XP下,是因为XP启用了虚拟86模式来执行16位应用程序。在386CPU里,16位指令和32位指令可以混用的另一个重要原因是它们使用同一组寄存器,只不过16位指令只利用到每一个寄存器的一半宽度。

 

而 x86_64 的CPU 的32位和64位工作模式中,指令用到的寄存器的数量和名称都不同,而且某些32位指令和64位指令使用了共同的前缀,所以两种指令决不可能共存于同一程序段。在CPU的32位工作模式下,可以像386一样工作,CPU不可能识别64位指令;而在64位工作模式下,它能允许整个程序段都是64位指令或整个程序段都是32位指令,这种模式下无法启动虚拟86来执行16位指令。所以不可能存在16位的debug64.exe。

 

那么为什么没有 32 位的 debug32.exe 和 64 位的 debug64.exe 呢?

 

debug.exe 和 debug32.exe 这个程序依赖于实模式的架构,它不能被稍作修改就工作在32位和64位的保护模式下。而32位和64位的保护模式下的调试程序也不能像debug.exe这样操作。

 

原创粉丝点击