主题:[讨论]debug能调试32位的程序吗
luchuncheng
[专家分:390] 发布于 2006-09-25 23:41:00
debug能调试32位的程序吗
回复列表 (共6个回复)
沙发
maxumi [专家分:2200] 发布于 2006-09-26 08:20:00
可以
板凳
liangbch [专家分:1270] 发布于 2006-09-30 18:23:00
是我理解不对呢,还是楼上理解是不对呢?我以为debug(dos自带的工具)是运行在dos环境下的16位程序,他只能调试16位dos程序,要调试运行在windows下环境下的32位程序,应该使用32位的调试工具,如softice.
3 楼
救世猪猪 [专家分:560] 发布于 2006-10-04 14:40:00
debug32可以调试32位的吗?
4 楼
maxumi [专家分:2200] 发布于 2006-10-09 08:05:00
[quote]是我理解不对呢,还是楼上理解是不对呢?我以为debug(dos自带的工具)是运行在dos环境下的16位程序,他只能调试16位dos程序,要调试运行在windows下环境下的32位程序,应该使用32位的调试工具,如softice.[/quote]
谁说32位程序必须运行在windows下? 你忘了DOS的32位保护模式了?
5 楼
liangbch [专家分:1270] 发布于 2006-10-12 20:10:00
32位程序可以运行在dos下?
一般地,32位程序是运行在windows环境下的win32程序,这类程序调用win32API 函数来工作,而不像16位dos程序调用dos,bios中断调用(如 int 21h,int 10h屏幕 int 16H: 键盘)来工作。这和编程语言无关,用高级语言编写的程序最终调用是win32API或者dos/bios。以c中最著名的printf为例,在16位的编译生成的指令可能最终调用Int 21H,但32的VC编译的实现中,最终调用的win32API函数CreateFile(这个我亲自分析过)。
我不懂dos下的32位保护模式,在这个模式下,能够提供windows编程接口(win32API)?,如果不能,那么一般的win32程序(PE)是不能运行的,仅仅执行32位机器指令算不上能够运行32位程序。我知道,有一些dos下的程序是运行在dos保护模式下的,如在dos时代的很多游戏,虽然这些程序中有32位的指令,但这些程序算不上严格意义的32位程序。
我试过,dos下的debug仅能反汇编和调试16位的.com文件和16位的exe文件(一般简称MZ格式)。而32位的windows程序一般是PE格式,debug是不能汇编和调试的,不但如此,在debug命令行,也不能汇编32位的指令,如mov eax,12345678.
6 楼
liangbch [专家分:1270] 发布于 2006-10-12 20:32:00
我找到一篇文章,讲在dos运行32位保护模式程序的,感兴趣的可以看看。
CSDN技术中心浅谈DOS扩展器和DPMI(http://dev.csdn.net/develop/article/80/80265.shtm)
我来回复