进入 Debug 命令
在 Win2000、WinXP 及 Win7(32位 版本)命令行(cmd) 中输入debug 回车后,就进入到虚拟8086的执行环境了。也可以输入debug + 程序名字,这就是对某个程序进行调试。-
R (Register) 命令
从名字可以看出是对寄存器操作的命令,此指令有两个功能:一是显示所以寄存器和标记的内容;二是修改寄存器的内容。只输入 r 来显示寄存器的内容
如果想修改某个寄存器的值,直接在r后面加上要修改寄存器的名字,如:r ax ,然后回车并输入修改的值再回车就可以了。这是在汇编程序中所做不到的。
-
D (dump) 命令查看内存中的信息
如果想知道10000h内存中的信息,可以用”d 段地址:段偏移地址“来查看:
在使用”d 段地址:段偏移地址“之后,接着使用d命令,可列出后续的内容,如下图所示: -
E (edit) 命令改写内存中的内容
可以用“e 起始地址 数据 数据 数据...”的格式来修改从起始地址开始的内存中的内容。比如修改10000h开始的10个单元的内容,如下图:
- 输入e 1000:10,按enter键;
- debug显示起始地址1000:0010,和第一个单元的原始内容:00,然后光标停在“.”后面提示输入想要写入的数据,此时有两种选择:一是输入数据,然后按空格键,即输入数据修改当前的内存单元;二位不输入数据,直接按空格键,则不对当前内存单元进行改写;
- 当前单元处理完后(不论改写或者没有改写,只要按了空格键,就表示处理完成),debug将显示下一个内存单元的原始内容,并提示修改;
- 所以希望改写的内存单元改写完成后,按enter键,e命令操作结束;
- 用U (un-assembly) 来反汇编机器码
我们首先用e命令从内存1000:0单元开始写入这样一段机器码:
机器码 对应汇编指令
b80100 mov ax, 0001
b90200 mov cs, 0002
01c8 add ax, cx
然后用u命令反汇编出这段内存中的汇编命令,如下图所示:-
T (trace) 单步调试执行命令
每输入一个t,debug就执行一条指令,然后停下了显示所有寄存器的内容。如下图所示:
-
a (assembly) 命令以汇编指令形式写指令到内存中
前面说过可以用e命令写入机器码,但这样很不方便,必须记住机器码才行,而a命令以汇编形式写入就方便多了,“a 起始地址“表示将汇编指令写入某个地址中,如下图:
N (name) 命令
指定 debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数:
n [drive:][path] filename
要指定测试的可执行文件的参数,请使用以下语法:
n file-parameters
- l (load) 命令
l 命令将 n命令 指定的可执行文件加载到内存的某个地址中。
要从磁盘文件加载 BX:CX 寄存器中指定的字节数内容,请使用以下语法:
l [address]
要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法:
不过我在win7中试了第一个语法,debug居然报错,不知道为什么,只有用不带参数的l命令才行。如下图所示:l address drive start number
也就是说加载文件只能加载到开始进入debug时cs:ip所指向的起始内存单元中去。但是在网上找了很多资料,都说可以直接加载到一个指定的地址中去,不知道为什么不行?