EMU618社区

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

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

  [复制链接]

签到天数: 1999 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
& ~$ Q' y6 G3 b# U, [9 z" n
7 H1 V  e/ [- r7 O(1)如何加载ROM
! R! D8 R, @: _* t# K3 e
) Q8 r, b* H1 U8 T* b) E1 ]' Z先说说如何加载ROM吧4 A- |6 T) q4 [* V
( q( }1 I" F3 \5 L/ x
以MAME 0.148 DEBUG版为例:
: G. L: O* O& O  B7 b& \1 A
8 c' I! l! g3 S  V! B1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
: D0 b) c' J( Z. P9 p& a2 k! Y  h& g; F8 f' t! g$ M: c- L5 S! t
注:MAME官网的MAME是命令行程式,没有GUI。. f; z$ G7 w- n6 R- W

2 T, ]2 u3 F9 r, e0 t& W* |2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
% }. J8 o! {0 U
! b5 d3 l' n) ?" z3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:* m/ p+ w) }4 m

2 p' `) ^, S$ Fd:回车4 ?; I# k. Y8 j- H% n
3 B- p' `+ s: g: m6 y- y. |$ w/ _+ w
cd mame0148b_debug回车6 r" I6 A+ `" {
% y! p6 Z! ?. k# i' E1 _6 s% i' `* i
如图1:: Q( r  x; n- j& O

& s, w7 k$ O: `  o1 ?/ m+ [, b
9 I7 x) w3 H2 \! s' D5 v+ N4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:& ^, l1 B! C  x& \, `( f" B8 h2 }2 B/ Q9 ^

4 W! ^2 K, A( R, s; c/ \& H2 ?8 W1 H- r& R% P1 I1 B

( F  o/ d3 v, s: o/ \9 U5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
6 u# |& T- U% g6 ~8 s3 K$ S# [8 G$ a# {7 V4 Y
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。) y1 O* \% U2 ~  g3 Q) W8 O$ m

3 W& Q# _+ _& _; [(2)如何呼出/隐藏调试窗口' T1 v2 j# i$ \) [6 r
- z4 W! M' x+ d$ B3 @4 E; P6 x
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
3 ?6 t( @# S$ b9 M; I1 R5 p& ]- [/ i2 u- Y

( \( A" i6 l5 G4 x0 Z& E
0 l: E; v# x  u" y2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- S2 S1 ~6 G1 Z' a. |. U/ b
- R  {. w7 Y! _  f3 c2 z8 I
% ~; L8 ^) @5 U! }2 G: t8 M1 n! \
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。# s& r; C- s) W$ [

0 I/ t# E. W/ _9 D7 s2 Q(3)如何下读/写内存监视点以及程式地址断点
+ j, B  q7 K' |0 ?6 Q4 j: b+ G) c. }. x1 I: \) C2 @5 Z/ Y
先说说如何下读/写内存监视点吧
" o7 G' x  M% U3 @9 P5 E: L/ n% T* y+ B" V& _2 a2 w3 M7 R' Y
监视点命令格式:wp <address>,<length>,<type>,<condition>
" D( `5 l& U) U$ |# }
; R9 z. J- `+ I<address>是地址& `9 \7 U& {8 u) ]+ V

; ^5 w6 y: V2 S% @<length>是数据长度,长度必须用十六进制表示
: k& m, k& {/ ]( Q& ?" `. j& |2 B" W. W2 J2 g0 B" A4 v/ T% |
<type>是监视点类型,r是读,w是写,rw是读写
8 v2 G; P& l( d' X4 K
2 n8 F" q, d; M8 q例子:( I6 r* W2 U+ Z8 g

6 N7 d% D; S- I* ^  x( p& r例如对ff8569地址下写监视点,数据长度是1个字节; P' t) e) c; o8 u! ?8 R

8 y6 Y. X9 E; |+ r$ T3 Jwp ff8569,1,w
0 Q# R7 j6 `9 g9 m. M
) s9 t& y8 g5 G% [. v$ ]例如对ff2235地址下读监视点,数据长度是2个字节7 [2 G' B7 R% j* a" q
$ J6 p3 M1 n- I; F' T7 L5 n- Z
wp ff2235,2,r
3 M. ]0 k: ?: m6 B. `. e; v) F& V) A2 y0 i; K2 |; K6 J) r$ I
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
& T: R5 I, A0 J" f! d
0 g1 L2 b7 U% W  a6 U) [9 Q6 g: H6 p. Awp ff7533,1,w,wpdata == 0$ j$ D- F2 m/ W! h7 b' h% l
( ?3 h0 s& ]' h. k9 p( D
以龙王战士日版为例:9 r* {9 ?- r1 [* W0 A
* G( a- i" d( E% D8 ]
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
( F) `8 `* j7 X, R( L7 d) k) m3 H
" D% o& \$ r1 L, {8 \9 `7 R$ c9 g7 W* K& P# V# X# f% C- @9 U  E

4 A: R4 G( W6 e9 Q4 \! }
# [7 X0 y0 n; Y/ L) ^7 o9 O4 c7 J2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:  l& |* i+ d( {/ g
7 V3 J. _! M5 {+ @$ n5 x6 u6 l

- m! M, r9 S# l  d7 b% q4 l) {  K: @% S; t
接下来说说程式地址断点; F, ^6 Z% i  j

; ]+ m; n% S1 H9 w命令格式:bp <address>
1 e0 g( W+ \9 c0 C6 P3 `- m& J' `% F; \3 e
例如对000488汇编指令地址下断点
# J( r  c# ^2 F& M1 n0 m6 C9 h: }8 k/ |* ?: p
bp 0004884 a0 e1 @) f% Y( _% F
% ]- o6 R/ ^# W; j, D' h
当程式执行到000488地址时就自动中断) B# V$ [7 U1 B( r; d0 Y4 l

: t, y. u& L  @/ j更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 [; o6 w- E; [' C( ^
4 E5 e9 V, r/ S8 }1 s* F' h
有错误请指正。
9 a1 d" q) |* _
0 Z% E4 `7 _0 a8 B& K0 b  D, t补充一些命令:
" [) b# l$ \# }2 C. E9 R
! ?3 I4 U$ Y- Q! A* P7 O% ~"wpclear" 清除所有监视点6 ~/ ?7 B; }( R8 D
"wpenabld 数字" 开启监视点& @; r% W9 p1 c8 F& }% l! ?0 \. z4 }6 v
"wpdisabld 数字" 关闭监视点# n% Y- _: N, ?6 v" R
"wplist" 显示所有监视点% H* t8 ?9 x% Q0 w) P& X- k
. C$ z) D* [3 }( f0 s: ~- r
"bpclear" 清除所有断点: P# P" A2 t- ^9 N# u
"bpenabld 数字" 开启断点. F3 ]9 t2 N: n: a  T9 }& q
"bpdisabld 数字" 关闭断点5 Y  h* |4 f/ N* V
"bplist" 显示所有断点
( }! ^0 C) a$ ^% P/ ?$ @" F$ H6 _

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3444 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽; F+ y. q: e9 ?# I, B+ M

% g$ `( V7 c9 T# N# x, T以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1999 天

[LV.Master]伴坛终老

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

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
5 ~5 s$ K( K2 W6 E& I8 _, d6 g7 A6 ^2 s6 B9 i' W. x; Q# q
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
+ R; i" d. |. a) R- `6 r) i, R/ @1 f3 l# @" ?1 f
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 + h) b* [7 \- B( R3 E) U
6 Q. }% \6 e& B1 a+ L4 }
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
% e- J1 Z& l% }) h; I5 ^* l% h( ~% Z: T, y0 G: r
新版MAME没搜索引擎了么?
4 A& `" e4 F5 k晚上我看看- J7 }8 b: K  O- ?6 u- _5 Y

( o3 B2 [) h, A1 M  b. c7 n1 w" M5 PMAME查看地址的功能还是有的' W* _3 J/ z8 P6 {. E! h
菜单里的第一个选项就是显示内存地址
  @5 u) Z# C, R8 r" ^* k& ?0 u不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1999 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:% {/ B. r) K1 a' j0 O
1.DEBUG版MAME有作弊码查找命令
& \' S1 B: |; |
* Y" d7 X3 a6 Y命令如下:
2 }& }6 u* B& M6 acheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]6 n5 R! z4 K0 K% F, g" U
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型4 q- L1 {+ G8 b% {+ D
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
3 V: W$ I, ]4 e8 d<swap>是决定字节是否交换2 P: _8 u: H* `( E+ A# s* U4 T
<address>是地址,地址必须用十六进制表示,例:0x100248
  |! B. Y9 ~" p8 l: ^8 b<length>是地址长度,长度必须用十六进制表示,例:0xfffff. Q8 r# \7 L6 g4 A4 N
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
7 k9 |& E0 I1 a( H1 \4 F0 C+ C! g) \  ~& |- r
请打help cheatinit命令获得更加详细说明
; i9 Q! `" w( d- `8 W( Q" R0 K) n4 s( m2 j+ j" k0 p7 k
cheatnext <condition>[,<comparisonvalue>]
7 J7 J+ X0 O2 c( y<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]  b3 z$ d1 O) c5 q
[eq]是等于
( a% v1 l+ O6 V( A1 `$ V3 D! [[ne]是不等于
4 e8 a7 E, y7 a0 t8 |* k% E1 \# D[de或-]是减少
) l$ T% E+ L! ^: a7 O[in或+]是增加
; C" I- h* A- u7 H' C2 ][deeq]是减少或等于2 F1 p6 z, m. M$ f: S
[ineq]是增加或等于
, ~, S" s3 o2 K" T) ?[lt]是小于& @; |, Z% W% c8 d# C2 `  L
[gt]是大于+ m, `( R3 \# G
[ch或~]是数据有变化; K; P% O1 B  U2 [- a6 G

# C( x2 F7 [8 O$ E6 Y<comparisonvalue>- P. V7 C6 [) v3 I2 f
要搜索的数值
; ], J( A; k# B+ c# s% n
. X! e2 n0 c, ~请打help cheatnext命令获得更加详细说明
" P0 s; `4 m$ Y) c0 _( E/ l& h( u- S" `  E4 J" u0 s) }
cheatnextf <condition>[,<comparisonvalue>]
" o6 ^8 `! I2 [3 L# T说明同上
" o. b' }: }7 o9 ^# g5 C5 K, c% Y. N. P/ e1 F
请打help cheatnextf命令获得更加详细说明
0 Q) U3 B% b% F; X# h# `1 z4 H* v$ s: t
cheatlist [<filename>]. V+ `; W4 t0 c+ U) K3 i( y$ f
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件0 R" G6 Z2 L+ R& M7 V
/ i, U1 S. h! k$ R9 `7 A3 |
请打help cheatlist命令获得更加详细说明# h/ w4 A# Y2 n& \+ V6 _4 e, v
3 d6 t3 H9 S. L6 }% p* T* j
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化) {5 g) K- p/ }, `- I5 v/ \6 u
. E) q( v# W0 Z5 A- c3 W6 d) x) v
之后进行第一次数据搜索时要用cheatnextf命令来摸索
) {& a8 t' @) v# E' e
0 Y: T* Y) C# k5 m到第二次、第N次数据搜索时要用cheatnext命令来搜索
, Q8 S: x* ?+ |, x8 `5 k! T8 U+ q( e( D
+ S! Z/ q/ o4 V$ N! G8 `2 b举个例子吧:9 Z% D% V9 @+ `0 Q; X+ a( b4 I6 U1 c

+ g" o) t" Q8 J5 c: G' p以合金弹头X为例:1 k9 {0 v, Y6 w) O( O
1P生命数是2  }0 X+ |" f( w! W& }
4 z7 M6 {) g3 o* m9 ^, f6 t( i
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间# F" N. w, f9 z; {# w* q$ D" j
! f5 I; l6 @6 [# ]0 L5 B; x6 X
命令如下:
* K! x0 L7 z% Fcheatinit ub,0x100000,0xfffff,06 i, o, g7 I0 Z

1 N. F- {, R& A. {# e4 z再用cheatnextf eq,2命令搜索生命数2
8 B7 [% F4 C; u- n" Q& K( X- c( I+ `2 V' Q2 n
cheatlist显示搜索结果
0 [3 l0 M6 W, T; B; F/ o  F( Z
/ t8 K% z! n* T& s  }/ F( \死一命后用cheatnext eq,1搜索生命数1
  Q# f- Q6 Q7 u) k: O
( K  `' c+ p: ~: fcheatlist显示搜索结果
7 U3 e9 t5 Y" P4 Y4 Y# g.......+ u6 X* S- J: h6 h& e; b* \2 m
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果/ D/ E% e/ X5 ~6 \) \
, U1 u# t9 s( N( H3 C) H2 Q2 X, Q
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
) \8 H" A3 M& |9 \2 I: ?5 z7 M/ p% v+ m6 ]) {( s+ q/ V) G
没作弊码的话....8 {" L) R# Z5 A/ `' z; M/ w; b& U/ S

8 C" H8 e( ~* C7 Z0 a6 Y" I( C$ }" y不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
2 B! L4 t3 ?( K/ W1 w! S. F$ `% ]& K9 P. J
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
/ d9 a+ q' `; {. |1 k9 r. {2 N6 U, H& ?1 K
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
2 _+ S1 O; G: F( M& m
6 ]) ]/ J7 w" Z$ y' d# F要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

2 `: g: F0 E( I
* \" E' p+ F4 X: |1 U6 H+ N回114:, d' T" ?& x2 U' p% a- e
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
: M4 c( V( ?. ]9 V6 X$ d2.没地址如何查询地址?看上面我给zsyf的回复
& C4 g; S5 Y4 r0 ^+ p+ H6 G
2 n9 Y  }! a* R& E) j' I2 z
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2973 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-6 10:04 , Processed in 1.115235 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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