找回密码
 立即加入
搜索

楼主: 没有明天

DEBUG命令详解

[复制链接]
 楼主| 没有明天 发表于 2005-1-15 23:32:31 | 显示全部楼层
<b>Debug:N(名称)</b>+ L% u& e+ ^: r. ~  h
, w% J/ M; Q) D) {- ^: K
指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。
" {0 h" @( B- N, J& [8 Fn [drive:][path] filename
+ o) j9 R+ P3 Q4 _要指定测试的可执行文件的参数,请使用以下语法:
6 ?& l2 N2 b; i7 p) p' an file-parameters + W+ W5 p# R( Y1 A
参数 # U2 g* i5 k' I+ \5 t9 g) l
如果在没有参数的情况下使用,则 n 命令清除当前规范。 * ^7 B, I9 S& w; v" y2 @( T  ^
[drive:][path] filename
% @, D+ f) A) H1 q$ D( e指定要测试的可执行文件的位置和名称。 8 b1 ~4 M8 j5 q; E: O6 ?& ?( Z" S8 b
file-parameters . @3 ?/ A$ C# ~3 k5 ]
为正在测试的可执行文件指定参数和开关。 5 R, T# U2 E. M4 X
有关将文件或指定磁盘扇区的内容加载到内存中的信息,请参看Debug L(加载)。 3 z- F, m9 d* y& k
有关写入调试到磁盘的文件的信息,请参看Debug W(写入)。
% V) T' f( [* R- [) e$ t说明
* q" h! S" Q9 j) cn 命令的两个用途 7 M, [+ K7 ^2 q
可以按两种方式使用 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 命令指定被调试文件的命令行参数和开关。 1 w) G/ ~( |% J0 ^0 ]6 W4 l
内存区域 : \% F- }# T" ^) l2 X; o# @
以下四个内存区域都会受到 n 命令的影响:
! r# N3 q& S8 v  F2 [/ C内存位置
+ S8 y4 R1 @$ Q; ^9 k" I  Y1 E内容
$ d; L2 l- Z; s% ?+ G: VCS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv>
, i2 L% L8 @' M9 T, N- ^文件 1 的文件控制数据块 (FCB) 1 e0 q* a0 V! f( N+ b, P6 T
CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"C\">6C</st1:chmetcnv>
, u/ F  n5 ~- e9 ~& G! m& S5 ~文件 2 的文件控制数据块 (FCB) ! Q" B2 p) ?9 @1 W3 h
CS:80
! n! M$ f8 U" {$ J+ W- E3 k, Zn 命令行的长度(以字符表示)
$ E" `* x/ {* J5 K1 P- CCS:81
7 }1 u7 L- _: P9 K) b* U" ~2 Xn 命令行字符的开头 ! v, I! O7 E) W3 y
为 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 命令提示符下键入的命令中有效的任何开关和分隔符。
; a, O4 p6 Y- C6 I1 v8 p范例 ) K/ r6 r9 @/ ~% j5 n
假定已经启动 Debug,并加载了正在调试的程序 Prog.com。接着您决定为 Prog.com 指定两个参数并运行此程序。以下是此范例的命令序列: ; ~( `7 S+ y0 D( y
debug prog.com % ]2 i1 `: t! e3 ^
nparam1 param<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"g\">2 </st1:chmetcnv># G: s) h6 B9 j1 W/ w2 m
g
6 i# V0 U  G" R在这种情况下,Debug g(转向)命令会运行该程序,就好像您已在 Windows 2000 命令提示符后键入了如下命令: + p+ X1 l. J. `9 z1 x4 N) x8 Q
prog param1 param2
3 U! e1 W9 U* k9 _9 S) y* d. _' Y0 w6 {所以,测试和调试反映 Prog.com 通常的运行时间环境。
; {7 _$ |4 r3 i8 v# m在下面的命令序列中,第一个 n 命令将 File1.exe 指定为后接的 l(加载)命令的文件,该命令将 File1.exe 加载到内存。第二个 n 命令指定 File1.exe 将使用的参数。最后,g 命令将运行 File1.exe 文件,就好像您在 Windows 2000 命令行中键入了 File1 File2.dat File2.dat 一样。
4 w0 P2 |! U7 H& |2 p+ anfile1.exe 0 I; I6 l( J# y
l
" C3 \7 \5 g# tnfile2.dat file3.dat
5 n+ v* z1 @& w. G( eg
, N$ \# w$ J) E% s( i注意
: _, ^% \- l4 A- V* c: W+ a8 l9 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>* A% o1 H. [1 _$ h
" E2 Y- G) W; T3 [& M, P: @
将字节值发送到输出端口。 1 v; c( T9 d0 [! ]  q* ]! i
o port byte-value
8 J; b4 B0 B! o6 L  u* F7 y3 i# R( I参数 ' G; D6 A9 j' _2 i% M1 f  k
port
. v, o- `' j5 ^5 s4 |4 V通过地址指定输出端口。端口地址可以是 16 位值。 4 [. x! S, v7 |/ v& R
byte-value
+ a! }9 E, q$ {, L# F, M指定要指向 port 的字节值。
* s! r; Y" Q2 \$ x' Q有关从输入端口读取字节值的信息,请参看Debug I(输入)。
9 U6 L1 o  Z2 X范例   L) _) t; g' g( _4 G1 r) r0 g
要将字节值 4Fh 发送到地址为 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"F\">2F</st1:chmetcnv>8h 的输出端口,请键入以下命令:
+ r: A" s5 M; _; U$ d' Z* }o<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>
* f0 t+ @+ d( E; ~
3 J+ s2 a& t0 e) c% J/ v$ f执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。 # N' X4 d& D5 y$ R7 T
p [= address] [number] : ~3 h! \' ^' C8 @
参数 . l7 ?/ ^1 r* f! d. N  |% p# ?
=address
$ ?9 Q7 w* n- v6 o4 i$ `指定第一个要执行指令的位置。如果不指定地址,则默认地址是在 CS:IP 寄存器中指定的当前地址。
* A! ]0 i/ A( q- N/ D& W! Znumber
4 H9 o6 Z0 H6 w" {0 f# B3 m指定在将控制返回给 Debug 之前要执行的指令数。默认值为 1。
+ p; o7 l. r) r7 K. Z7 O有关运行当前在内存中程序的信息,请参看Debug G(转向)。
, m: V4 {, _6 i: i4 K有关执行指令的信息,请参看Debug T(跟踪)。
: _' P; M, I: ^  K2 i" O6 T! e说明 9 ^, U  a) G; D4 i0 t  z2 g/ R
控制传送到要测试的程序 2 m/ z- r$ A* I9 i& b
当 p 命令将控制从 Debug 传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到 Debug。
' L) R1 [4 g# _+ J' x; G4 L地址参数的限制
2 \  G7 Z* `) a  p. f如果 address 参数没有指定段,Debug 将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP 寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug t(跟踪)命令的作用相同。 & F' O' o5 G4 W4 U! Y
使用 p 命令显示的邮件 ! Z9 _9 ^* S( ^
当 p 执行完一段说明后,Debug 显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。
! V8 l8 F* b0 j. P, A警告
9 o& N9 I- j9 C* O9 L4 `! Z不能使用 p 命令跟踪只读内存 (ROM)。
( L. t' @6 p4 x" p; [* R5 A范例
, R, s( {+ F7 }: a: x假定正在测试的程序在地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143F</st1:chmetcnv> 处包含一个 call 指令。要运行 call 目标位置的子程序然后将控制返回到 Debug,请键入以下命令:
' @- z* R( n, E) L4 D8 _- c1 Kp=<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143f</st1:chmetcnv>
. x+ E; a  |3 w+ t4 mDebug 按以下格式显示结果: 9 C. g1 F9 D% P3 J3 n# J" \7 m
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 # t+ S3 C! i% o5 M5 q
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC & q5 _8 e, i8 y, U( h/ E
2246: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>
8 m' n+ R& {' _2 O9 ?1 w/ [
* a( D& h2 b1 `3 w5 r. o停止 Debug 会话,不保存当前测试的文件。
6 @; B* N% I% D" r. e5 `0 d1 y当您键入 q 以后,控制返回到 DOS 的命令提示符。
3 }! O0 ]3 ~) A' I$ F: e" [q
/ \0 `  L+ f  H, G7 i: Q4 ?参数 3 J, W: B6 j1 Z9 x
该命令不带参数。
6 `" }1 ~4 m! p' O+ O5 k4 ^有关保存文件的信息,请参看Debug W(写入)。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:31 | 显示全部楼层
<b>Debug:R(寄存器)</b>
4 ^0 J, W7 i# c1 j
( x& r% F( p( j1 J: }0 }显示或改变一个或多个 CPU 寄存器的内容。 3 s* _; ?; p/ h" V! t! h
r [register-name] ! e7 e5 g0 }5 z$ Q* s9 g' ]
参数 ' g" r9 B) p- t2 u" n7 \- Q& b

  A8 @* Y+ l8 l如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。
" c, c0 ~1 a& Fregister-name % y$ b, ^  R. N2 N" P1 N" @& k# g0 D
指定要显示其内容的寄存器名。
" R8 J/ F" H5 w$ U: m有关显示内存部分内容的信息,请参看Debug D(转储)。 9 v& ^0 t9 k* w" }- M$ h
有关反汇编字节的信息,请参看Debug U(反汇编)。 ( f2 R7 e8 K  M" v3 u/ A# z
说明
* Y! K7 l7 k+ O( V- @% Y& _3 |( ]; E9 p使用 r 命令 ; h3 @, C2 G  x& K- b+ U
如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。
8 h- i) \2 A3 y8 f* H有效寄存器名 % b6 P4 `6 j" {, y
以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指针。
6 u. s) E# B4 L* J" k" R' g7 V如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000 将显示以下消息: 2 h: ]7 Y3 F$ D0 Q
br error ) C" r. d! j1 Y' B8 e8 T
使用 f 字符而不是寄存器名
1 ^$ n/ n. p/ x3 t6 l9 E1 h如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug 提示符。要更改标志的设置,请从下表中键入适当的两字母代码: 8 b  [1 C& G+ a3 x. J
标志名 9 M3 a' N- y1 ~% ~4 W
设置 4 c' `; [" h1 ?5 n* q2 N
清除 2 @* a3 k. e" ]" k& h7 g  F! _
溢出
- z' T; S6 J! e8 S% d$ S. |- `' oov ( [; G1 t- D" G8 w+ O
nv 3 N8 G! K6 z$ h1 P6 n! z
方向 4 b* i% z2 @) I( i
dn(减) 2 R  w" D/ _5 }- a
up(增) % z( j* ?! T) O' s0 b3 f  X2 o
中断 ( ?$ r, m4 d$ {2 U) ^  `& ~
ei(启用) 2 }; |" ]6 d- p( W, {
di(禁用) 3 k. t% m7 \: I
正负 8 J1 M! O! O% i! o( b5 v
ng(负) ; N! a3 @  Z/ _
pl(正) 6 ]- Y& g3 ]2 q- x) L8 F

. h% {0 D* `1 f. ~4 Qzr
2 i9 f4 h1 D$ y! ?2 d3 b$ L4 b2 Dnz ) F1 m9 ~3 g! J- J7 r* d3 n+ q5 P4 W
辅助进位 / d- i5 w4 w1 p" R3 s6 v
ac : q; Y  r) [- e# r( q9 A/ ?& i
na * C, m& [. S! G) A
奇偶校验 $ `% b7 {/ m& g: l' a9 u
pe(偶校验) 9 w5 Z  k) A& e% ?# ?$ @
po(奇校验) : z" `* J0 H& O3 s/ p
进位 7 h. Q$ s; S, D
cy * X" S0 a% @8 S" Y
nc 3 D1 [. ^6 B3 q6 ^- i
可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止 r 命令,请按 ENTER 键。任何没有指定新值的标志保持不变。
( J4 v& U0 c# ~) W# v用 r 命令显示的邮件
0 L) T$ b6 Q$ g8 i: R如果为标记指定了多个值,Debug 将显示以下消息:
' b/ E; ~) D" q& n% a4 A' Bdf error
0 [- |# L8 ~9 q9 j, @如果指定没有在前面的表中列出的标志代码,Debug 将显示以下消息:
* P9 C2 s2 T6 L% w2 R( \bf error 9 o- L7 W5 V1 X1 P
在这两种情况下,Debug 将忽略所有在无效项目之后指定的设置。 4 u1 J& D( `; x1 ?* [
Debug 的默认设置
  H2 z5 D  E- f在启动 Debug 时,会将段寄存器设置到空闲内存的低端,指令指针设置为 0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为 FFEEh 的 sp 之外。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:48 | 显示全部楼层
<b>Debug:R
9 z0 t+ G2 E* K/ u/ q; S4 [</b>
$ k) K* J/ l, m) _6 g范例 5 G$ I4 x# q6 a3 f6 g+ e3 v
要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令: 4 G+ U- k: _3 M8 j) ~
r
0 g$ m) |! R2 u& U如果当前位置是 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">11A</st1:chmetcnv>,显示外观将类似于以下内容:
9 F" S. e( ~4 AAX=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
$ P3 n6 J& m6 MDS=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   j" ~2 N: g+ T7 z3 {
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">011A</st1:chmetcnv> CD21 INT 21
6 d9 [4 L9 o; E* x1 ^2 \) ?: i# L4 j) n  S要只查看标志的状态,请键入以下命令:
& [9 v* c/ o, S* n1 c" U: Zrf 2 g3 T' M2 e4 u" T' p  ], N
Debug 按以下格式显示信息: " \3 N4 X8 B5 M7 V1 s
NV UP DI NG NZ AC PE NC - _   K  S! N* h- W  h3 H' I
现在,您可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示:
" p; k( k! U( qnv up di ng nz ac pe nc - pleicy
' y1 j% `0 f, [/ E9 L9 Q. }! w2 iDebug 结束 r 命令并显示 Debug 提示符。要查看更改,请键入 r 或 rf 命令。Debug 将显示以下内容:
1 ^7 i: h& b" b; N- bNV UP EI PL NZ AC PE CY - _ " |0 [. N# y9 |$ E( x: @( J
按 ENTER 返回到 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:04 | 显示全部楼层
<b>Debug:S(搜索)</b>  f2 [- \# D; l1 Q7 H" g
# ?4 t( A" d5 h; N  x& w; o$ _
在某个地址范围搜索一个或多个字节值的模式。 / z& w; r! d$ n! s7 Q" a* z1 A
s range list
- V# C! x8 G; Z1 t* B6 t- U% M: E" G参数 : Q. ~, g4 a2 b
range
$ Z5 f' r0 m, _" s5 s: b. E指定要搜索范围的开始和结束地址。 3 G# K- t2 c7 t7 d( v4 z
list
' U* q! @- S6 E7 P4 T* o; n! l! H* c指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号分隔每个字节值和下一个字节值。将字符串值包括在引号中。 # q+ r, h4 y6 T4 v" B
说明
, R, B+ y  b3 ^0 w如果 list 参数包含多个字节值,Debug 将只显示出现字节值的第一个地址。如果 list 只包含一个字节值,Debug 将显示指定范围内出现该值的所有地址。
. i+ n& H& ~+ F' w: B范例
2 l9 a" B) ]( N; x, B  U假定需要查找包含值 41 并且范围从 CS:100 到 CS:110 的所有地址。为此,请键入以下命令:
! W4 @* i3 _/ q6 V% \scs:100 110 41 " J( `1 ]7 U+ ~; W$ ?( k
Debug 按以下格式显示结果: / m9 w; e1 u4 _4 ~3 ^
04BA:0104
  W, c7 z  n" e  i: h04BA:010D 3 t8 c. H+ w7 b( B3 T# q. @  L" ^, T
- + ^* ^/ S5 }1 Z9 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”。 ( }; G- O/ E  j: L
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 i+ l0 q  G- Y3 J, [

9 A6 x% u5 ?& L& U7 _8 R3 j* g(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我)
" Y% B% L/ @, i  E$ G9 S" OAoGo补充:
5 }9 ~$ ^7 g, O2 I' R3 D5 O从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
/ {, p" v2 k- ~( m3 ]如:t 100 D- S9 n; i# ~( b! b; J
假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)<BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:36 | 显示全部楼层
<b>Debug:T(跟踪)</b>& [$ a  a4 I5 W$ \! c9 ~

- p  z( R2 [% A, a" t(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我)
2 Q" c8 r& J9 ?5 Z, r& Z$ aAoGo补充:
' r# y; J7 A- Q从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
7 T/ e* Y) S0 k; y& ?如:t 10
' x3 m! R  o1 h3 @; g假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)
7 a6 b, u9 t! R9 F; h% E" V
# F9 P; r4 a* s/ t2 F<B normal\">Debug:U</B><B normal\">(反汇编)</B>
$ F, Z% {; z: `4 y7 ]5 S# l7 _$ b9 X. k& o5 L
反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件的列表。
& a. _0 ^% x) ?) U5 l  ^/ ?u [range] / k4 i2 \7 W# x3 k7 `8 z
参数
! w+ r4 B! y# `4 `, M/ W6 ^! V! j! D! K, s# u
如果在没有参数的情况下使用,则 u 命令分解 20h 字节(默认值),从前面 u 命令所显示地址后的第一个地址开始。 + P% z) P' }# R( c& y  ?
range
% I6 H$ G5 S& ^6 o1 V1 v7 V指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
6 ~) o* V: a1 r' O( h: Z有关集成记忆码的信息,请参看Debug A(汇编)。 5 Y0 z; W$ R" G8 A
有关显示内存部分内容的信息,请参看Debug D(转储)。
/ t2 t1 L: Z. @! ~9 V范例
" L. h& F  {' _4 f要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,请键入以下命令:   u8 k0 O7 y+ A1 O* q
u04ba:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"100\" UnitName=\"l\">100l</st1:chmetcnv>10 / u. N" g, V( y) w+ l& T. ~, w- W
Debug 按以下格式显示结果: ) b& S5 H% u# j4 Y  a
04BA:0100 206472 AND [SI+72],AH
3 ?$ C0 H' U3 s. |04BA:0103 69 DB 69
7 B+ i1 h$ I: V1 Y04BA:0104 7665 JBE 016B 8 O3 q' J! E; T  x# q* K
04BA:0106 207370 AND [BP+DI+70],DH
& U/ u/ a' Z% V04BA:0109 65 DB 65
$ d8 Y% X0 t7 @; t) i04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"a\">010A</st1:chmetcnv> 63 DB 63
- b$ g1 p, `+ t' ~" m, b; _  a0 q# {04BA:010B 69 DB 69 * d# a2 k4 F: e" l  v
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"C\">010C</st1:chmetcnv> 66 DB 66
; t6 Z4 m' ^" E% m8 x) o5 a04BA:010D 69 DB 69
& Q6 I. @+ F& V, A8 e1 U; o04BA:010E 63 DB 63 , f! y: l- n( Y* |
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">010F</st1:chmetcnv> 61 DB 61 ' Z- _' g) d& ]  Z; }4 w4 b
如果只显示从 04BA:0100 到 04BA:0108 特定地址的信息,请键入以下命令: , q( n2 [9 O. Y9 y# Q
u04ba:0100 0108 " E& y) x9 V9 O: o7 p8 S
Debug 显示以下内容: ; Q& h; r/ u) Q, K  N( l  d
04BA:0100 206472 AND [SI+72],AH 6 ]2 f4 w* e0 [8 h9 p. d
04BA:0103 69 DB 69
1 B$ T2 ~3 k" W; b( j6 L* J7 G04BA:0104 7665 JBE 016B : q$ g! X. O- y2 d7 a8 u( J' j2 x
04BA:0106 207370 AND [BP+DI+70],DH
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:55 | 显示全部楼层
<b>Debug:W(写入)</b>( ]7 R6 P8 N7 R* C) Q
' z) `% ?% B+ H+ D7 U$ j7 ^
AoG只对COM有效,因为EXE是带有重定位信息的,而Debug无法产生重定位信息所以无法写入EXE。8 X7 v) S9 D8 P6 h
将文件或特定分区写入磁盘。 3 Y' |7 m5 {+ B
要将在 BX:CX 寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:
4 j$ Z( k+ L( Z7 M; Z9 a3 {w [address] + B: g: Q4 u7 R8 B2 Y5 V$ E
要略过 Windows 2000 文件系统并直接写入特定的扇区,请使用以下语法:
  o" I6 y2 H6 d& _: q+ l3 xw address drive start number
/ }8 t$ e8 ~. K; w2 X* E0 {: c/ S参数
2 T! a* u  N% Y+ ^& c( W8 Oaddress
# ?% p' E; n2 E/ {6 v指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address,Debug 程序将从 CS:100 开始。
$ C0 c, X6 |0 ^( Z" \6 S+ t" k. mdrive
5 P+ J& e+ Y& c7 e: z0 u( _指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。
: u" B3 ?% Q  _8 e9 pstart 3 D. h* W5 _: s
指定要写入第一个扇区的十六进制数。
/ L, F  P$ f) \: enumber
3 P( N) [  r* a# o, M* j指定要写入的扇区数。
/ f( F( h: z, G/ g3 h有关指定用于 w 命令的文件的信息,请参看Debug N(名称)。
/ D+ b( {/ @0 V& Q9 v有关将文件或文件扇区内容加载到内存中的信息,请参看Debug L(加载)。
/ a2 N$ C$ M' {9 g说明 8 H8 q# u; ^4 v7 v; d# p0 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> 处文件控制块的文件名正确地编排格式。 ' Q5 A% y" }+ d# F& d; e% G$ j
在使用不带参数的 w 命令之前重新设置 BX:CX 1 i6 c  G( C# \; }% r
如果使用了 Debug g(转向)、t(跟踪)、p(执行)或 r(寄存器)命令,必须在使用无参数的 w 命令之前,将 BX:CX 寄存器复位。 9 g' z5 P0 ?$ Y8 w
将修改后的文件写入磁盘
- d; o# S0 b2 [' \$ m如果修改文件但不更改文件名、长度或起始地址,Debug 仍然可以正确地将文件写入源磁盘位置。 5 m; K: x) S" q" Z
w 命令的限制 4 g) p7 D. p% x, j% U3 u
不能用该命令写入 .exe 或 .hex 文件。 : `% L8 f: N2 z5 V
警告
& f! d$ d2 `6 t% q. N因为略过 Windows 2000 文件句柄,所以写入特定的分区非常危险。如果键入错误的值,则磁盘文件结构很容易被损坏。 1 e2 J/ v( v, h% Y" n3 B3 ^
范例 ( E8 r% |# a6 t4 Q7 s. V
假定要将起始地址为 CS:100 的内存内容写入到驱动器 B 的磁盘中。需要将数据从磁盘的逻辑扇区号 37h 开始并持续 2Bh 个扇区。为此,键入以下命令:
- y5 F4 V: I& z5 K1 h1 iwcs:100 1 37 2b
# q" s6 V. Z2 t* l7 q) |# X, v6 P当写操作完成时,Debug 再次显示 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-1 07:42 , Processed in 0.050408 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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