找回密码
 立即加入
搜索

楼主: 没有明天

DEBUG命令详解

[复制链接]
 楼主| 没有明天 发表于 2005-1-15 23:32:31 | 显示全部楼层
<b>Debug:N(名称)</b>
, M' A) ?; d/ E- A+ G% T4 H" `8 {/ _  Z1 [: f7 }- b$ B8 X' W
指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。 0 q  ?7 o1 U+ V/ W
n [drive:][path] filename
& X: U+ x2 N) u7 o8 z要指定测试的可执行文件的参数,请使用以下语法:
7 M  s% Y. P2 ^# K6 kn file-parameters
! A' x/ b; w4 K参数
- z. a" Q* p" P' j5 b# z( \) K如果在没有参数的情况下使用,则 n 命令清除当前规范。
" ]' e+ z# J& c; [3 Y[drive:][path] filename : K/ E. a  ~& n  L" `/ t% r/ K
指定要测试的可执行文件的位置和名称。 ; F5 g% E2 {$ N
file-parameters
, {% b' e+ T: `为正在测试的可执行文件指定参数和开关。
8 A9 D* S9 U! y有关将文件或指定磁盘扇区的内容加载到内存中的信息,请参看Debug L(加载)。 & \3 Q- b, [- W5 _* X! l% F. R
有关写入调试到磁盘的文件的信息,请参看Debug W(写入)。 0 H6 a2 q( S4 t% W% H1 o$ d
说明
3 A6 p, T2 T3 Z. wn 命令的两个用途
* D, v9 O' X) w9 v- z# ]7 |可以按两种方式使用 n 命令。首先,您可以使用它以指定后面的 l(加载)或 w(写入)命令所使用的文件。如果在没有命名所调试文件的情况下启动 Debug,必须在使用 l 命令加载文件之前使用命令 nfilename。在 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv> 为文件控制块 (FCB) 正确编排文件名的格式。其次,可以使用 n 命令指定被调试文件的命令行参数和开关。 0 ?1 _- ?  m! X- _9 r7 X5 r+ Y4 Z
内存区域 * o- q; q6 E% t7 W) J
以下四个内存区域都会受到 n 命令的影响: ) j% E& F& O  \# e1 A* K1 f+ w$ O
内存位置 ' t8 {& T- _& m+ W8 q' j7 ]
内容 ) v; K" |  x+ B! C) F/ [4 Z1 ]
CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv> 2 }( f. J. Q7 k
文件 1 的文件控制数据块 (FCB)
8 \' J: W8 ^' n+ @! S) vCS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"C\">6C</st1:chmetcnv> ; e9 Q2 K4 Z7 `/ ~* J
文件 2 的文件控制数据块 (FCB) 7 ?. h: d& F% w/ a/ C2 N* u* m; b
CS:80
" z9 n- |/ P3 X9 L$ F) o' ln 命令行的长度(以字符表示) / U0 r' B9 O4 H  [, E* G7 p' f
CS:81 8 u4 G8 w, p" f
n 命令行字符的开头 1 [: n0 k6 C/ `7 n* W7 n
为 n 命令指定的第一个文件名被放在 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv> 的 FCB 中。如果指定第二个文件名,此名称将放置到 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"C\">6C</st1:chmetcnv> 的 FCB 中。n 命令行上键入的字符数(除第一个字符之外,n)存储在位置 CS:80。n 命令行上的实际字符(再次,除了字母 n 之外)存储在以 CS:81 开头的位置。注意这些字符可以是在 Windows 2000 命令提示符下键入的命令中有效的任何开关和分隔符。 2 z" N4 f. P' W& l& t3 z+ \
范例 & U4 k! W8 W+ f
假定已经启动 Debug,并加载了正在调试的程序 Prog.com。接着您决定为 Prog.com 指定两个参数并运行此程序。以下是此范例的命令序列: 2 z' N5 k7 ^' h: W5 M! j
debug prog.com 9 E/ A1 k! {/ L0 l4 b0 Z  m' }
nparam1 param<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"g\">2 </st1:chmetcnv>4 }2 r6 U/ Z  M: G' s5 L
g ( n: ]# v1 a6 R' W
在这种情况下,Debug g(转向)命令会运行该程序,就好像您已在 Windows 2000 命令提示符后键入了如下命令:
! N5 I3 P/ F3 Y& o2 c( ]prog param1 param2
( T  M) `* @9 z所以,测试和调试反映 Prog.com 通常的运行时间环境。
5 T9 \9 p/ Z2 o  P' P4 _2 y, A在下面的命令序列中,第一个 n 命令将 File1.exe 指定为后接的 l(加载)命令的文件,该命令将 File1.exe 加载到内存。第二个 n 命令指定 File1.exe 将使用的参数。最后,g 命令将运行 File1.exe 文件,就好像您在 Windows 2000 命令行中键入了 File1 File2.dat File2.dat 一样。
# j3 \% z" X9 O1 I6 M" E+ ?nfile1.exe 1 l! M3 Y( a( d
l
9 _; P5 T* _, o, }- w; Z$ i, Knfile2.dat file3.dat $ p9 |* a: R* ]' H" k2 {$ p$ Z8 J; Z) ]5 X
g
( {* P! O7 i5 Q注意 # N0 G+ j- Y- x/ [$ T
不要在 n 命令的第二种形式后使用 l 命令。还要注意,如果现在使用 w(写入)命令,Windows 2000 将使用名称 File2.dat 保存正在调试的文件 File1.exe。为避免出现此结果,应该总是在 l 或 w 命令之前立即使用 n 命令的第一种形式。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:32:43 | 显示全部楼层
<b>Debug:O</b><b>(输出)</b>- h. j  i! x$ Q% p) |
" ^! v6 k- ^' V3 Y8 O
将字节值发送到输出端口。
0 s$ b% C! v: A( H* V- f  N5 ?o port byte-value 1 r) H9 t2 A0 z9 z, ^
参数
  R( i, |0 x% h% r; |# Mport
+ A1 o3 _5 [( r/ y) Y: |通过地址指定输出端口。端口地址可以是 16 位值。
( n$ P$ S4 s; m9 N+ Nbyte-value
" r' |+ U$ R# n* e" r$ H0 O指定要指向 port 的字节值。
( e8 k) v5 u3 }+ Z有关从输入端口读取字节值的信息,请参看Debug I(输入)。 # a' B5 g+ |- C5 F8 j& `( S; D7 A
范例
: a7 J. I- X, c) @! |要将字节值 4Fh 发送到地址为 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"F\">2F</st1:chmetcnv>8h 的输出端口,请键入以下命令:
; E8 k7 P! ^; V4 C( xo<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"F\">2f</st1:chmetcnv>8 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"4\" UnitName=\"F\">4f</st1:chmetcnv> <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:32:57 | 显示全部楼层
<b>Debug(执行)</b>
; ]- A" F. W/ T0 N" `/ B1 B% L; X- Y
执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。 + m: @2 {* u4 e6 k, c+ l
p [= address] [number]
0 v  V( m$ C: r' c参数
1 [' q* i% \: r+ l4 a6 y" H) n7 x=address
: U& g" j$ r; \3 y6 ^) |5 c5 O指定第一个要执行指令的位置。如果不指定地址,则默认地址是在 CS:IP 寄存器中指定的当前地址。
$ L# q' N2 Z4 n7 Onumber
* W7 ^" o' U* w9 u' R6 ?指定在将控制返回给 Debug 之前要执行的指令数。默认值为 1。 % u: C, f$ j2 n
有关运行当前在内存中程序的信息,请参看Debug G(转向)。 0 @$ H6 Z$ z4 M, t1 C1 L
有关执行指令的信息,请参看Debug T(跟踪)。 ! a% `& o9 Y- O$ _+ M  d2 _
说明
& k. _1 U. ]% G5 X- [  J& m* Q% Y控制传送到要测试的程序 ' e: Y- ~. i. |) c( ^
当 p 命令将控制从 Debug 传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到 Debug。 $ p/ P7 J. Q* p# X% c
地址参数的限制
9 y7 J' j: c! U; }如果 address 参数没有指定段,Debug 将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP 寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug t(跟踪)命令的作用相同。 7 |% M3 e' P7 r  C# ?
使用 p 命令显示的邮件
, X7 p$ a! Y4 l+ b当 p 执行完一段说明后,Debug 显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。
* L+ g) L6 ~/ s) S警告 ( p0 r/ e$ o! x" V3 V+ \' k" A
不能使用 p 命令跟踪只读内存 (ROM)。 # j, k+ s3 X% ?+ o8 g' }
范例
  P4 u: q' {% g0 s假定正在测试的程序在地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143F</st1:chmetcnv> 处包含一个 call 指令。要运行 call 目标位置的子程序然后将控制返回到 Debug,请键入以下命令:
1 I8 m6 [# X5 tp=<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143f</st1:chmetcnv>
$ o3 @# h' }, }Debug 按以下格式显示结果: * P2 x9 p/ v* j) h! k
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 , ]( \' o* {! z  ]: v: V' B8 L
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
/ H% |) q0 s1 h) k: l" A2246:1442 7505 JNZ <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"144\" UnitName=\"a\">144A</st1:chmetcnv> <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:10 | 显示全部楼层
<b>Debug(退出)</b>
$ b  O5 r/ L& F0 x. E# m1 ~1 U. t. |) b$ [( r' e1 ]
停止 Debug 会话,不保存当前测试的文件。
( G4 p: Y6 W4 R8 x6 k当您键入 q 以后,控制返回到 DOS 的命令提示符。
) e( f8 B( G& S/ T  W- b# q. \q 0 R9 I  f6 l! ^* K, V% J
参数
' n8 t2 n% [7 P该命令不带参数。
6 q: j# Q- {' k$ ~  V8 Y有关保存文件的信息,请参看Debug W(写入)。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:31 | 显示全部楼层
<b>Debug:R(寄存器)</b>, a0 `$ g0 |: l6 b

( E7 c4 @7 Q! r/ y' [, _6 i* Y( O: W显示或改变一个或多个 CPU 寄存器的内容。
% ^: e/ B7 g) K% F$ g9 F8 Ar [register-name] ' ?/ H7 M8 _1 ?1 Q5 |0 d8 O
参数
: Y5 J/ X0 a# f/ K* q: K/ m  f; [
3 A3 o) E  S$ V8 t, Q6 _如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。 / h, j( a6 @. K- Z7 z& O
register-name & u7 L: `0 c7 i% s
指定要显示其内容的寄存器名。
: s* Q8 {& {; i* {有关显示内存部分内容的信息,请参看Debug D(转储)。 0 w. G& p9 T  v3 J  B; c
有关反汇编字节的信息,请参看Debug U(反汇编)。 6 [) y$ |/ d, E
说明
0 S2 O  `4 c( s; m( b, q  v使用 r 命令 7 Q5 n- E6 Y% i0 w9 i0 J/ u, W  J) e
如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。 4 _8 D5 U2 j! Z- l/ _
有效寄存器名 + k/ s, w! ^5 J/ Y: s2 \! }
以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指针。 : q- k7 N  S9 n5 B8 a; R" I4 ~
如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000 将显示以下消息:
: Q' K4 T. H: ]6 rbr error
) [, Z; s) ?6 |5 G0 b使用 f 字符而不是寄存器名 , `) M  i0 k( _% a
如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug 提示符。要更改标志的设置,请从下表中键入适当的两字母代码: / `9 e& t7 ~5 e. q
标志名   b  ?4 a9 T) F7 X- B+ o, h
设置
; z# L$ Y; U  y. ~6 R& {清除 ( b! C* j0 ?: Y! g) |
溢出 , }: W' j# i7 r. K1 N# |; v# ?
ov
0 l; J0 ]* D( W& snv
4 Z3 ^6 Z& a( [' ?3 h% P( ~, o0 A方向 ! l; X: V! D: A& j" B
dn(减) 7 f" r9 T, P- |" x0 k: Z- ?
up(增) + ?! z7 d2 o, @
中断 2 T) g3 v! ?& m9 I* J( H( Y7 V
ei(启用)
$ T; H  g# e% ]. Fdi(禁用) $ K; r* o3 r& Q/ _  E1 [: n( l
正负 % U$ t4 x2 u* g# X, s2 o( K: t/ k
ng(负)
$ Z/ w+ d2 L+ V1 b, e! Xpl(正)
( H) x$ o8 k- {4 B5 n- C0 `/ Q, F
zr
- w  ?2 u  I& V; p! n8 Jnz
6 H6 U' b: E- K, L9 ~辅助进位 ; j/ C+ _) q5 U  i  P3 h
ac
6 M8 E8 s( L% u' Qna 3 Y1 I8 E6 Z" V' g/ E7 ?
奇偶校验 " j3 H8 _* F, n6 e# V: y% c
pe(偶校验)
( Z. j- K: ~6 a% l% L) L6 @po(奇校验) $ P3 E! L! P0 G  @
进位
( r: V( U6 ^9 C  ?3 i4 ecy " w: Z" K. A* @+ g+ u
nc $ R! G& M) `" t0 W
可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止 r 命令,请按 ENTER 键。任何没有指定新值的标志保持不变。
% Q8 k# x& X1 S& P/ }% G用 r 命令显示的邮件 & B* x/ }. e6 }+ V! ^* p3 h
如果为标记指定了多个值,Debug 将显示以下消息:
  ^7 k6 d; Z) E, N1 Ndf error
1 b2 y+ x4 w8 A5 R1 ]如果指定没有在前面的表中列出的标志代码,Debug 将显示以下消息:
; d1 Q8 R; O1 C; b, V) f  j4 abf error : y6 m. i' U* I
在这两种情况下,Debug 将忽略所有在无效项目之后指定的设置。
' s* r1 P& p# ODebug 的默认设置
5 A: n; w8 x! A' }在启动 Debug 时,会将段寄存器设置到空闲内存的低端,指令指针设置为 0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为 FFEEh 的 sp 之外。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:48 | 显示全部楼层
<b>Debug:R
5 }1 {2 J: Y1 O$ G! T</b>
. Y$ |( y# d3 {5 x+ t: O; U2 o范例 & ^2 Z; @+ k$ S7 Y% b! ?/ [
要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令: , g5 v2 {* M* P3 M6 C+ ^/ Z4 v
r
# s3 E8 V0 r$ h+ r/ {如果当前位置是 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">11A</st1:chmetcnv>,显示外观将类似于以下内容: 2 E3 r: P( P& T1 _9 f+ \/ z" ?+ B
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">005C</st1:chmetcnv> DI=0000 ! |! E. c& D6 `
DS=04BA ES=04BA SS=04BA CS=O4BA IP=<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">011A</st1:chmetcnv> NV UP DI NG NZ AC PE NC 3 |' Q  T1 E( h5 e# N: _
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">011A</st1:chmetcnv> CD21 INT 21
2 Z0 Z2 Z0 K, g0 F要只查看标志的状态,请键入以下命令:   b# m9 t* L" B5 W
rf
/ f$ o" d+ [8 ^) d# @Debug 按以下格式显示信息:
' ?' |. s6 q( |# E' _- \NV UP DI NG NZ AC PE NC - _ 2 y& B8 Q, A1 P2 N4 ?+ O* L& K9 t! K
现在,您可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示:
6 E1 s+ U! f+ E% Nnv up di ng nz ac pe nc - pleicy 9 y1 ?# _' F$ B9 c. Z
Debug 结束 r 命令并显示 Debug 提示符。要查看更改,请键入 r 或 rf 命令。Debug 将显示以下内容: 7 S& V- J5 J  j0 g* {# Z# p: W
NV UP EI PL NZ AC PE CY - _ 3 `# i9 O3 `0 f4 u0 r5 U' b
按 ENTER 返回到 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:04 | 显示全部楼层
<b>Debug:S(搜索)</b>- i: M( |7 J: I2 b! o

" _) e4 z: ~/ Z& O/ P在某个地址范围搜索一个或多个字节值的模式。 & F* `! K% ]/ [% J- \( g
s range list
& ?- a. t0 c: z' |参数
/ n! C* C& d9 k7 ]/ Z6 G" Z! Rrange 7 D0 ~% B6 T9 Z; P& h" C
指定要搜索范围的开始和结束地址。
- s$ g' D2 }+ c8 y: Hlist ( z, H$ }6 E- Y9 m% d4 c$ c
指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号分隔每个字节值和下一个字节值。将字符串值包括在引号中。
2 l( F4 o* e* v! ~3 D2 R说明 + {3 G2 r9 q  ^; K- x8 E
如果 list 参数包含多个字节值,Debug 将只显示出现字节值的第一个地址。如果 list 只包含一个字节值,Debug 将显示指定范围内出现该值的所有地址。
* \, Q( }6 e9 s# ?, B9 I6 a范例 4 z% }% [& k* b8 I5 O7 t  J
假定需要查找包含值 41 并且范围从 CS:100 到 CS:110 的所有地址。为此,请键入以下命令: ) M& R* d* F8 g
scs:100 110 41 ) p% [' F' ], \9 N. Q
Debug 按以下格式显示结果:
2 b3 [8 I  G$ X" w2 b& }+ z04BA:0104
3 ^& S# W7 R$ {# @3 A04BA:010D
2 U7 [) t: l+ f8 l-
0 u, k& O+ O6 K# F+ x以下命令在 CS:100 到 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"1\" UnitName=\"a\">1A</st1:chmetcnv>0 的范围内搜索字符串“Ph”。 4 a7 |/ _- B4 A8 x9 v+ y
scs:100 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"1\" UnitName=\"a\">1a</st1:chmetcnv>0 \"h\" <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:19 | 显示全部楼层
<b>Debug:T(跟踪)</b>
7 C) L/ A2 a& O( X4 q1 G% n3 G6 T" q) j  _; ]# k+ m$ w7 T
(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我)
6 S& b7 O, ]1 vAoGo补充:
9 p! u0 b) I4 H. u" l# j从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
5 i9 U" ~1 d3 K& V0 S7 I如:t 10
+ t/ j; s- Y3 Z7 Q* G3 \* T, i. c8 L假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)<BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:36 | 显示全部楼层
<b>Debug:T(跟踪)</b>
+ O8 c1 o* S4 l' K( D
  K, [5 E3 T: q. }( ]8 g; J2 f  n(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我)
/ b/ [5 q9 ]/ A* pAoGo补充:. ^/ F! {% [8 ]1 A4 z
从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。$ X2 H- g: ]8 r4 ?
如:t 10
) a, s# f- e  m' l! [7 t! ~) A0 y假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)
) w* v6 ~7 v) R( B7 ]* l% G
9 Z; `% ?3 s* t& K% n. q" \<B normal\">Debug:U</B><B normal\">(反汇编)</B>/ }. x; m% `* z

  n2 H# M* a1 D8 l! d9 c# l. m9 H/ M反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件的列表。
0 `0 i3 K3 b3 \# uu [range]
" r, t# h- E- H3 O$ @- ~1 e$ P参数
7 l# Y( Q- E0 k7 \4 ^7 L: U. c! e# T4 H3 a$ I4 R5 V7 U! R( R
如果在没有参数的情况下使用,则 u 命令分解 20h 字节(默认值),从前面 u 命令所显示地址后的第一个地址开始。 - q/ t% F  N. j: J0 p* [
range
1 o' F" f5 k; _; W; q& l指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
# W% j" B$ z( ~  l有关集成记忆码的信息,请参看Debug A(汇编)。 : k$ G4 y0 X9 |3 o4 {6 ~& a) v! \" Q% j
有关显示内存部分内容的信息,请参看Debug D(转储)。
9 A% j# b( \, r8 L范例
7 {7 N% f- H. i" j# l0 p+ u要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,请键入以下命令: 1 J$ w; J1 Z* U* H. W
u04ba:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"100\" UnitName=\"l\">100l</st1:chmetcnv>10 4 H0 m$ f, X" ^6 g- G& |  }8 [
Debug 按以下格式显示结果: " n0 z  P5 E' g6 M# _; P1 V
04BA:0100 206472 AND [SI+72],AH . {" i% h# C- a7 N# H
04BA:0103 69 DB 69 , b  p7 E% A( @2 e% x$ B8 u
04BA:0104 7665 JBE 016B
. M, R9 {: E8 B6 U9 t( W3 Z4 D+ {" G04BA:0106 207370 AND [BP+DI+70],DH
8 O+ L) |: c& K4 b5 F) X) e04BA:0109 65 DB 65
0 p0 y0 K9 F& `" p9 Y! ^- O04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"a\">010A</st1:chmetcnv> 63 DB 63
! B4 Z' l1 D6 C" s$ R04BA:010B 69 DB 69
! B  N5 O0 j9 s+ E6 I04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"C\">010C</st1:chmetcnv> 66 DB 66
' f% S% z- {2 t/ S9 j  o04BA:010D 69 DB 69
$ x+ B5 e' P' k5 M* Z; [04BA:010E 63 DB 63 ; E, n# R$ s5 [
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">010F</st1:chmetcnv> 61 DB 61 9 G; v9 z1 M# h
如果只显示从 04BA:0100 到 04BA:0108 特定地址的信息,请键入以下命令:
6 Q# N4 h( h' N7 Su04ba:0100 0108 1 p2 M8 B$ n  M9 Z& [& v6 \
Debug 显示以下内容:
0 Z0 |9 T6 A% {0 G2 `' U* [; L04BA:0100 206472 AND [SI+72],AH " B4 l- e- U+ r& M4 \
04BA:0103 69 DB 69
  x) T: k- L. Q, ]" D04BA:0104 7665 JBE 016B
0 @( S( t7 H2 c9 R" @04BA:0106 207370 AND [BP+DI+70],DH
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:55 | 显示全部楼层
<b>Debug:W(写入)</b>
5 Y6 q% A2 j; b
, T3 E- k' q! X7 w; CAoG只对COM有效,因为EXE是带有重定位信息的,而Debug无法产生重定位信息所以无法写入EXE。
3 {0 ]2 l2 H# V, j! P将文件或特定分区写入磁盘。 ! j* J9 S; ?& s3 Q+ b
要将在 BX:CX 寄存器中指定字节数的内容写入磁盘文件,请使用以下语法: . \- E& E4 V* J- X' ]0 U, Z
w [address]
2 q3 Q8 \  H3 p- p) V要略过 Windows 2000 文件系统并直接写入特定的扇区,请使用以下语法:
5 i  \3 `: e. T1 a7 G0 D, ow address drive start number 6 l1 v# |% x! f3 I; E
参数
! R8 N2 B9 x3 J3 W1 u$ s/ Xaddress
) p' I  k( W% T指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address,Debug 程序将从 CS:100 开始。
5 ~. ^: b5 `  _, Kdrive . k" N7 n3 W$ A0 `! A
指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。
$ e- F$ e8 f+ z4 I' _start
5 H6 _6 a; g. `8 d指定要写入第一个扇区的十六进制数。 " g9 |4 A- \. k2 R+ r, n5 G- \
number ( G6 V- Y8 F9 q1 }! H( P# a0 D' N
指定要写入的扇区数。
. S' O1 s- `+ D. G+ K. T1 q有关指定用于 w 命令的文件的信息,请参看Debug N(名称)。 6 _; |1 ], G) N+ b0 U
有关将文件或文件扇区内容加载到内存中的信息,请参看Debug L(加载)。
/ z- U. o: f6 M2 }1 J( A说明 0 w6 `& b7 h* c$ t& l; \' o# P3 Q
必须在启动 Debug 时或者在最近的 Debug n(名称)命令中指定磁盘文件的名字。这两种方法都可以将地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv> 处文件控制块的文件名正确地编排格式。
  f' }- E5 Y+ j; q" Y$ o5 z0 u在使用不带参数的 w 命令之前重新设置 BX:CX
6 Q6 T" D2 Y( j如果使用了 Debug g(转向)、t(跟踪)、p(执行)或 r(寄存器)命令,必须在使用无参数的 w 命令之前,将 BX:CX 寄存器复位。 ( q8 \" P3 ?6 e2 C% k
将修改后的文件写入磁盘
5 H" N, z. Z% D% g4 z0 x- b/ W如果修改文件但不更改文件名、长度或起始地址,Debug 仍然可以正确地将文件写入源磁盘位置。
7 i! W* [' m; g+ T: ^( m: r- Kw 命令的限制 1 I/ a$ b- M$ p
不能用该命令写入 .exe 或 .hex 文件。 * ^8 W% k2 r" K1 X: }7 R& }
警告
% g& ?" y) p3 t6 E8 f) Y因为略过 Windows 2000 文件句柄,所以写入特定的分区非常危险。如果键入错误的值,则磁盘文件结构很容易被损坏。 # `) v- o6 d$ T" @2 k% n
范例
4 d% Z. c2 T2 Z4 H& D$ V) Y% p假定要将起始地址为 CS:100 的内存内容写入到驱动器 B 的磁盘中。需要将数据从磁盘的逻辑扇区号 37h 开始并持续 2Bh 个扇区。为此,键入以下命令: - f+ Q( e" f2 p0 F
wcs:100 1 37 2b * Z/ A* W9 \2 r3 v; E) \: j% y
当写操作完成时,Debug 再次显示 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

手机版|龙江曦月 ( 闽ICP备05009150号-1 )闽公安网备35060202000316

GMT+8, 2026-4-4 00:55 , Processed in 0.044852 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表