想学好debug~
debug吧
全部回复
仅看楼主
level 1
xinkand 楼主
如何才能学好debug呢? 在实际应用中debug是如何运作的? 希望高手指点。
2004年09月25日 06点09分 1
level 0
我要好好学
2004年11月21日 02点11分 2
level 0
197F:010B 36 7F 197F:030B 197F:010C BE 22 197F:030C 197F:010D 83 93 197F:030D 197F:010E 49 77 197F:030E 197F:010F 4F 8A 197F:030F 注意列表中缺少地址 197F:0106 和 197F:0306。这表明那些地址中的值是相同的。 Debug:D(转储) 显示一定范围内存地址的内容。 d [range] 参数 range 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。 有关显示寄存器内容的信息,请参看Debug R(寄存器)。 说明 当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示 16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。 范例 假定键入以下命令: dcs:100 10f Debug 按以下格式显示范围中的内容: 04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER...... 如果在没有参数的情况下键入 d 命令,Debug 按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大 16 个字节(如果是显示 40 列的屏幕,则为 8 个字节)的地址开头。 对于后面键入的每个不带参数的 d 命令,Debug 将紧接在最后显示的命令后立即显示字节内容。 如果键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容: dcs:100 l 20 如果键入以下命令,Debug 将显示范围从 CS 段的 100h 到 115h 中所有字节的内容: dcs:100 115 Debug:E(键入) 将数据输入到内存中指定的地址。 可以按十六进制或 ASCII 格式键入数据。以前存储在指定位置的任何数据全部丢失。 e address [list] 参数 address 指定输入数据的第一个内存位置。 list 指定要输入到内存的连续字节中的数据。 有关集成记忆码的信息,请参看Debug A(汇编)。 有关显示内存部分内容的信息,请参看Debug D (转储)。 说明 使用 address 参数 如果在没有指定可选的 list 参数的值情况下指定 address 的值,Debug 将显示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一: 替换字节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则 Debug 不会回显无效或额外的字符。 进入下一个字节。为此,请按 SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键入新值。如果按 SPACEBAR(空格键)时,移动超过了 8 位界限,Debug 程序将显示新的一行并在行首显示新地址。 返回到前一个字节。为此,请按 HYPHEN 键 (-)。可以反复按 HYPHEN 键 (-) 向后移动超过多个字节。在按 HYPHEN 时,Debug 开始新行并显示当前地址和字节值。 停止执行 e 命令。为此,请按 ENTER 键。在任何字节位置都可以按 ENTER。 使用 list 参数 如果指定 list 参数的值,随后的 e 命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。 List 值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。 范例 假定键入以下命令: ecs:100 Debug 按下面的格式显示第一个字节的内容: 04BA:0100 EB. 要将该值更改为 41,请在插入点键入 41,如下所示: 04BA:0100 EB.41_ 可以用一个 e 命令键入连续的字节值。在键入新值后按 SPACEBAR(空格键),而不是按 ENTER 键。Debug 显示下一个值。在此范例中,如果按三次 SPACEBAR(空格键),Debug 将显示下面的值: 
2004年11月22日 09点11分 4
level 0
04BA:0100 EB.41 10. 00. BC._ 要将十六进制值 BC 更改为 42,请在插入点键入 42,如下所示: 04BA:0100 EB.41 10. 00. BC.42_ 假定决定值 10 应该是 6F。要纠正该值,请按 HYPHEN 键两次以返回到地址 0101(值 10)。Debug 显示以下内容: 04BA:0100 EB.41 10. 00. BC.42- 04BA:0102 00.- 04BA:0101 10._ 在插入点键入 6f 更改值,如下所示: 04BA:0101 10.6f_ 按 ENTER 停止 e 命令并返回到 Debug 提示符下。 以下是字符串项的范例: eds:100 "This is the text example" 该字符串将从 DS:100 开始填充 24 个字节 Debug:F(填充) 使用指定的值填充指定内存区域中的地址。 可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。 f range list 参数 range 指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效的 range 值的信息,请参看“Debug 说明”。 list 指定要输入的数据。List 可以由十六进制数或引号包括起来的字符串组成。 说明 使用 range 参数 如果 range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指派值,直到 range 中的所有字节全部填充。 如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止 f 命令。 使用 list 参数 如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。 范例 假定键入以下命令: f04ba:100l100 42 45 52 54 41 作为响应,Debug 使用指定的值填充从 04BA:100 到 04BA:1FF 的内存位置。Debug 重复这五个值直到 100h 个字节全部填满为止。 Debug:G(转向) 运行当前在内存中的程序。 g [=address] [breakpoints] 参数 =address 指定当前在内存中要开始执行的程序地址。如果不指定 address,Windows 2000 将从 CS:IP 寄存器中的当前地址开始执行程序。 breakpoints 指定可以设置为 g 命令的部分的 1 到 10 个临时断点。 有关执行循环、重复的字符串指令、软件中断或子程序的信息,请参看Debug P(执行)。 有关执行指令的信息,请参看Debug T(跟踪) Debug:H(十六进制) 对指定的两个参数执行十六进制运算。 h value1 value2 参数 value1 代表从 0 到 FFFFh 范围内的任何十六进制数字。 value2 代表从 0 到 FFFFh 范围内第二个十六进制数字。 说明 Debug 首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。 范例 假定键入以下命令: h19f 10a Debug 执行运算并显示以下结果。 02A9 0095 Debug:I(输入) 从指定的端口读取并显示一个字节值。 i port 参数 port 按地址指定输入端口。地址可以是 16 位的值。 有关将字节值发送到输出端口的信息,请参看Debug O(输出)。 范例 假定键入以下命令: i2f8 同时假定端口的字节值是 42h。Debug 读取该字节,并将其值显示如下: 42 Debug:L(加载) 将某个文件或特定磁盘扇区的内容加载到内存。 要从磁盘文件加载 BX:CX 寄存器中指定的字节数内容,请使用以下语法: l [address] 要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法: l address drive start number 参数 address 指定要在其中加载文件或扇区内容的内存位置。如果不指定 address,Debug 将使用 CS 寄存器中的当前地址。 drive 指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C 等。 
2004年11月22日 09点11分 5
level 0
地址参数的限制 如果 address 参数没有指定段,Debug 将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP 寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug t(跟踪)命令的作用相同。 使用 p 命令显示的邮件 当 p 执行完一段说明后,Debug 显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。 警告 不能使用 p 命令跟踪只读内存 (ROM)。 范例 假定正在测试的程序在地址 CS:143F 处包含一个 call 指令。要运行 call 目标位置的子程序然后将控制返回到 Debug,请键入以下命令: p=143f Debug 按以下格式显示结果: AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC 2246:1442 7505 JNZ 144A Debug:Q(退出) 停止 Debug 会话,不保存当前测试的文件。 当您键入 q 以后,控制返回到 Windows 2000 的命令提示符。 q 参数 该命令不带参数。 有关保存文件的信息,请参看Debug W(写入)。 Debug:R(寄存器) 显示或改变一个或多个 CPU 寄存器的内容。 r [register-name] 参数 无 如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。 register-name 指定要显示其内容的寄存器名。 有关显示内存部分内容的信息,请参看Debug D(转储)。 有关反汇编字节的信息,请参看Debug U(反汇编)。 说明 使用 r 命令 如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。 有效寄存器名 以下是 register-name 的有效值:ax、bx、cx、dx、sp、
bp
、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指针。 如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000 将显示以下消息: br error 使用 f 字符而不是寄存器名 如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug 提示符。要更改标志的设置,请从下表中键入适当的两字母代码: 标志名 设置 清除 溢出 ov nv 方向 dn(减) up(增) 中断 ei(启用) di(禁用) 正负 ng(负) pl(正) 零 zr nz 辅助进位 ac na 奇偶校验 pe(偶校验) po(奇校验) 进位 cy nc 可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止 r 命令,请按 ENTER 键。任何没有指定新值的标志保持不变。 用 r 命令显示的邮件 如果为标记指定了多个值,Debug 将显示以下消息: df error 如果指定没有在前面的表中列出的标志代码,Debug 将显示以下消息: bf error 在这两种情况下,Debug 将忽略所有在无效项目之后指定的设置。 Debug 的默认设置 在启动 Debug 时,会将段寄存器设置到空闲内存的低端,指令指针设置为 0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为 FFEEh 的 sp 之外。 Debug:R 范例 要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令: r 如果当前位置是 CS:11A,显示外观将类似于以下内容: AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000 DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC 
2004年11月22日 09点11分 8
level 0
范例 要显示扩展内存信息,请键入以下命令: xs Debug 显示与以下类似的信息: Handle 0000 has 0000 pages allocated Handle 0001 has 0002 pages allocated Physical page 00 = Frame segment C000 Physical page 01 = Frame segment C400 Physical page 02 = Frame segment C800 Physical page 03 = Frame segment CC00 2 of a total 80 EMS pages have been allocated 2 of a total FF EMS handles have been allocated (全文完) 妙用DEBUG挑选显示器   日期:2004-7-12 2:48:11 作者: 阅读次数:338     很多DIY用户在攒机时都把目光集中在主机的配件上,如CPU、显卡……却忽视了一个重要的外设——显示器。现在显示器的品牌种类繁多,不同的显像管显示的效果各有千秋,令选购者眼花缭乱。但究竟如何直观地检验显示器的色彩是否纯正、黑白是否平衡和汇聚是否准确?虽然我们可以利用一些软件的帮助,如Nokia Monitor Test 1.0a。但是在购买时,却极少人会随身携带,这时只有凭用户的慧眼目测。  其实,操作系统本身就自带了一个方便的工具,它就是DOS下的DEBUG。下面我就向大家介绍如何使用。  开机后进入DOS模式(建议在DOS实模式下,不加载任何其它的系统和软件,不过在Windows 9X的DOS窗口模式中也能通过;如果用户用的是Windows Me或Windows XP,可以点击任务栏的“开始”,选择“运行”,键入“DEBUG”,然后点击“确定”),键入DEBUG,回车。出现DEBUG横线提示符,我们即可使用“F”命令,直接对显示缓存进行操作,使显示器显示我们所需要的“图形”。具体操作命令如图表。debug操作命令一览表debug操作命令一览表 序号 命令 图形 1 -f b800:00 f9f 20 70 满屏白光栅 2 -f b800:00 f9f 20 40 满屏红光栅 3 -f b800:00 f9f 20 20 满屏绿光栅 4 -f b800:00 f9f 20 10 满屏蓝光栅 5 -f b800:00 f9f c5 07 c4 07 满屏白色十字 6 -f b800:00 f9f c5 04 c4 04 满屏红色十字 7 -f b800:00 f9f c5 02 c4 02 满屏绿色十字 8 -f b800:00 f9f c5 01 c4 01 满屏蓝色十字 9 -f b800:00 f9f c5 05 c4 05 满屏紫色十字 10 -f b800:00 f9f c4 07 满屏白色横线 11 -f b800:00 f9f b3 07 20 07 满屏白色竖线 12 -f b800:00 f9f 20 70 20 70 20 70 20 70 20 70 20 70 20 70 20 70 20 70 2070 满屏黑白相间   怎么样,都看到了吧,比彩电信号发生器提供的信号更纯、更全、更直观。大家通过对自己心仪的显示器的测试,尽量发现它的“不足之处”,尽可能地吹毛求疵,这样就可以多掌握一些向商家讨价还价的“砝码”。  上面方法的作用是配合显像管的偏转线圈、色纯磁环、六级磁环等可调整部件,帮助用户调整和修复显像管的红、绿、蓝静汇聚,动汇聚,白、暗平衡,色纯等“面子”错误,让我们的彩显时刻展露“真我”色彩。  毕竟显示器是整台电脑中服役时间最长的部件之一,所以精挑细选一台好的显示器是购买电脑的一个关键所在 !
2004年11月22日 09点11分 11
level 0
very good
2005年02月15日 16点02分 12
level 1
INT13
2005年02月17日 09点02分 13
level 0
请问以下在debug中着种命另对吗?为什么吗打完老说是错的那!-F 1103C"THIS PROGRAM IS DESUGNED TO CHECK RAM VIRNS"0A0D.
2005年02月26日 12点02分 14
level 0
http://xbnjfz.51.net/temp/debugp.htmdebug经典程序
2005年05月09日 13点05分 15
level 0
http://xbnjfz.51.net/temp/debug.htm
2005年05月09日 13点05分 16
level 0
为何我进不去了debug??masm也无法运行了
2005年06月01日 14点06分 17
level 1
谢谢了,正缺呢。
2005年11月12日 16点11分 18
level 2
真的不错
2005年11月23日 18点11分 19
level 0
我日 看不懂!~!
2006年07月10日 05点07分 20
level 0
不难的肯下工夫就行,千万别急噪,从最基础的学起
2008年02月06日 17点02分 21
1