为何没有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这样操作。
- 为何没有Debug64.exe?
- 中国为何没有乔布斯
- 为何pushViewController没有效果?
- 金融危机为何没有压垮资本主义
- 你为何没有成为领导者
- python为何没有switch语句?
- 你为何没有成为领导者
- 欧洲为何没有互联网巨头?
- Qt 为何没有提供 Sleep
- dwm.exe是什么? 它为何运行?
- 世上为何没有美国威胁论?
- Linux时区选择为何没有北京
- Solaris下/home为何没有写权限 ?
- finalize方法为何没有被调用??
- CSDN 为何没有普通的下载方式!!!
- geoserver为何设置的样式没有反应?
- linux中为何没有网卡设备文件
- 工作三年 为何加薪唯独没有你
- 关于forName()方法
- 数据库的物理文件存储
- 外国设计教程网站大集合
- Ubuntu下安装SVN客户端RabbitVCS
- C# WinForm开发系列 - ToolBar/OutlookBar/Tab/Wizard
- 为何没有Debug64.exe?
- 跳舞毯软件
- JS实现的静态标签云
- Functional Programming & Template Metaprogramming
- 2011年学习计划
- 加入CSDN
- 大学
- ubuntu10.10 安装openfetion
- c#正则表达式收藏