|
|
8 y2 R! Y6 F+ y( T$ J0 b
很快速的整理我自己常用的指令* D Y' \# d. q' n$ K
3 ]# @/ z) i- d8 t) ^, G2 G* F8 N{:4_112:} . v- Q2 T$ I* c) O% h
5 S$ @2 m5 b$ ] E; H6 RMAME DEBUG常用指令
# B. s# @$ y& d! s& i6 N6 a+ K& P, j2 k
内存搜寻: ci, cn, cl
! |5 h! b2 Z9 M) d1 `, E1 @+ E
; m* z) p7 ^1 |: X: r ci3 Z7 C0 b( d1 S- h ^
搜寻任务初始化, 每次搜寻一开始一定要输入这指令: Y! _5 d! W7 N. P i
, H2 W+ [% G* G6 |; [' P2 O cn
7 I; J) V1 f: R 搜寻指令: }+ \- @3 K! q
例子:
. G( P5 ^- A1 q* \' {; F# Q cn eq,60! E0 h% v% x+ y$ \+ C" h
搜寻目标等于60 (十六进制)/ Y5 K; f8 w: P# ^, ]
# S) P/ ~1 F0 Z9 [; w: J1 \
cn eq,#96
# c* s) n. c/ f' c4 } 搜寻目标等于96 (十进制)2 |" R" q3 I% m8 @" ]* H
0 t# C' D1 ~4 h( N6 e, [/ \
cn eq6 [; r7 Y6 U& b9 b( _+ d
搜寻目标的数值没有变化( O& q F: A: m
9 d- i) u2 z" r% U; a$ d
cn ne( L/ h w, g9 P- m* G) c/ N
搜寻目标的数值有变化; e" g0 w: A) w) [
' m( A5 N$ X$ D. R& m1 ~ cn +$ x# g; P" _+ V
搜寻目标的数值增加
6 R M- b4 }- i' C. |: E% k* B! J 8 _' p7 I$ P+ h- E5 C1 v
cn -; v/ T% R( x% n8 O
搜寻目标的数值减少/ d( ^* y! O* z8 ^, |" |$ w; R, U
) ~7 z3 J: G* q7 r8 I8 t: O cn +,3
6 k. c" z. h) F0 {! ~! R 搜寻目标的数值增加3 (十六进制)
8 `: L/ v; d, l: C" T( {2 W/ |4 t' i# O [3 S Y2 Z% D
cl; N2 ?3 S |6 U
列出所有搜寻结果
$ a, q/ {; y# a' ~- \% g. J. O. C: _- q `/ x. y0 j: a4 B
cl xxx.txt) ]8 ~0 A# K+ p+ m
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" ^% S3 ~* k& k- l9 P$ u5 R' i0 E' b/ v0 u2 f' o
1 m) b) f6 {1 Y9 @" `. t内存监视点指令: wp, wplist, wpclear
% n! B' u( K( c' o" Y 例子:/ G4 ?( n, C" b
wp 1234,1,r) m* c' i( Z1 J K* g0 ~
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 v# R# [+ w2 U: i9 {7 S1 F o5 `; T
wp 1234,2,w
( [, j$ Q: c4 z C) } 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2& }/ ^8 w0 ?! J8 x8 j) @3 C- I
2 T9 P2 l' Y3 j2 `% G& a wp 1234,6,rw
) T! D2 D' b$ ^& H7 D( d 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ x s/ D: o. I1 z: h: c0 _" ^" G# L9 U% @- K) X! p/ r, ]* a/ L
wp 23456,a,w,wpdata == 1" p& D( H5 d% m+ J" j5 g1 x4 `# X
在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 z, S1 L8 A) J4 `9 g, m9 i
. L. V F, A" o& e! i wplist
$ O/ V5 e# x3 H 列出所有监视点- D. A0 i' Q: }: F, A7 U% b+ l
' R0 P9 ]6 |" i5 q1 r) I
wpclear 3
4 t6 `: L! y6 S. c! \& t, @8 X 删除编号3的监视点$ d9 S2 R8 O* Z% H: n
+ c$ Q) s9 k/ M" R+ h4 l3 j2 @
wpclear
( H. [( |2 R" Q. X% E7 e: g$ c" k 删除所有监视点
. v; u N' p* p5 R2 n7 X8 Z/ W0 R+ h
: O$ K4 F1 x S, X8 a, {0 d' [
. {1 o8 R) X9 D8 W; s6 `程序断点指令: bp, bplist, bpclear
6 O6 Y3 v" d' X" k' i" k. X 例子:$ f- [, E9 K @3 O% A( ]
bp 1234# u ~# ?) W0 t1 T
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断3 X3 r+ x. Q( o }/ T
# |5 T: l6 p" h; ~2 Z2 L& Z bp 23456,a0 == 0 && a1 == 01 H6 M1 x& f6 e7 G q; s4 }
在地址23456下断, 且中断条件为a0等于0以及a1等于0) j4 P z( V: [ L" M; ?- V' W3 F
: y, @* y9 {7 l
bplist
' Q7 N6 Y/ q+ M0 ^ 列出所有断点$ G0 j4 ?: P9 X# \0 w
+ {% C/ t3 f, p bpclear 31 }( c" o) r5 S: H; J& R
删除编号3的断点4 A+ G0 z9 W: m5 `
! k u6 D" Y. v& u" f4 ]+ A
bpclear
% l0 P3 c( f+ S3 R% o 删除所有断点
/ _" r7 c7 h/ q; g) ^* w: G8 @4 Y& r t+ \
1 V6 i; c+ N+ S8 A/ p$ f q
6 |8 ?1 ~- K4 {- F" O
跟蹤紀錄指令: trace- ~$ @# ~+ b3 F+ B' F' R
例子:
/ W7 ]5 Z8 Y4 l0 M, ~ trace 01.txt L' L) l% C. f0 X# W) s
跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 V& _( Z3 u* H
% {2 L2 e/ O4 J& J trace off
/ x3 |! x% g# V6 i6 \9 B* T8 A 停止跟踪, 并且关闭文件" M+ |/ B0 ~+ l8 _+ D7 T
' b4 L8 G* y( h/ p, @7 R/ S& k- ?$ t" K0 x trace 01.txt,0
. ?3 T6 H) _. O# {1 ^2 f% [ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! B, D" @% C' U' H
7 P( E3 l8 W, P9 U7 N" X6 ]) q8 f trace off,0
, n4 \( k9 ]9 a; u 停止跟踪编号为0的CPU, 并且关闭文件# Q8 z+ {9 _* Y4 s3 k4 V
4 b+ M N c, v
trace 01.txt,0,{tracelog "A=%02X ",a}
$ v& }1 P# {: v0 c# O3 ^. | 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & r, k3 ^2 V' {/ X0 S
并且在每一行的前面, 写上"A=a "
* F0 @/ g; j1 V) q "A=%02X ",a为一个C语言printf函数常用的输出格式' { Q8 S6 N, G1 z( z
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入8 R% ^4 a- |1 N4 o( g3 G n
X表示为大写十六进制数: @, u, ?, k6 N5 _( r7 B- s) _
; s% a9 c5 S" j- S
( V! b" a U1 Q/ B
) L. F4 ~7 z# H0 P0 ?1 l内存直接写入指令: maincpu- @9 v7 d+ b+ Y, K0 d% x) O/ f
格式为 maincpu.[][]@地址=数据
4 O6 w/ [; G: C5 ]% f, O 第一个[]:
2 b( r/ n2 `- a' m6 m( R o 表示ROM地址
) d L) j$ j" H+ u p 表示RAM地址% C( E# Z" J) k* g$ g1 P9 G( e1 L
, E) l V$ ?# P 第二个[]:
( N' v5 z( a4 w- W; Z d 表示4字节
2 d- d Z1 Y7 F1 f# Y% @ w 表示2字节
: l3 k0 Z- {4 A% f b 表示1字节
3 C6 `9 p8 y+ l3 Y+ E' J+ S# T- F$ }8 L6 f6 u' `) J' f
例子:8 l6 W9 Q. \' @3 G
maincpu.ob@1234=FF+ B9 B! m& w8 y
在ROM地址1234处, 写入FF一个字节* @# T! e& G3 ~4 P9 E d$ g1 ]
% @* W) ]; {5 e* u: v( ?
maincpu.ow@1234=4E713 |2 u+ E6 g! d
在ROM地址1234处, 写入4E 71两个字节' u# c6 Y9 k. W5 \# ?& i! j
# W5 C, q1 A& @+ z* g maincpu.od@1234=600A4E71) W" h6 w2 c9 O: Z
在ROM地址1234处, 写入60 0A 4E 71四个字节8 ?. B; Q& j$ e! |/ X8 L+ U
& ?7 Y# @5 ]3 [& A) _+ U 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写4 P& G/ `' y! d/ J8 t1 g
; g& h6 q+ E% L2 T/ k
, E; {5 a9 d6 ]5 M* T其他:, V( X% z& L9 I1 Y9 G2 o
dasm 输出档案名,地址,长度! j9 O- O- ]9 Y9 y1 k' @. P" ~$ U/ A
输出程序的反汇编代码
7 w# \& D/ }/ W5 f3 c& e 例子:% n( L: p/ D# A- b& ]
dasm 01.txt,0,100000
) k4 w3 L" Z$ r) E 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
# {3 s( X9 X, L' W5 Y& `
# x$ c5 ~" y% h! N$ U softreset$ Z. j9 Y$ O3 M" c# }. R
游戏重启, 但不重新载入ROM
0 Q2 W1 U3 o* s! Y
/ `8 F) l4 h9 K- W+ |1 m hardreset H. E# Y7 ]- V$ c5 n
游戏重启, 且重新载入ROM- J! J$ ]+ c$ q5 a% q+ j
0 G0 ?( @" I& K2 L
snap xxx.png
# I: l. [, Q. C+ D3 g) n$ H& g 截图为xxx.png
+ i6 z$ d7 ]. { r" P# l5 g- |1 {2 V+ H% q6 n. L
7 p& E6 Z& P# N& q4 [, Q
2 J- \, a* b d4 D4 a8 D' H0 u
2 Z8 Q8 [+ O/ N; u! s" a" V0 l
热键:7 _4 U. j) M1 @6 g. H
~ 中断游戏/ u* z/ N$ y# S3 Z' {, O7 Q
F5 运行游戏
- I! \' @6 R* T4 X F12 运行游戏且隐藏调试窗口
& _* I" q/ j% H0 b F11 步入, 单步执行, 会进入子程序& f: r2 ?4 c# z Q" T
F10 步过, 单步执行, 不会进入子程序1 B* W! w5 |9 r# e! P
Shift+F11 执行到子程序返回
, r; _% A7 U) y2 Q/ u6 f5 \9 b Ctrl+M 内存浏览窗口 y0 t6 x! R. R
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU$ t1 A+ X! S( B4 G3 E! h
" X2 }/ G% z5 ?" Y
{:4_94:} 3 T: `% L0 L) e9 q1 p" U- N6 u% W- F0 ?
- `0 `$ G4 {. H" ?
|
评分
-
1
查看全部评分
-
|