找回密码
 立即加入
搜索

楼主: 没有明天

DEBUG命令详解

[复制链接]
 楼主| 没有明天 发表于 2005-1-15 23:32:31 | 显示全部楼层
<b>Debug:N(名称)</b>
- \& U0 X/ M% [, q& C, ~
5 }$ r# L; G  C  k指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。
0 o- r2 Q' j: J8 ^/ xn [drive:][path] filename & A1 Q1 U# ?7 I3 |+ D: V
要指定测试的可执行文件的参数,请使用以下语法:
: r& w9 K# s5 a) E1 x& kn file-parameters ' ^5 G4 L! G- C* S2 o
参数
3 Q! \" k3 M5 b9 @% d如果在没有参数的情况下使用,则 n 命令清除当前规范。 + C0 v% l* c/ h2 E% n
[drive:][path] filename . b3 d  S/ y- P
指定要测试的可执行文件的位置和名称。 , }/ @/ O4 U  U9 G7 |- \& Q
file-parameters , G+ L; q; z/ S$ X6 @6 B( j) T# s
为正在测试的可执行文件指定参数和开关。 1 c4 g" |# \: H9 W' f3 P
有关将文件或指定磁盘扇区的内容加载到内存中的信息,请参看Debug L(加载)。 ( w8 a! Z- k5 k- d4 }7 e+ f
有关写入调试到磁盘的文件的信息,请参看Debug W(写入)。 * ~( Q% x2 L+ H5 h" O- T
说明 ; V1 ?5 N+ z) G6 @3 x: a+ d0 c! f" u
n 命令的两个用途
: m" y4 V6 C( b' t+ L可以按两种方式使用 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 命令指定被调试文件的命令行参数和开关。 6 E7 m7 A* G, @. K4 X" `6 Q9 f" \
内存区域 9 p! ]; e+ E( v: o0 I
以下四个内存区域都会受到 n 命令的影响:
/ f9 i% ]* d5 `; J5 U& w9 S内存位置 ! D# a2 q  s4 ?2 U) w+ E
内容 + f# r8 F% \3 H% U) |7 K' V+ D& ~
CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv>
; _# g0 u. j, N  Y2 I1 s3 t文件 1 的文件控制数据块 (FCB) . p6 J. M8 g9 x
CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"C\">6C</st1:chmetcnv> * @8 n: n0 I) {* e9 f
文件 2 的文件控制数据块 (FCB) $ j4 n, Q, |! d1 I! d' f
CS:80   b4 _& ~  @5 f( [& H8 c& T3 Y
n 命令行的长度(以字符表示)
: H6 f: s) h, s# n8 ?& T$ dCS:81
: Y4 j2 E9 R) N3 g: L  _" sn 命令行字符的开头
  f  [# a1 w  c7 A) G$ B8 o为 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 K: q* ]" ?- p( D范例 " s/ C* D. Z0 ~& l# e. w/ H: E
假定已经启动 Debug,并加载了正在调试的程序 Prog.com。接着您决定为 Prog.com 指定两个参数并运行此程序。以下是此范例的命令序列: : I8 |: c/ x2 G+ M! A
debug prog.com
5 N# Q$ n3 g( Vnparam1 param<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"g\">2 </st1:chmetcnv>
; @7 b3 S+ ^, mg
- X( A" H* k8 G0 @% L, ~. U  N3 Y在这种情况下,Debug g(转向)命令会运行该程序,就好像您已在 Windows 2000 命令提示符后键入了如下命令: 4 \9 E, I; g% h  R2 w
prog param1 param2
$ h; j* F8 ?. E所以,测试和调试反映 Prog.com 通常的运行时间环境。 : E3 I6 |: N5 T1 B/ E" ^7 }) q
在下面的命令序列中,第一个 n 命令将 File1.exe 指定为后接的 l(加载)命令的文件,该命令将 File1.exe 加载到内存。第二个 n 命令指定 File1.exe 将使用的参数。最后,g 命令将运行 File1.exe 文件,就好像您在 Windows 2000 命令行中键入了 File1 File2.dat File2.dat 一样。
; J! K2 S: k6 x. e- ^# @4 Wnfile1.exe 6 U' Z' H8 R' X$ G( `' G
l 6 C: T6 ?$ g8 B7 M4 I
nfile2.dat file3.dat 8 ]3 a9 u' z+ y( h3 m
g
6 \3 h9 c9 ?8 Y( w" f7 `注意 ) F. o" [7 F9 t, s. Y) f
不要在 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>
  k- j0 v3 ?1 E" J9 X, x" [  B8 a) S) _0 B( l6 Y
将字节值发送到输出端口。 $ Q5 j! z1 T4 S) [7 ]% o2 ~# [+ f
o port byte-value
: ]4 X1 M) Q& A4 b& r' ?9 w: @参数   P3 W6 N4 {0 d( [
port
$ R3 e/ }+ P7 |9 p6 i3 |" V8 i通过地址指定输出端口。端口地址可以是 16 位值。
' r# t# h2 k; @. g# @4 Jbyte-value - }7 h" L3 y2 U4 |
指定要指向 port 的字节值。
* K, @' K! ^, I+ C1 f& q$ o- g) e+ g$ q有关从输入端口读取字节值的信息,请参看Debug I(输入)。 7 x4 W# @& ]) T2 ^& P$ r
范例
; f3 H0 h8 w% D) _$ Q' P  s要将字节值 4Fh 发送到地址为 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"F\">2F</st1:chmetcnv>8h 的输出端口,请键入以下命令:
& K. ~2 }, z. Wo<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>
- v  ]7 o- J' n$ b) V
! e" R! p9 Z$ j1 |0 m% Y* e+ W执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。 9 q) `, r! W9 o4 s
p [= address] [number]
6 x7 y' v$ n; `0 |; d参数
6 q! x: p- J2 @9 ~! m9 O=address
9 p4 C. n" D+ P( @0 K" u指定第一个要执行指令的位置。如果不指定地址,则默认地址是在 CS:IP 寄存器中指定的当前地址。 0 {- v& A# q5 }6 ?
number
$ ?* q2 }! o, L  C3 E; Z指定在将控制返回给 Debug 之前要执行的指令数。默认值为 1。 $ t, p) V% z. b: H3 [
有关运行当前在内存中程序的信息,请参看Debug G(转向)。
) ^( }% q" k; [) L有关执行指令的信息,请参看Debug T(跟踪)。
% p) G# J( e8 p, |5 `. ?% S说明
% a' p' T$ F# \  c6 ^; d6 |0 b控制传送到要测试的程序 ) z# D3 x! [. F5 R# R
当 p 命令将控制从 Debug 传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到 Debug。 3 G3 d9 q- }0 T1 ], Y* ~
地址参数的限制 ( G7 Q6 z5 i) X/ g
如果 address 参数没有指定段,Debug 将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP 寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug t(跟踪)命令的作用相同。
  D1 P& A# h5 ?  }( {使用 p 命令显示的邮件 7 r- L5 z9 c/ c
当 p 执行完一段说明后,Debug 显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。 . J! b' C6 ^. |
警告
) w# }, |2 O2 x- ]不能使用 p 命令跟踪只读内存 (ROM)。
2 @/ r( F8 `$ L! ]/ i" j范例
' J( Y8 E- X4 p: i1 t2 q0 `+ [: g* W假定正在测试的程序在地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143F</st1:chmetcnv> 处包含一个 call 指令。要运行 call 目标位置的子程序然后将控制返回到 Debug,请键入以下命令: ; _3 f6 K. V; I- C" w$ `3 i
p=<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143f</st1:chmetcnv> 0 C! B6 {( G2 ]4 y
Debug 按以下格式显示结果: . |6 f0 A! j2 v4 G0 S
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
* T8 Y( @* _. n# R* |5 BDS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC ! R$ D4 `2 D8 E/ Q/ w
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>
, |, V5 ~0 F8 `; O7 c+ ]/ g% v- x* i& ~- O* U
停止 Debug 会话,不保存当前测试的文件。 / b/ C* H9 I6 D3 z1 W% S
当您键入 q 以后,控制返回到 DOS 的命令提示符。
4 u* \% s$ \6 r, z: \  ~, Wq
' H% b" p, U7 z' l3 B2 J4 h' w% M参数
6 w( S  v8 H+ y7 c" B' l0 R该命令不带参数。 ) Y" g, J, Q5 a6 M' I$ b$ W2 o
有关保存文件的信息,请参看Debug W(写入)。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:31 | 显示全部楼层
<b>Debug:R(寄存器)</b>
$ c# E$ j, B. R* j: R" k# i3 S0 a' L2 |. Z( ^  b+ @; ]3 f# I
显示或改变一个或多个 CPU 寄存器的内容。 3 Z- Y- |6 F+ c/ o( ]4 q' n
r [register-name] 8 G- U; u! j3 R% F
参数 ! ^! l8 E) M# f
2 c' b7 a' O( k# e/ e# d% G  Q) T& j
如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。 9 n# h# Y' K; _, L4 k3 ?) W
register-name
0 r2 L2 P6 ?/ e" r8 `/ U1 E指定要显示其内容的寄存器名。 ! N$ g9 y0 d6 s, g1 p# c
有关显示内存部分内容的信息,请参看Debug D(转储)。
3 Y! ]/ k# M8 R$ Y/ c3 @有关反汇编字节的信息,请参看Debug U(反汇编)。
8 i* \" T& R( y& B说明
, L  ~9 w( ]) c# h) n5 Y# N. J使用 r 命令
# K: c7 g) |3 w* W% j如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。 8 h. [  X5 @0 a7 S7 ?5 u1 ^5 X. v
有效寄存器名
3 T, @% A. m3 m/ u# |9 i以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指针。
  [5 @9 ]  t% m9 u7 z如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000 将显示以下消息: 1 c& f  d! C0 Y0 V+ q3 L* X
br error
6 [8 C+ G: J0 t9 u: A使用 f 字符而不是寄存器名 - T$ R) S# y  g) C1 }* L5 i( ]
如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug 提示符。要更改标志的设置,请从下表中键入适当的两字母代码:
$ P. w3 f# Y3 |标志名 3 a5 f6 o/ _, \; O
设置
3 p( r) x* g; o; z/ [清除 * z+ @- d# ~) X5 t$ B9 w5 ]
溢出
# o% Q) l4 c+ W" I9 t. qov - N' i6 ~$ V: w% F- B8 Z: w3 X8 M8 a2 r
nv
* o. {5 ^% c4 f$ y, {方向 ! ~) P& l, {7 n& f/ R) H% N; S
dn(减) 8 \0 N" }# C( Z0 i
up(增) 5 }# o1 E3 I$ t% F, w
中断
2 Z- V+ G4 O8 t* ?- F; Q5 uei(启用)
! D1 p9 J. w% N% i- Y) _% }# M0 }7 ]+ }di(禁用)
9 Q* F" ]- v1 g) @正负 , w# p: V% R# {0 A/ J
ng(负) ' e9 J  _, F9 K0 J+ k
pl(正)
0 b1 m) @. ?$ k7 H2 V* S- X$ L$ I$ D4 V$ m5 {6 M
zr
" F. N1 a2 A7 p4 Znz
1 ^& X2 |8 F5 Q/ ~$ M辅助进位
9 v$ J' A$ G/ q" g9 b- w! v- Jac : I6 O$ ]5 _+ y% V6 i) U. C
na
8 n+ G& L8 G3 l3 ~) J7 g: f7 [2 M奇偶校验 9 s- h& q0 u& o) e
pe(偶校验)
! @+ M8 D8 F$ ?% ?4 r% ~1 g) E. Wpo(奇校验) 5 \: S1 _8 l" H: s
进位 * J7 r5 d3 T/ t7 A7 ?
cy
# s6 k  z1 g% {1 E" H0 Enc 1 t5 s  @6 D% V% K% ^/ Y8 O
可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止 r 命令,请按 ENTER 键。任何没有指定新值的标志保持不变。 , F$ w/ N, W0 N. r0 K4 z* s$ }7 b
用 r 命令显示的邮件 ; B  a7 j9 w: N0 W5 L4 z$ M3 @
如果为标记指定了多个值,Debug 将显示以下消息: & v6 r" a7 ?$ h& @1 ^0 ^
df error
( S: {& u+ w0 p( g! P8 G0 G# y/ H! E  I如果指定没有在前面的表中列出的标志代码,Debug 将显示以下消息:
3 U+ h2 p9 Q9 R7 C7 Dbf error . `1 S, ]9 [7 n% ]# O$ U& \9 U% h
在这两种情况下,Debug 将忽略所有在无效项目之后指定的设置。 $ v: P$ [3 s7 x) O
Debug 的默认设置 # ^% a- a; ~2 o! s7 B! @
在启动 Debug 时,会将段寄存器设置到空闲内存的低端,指令指针设置为 0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为 FFEEh 的 sp 之外。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:48 | 显示全部楼层
<b>Debug:R * X3 R& ~8 X( V4 Z
</b>" s- B3 ~# E2 `, q  F6 q4 W% |5 t
范例
5 U& p7 B# D; O2 {( s$ u; B/ L# U要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令: , |2 i0 ^% G+ i4 m+ m" h- Y1 \
r
6 {( i% i- G3 Y; B/ v% J如果当前位置是 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">11A</st1:chmetcnv>,显示外观将类似于以下内容:
$ q/ I  m) l4 }' a+ ]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
# S5 |+ c% t: rDS=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 / d2 I  i5 w; j6 B, e- K
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">011A</st1:chmetcnv> CD21 INT 21 / G1 q. \' A" r/ J3 D. g
要只查看标志的状态,请键入以下命令:
  L1 }  h# |$ Erf
5 k/ M( l% L0 B! n: oDebug 按以下格式显示信息: 3 c: G: g: u: ?- J  W
NV UP DI NG NZ AC PE NC - _
- b8 z2 w3 s% P现在,您可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示: : f# e. k; `* [: c
nv up di ng nz ac pe nc - pleicy
, X, N1 Z! V$ C7 P- R( ?# hDebug 结束 r 命令并显示 Debug 提示符。要查看更改,请键入 r 或 rf 命令。Debug 将显示以下内容:   L1 R. H2 z  j8 v+ ~% B8 v
NV UP EI PL NZ AC PE CY - _
: C4 K& v4 w; g0 D4 M2 W8 ~" O按 ENTER 返回到 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:04 | 显示全部楼层
<b>Debug:S(搜索)</b>; U$ @2 q7 n; y) Q

3 q2 j6 b% F! h. t$ ~在某个地址范围搜索一个或多个字节值的模式。 3 M2 Z4 I( V' R
s range list
8 P& k4 v9 Z* B/ [: B参数
* y! k3 D8 Y$ N' }& ]  Srange 0 h& _' x+ p7 Q1 m9 L7 F* d
指定要搜索范围的开始和结束地址。 ) Y! o% Q9 m2 Z
list
& Z7 |! p/ `& n" y8 D* J  u  w, \: k" m指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号分隔每个字节值和下一个字节值。将字符串值包括在引号中。
* L$ g6 w5 N. k, z% G6 w4 O  {% E5 T说明
/ o; o! E/ R  `' u如果 list 参数包含多个字节值,Debug 将只显示出现字节值的第一个地址。如果 list 只包含一个字节值,Debug 将显示指定范围内出现该值的所有地址。
) |+ e" t9 ?) i* U范例
/ D" e. W. x$ D" V假定需要查找包含值 41 并且范围从 CS:100 到 CS:110 的所有地址。为此,请键入以下命令: 9 k9 {6 w" l0 F9 I5 q# u
scs:100 110 41 : t0 c: y  v6 G/ G
Debug 按以下格式显示结果: " `9 z+ V, g! g9 T
04BA:0104
! W" }. V5 J0 v  x04BA:010D
) g; ^, t% I; G- " Y) k- L  T8 u, V2 o9 g
以下命令在 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”。
  I& {1 C# `5 s& ?. z* c2 ascs: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>
3 ^# D; g$ @# c4 }5 O3 a9 D' f6 l8 @. I+ B
(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我)
6 e4 L  [) r5 i1 H0 k' PAoGo补充:
5 t/ H% e. k% L# x) U9 U从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。# O8 o5 B8 V4 d  s) ~5 m
如:t 10
' x# }: T- Y+ @9 m; m& u假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)<BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:36 | 显示全部楼层
<b>Debug:T(跟踪)</b>6 R3 }1 ]9 Y9 J" i% A- e$ Y2 ]
5 Y! a$ r- y! P4 Y) D! Y
(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我) ; \/ O3 i3 Y+ p5 s# T
AoGo补充:. I% O; K& w! ?5 I! t; o
从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
8 E7 E. T4 v5 a& n0 r如:t 10! g  [# M- n9 h
假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)' Z5 v0 H4 V+ z# `( B$ N8 ?0 W. {
; ]) b( ]# T3 @
<B normal\">Debug:U</B><B normal\">(反汇编)</B>- c3 X! l6 F" I  R1 ]  a- Q
* }  j$ ~/ x: v+ ^4 y
反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件的列表。
( |7 ^1 ]' @% t$ ~, t  Q' |; cu [range] . X/ D1 [' e. |) ]- ^6 j' c" k( C
参数 / h, w  E4 F, n/ ~
0 P; K- D5 n, X
如果在没有参数的情况下使用,则 u 命令分解 20h 字节(默认值),从前面 u 命令所显示地址后的第一个地址开始。 - Q$ Y6 h5 ^# J/ l! h  B
range ( ^& b9 ^2 O# Z- |( ^
指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
  q7 u- U/ C5 b% p5 L* m8 U有关集成记忆码的信息,请参看Debug A(汇编)。
. Q: x6 b$ X: S% L  y8 @有关显示内存部分内容的信息,请参看Debug D(转储)。
! |) M( W. I) O. [/ j范例
4 F- {: x( H3 t& I9 b要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,请键入以下命令:
, w9 b8 U" b) cu04ba:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"100\" UnitName=\"l\">100l</st1:chmetcnv>10 9 q; j* m# s% M) P# h* p5 X
Debug 按以下格式显示结果: 9 e6 }8 u" Y" E, D2 x" h1 u
04BA:0100 206472 AND [SI+72],AH - |2 b& K7 o: @. |4 I$ O- _
04BA:0103 69 DB 69
: d! T$ Q" ]+ {/ O04BA:0104 7665 JBE 016B
. k! Q6 |% B. |' X; e8 E7 O7 c04BA:0106 207370 AND [BP+DI+70],DH
, s, x" p2 r2 o9 e" }; Q7 J9 i* i04BA:0109 65 DB 65
9 L$ i. j/ S: g. W9 T* i( D6 N04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"a\">010A</st1:chmetcnv> 63 DB 63
$ |2 r0 M" t& a. \04BA:010B 69 DB 69 ' r: T4 ]$ Z6 q
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"C\">010C</st1:chmetcnv> 66 DB 66 + ^" Q: a3 c* M" D+ N
04BA:010D 69 DB 69
# m  O5 l- t; ?* s6 l( F& T. c04BA:010E 63 DB 63
; e" ?. \- E. k, l04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">010F</st1:chmetcnv> 61 DB 61
! P, A6 s" i, q5 ?; v' S如果只显示从 04BA:0100 到 04BA:0108 特定地址的信息,请键入以下命令: 0 [0 K) i3 \; D1 G1 k. g3 x
u04ba:0100 0108 5 v! h7 a4 \5 A: Y* q8 @1 e6 o8 T4 Z
Debug 显示以下内容:
6 a* d3 j% V3 R& W$ h+ w04BA:0100 206472 AND [SI+72],AH
2 z3 K7 L( E  v04BA:0103 69 DB 69 ! D- W& q# j: r
04BA:0104 7665 JBE 016B 7 v) {# w7 L$ ~# v6 p7 q
04BA:0106 207370 AND [BP+DI+70],DH
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:55 | 显示全部楼层
<b>Debug:W(写入)</b>. k/ l" s3 I; h5 D# h; ]' Q, G
) ?, \; {& U: f: R9 W& X
AoG只对COM有效,因为EXE是带有重定位信息的,而Debug无法产生重定位信息所以无法写入EXE。) \8 m! b- g- L0 o( u
将文件或特定分区写入磁盘。
' R' b  d  u  ^" |2 M. w要将在 BX:CX 寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:
+ K6 d. |& N/ N, e  j9 F& @w [address]
2 m( Q3 T; x  v+ j2 }" N要略过 Windows 2000 文件系统并直接写入特定的扇区,请使用以下语法: . ^) C" V" @) b
w address drive start number : D3 ]4 y. Y+ I4 h
参数 9 l4 T; O- F/ {: y- H4 R
address
8 g& V& ~6 ]3 `& c! }  q" j, w7 O指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address,Debug 程序将从 CS:100 开始。 " p/ R& U- b' _) d# E: z' `
drive ) M0 [5 O' A! e# I, n/ ^
指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。
6 N2 x+ [$ _7 \  Bstart
9 ?/ d+ D4 h; ?5 V( l" n' P指定要写入第一个扇区的十六进制数。 & ^3 Q0 I" l. D. d" \
number
& _9 u1 W2 `% V) f指定要写入的扇区数。 4 j) B/ Z, l/ b
有关指定用于 w 命令的文件的信息,请参看Debug N(名称)。 + ]3 P4 l5 ?5 r( L* T& I1 n
有关将文件或文件扇区内容加载到内存中的信息,请参看Debug L(加载)。
3 j- f) B* o, C8 c说明 3 s* k7 B& G4 N. r. W- T0 E
必须在启动 Debug 时或者在最近的 Debug n(名称)命令中指定磁盘文件的名字。这两种方法都可以将地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv> 处文件控制块的文件名正确地编排格式。
; \1 E) a1 Q! `) _9 |; Q& j在使用不带参数的 w 命令之前重新设置 BX:CX
' c6 T4 I: Z& v如果使用了 Debug g(转向)、t(跟踪)、p(执行)或 r(寄存器)命令,必须在使用无参数的 w 命令之前,将 BX:CX 寄存器复位。
2 _# ]; ^1 M& c1 N将修改后的文件写入磁盘
( \' ]+ o* B; o8 i% N8 H如果修改文件但不更改文件名、长度或起始地址,Debug 仍然可以正确地将文件写入源磁盘位置。
! D7 X$ F" v; t2 X( }8 `w 命令的限制 3 c2 g6 |! k4 t( z" o, D  R0 w
不能用该命令写入 .exe 或 .hex 文件。
7 l2 g* U! v# e- a& `; H6 x* V警告 * F1 z# `- Y) d5 y$ l
因为略过 Windows 2000 文件句柄,所以写入特定的分区非常危险。如果键入错误的值,则磁盘文件结构很容易被损坏。   y& y4 s" n4 F
范例 0 I4 R/ Z3 w% `( z
假定要将起始地址为 CS:100 的内存内容写入到驱动器 B 的磁盘中。需要将数据从磁盘的逻辑扇区号 37h 开始并持续 2Bh 个扇区。为此,键入以下命令:
' C# E* N/ p! B) ^9 S4 X( a  [wcs:100 1 37 2b
2 H1 T& N, p' L0 U当写操作完成时,Debug 再次显示 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 08:40 , Processed in 0.025062 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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