EMU618社区

 找回密码
 立即注册
搜索
查看: 3528|回复: 17

[原创HACK教程] 关于MAME DEBUG版用法(如看不清图片请点击图片放大)[更新补充一些命令]

  [复制链接]

签到天数: 2051 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。: M- c' H3 b) g8 N3 R

# Y2 h. p# ^# j(1)如何加载ROM0 r  h/ R( u6 U7 }; G- B: X" r
6 K: b0 r% l( m7 m
先说说如何加载ROM吧
+ `2 L; e; v& b) c
/ {( U' b, F$ g5 r以MAME 0.148 DEBUG版为例:+ d' L4 o3 C' u; k% a5 U( B

' c+ `* V( f! e; T9 [! E1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html3 |6 k- {- Z1 x- [' @, ^
# h% C7 S7 g, T
注:MAME官网的MAME是命令行程式,没有GUI。  ?# t. ^) x  Y4 X) Z  g

9 W6 q/ _! L  q( e1 {2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;3 N  _. [" m% t
1 S- a( H* M# b; M. q& n
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) O2 _/ |2 o. ^! e- z# D
# n) `0 v- x0 J3 u  t5 k8 ^9 t
d:回车  P/ g1 I( N, s2 _4 t! d( O$ F
, T. ~7 x7 ]' E: w
cd mame0148b_debug回车* q2 F& Z3 ]# T. [" y  A
# q1 X8 a4 p! e1 L
如图1:
, N; o( d* ]( Y& A0 h
( ?" Q% l+ }; L; f2 {, N3 j. r1 T# w# Z2 |. O* N. T8 b1 w  I% F2 K
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:! h! C% @9 w% e- S, d, J& d' H

3 ]0 p0 N3 Z# E9 e- z" W, z5 J* m0 d4 `/ V2 l5 H5 q/ Z+ Z! {

2 j- A* v- g9 `1 A# F2 D5 D8 X# V5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;' u) K; \8 h0 ?  q

- E, `9 q5 A8 E3 l& ~6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
" D& ?2 R% Z: q1 k! C0 S* ?8 p- E/ }' Y3 k. f) W
(2)如何呼出/隐藏调试窗口
: }# L4 y# Q+ V+ k3 O
& t$ ^  b5 B' C* E' y. K1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
7 a% [8 V" V$ B% d, L1 n1 |& R

/ A1 N9 E  j" R; F2 y
; {9 j: L9 V% r1 x- \+ d7 Q9 b2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
$ v( U7 v7 x1 f0 ~! V4 d; Q! ~  i5 T: ?& w+ V, e! ~3 P) p- {
) [7 j7 ?. g- p8 T. c% ?. K7 y: w# J$ ~

' Y: |5 a% ?* X: E, F( E  @! ~6 X3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。% ?& ^' L3 M& O6 j

  B) ~& m9 C! E( c(3)如何下读/写内存监视点以及程式地址断点
2 C5 x# q" n' |) o0 o# l! c3 ~0 R/ g  R  m6 ~3 I5 I1 y$ ~
先说说如何下读/写内存监视点吧1 L; ~4 e( U5 N: Y- U/ z
9 z, v, e4 t2 i' t! q7 g! Y; J
监视点命令格式:wp <address>,<length>,<type>,<condition>
5 E& o' N4 G' w2 h+ Z2 O; y' p% b" Z3 @  Q- ]- v: E* s: d9 L
<address>是地址
; ]" F6 E. ~  B% O' n" ?
7 p6 K  _* E; L<length>是数据长度,长度必须用十六进制表示  g7 G) \* }' Z5 Q

4 F9 K/ F" ^" I2 S% L) l  L8 s% z7 y/ v<type>是监视点类型,r是读,w是写,rw是读写
: v. O  y& C8 m0 _" F! v2 [
- |1 h: Z5 j7 i例子:
9 S% ?7 e+ }, j( f% Y$ {- b7 f6 t( D8 v9 \* x
例如对ff8569地址下写监视点,数据长度是1个字节
0 S& ]7 k( l# w6 Y1 a8 }6 x& D3 P: s  F: d9 f! W. M8 _
wp ff8569,1,w
1 p. }6 t4 Z1 R) C$ X( m/ Z- r3 C1 @" }& |3 Z1 o. y
例如对ff2235地址下读监视点,数据长度是2个字节
; p7 I. o4 ]  U. k# a& J' {. u# o8 p+ k1 V1 v- i, Y
wp ff2235,2,r2 q! I! t' `0 E/ W: M8 I# e/ ?! q
% ]' E- W, n7 }% P
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断8 O  O) s- y, r: c
! U2 X4 a/ \6 ?( x5 X" w& j2 j2 Q
wp ff7533,1,w,wpdata == 0
/ o8 n. V1 J0 ^
$ T  }( r) U/ o% `以龙王战士日版为例:
+ ^* V7 ]0 U, f! g
8 F; T. B- m9 M! t# @) O1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
; ?0 @% Y- T8 w! I7 N
, _+ m" {8 w+ F; y+ A# |- G5 w
1 J3 {. I$ }7 ]% r+ |5 q( A- r: F  z6 W( p( G
' I0 p# D) \7 j
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:4 C  q! q& L- E3 L' _$ b
9 [% H; E- |2 b' |' F( z

- t2 {9 S& K) M3 c* m
; k) T9 \# J. i1 d接下来说说程式地址断点# R& f' K/ C0 `+ f
( g* e2 N! f2 W! `2 Y) [
命令格式:bp <address>
2 @( Z" P8 A- R5 w  e1 j! I- k' _$ E; r
例如对000488汇编指令地址下断点
9 U9 {; X4 e2 r
6 M3 s2 Q+ i$ a, U+ wbp 000488( t1 S# g! a/ M- F
8 p" V" g- v  N0 ^
当程式执行到000488地址时就自动中断
* f7 t1 g! {6 n& y9 O* F( j- a( t* {3 F9 ~+ F& y+ [8 R  b0 [
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看6 e) q3 o- ]0 T

; B+ z  W) T$ V9 ?有错误请指正。
- s, R/ X1 }& ^' C+ G( g# p. h* F2 @, F( {, I( e8 t4 _
补充一些命令:/ G! d* r! C4 c; \" ^9 O9 {

$ k9 i; Z) D$ d" G8 W; F% k"wpclear" 清除所有监视点6 [7 n, N0 b2 N. j
"wpenabld 数字" 开启监视点
2 c% ]2 U) H- i' \$ |* M" e"wpdisabld 数字" 关闭监视点
6 F7 {2 ^2 h8 G' ?0 T8 B/ r2 I"wplist" 显示所有监视点
. A" m$ G# ?6 g( N
6 G7 T; p3 S$ s% p7 `"bpclear" 清除所有断点
2 `; U) ]  u' n5 ?"bpenabld 数字" 开启断点* v, P( d: M& r" B' r+ B
"bpdisabld 数字" 关闭断点1 p$ ^  s% p  O2 u2 ^2 E
"bplist" 显示所有断点
/ G! Z! Y. k, O) m6 [& B

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

3

查看全部评分

[发帖际遇]: 疾风之狼扶老大爷过马路,警察叔叔奖励疾风之狼 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1548 天

[LV.Master]伴坛终老

发表于 2013-1-23 23:55:27 | 显示全部楼层
感谢 疾风之狼 提供本次教程 辛苦了
[发帖际遇]: 孤独逍遥整理箱子竟然翻出了 4 个 柠檬. 幸运榜 / 衰神榜

签到天数: 3495 天

[LV.Master]伴坛终老

发表于 2013-1-24 06:11:00 | 显示全部楼层
授人以渔啊,万分感谢
[发帖际遇]: 一个袋子砸在了 hellok 头上,hellok 赚了 2 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
4 J$ l) p' j% }2 Y' ]+ {. b, x8 s& W
6 f5 R) I1 g9 M' p7 H. P以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

发表于 2013-1-24 15:32:47 | 显示全部楼层
谢谢,有空学习一下。

签到天数: 2051 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-24 19:15:24 | 显示全部楼层
更新补充一些命令
[发帖际遇]: 疾风之狼 捡了钱没交公 柠檬 降了 1 个 . 幸运榜 / 衰神榜

签到天数: 2569 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
) B* B* b1 P; u* P9 E  F1 Z# f  _, d% D8 j* C* M7 \3 ]
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
! q( a1 E! }" O: W! V
- o7 z& I! }! F  U其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?' L) ~7 g% Z+ `" J. b
2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 2 |! |9 P% \; W) t) R+ N; n" q8 l% {

5 Y$ q/ V6 X0 a2 R7 jCheatEngine搜到的临时地址当然无法对应MAME的内存地址
9 E/ h# ]0 r  o/ c$ v8 T* v+ e0 @9 X0 Q# Y4 Y  c8 T
新版MAME没搜索引擎了么?
, v) K) U+ z; f& @, h' V8 d$ A  R晚上我看看
% Q3 [) R+ X& n7 h, U
1 {& _2 N: z  L6 }; L% k+ e" ^* t/ ^MAME查看地址的功能还是有的+ \' j2 A" b, u% W1 O2 g2 K
菜单里的第一个选项就是显示内存地址3 o4 x  R& W$ Y8 B* P0 B- Q/ U
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2051 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:  y( r- M" S5 e- O; l
1.DEBUG版MAME有作弊码查找命令
+ [# J# U* S5 w$ i" b: d9 T
' a  v5 b! I; I7 |/ |. |  D命令如下:
& Z0 k/ ~! x) ~4 r$ a; j+ }cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
  s( y2 H8 f4 x& t) F<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
: s1 l7 [! F$ B. J% G<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
. _8 E: ^4 D* J! {0 i3 a<swap>是决定字节是否交换2 L7 C- ?& ^8 D& [  f
<address>是地址,地址必须用十六进制表示,例:0x100248% c9 j6 f5 _* ~. A& J) X
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
" d; M2 z. Y/ u. a<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
6 d8 {, M4 M- {' `6 p
$ S. L; X5 j$ V4 V; s' Y/ s请打help cheatinit命令获得更加详细说明1 ]1 _( P" s2 @: G. F9 S
& |6 C; r# V0 W
cheatnext <condition>[,<comparisonvalue>]
8 R/ n" `; Q7 x9 N% m. w<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
# i& K6 x7 \, S2 q5 D[eq]是等于
: z* ~& }' d' i) K4 c0 m1 B[ne]是不等于  [0 X: G- Q6 j8 A
[de或-]是减少" a9 S, ?' @3 [& U0 ]* z; C
[in或+]是增加
" J& @  i2 A& s) O% H( l8 [[deeq]是减少或等于
* t+ h# d' v+ j  e* Q[ineq]是增加或等于7 R& ^/ \& ?: M) P
[lt]是小于: G' J9 @: @% j7 \+ F# g
[gt]是大于
( ?9 N" _( U$ s  _& @[ch或~]是数据有变化9 H2 H$ O6 n. V) W
. a; R. [! `  e; s" B) v! M( L
<comparisonvalue>
# d: `, i1 X4 u要搜索的数值
3 l( g6 D+ G5 t2 Y; @3 F# z- f( S( F% Z
请打help cheatnext命令获得更加详细说明  d% h! d' \( p* s* @, G; ?7 c

- S& g. v4 b) g7 Xcheatnextf <condition>[,<comparisonvalue>]
' f! T9 i2 R+ W" P9 s* c说明同上. v0 C2 X4 [& `8 P+ k" p2 B- N+ o+ F

8 Y1 Z- L6 Y3 p+ b请打help cheatnextf命令获得更加详细说明
7 j7 u2 H9 q2 s" f; v, I- B7 r3 v8 k. r8 \! Z1 C
cheatlist [<filename>]* B  u( X) \9 a. e
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
& Z0 P9 w3 ^* h$ c3 @( l+ _6 o1 _+ g1 J
请打help cheatlist命令获得更加详细说明
2 I0 Y. l4 m. D( b* l: z% W9 G
) X- c( X0 P9 D第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
: p/ [# X4 D7 c# t4 v. T: y: O4 D" T! N1 ~, F2 h
之后进行第一次数据搜索时要用cheatnextf命令来摸索
  t! M4 h8 ]2 D4 O$ i; h' e/ [* x
0 [! D, n- Q1 ?: Y( w- d到第二次、第N次数据搜索时要用cheatnext命令来搜索
% M$ |4 u/ p; E3 d5 O9 i
: a2 a9 w# |9 s* W  \举个例子吧:' l) ?, \2 o- }
$ X/ B3 Y1 K% T  B! R
以合金弹头X为例:: O! W% |0 |& f. d
1P生命数是20 ?& P# p, b0 h; L% R
+ @0 h# b" P! }; I
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
" K& K0 }6 g7 D) I0 {; r& k6 w* G2 M" [' ^6 @
命令如下:
- ?0 G( R* b. kcheatinit ub,0x100000,0xfffff,0
0 s, D3 }4 \# F# Q0 I1 p% e/ K! W3 d- D5 f! T" P8 }
再用cheatnextf eq,2命令搜索生命数2+ x1 f! V, d' \- m! H+ W+ i

" M/ Y7 F0 }7 X. D/ {8 X$ ?cheatlist显示搜索结果$ x( y1 G3 R" V9 [5 W* o" x0 f
8 f; U* M$ f- a. r
死一命后用cheatnext eq,1搜索生命数1  ?6 M% f9 k+ u9 l* I
0 V4 [8 q' ]4 F5 m9 U" s4 H# k
cheatlist显示搜索结果: ^, i' N! K+ j" C4 J+ V- w) {5 F
.......
6 K( Y' R, l( q1 a: `直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果  d0 e5 T! G- Y4 e
3 c7 \: O6 ^% x: X9 |9 Z
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
, \, K+ a( d7 b9 _% Y" k% ~3 s0 X4 {* p8 G6 @; H
没作弊码的话....
2 x$ E. D9 w( z, D2 G$ r9 B9 ^/ x6 M9 Y7 [8 g- q: W
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
+ t4 S$ ]9 e3 q) T4 `
. d6 ~4 e% Y1 X: R3 r; p( q或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)7 W' N4 ~- D- l
4 k+ h" l, W; L+ t9 ^5 `& C( u: o
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行3 Y. _  |$ D; ]4 Q. N; H8 T

4 U' [' Z- @7 Q/ o" E5 d3 n要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
: N6 i3 V) s  I1 p6 h5 r, o+ X, V8 Z
6 z" j; P1 y# o" k/ `  R; t5 T: _
回114:
. O) ~" j3 \& O' v4 ~* S
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
9 Y1 j+ p$ [0 |3 @* V$ b5 o2.没地址如何查询地址?看上面我给zsyf的回复

0 _0 {- ~3 S/ Z
; X& n* ^9 \$ M! z: z' W9 h' f' t% s打字真累.......orz.......
[发帖际遇]: 疾风之狼踩坏了花花草草,被罚款6 个 柠檬. 幸运榜 / 衰神榜

签到天数: 69 天

[LV.6]常住居民II

发表于 2013-4-21 01:03:22 | 显示全部楼层
查出减命指令后怎么改到roms?完全不会啊

签到天数: 31 天

[LV.5]常住居民I

发表于 2013-4-28 11:23:53 | 显示全部楼层
同问,我找不到kodj,不知道少了哪个bios,rom,但是有个三剑圣(wof的改版)的rom,也找到减命的指令,就是不知道如何对应到哪个rom的文件。最后一个个试验,似乎都不对。是不是rom加过密,我记得mame的rom,有变化过,最起码在00年之前和现在的不一样。连名字都不一样,到底这些rom是如何做(是不是叫dump)出来的?
[发帖际遇]: sdiencelee摆地摊卖菜,占道经营被城管罚款 3 个 柠檬. 幸运榜 / 衰神榜

该用户从未签到

发表于 2013-6-14 19:12:06 | 显示全部楼层
感谢分享{:4_92:}

签到天数: 1279 天

[LV.10]以坛为家III

发表于 2013-6-14 19:20:04 | 显示全部楼层
大狼就是我的老师......!!!!!!!!!!!!!!!{:4_97:}

该用户从未签到

发表于 2013-6-19 19:44:34 | 显示全部楼层
非常实用谢谢,不过最右边的数据是什么意思啊。

签到天数: 380 天

[LV.9]以坛为家II

发表于 2013-11-14 20:14:51 | 显示全部楼层
又是一张科普帖,一定要顶,而且要收藏
[发帖际遇]: drogon49花7 个 柠檬买彩票,血本无归T_T. 幸运榜 / 衰神榜

签到天数: 3023 天

[LV.Master]伴坛终老

发表于 2013-11-15 16:01:38 | 显示全部楼层
果断留下技术的脚印

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2025-8-26 14:19 , Processed in 1.076171 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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