找回密码
 立即加入
搜索

楼主: 没有明天

DEBUG命令详解

[复制链接]
 楼主| 没有明天 发表于 2005-1-15 23:32:31 | 显示全部楼层
<b>Debug:N(名称)</b>( t. R; M' ~. g! d- P3 n0 {- {5 }

3 N" w7 a  }8 B9 ^+ y$ e指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。 8 h# o/ }2 f2 k! I6 A5 T
n [drive:][path] filename ! }, b8 u5 n6 q0 n: C; Y
要指定测试的可执行文件的参数,请使用以下语法:
# W5 \2 a8 c" Cn file-parameters 5 p$ I# [. u  p6 t; m" v% N
参数
& D, p5 u9 t. [9 f3 p7 l如果在没有参数的情况下使用,则 n 命令清除当前规范。 ! K, w& @3 Q# m% K# R9 M6 W
[drive:][path] filename
  w7 W9 G$ V- n- Z指定要测试的可执行文件的位置和名称。 ' t) j6 K% T* q) S' `9 p1 e+ }6 M
file-parameters
! V6 G, p/ M( W8 i为正在测试的可执行文件指定参数和开关。 ( |) r: |1 t" g, }
有关将文件或指定磁盘扇区的内容加载到内存中的信息,请参看Debug L(加载)。
3 C" ~, j: Z/ T8 i- P有关写入调试到磁盘的文件的信息,请参看Debug W(写入)。
0 P2 ?: u1 Z& r" d6 b# C3 I说明
9 U1 M. W7 x# D) tn 命令的两个用途 4 C+ O* A% G5 g# T0 B8 B% N
可以按两种方式使用 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 命令指定被调试文件的命令行参数和开关。 ( [+ ]7 W" T' C7 E" e& i! P
内存区域 & a+ N' W* \0 }  w2 D" N4 Q
以下四个内存区域都会受到 n 命令的影响:
0 X$ ~0 J4 j8 O9 z" M5 e6 r5 s内存位置
9 y: b0 H2 }+ w6 @3 O" s内容
6 k9 z: {; ~8 G8 H8 {# eCS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv>
/ }( j4 _$ J$ |8 N文件 1 的文件控制数据块 (FCB) * A" ?  b! S6 |0 T# G: _
CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"C\">6C</st1:chmetcnv>
% a: }' I! m2 \文件 2 的文件控制数据块 (FCB)
6 U7 B3 o# ^8 l+ ^4 JCS:80 " c# @' y& {& v) i) L
n 命令行的长度(以字符表示)
7 k3 Y$ g: d8 m% k9 \CS:81 : u% @5 t% N% e1 Y7 {) f. B/ {
n 命令行字符的开头
2 y; Z) S8 a! U% J" }$ W为 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 命令提示符下键入的命令中有效的任何开关和分隔符。
7 [5 J8 P; s) t2 o/ r- U& q范例 , k7 ^! Y/ v9 R; h  o9 _
假定已经启动 Debug,并加载了正在调试的程序 Prog.com。接着您决定为 Prog.com 指定两个参数并运行此程序。以下是此范例的命令序列: $ X( i1 k0 J; y& M: y
debug prog.com
/ t/ v3 ]* P" n+ A, y! B. ^+ J& Unparam1 param<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"g\">2 </st1:chmetcnv>1 }# t% {0 O7 t2 _2 y8 m
g - c7 i+ k: g) B' {8 r
在这种情况下,Debug g(转向)命令会运行该程序,就好像您已在 Windows 2000 命令提示符后键入了如下命令: 4 u5 M# F8 n" t9 a! L  A
prog param1 param2 , F' x9 a. ^; b$ V, U+ ~
所以,测试和调试反映 Prog.com 通常的运行时间环境。 1 s. b% n( `7 r2 U; I
在下面的命令序列中,第一个 n 命令将 File1.exe 指定为后接的 l(加载)命令的文件,该命令将 File1.exe 加载到内存。第二个 n 命令指定 File1.exe 将使用的参数。最后,g 命令将运行 File1.exe 文件,就好像您在 Windows 2000 命令行中键入了 File1 File2.dat File2.dat 一样。 : m* V: q' y9 T. j' _
nfile1.exe 0 d9 q/ s% d  G* w7 ?0 R; e
l . k% v9 y7 p9 C. g
nfile2.dat file3.dat   K* c3 `. P" z: t
g ; S& m" J7 y4 p) }  G2 p! [
注意
. ]  U$ G; T( z1 y( P不要在 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>
7 X9 s- f/ t0 R  L# _; k1 n0 z4 X8 x) g+ E  F! s9 N0 k+ ?
将字节值发送到输出端口。 ! J2 [8 _9 V5 C" B4 I/ ?7 W/ x
o port byte-value ' ^( [( b  z9 S
参数 1 l' n  y- ]" W( c, G; E
port 1 m2 s% j$ D* ?$ x
通过地址指定输出端口。端口地址可以是 16 位值。 " L; `+ t! W! v0 [* `
byte-value 4 F; f( [& ?- H$ z
指定要指向 port 的字节值。 , c# d/ H) `# a
有关从输入端口读取字节值的信息,请参看Debug I(输入)。
, d. F7 C; }8 ~5 `- D& D! O范例
9 h  r, K; ]+ c+ l. r要将字节值 4Fh 发送到地址为 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"F\">2F</st1:chmetcnv>8h 的输出端口,请键入以下命令:
1 n+ @2 [; a/ jo<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>
/ O( J1 D7 _  m; ~" c: e( s: |2 g
- Z* ?8 s! A, s3 C执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。
) X' |8 I9 x- t- Bp [= address] [number]
+ e# K; g$ j' u8 @& _4 L参数 9 ^  Q( ?6 [- E9 Y* [
=address ( P$ m- A4 T! I, S' Z' ]
指定第一个要执行指令的位置。如果不指定地址,则默认地址是在 CS:IP 寄存器中指定的当前地址。
3 C/ Y. u3 n# p1 N0 Fnumber + Z4 J5 B: X' J
指定在将控制返回给 Debug 之前要执行的指令数。默认值为 1。
3 v( `0 p( B7 ^! S: D, f; O) q有关运行当前在内存中程序的信息,请参看Debug G(转向)。
7 a, h9 l8 E4 v! c' f' Z/ @) J+ e有关执行指令的信息,请参看Debug T(跟踪)。 ( q: Z$ ?2 l9 _$ v4 f
说明
! i$ Y" Y. e2 ^% o( p6 u控制传送到要测试的程序 ' `: f  S+ d2 r& {# C% N, M; \
当 p 命令将控制从 Debug 传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到 Debug。
9 Q6 a& G4 Y9 s地址参数的限制 5 `. P$ {( B' @
如果 address 参数没有指定段,Debug 将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP 寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number 参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug t(跟踪)命令的作用相同。
5 B1 A- E7 P( s3 e# e& r* n( t使用 p 命令显示的邮件 % W; `  w0 L4 T2 W# x
当 p 执行完一段说明后,Debug 显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。
3 I; g! e, c& @  g# Q警告
2 X( `+ D: v# ]' u不能使用 p 命令跟踪只读内存 (ROM)。 3 E6 S9 k5 i' r( g% e. Z# W
范例 2 p4 Q4 [4 g% s: ?7 V
假定正在测试的程序在地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143F</st1:chmetcnv> 处包含一个 call 指令。要运行 call 目标位置的子程序然后将控制返回到 Debug,请键入以下命令:
' f9 y, I0 U& \+ Hp=<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"143\" UnitName=\"F\">143f</st1:chmetcnv>
7 \7 v& t) z- Z- |0 r, ^Debug 按以下格式显示结果:
; R( |& p7 V, y- S1 gAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 : h7 O" M) O( C7 A. w% g/ M
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC 0 l# y, ^/ |  K* g8 B: \  |, ]+ s
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>* X3 s. I9 f# ^6 Y; `: X8 q; G
% N* t, X8 K5 G2 m1 U5 e
停止 Debug 会话,不保存当前测试的文件。
/ m- ?/ p1 ]% j当您键入 q 以后,控制返回到 DOS 的命令提示符。
" Y) c# H( o$ E7 ~q
3 w9 S) @1 |; C- Q' l" u参数 ) t5 R4 B8 Q7 P! J. D- p
该命令不带参数。 1 X  j3 Q2 F; s, ?2 U8 Q3 a- m  H
有关保存文件的信息,请参看Debug W(写入)。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:31 | 显示全部楼层
<b>Debug:R(寄存器)</b>
7 B; U5 t1 \5 n. q
/ d# H/ M, Q* w& l: w3 t' N显示或改变一个或多个 CPU 寄存器的内容。
2 A, ^& G7 w+ E4 M; v  Y) W9 ur [register-name] ( @% O' M: p$ \: _
参数
% a! G. u8 o, W% ~7 ?1 f! N3 y0 m6 v* e  Q/ i- k/ b6 D9 Z$ |2 x
如果在没有参数的情况下使用,则 r 命令显示所有寄存器的内容以及寄存器存储区域中的标志。
* a  U* T& d4 I/ [8 ~) N3 h8 Oregister-name ' m4 p; c/ |: m6 ~1 j
指定要显示其内容的寄存器名。 ! ]% V) }7 S" m$ Z8 x: E; G. [
有关显示内存部分内容的信息,请参看Debug D(转储)。
" S1 G2 z; c/ t; Y& z% k有关反汇编字节的信息,请参看Debug U(反汇编)。 ) `2 Q( K' K! {* Q
说明 4 S* J9 T3 u: }4 O, Q. n
使用 r 命令
( H$ m% _$ w4 X% a% V+ F如果指定了寄存器名称,Windows 2000 将显示以十六进制标记表示的寄存器的 16 位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按 ENTER 键;否则,请按 ENTER 键返回 Debug 提示符。 1 y& }$ u; V$ j' s# e' ?9 w/ o
有效寄存器名
8 p! o0 O% b: k6 e以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指针。
  c  T# B$ l1 D5 P- \! P8 m- l如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000 将显示以下消息:
8 q6 Q, U( {6 L4 Cbr error
2 @+ l- R9 z% ?& Z7 P% y5 @- H使用 f 字符而不是寄存器名 / d7 L, A+ K/ g
如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug 提示符。要更改标志的设置,请从下表中键入适当的两字母代码: ! w; H0 {8 I' G- `6 d1 |
标志名 1 M" G- _, b3 p% w$ N
设置 2 |$ G0 [& X9 G- B
清除 3 H( W  O2 A) u1 F: O1 M8 x
溢出
# r% Y# \/ D) c% {+ X& g3 Yov
& ^3 Z8 R: `# K* C8 A' X# D# env
( x8 T- }+ ^# i" r. M方向
4 `9 I/ ]6 ?: U+ E1 `, r2 r* Ndn(减) . ^- M# r1 d; Y5 u: v
up(增) % g9 T. V  u- _. k; C% r* x
中断 / E! V8 Q) `4 F2 [
ei(启用)
8 J' y) z4 s) u. z% ]di(禁用)
$ I. [1 k2 i! ]) Z; H. [正负
" U. @3 c+ E- H6 F. a. f" _" tng(负)   g/ P5 k! C7 s
pl(正) " e4 Y8 B; x8 o+ q2 H0 X
! m8 j' V# t- Y7 T
zr ) j5 v  k; ?! n
nz - B  L6 e8 q. ~7 l- C* u  n4 W
辅助进位
/ b3 O; W" `& [! m( Q# \! u1 B( h9 r- Vac
& ^9 b& v% V+ T3 yna
; X! B+ c7 |( a7 T2 m; X奇偶校验 9 R% e7 g2 i0 X( `# t
pe(偶校验) : @* \0 v) M* p( S- |
po(奇校验) - n) O/ e- w! }% {
进位 # Q/ M) }6 _+ R
cy
3 h+ @/ f1 }+ K/ c8 Y/ mnc
- k- N* [2 y6 o8 F* S. }可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止 r 命令,请按 ENTER 键。任何没有指定新值的标志保持不变。 * {9 h& J. f- J2 g+ b0 ]5 d( _
用 r 命令显示的邮件
0 Z; G8 Q9 z. p( y如果为标记指定了多个值,Debug 将显示以下消息:
) w! m( E* j# U. zdf error
9 Y' B) B3 F1 J5 Q! S# q, a如果指定没有在前面的表中列出的标志代码,Debug 将显示以下消息: 1 J; _. m6 _4 E7 W# |
bf error
4 }# W6 |2 U1 P0 h! @$ a) m% i在这两种情况下,Debug 将忽略所有在无效项目之后指定的设置。 " G5 l1 S8 \% o2 M, y7 G1 _' T
Debug 的默认设置 5 f0 N! v; s7 b6 j! K6 n( f
在启动 Debug 时,会将段寄存器设置到空闲内存的低端,指令指针设置为 0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为 FFEEh 的 sp 之外。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:33:48 | 显示全部楼层
<b>Debug:R ; ]' e# J+ D: c. K7 K
</b>
3 B, Z' e+ e: i& \7 N) Q( ~范例
3 I. D7 r" H  @& C! N; C要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令:
* \& D( Z9 J  X' D* z' t2 @r
% j, i; i5 R; j) L+ t如果当前位置是 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">11A</st1:chmetcnv>,显示外观将类似于以下内容:
5 L: K) H5 Q* |5 X/ o& YAX=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 & ?7 q1 r& ^6 s
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 - a: K  q& F2 ~
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"11\" UnitName=\"a\">011A</st1:chmetcnv> CD21 INT 21 1 s* v0 i) H& V. P9 D
要只查看标志的状态,请键入以下命令: 6 y; {' |7 ]0 I) ]- i) Z, }8 l$ F
rf 1 _2 T* Z3 m6 Q; z$ E
Debug 按以下格式显示信息:
' ]( ^1 s& H+ u+ j7 l. {+ sNV UP DI NG NZ AC PE NC - _ ' B$ |9 S' e5 y# ^1 ]
现在,您可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示: 6 E0 K" K$ M; Y! L# C1 ~
nv up di ng nz ac pe nc - pleicy
7 C1 r' Q, e8 |9 ?  ?4 Y$ bDebug 结束 r 命令并显示 Debug 提示符。要查看更改,请键入 r 或 rf 命令。Debug 将显示以下内容:
# x' e( D: P5 H. s- ^! }NV UP EI PL NZ AC PE CY - _ 1 b3 N) Y; A. i
按 ENTER 返回到 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:04 | 显示全部楼层
<b>Debug:S(搜索)</b>
3 F  N* Q: Y( L% i7 _5 d  U# ?6 R1 l+ }/ G, i& t) S
在某个地址范围搜索一个或多个字节值的模式。
5 s% y& F# G4 R% c3 H  k; @s range list $ z8 |/ U$ e+ M0 y- T, n! ?3 x
参数
* _  l# e9 m5 orange 1 h, Z$ C& n" A* X+ `2 T* `
指定要搜索范围的开始和结束地址。
* w4 l9 J7 m2 Llist   a  p, a  K/ B' h) ^3 ^
指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号分隔每个字节值和下一个字节值。将字符串值包括在引号中。
# L2 [- m. u! ~: q. m/ c5 j说明
& M1 [' ?& ?) W+ h# D4 V, j如果 list 参数包含多个字节值,Debug 将只显示出现字节值的第一个地址。如果 list 只包含一个字节值,Debug 将显示指定范围内出现该值的所有地址。
6 L3 o9 G8 ?& u范例
/ l! e. N7 K0 B, ]! [, g假定需要查找包含值 41 并且范围从 CS:100 到 CS:110 的所有地址。为此,请键入以下命令: ; p9 b; M7 n. ?+ \" \. p! M/ U& ^
scs:100 110 41 + k" u2 h$ v, b
Debug 按以下格式显示结果: : w2 [4 g( ?6 ]" o9 d' j9 r% Y# I9 ]
04BA:0104 ) s0 U# w  c5 b
04BA:010D ; j/ X; {1 u: ], G% B" K6 ?
-   l) q" k8 h1 Y* y
以下命令在 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”。 0 ^4 J7 @2 }+ w+ E
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>
+ h3 A) I% i8 z9 E3 K/ C) S( m5 f5 b" C6 V( ^; v
(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我)
9 n0 M5 Y+ q5 z( o1 }, QAoGo补充:- F# }. P$ L1 \5 I& j& S! }
从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
/ ?2 S" h+ t, P; i( e' K如:t 10" ^& i/ ^' j- P2 O6 x# D
假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)<BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:36 | 显示全部楼层
<b>Debug:T(跟踪)</b>
! A8 s6 T4 C( ^/ j/ i
; I* A; [0 v+ {/ P(SORRY,Debug:T部分暂缺,如果哪位网友有此部分,请通知我) & i  a/ R9 {% q6 u( d$ ]
AoGo补充:+ J) V3 v* p& N% z: C" V0 W
从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
3 j8 T2 y4 L" P: Z  f- r# B1 m如:t 10+ M( k2 [# j# A5 U/ ?! g" z2 ]
假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。)
# y* o1 ?9 `( s  a- j* s) |2 d- p* q$ r5 Y8 F6 e: R
<B normal\">Debug:U</B><B normal\">(反汇编)</B>9 B6 t. j+ Q- D1 ?

5 A- D) n) U7 w1 o- T  a反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件的列表。
1 \: M; @, x  w9 [u [range]
- {$ P7 V/ t8 h参数 # e2 H' o& o1 [; E& ?7 g) I
& Q& b, r+ p8 u! l. S7 X6 L
如果在没有参数的情况下使用,则 u 命令分解 20h 字节(默认值),从前面 u 命令所显示地址后的第一个地址开始。
; n  ^5 p" {4 K, J# S% Prange
( U! ]  w. l" \  w指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
( A/ |; P; U6 q% [9 n4 @& @有关集成记忆码的信息,请参看Debug A(汇编)。
# h& M! w( Z/ j9 m6 M+ |; M有关显示内存部分内容的信息,请参看Debug D(转储)。
7 w  ]& {- h/ {范例
" @8 K' I% M% H, z2 n要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,请键入以下命令:
4 o( O9 `: e$ s: {% c. Lu04ba:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"100\" UnitName=\"l\">100l</st1:chmetcnv>10 * G7 B- z" `/ W. [4 C- Q
Debug 按以下格式显示结果: 2 B0 X, V7 l& B' v/ x1 a
04BA:0100 206472 AND [SI+72],AH
1 |. [% R0 _8 d; N9 a% I" U, i04BA:0103 69 DB 69
0 Z; v% F. X; Y+ n/ U04BA:0104 7665 JBE 016B
& X5 D% |7 H- N, I( F, i04BA:0106 207370 AND [BP+DI+70],DH 3 S+ V: v& I3 _, o# R1 y% E
04BA:0109 65 DB 65 4 \& u' Q7 z% Q1 W' l8 K5 K
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"a\">010A</st1:chmetcnv> 63 DB 63
; |4 g- S% u3 ?1 o7 W! Q2 L04BA:010B 69 DB 69 % ]2 O) \( X8 r: U) b. K) K
04BA:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"C\">010C</st1:chmetcnv> 66 DB 66 5 ]$ s" }( P2 x2 \4 V
04BA:010D 69 DB 69
% k4 z- t! T9 v: c/ Y% P. n04BA:010E 63 DB 63 / \/ Z4 V+ ?2 F. e7 s6 w: 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 + R: i/ c" @$ S
如果只显示从 04BA:0100 到 04BA:0108 特定地址的信息,请键入以下命令: 2 u. v: S# m* `4 r# y0 t
u04ba:0100 0108 3 l+ h; P0 i* L1 f. Y
Debug 显示以下内容:
& P' f* }  [3 q" W6 H5 Q04BA:0100 206472 AND [SI+72],AH
/ N5 C  J0 h1 Q7 j! x7 k3 B. b0 d04BA:0103 69 DB 69 8 E( y* F+ S6 ~
04BA:0104 7665 JBE 016B
+ M4 Y3 b# {' o+ }04BA:0106 207370 AND [BP+DI+70],DH
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:34:55 | 显示全部楼层
<b>Debug:W(写入)</b>6 N2 T. p5 \* b4 v, s
% Z6 V  ]7 ^  L* r3 w
AoG只对COM有效,因为EXE是带有重定位信息的,而Debug无法产生重定位信息所以无法写入EXE。
* d/ W9 P" }8 j6 a: J将文件或特定分区写入磁盘。 0 p% K, s% W4 Z
要将在 BX:CX 寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:
# x1 k+ h4 a' o+ pw [address] ' Y; k: `: F( k
要略过 Windows 2000 文件系统并直接写入特定的扇区,请使用以下语法:
- q; I0 C# j+ ~% Jw address drive start number " \' a6 ~+ v1 {6 Y/ R6 h# b) {
参数
* m' h# H7 z; eaddress
1 x# p4 L7 Y1 m0 Q" x指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address,Debug 程序将从 CS:100 开始。 ) v' ^4 v/ f% k  i* h- {4 W7 `( {
drive " d; C. F/ ]  ~0 a# n
指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。 . w; @6 ]% _% ~$ p# E
start
6 Q* Y) `7 v: z+ j指定要写入第一个扇区的十六进制数。
: I% _: T6 C/ a+ V/ ?: z, fnumber : N8 }1 b) E4 ]4 a4 s
指定要写入的扇区数。 ; m# E* g$ K; A' [) Z8 l. g: {: {
有关指定用于 w 命令的文件的信息,请参看Debug N(名称)。
3 N) R5 N/ x- ~; h有关将文件或文件扇区内容加载到内存中的信息,请参看Debug L(加载)。 * f# c) ]4 u- l" G; V$ u
说明
* n0 ]0 Q0 z5 f' k必须在启动 Debug 时或者在最近的 Debug n(名称)命令中指定磁盘文件的名字。这两种方法都可以将地址 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"5\" UnitName=\"C\">5C</st1:chmetcnv> 处文件控制块的文件名正确地编排格式。 ; I3 E" o/ @6 d' s+ }
在使用不带参数的 w 命令之前重新设置 BX:CX ; O% s& K/ n8 L2 o
如果使用了 Debug g(转向)、t(跟踪)、p(执行)或 r(寄存器)命令,必须在使用无参数的 w 命令之前,将 BX:CX 寄存器复位。
6 l/ {- X0 p/ Q* u0 I: M1 b6 A+ O将修改后的文件写入磁盘 ( T/ o. \, d" h" Y; S# U4 V; r. z% N9 j
如果修改文件但不更改文件名、长度或起始地址,Debug 仍然可以正确地将文件写入源磁盘位置。
- c4 K0 b: x5 i' s8 D( k# J: [+ _  kw 命令的限制
) m7 Z9 s/ M0 A3 G1 T% v* q不能用该命令写入 .exe 或 .hex 文件。 5 o2 J7 g2 Q6 O) w
警告
& q: r3 {% ?' v: i& |/ B8 j0 |因为略过 Windows 2000 文件句柄,所以写入特定的分区非常危险。如果键入错误的值,则磁盘文件结构很容易被损坏。 ; s+ o- @+ z* t4 o! q7 r& m
范例
2 Q, X  Z+ L7 W, p2 V7 y假定要将起始地址为 CS:100 的内存内容写入到驱动器 B 的磁盘中。需要将数据从磁盘的逻辑扇区号 37h 开始并持续 2Bh 个扇区。为此,键入以下命令: ( g9 D& t9 e3 Q9 h9 n
wcs:100 1 37 2b
$ q" F/ i4 u" [# }& N0 f( F: p当写操作完成时,Debug 再次显示 Debug 提示符。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-26 00:19 , Processed in 0.063384 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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