EMU618社区

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

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

  [复制链接]

签到天数: 2019 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。( `/ P; a5 j, e; Y

5 i% g8 s! L- G  u2 T( ](1)如何加载ROM
+ y8 Q" I8 q, M; T  e6 p5 S/ O# y, r4 A( Q8 U% t) y. c' _% e
先说说如何加载ROM吧
% P/ p. x; m9 p# x6 s
4 b6 _0 e+ k5 Y, [0 E以MAME 0.148 DEBUG版为例:% }5 t& x* @1 f: M

; s% Q2 U, J7 l& B7 _. @- p5 [8 Y$ P1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
$ t5 z. G! v% g- {3 u3 g/ {7 v: c7 ~. f4 ?) a/ Y1 a! R
注:MAME官网的MAME是命令行程式,没有GUI。( j/ T" u6 Q8 ~4 W5 Z) _
& g4 |  S( f8 g: d
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;/ z: P" m3 ?' P# u8 W
7 {( s9 i2 p* y  B$ G% v
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:+ M3 W, [# z. I+ Q

, B- H( X5 u7 q4 |d:回车
) V  n+ ]0 h4 ?5 g, G, A3 K* }1 @4 D2 |0 v2 y+ y- P
cd mame0148b_debug回车$ l+ r/ [' ^  \& k  S1 G. l
: k" l% ]; ]$ w4 N- ~
如图1:% Q1 ?2 Q6 r. T% Z" [' {+ D+ F+ ]
2 {- h9 ~6 ^! n

* l7 ~' N# L0 v  b' D% t4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
! d+ u* Z/ b" v  c7 q/ h7 n4 f9 W5 i( @3 {1 a! I. }
  I8 r* l0 B: d2 e  Y0 p  g6 N

. t8 f; ^1 Y1 ~3 D5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 h, n$ y! N& V
, X3 R0 H# K% ]( P2 s6 i8 o$ G
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。$ J8 ?1 q# H% @. n& C/ f

' f- e0 H: x6 ~% k: j$ A. ^! N* [(2)如何呼出/隐藏调试窗口3 I" X: j& X/ S- h

2 @2 A6 }# w& `# y8 w; {/ l" _1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
* \# O( ^$ P1 b9 H1 R! }8 Q" e/ M8 A$ `: r3 L/ K3 P
8 U  u5 N7 i7 D
3 J% p. @) I/ a7 e# \: j' r
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:* x# F) k- d: ^) e
2 g) w, a- L* b0 K

5 h7 V. m# p% X4 A7 m
5 }! I' P0 d4 T; Z' U5 v3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。: @0 p- V" D# f- Y# J
( u" v- c+ s2 ^' C- S: h
(3)如何下读/写内存监视点以及程式地址断点
% c4 \  z2 ?; G! Y( ?8 n$ X9 C7 e: q; i$ o7 R; p
先说说如何下读/写内存监视点吧
: J" x* I5 D$ a5 }0 Q. H; y" V) c( {# |: n! \2 j: I9 x
监视点命令格式:wp <address>,<length>,<type>,<condition>& F1 g3 y- _  j, A7 J

, [* |& @6 [+ ^; Y% }<address>是地址
: M. x+ f2 K, f. }
5 S/ J6 T5 G  J8 w9 \; {4 g8 ?<length>是数据长度,长度必须用十六进制表示
8 ]+ z; o' o7 ]% n# |* e1 B! X
. C( T" `: k3 Z- M  W. v<type>是监视点类型,r是读,w是写,rw是读写/ ]( E3 Z, s; }2 C, D, |
; G1 S) f7 Z) m1 r3 v
例子:
" S7 Q5 Y: Y# z  B0 }
8 S( e& b1 n/ ~例如对ff8569地址下写监视点,数据长度是1个字节, n. N, S; s: s  W, @5 O5 \

- ^( K' W6 \& D+ o) twp ff8569,1,w6 ~3 _5 O( A. b( L7 \$ G3 t

8 w6 {& y! }3 ^; k6 ]例如对ff2235地址下读监视点,数据长度是2个字节
7 v, _" w6 i( p) F
# p( A! R1 k9 F" L( F. |wp ff2235,2,r
2 J& Q2 ?6 ]8 Q- T* P: Y" ]% c9 q) n; U$ O# X9 v
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断# ^- x+ Q6 i% v( E3 m
, T( R  \$ v5 f7 t9 v  R& Q
wp ff7533,1,w,wpdata == 0- G7 @0 K; a/ W! x. B* T
' o& @( v! s/ w, ?; \$ ^$ N% i
以龙王战士日版为例:$ `5 m4 S- C) ~/ p5 H

/ P4 f, |* N% }1 K. Q- b1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
0 Q4 G  `, V' T. S2 k! ^( m
7 l) B4 a  `0 i" V9 t
5 o8 c' n8 ]; x% i% z' F$ M+ _8 b) g% E9 c' z
& G: h8 J2 ?% |
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
% B" K$ p1 |3 F1 X% c2 p( Q: B2 ^, L) a5 [$ `8 y: {
. d: O7 W2 V8 U, e! T4 a
& \# }# r+ V8 k
接下来说说程式地址断点# \8 Q. x2 D' |( t8 H; L
+ d( f( j& @( j2 n  P& W
命令格式:bp <address>' p6 Z: r& C0 y" g! s
7 |3 O+ K+ U9 h7 Z" g" c
例如对000488汇编指令地址下断点
7 K) b/ l( p/ X
  J- K* ]9 P5 Z' l8 J0 gbp 000488" w1 Z/ R  a9 M4 D4 c* Y9 f  w

, B7 t" f+ `: K0 F2 C6 j$ T8 y5 a当程式执行到000488地址时就自动中断: a. n6 h! A3 A8 L0 R( b0 ^- o

5 D: s. d2 X/ _9 K  G更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看. |0 p  D' Q, d( A) Z4 |7 H
; F( {9 y: @/ C& d+ }3 E5 w+ D
有错误请指正。
5 B" j- ~( U; _$ A
) V. n, C0 C/ l) ?2 c" F补充一些命令:
7 r/ ^! _3 e! k: Q+ R4 }
, F& E' j" w9 ^, r* X6 i+ u5 _7 i3 l"wpclear" 清除所有监视点
3 a5 k7 z% I, Z& A! }. g& X"wpenabld 数字" 开启监视点
0 ?( n# G8 \, O) ?( p6 ^% l, f7 M- |7 Z& ^"wpdisabld 数字" 关闭监视点5 S, }% ]* f6 H
"wplist" 显示所有监视点# J% w: p# b! b9 o. P% z- L8 h3 Z
9 p+ O; Q& W# z' P& Z
"bpclear" 清除所有断点# V0 t% K% b! B' S8 m2 F. h
"bpenabld 数字" 开启断点4 n2 k+ o- R% Q, z+ e
"bpdisabld 数字" 关闭断点$ C$ }; B4 l: k4 @0 H% l; O/ e
"bplist" 显示所有断点3 a2 U+ e. d) E) Q% Y

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3463 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
; _9 n! S9 X" a7 r- s( M" [; B7 e( n8 U6 c) R
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2019 天

[LV.Master]伴坛终老

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

签到天数: 2565 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
' C$ G5 B) Q3 j3 f% Y* p5 a. X* Y% @6 U  T
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。. z, c+ u- u2 ?: u7 e# r
" d# Q. _8 ]: U
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
  B7 ~0 o7 |7 N  |
7 ?0 i( k- H( QCheatEngine搜到的临时地址当然无法对应MAME的内存地址
6 O- Q6 L! Z# i3 h9 N+ a/ v2 l0 ^7 h7 k  O- [* F" `' M
新版MAME没搜索引擎了么?! }* c  b. U$ i8 D' Y! n
晚上我看看% u) _* ]1 ]* g2 \; l
+ m0 e( e# j+ e, E
MAME查看地址的功能还是有的
. s6 e, q0 f  u& T: ~菜单里的第一个选项就是显示内存地址! Q0 ^, t: |1 }$ N# F
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2019 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:; g2 {, Y% ~! Y
1.DEBUG版MAME有作弊码查找命令
/ c& ?* ^: X5 n2 K/ M" ~6 N, N! r4 C0 D) X4 N, |9 V
命令如下:! K) R6 s  }8 _% K; a) S
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
& ]. \0 B7 C& [2 g$ F/ g( q, c. t<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型9 x: {6 ?) b3 n3 f" }# `( D, w
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)" L% `- |" n; P0 M: I- q7 Y4 {
<swap>是决定字节是否交换
2 g' X* B* u/ `5 U<address>是地址,地址必须用十六进制表示,例:0x1002486 V" I9 e2 {5 X3 [1 R- Q
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
( h/ p0 N4 f. I8 s6 c; ?3 U<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
! a# R3 K4 M+ \# Z
( R8 }5 X& a) W6 ~请打help cheatinit命令获得更加详细说明( P$ F- \+ u1 j; N6 R$ a0 E- k8 L

: J0 m: p; m  g- ?8 F2 Ncheatnext <condition>[,<comparisonvalue>]) u% c+ @8 u) @
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
1 Z  _* G# \7 I; {2 H( K4 I" \; s[eq]是等于) j3 l+ g2 t3 F; T/ `5 q6 C
[ne]是不等于
, v! I: C1 N- G$ j[de或-]是减少. W" @1 K1 s$ _
[in或+]是增加9 R0 Q( L9 U) _( @2 E
[deeq]是减少或等于6 ]! S6 l( h7 z: J9 ?2 N+ w
[ineq]是增加或等于' U4 O0 v' v, @4 ^- ]2 T+ Z* e
[lt]是小于
* K; d0 }$ W) ~6 r  ]% @[gt]是大于  a' L$ s( {8 |& L( O
[ch或~]是数据有变化2 i' O. X; _+ n( l. j% D- a; ^
( m3 Y+ u* _1 W& Z
<comparisonvalue>) b8 x' {1 @2 E8 W9 U6 _/ d
要搜索的数值
  K; {1 W0 S( I& m1 R$ p1 w' h) ~# Z0 V2 a1 q% Z% U- T
请打help cheatnext命令获得更加详细说明, i; f# q) g! l( J: S3 I1 s0 ]
0 ?5 w0 R0 H5 m& m: [: t# b6 l5 D7 C
cheatnextf <condition>[,<comparisonvalue>]
4 z2 E( i) ~6 l+ K, E! W2 Q说明同上
2 s) m2 P, K% r
) f6 k) r. r+ p+ R请打help cheatnextf命令获得更加详细说明7 T2 [; N8 X2 J8 N5 b& B
0 C! A. r1 m* {# K6 V1 j
cheatlist [<filename>]+ C, q/ ?- v9 R- V! y! V
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
! r9 }1 i+ {) N/ W- ?9 ^( e- ]! o' [
请打help cheatlist命令获得更加详细说明
+ g' m! I- g9 ?- I- ?; _1 N( T( L6 [% x6 ^, A# |* R
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
, a% b) V2 K) Z8 P8 Z
; y' c: a4 i6 S4 @# G+ g之后进行第一次数据搜索时要用cheatnextf命令来摸索
0 F9 ^) D( ?1 e1 r: P! M- z3 _2 P* }" d6 {7 W7 r3 q6 E
到第二次、第N次数据搜索时要用cheatnext命令来搜索5 u7 N3 u! N5 `, ^( }

1 {# ?! q  y: R举个例子吧:( m5 x, R) _6 M6 M# \- a
4 D$ D' S" l9 a
以合金弹头X为例:
. _7 E+ H- j9 {( Q# w5 w4 \$ D1P生命数是2
# q& `. M2 }/ V: }& M6 ?3 @% W1 c, H
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
- g$ b" j2 W5 `$ s' ~9 S0 L4 t( r9 r: E, R8 _9 O
命令如下:
- |% d0 t2 u% h1 L! j  bcheatinit ub,0x100000,0xfffff,0
( A. h9 o+ c5 `" C2 T
$ {7 Z3 d. r) B2 P1 @1 {4 v再用cheatnextf eq,2命令搜索生命数2
$ F- O1 Y( e7 J2 a% B) |' N* T- A0 I% W
cheatlist显示搜索结果
4 Q" E! z6 r# h+ e* a% m0 U
* \! a9 [1 d& g2 [7 d- Z4 d/ t死一命后用cheatnext eq,1搜索生命数1
! g: r* o1 N* ]: V% @/ U" A2 M' U) s$ m2 r+ \4 Z
cheatlist显示搜索结果
5 I! f; r9 C9 |9 m4 q5 _6 `1 j.......
* }7 C9 _" N# d; `8 _* x  b' P直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果0 I% n. d8 e% D) [

- {& P/ y) l; y* O还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。, e* H6 ^+ |$ p5 ~  ?  @
; p$ X6 u- C0 T0 {* E
没作弊码的话....
! t9 Y4 r2 r7 d1 P6 I$ Z5 S6 u: H/ ~
: D$ K* b1 p; M不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)0 L1 @: p  w% n3 J3 C: D, B

- [* E: P/ [( Q3 a! l4 H5 y+ ]或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)- X6 K1 m# ?+ M6 U5 @3 h& C2 k, h8 M

" U/ K  s; U9 {* {* X5 z4 ^, ^5 @4 z7 R2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
- _% ^0 n2 I) o  r1 w# `* c9 t/ _! t6 D, R8 k
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
1 T, x+ n( {4 g$ Q: H6 j
- X2 S# L" [  X( o
回114:
0 G# N5 {+ |( v1 d: N
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)3 k  z  s  ~) I: b2 p& b) z! U6 h
2.没地址如何查询地址?看上面我给zsyf的回复

! S, R$ |  q" l4 Y7 \3 k6 a. q8 H2 @  a! U, V: A, x
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2991 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-25 09:27 , Processed in 1.125000 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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