回 帖 发 新 帖 刷新版面

主题:[讨论]debug能调试32位的程序吗

debug能调试32位的程序吗

回复列表 (共6个回复)

沙发

可以

板凳

是我理解不对呢,还是楼上理解是不对呢?我以为debug(dos自带的工具)是运行在dos环境下的16位程序,他只能调试16位dos程序,要调试运行在windows下环境下的32位程序,应该使用32位的调试工具,如softice.

3 楼

debug32可以调试32位的吗?

4 楼

[quote]是我理解不对呢,还是楼上理解是不对呢?我以为debug(dos自带的工具)是运行在dos环境下的16位程序,他只能调试16位dos程序,要调试运行在windows下环境下的32位程序,应该使用32位的调试工具,如softice.[/quote]

谁说32位程序必须运行在windows下? 你忘了DOS的32位保护模式了?

5 楼

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 楼

我找到一篇文章,讲在dos运行32位保护模式程序的,感兴趣的可以看看。
  CSDN技术中心浅谈DOS扩展器和DPMI(http://dev.csdn.net/develop/article/80/80265.shtm)

我来回复

您尚未登录,请登录后再回复。点此登录或注册