设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 2034 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。; \6 U: w( j2 W7 x; W5 q: G' U
* V$ F; F0 {; C& q% A2 p9 c3 i
(1)如何加载ROM
" _/ a  u. f- t2 S% E
  y; r# A" K" K7 [  V/ K先说说如何加载ROM吧4 k, l4 l" e' M6 P; r
  e8 }4 P1 A4 x( f* S9 ^4 M
以MAME 0.148 DEBUG版为例:7 A+ z& c. R7 c3 Q

- A' V; h: J" @' f1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
- \3 z6 M: R0 Z" J( p) K
8 |1 o4 {* A# k1 K% p. b注:MAME官网的MAME是命令行程式,没有GUI。5 X: ~$ |7 o! \0 F" k
4 V. w. X+ m: t
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
9 J' G9 s' m8 |* T/ x( ]$ b, L6 K; A9 o# P( B
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:2 ~' S9 Q& S- n  J8 u5 m
4 w  j% [9 `" ~+ {" M
d:回车
. Q( @5 T' O( n' D7 ?1 t5 b( }+ Z- S2 z/ C; n9 U% H8 O
cd mame0148b_debug回车: K4 ]( }9 C& f( ?
% n: L' ?( W" \& e
如图1:
6 q$ X; c% a, J( H! v5 g9 U$ f  c( \8 `+ f8 v
4 j2 h' t2 ?3 R
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
9 x9 J* t- E  G# W+ v- n+ X& G6 z; J$ D- w
) q" F( f4 i, z' C/ n2 l

5 G, H* ^- x2 |5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;4 H7 J+ D+ k% F

$ |7 S# g% u/ n" R! [6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
# `7 b2 G. D9 z; l
2 x3 m5 |; o# E  k# N1 ^$ `(2)如何呼出/隐藏调试窗口
% Z5 t7 \2 t0 j7 _2 m7 n+ M9 e% ~6 I3 a; Q% B
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( |0 y" u, {/ e5 A1 z+ }, L8 v0 I+ \* v& h
% D, q# s1 Y" Q# G; v
7 ^% H; D. }0 G; q
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:- }1 \8 S; l! F% p

9 ~  }$ D% q7 y" O6 X: U( r+ N2 k0 M% y& P8 V( d# v# H9 A

7 `' o- s/ h2 C1 j3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
1 d7 M5 w) o7 A, n+ e- ~$ H) a! A, Q/ K2 V
(3)如何下读/写内存监视点以及程式地址断点
0 S0 \. N: q7 f# z, z) N8 P! i
3 `( b5 x2 P# B5 M. [! L先说说如何下读/写内存监视点吧
# _7 P, U  T; n9 J1 r, D, h
1 D# I' t8 k3 {8 h" A" h监视点命令格式:wp <address>,<length>,<type>,<condition>
# |  Z* u3 x! d' Y3 Y7 ]
% ]# }* Q. Y) ^: B6 Z% B, @<address>是地址
7 \  S& s6 D+ A" i/ `* n+ H, |, C' w" |* O6 a
<length>是数据长度,长度必须用十六进制表示1 q% v, w5 d7 [) @. Z, l5 D& Z
+ W$ z6 a$ |0 m5 e+ ~9 @2 v2 ^8 J' E
<type>是监视点类型,r是读,w是写,rw是读写) k4 S8 _8 u1 J% a: l: L1 S) R
( L: i# C6 K9 a7 l
例子:1 ?! \% d' M( ]% `3 G) i" ?

. Y* \7 y" z$ R# v例如对ff8569地址下写监视点,数据长度是1个字节
* H% H) a  d# b8 O& [( _1 N( [. l5 L: d' j; u
wp ff8569,1,w% T! R* M+ y% v
6 l( ^. T5 B' p# M, J
例如对ff2235地址下读监视点,数据长度是2个字节. u0 u! b* z' }' [$ q- e/ G' `  e

$ X. u; F7 x. S" w8 Rwp ff2235,2,r- z5 d! b: a3 c, w& ^, V

# o/ W+ r# t9 l/ g/ I例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
( E/ Z8 `* h$ B0 \* {; b
' w7 w" a0 ~/ c( g/ ]7 w) Y) m* A/ Vwp ff7533,1,w,wpdata == 0+ U5 R7 M& B# @) ~1 F1 M( l

4 X. r, n: q0 S& K: o* V3 i以龙王战士日版为例:
' t0 h* a/ G: o1 A9 A
, c+ T& o. L7 B. }) ^3 X6 S1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
4 S1 P4 t( I3 U: z& L! y8 U4 d6 v3 i% c7 W$ D5 k7 p

! |+ y+ S6 I5 w
* o; S: K" B2 S
& k9 Y2 x8 L6 {) Z. J) Z2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
% n, O) j; y/ e2 B
' R( J; J; w2 r  ?( b1 Z5 C! M
' O4 ^+ j2 c. w: L8 [
  x, W3 N7 E: @( y: _' N接下来说说程式地址断点
# o0 j* O5 d' @3 `4 u1 t
# G, \8 \' W: Y命令格式:bp <address>
- k' k6 K7 ?! H. t- T. L" p3 ~& W! P! F5 w; {- M  ^9 ~# R7 A
例如对000488汇编指令地址下断点; K- c& L7 P( z
: Q/ t9 m/ j* G
bp 000488! d8 r0 w8 O5 `$ K: @
; p4 n2 W4 [) {7 I- G
当程式执行到000488地址时就自动中断
- u5 M) v+ A' L1 c( a. Q- c
! d1 Q6 K; t$ R4 @) h: g: L2 y更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看0 U" E/ f( l( r* X: j! ]

3 j. O) O5 ~- v0 f5 w: ~& }有错误请指正。. u1 X3 O/ ]. G
7 k6 A) i8 n/ d9 G2 \$ t% @6 D
补充一些命令:
3 h$ ]* F# k: n* X# S2 G* h7 g9 I0 A$ s  e$ G5 m, T. k9 ^
"wpclear" 清除所有监视点) G$ A9 {. K4 s& i, n0 Q
"wpenabld 数字" 开启监视点
5 J0 B5 L! C7 c& G"wpdisabld 数字" 关闭监视点( D* b7 A; }8 l
"wplist" 显示所有监视点
; s6 T5 x" A! g& ^" C
' u. I; J7 f/ T! k"bpclear" 清除所有断点
& N. K, C6 B( z. `"bpenabld 数字" 开启断点! @# k% n% J6 ?# t1 ^
"bpdisabld 数字" 关闭断点
! X9 [0 t4 S" i( b3 N8 _( F/ h% V"bplist" 显示所有断点
& U& G6 G- l% {; @

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3475 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽0 o4 S8 m4 C5 E, a' H

" W& Z0 O2 j0 \4 b2 T* v9 C2 F0 W以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2034 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2567 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
' T+ a* y* r% z! r2 d0 o. Q# {- _& o5 Q: Z2 ?
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
* i$ b" i; ~6 W. ~) t4 q6 v  ?9 a8 a6 `. @
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
! @0 O6 \7 b" t. u/ O+ C2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
3 x8 B0 \  y' p6 K; z9 }0 {7 v2 o0 `& D  `" c& B* r7 s# P
CheatEngine搜到的临时地址当然无法对应MAME的内存地址: j8 m3 X8 t5 ^5 M. X6 }

8 [8 O4 l6 ]! h" P& N7 O新版MAME没搜索引擎了么?
: w( ~' y  x7 r1 }晚上我看看
) n- X7 T6 d9 t3 ~3 _3 X
" z' m: [8 Y; A2 H4 w) X2 h9 K; U: @MAME查看地址的功能还是有的) v0 Z" p* }" _5 Q2 O; D% [
菜单里的第一个选项就是显示内存地址5 F4 }3 {: I; q, O! c
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2034 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:2 w* v2 m- R0 f) Z" ]
1.DEBUG版MAME有作弊码查找命令
5 C1 m, `: h& A
& @+ b. `8 B2 V3 d1 o命令如下:
$ O5 N5 r$ c& A8 E3 B) l  Qcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]4 x( X- h( c7 i) ]
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
/ Z9 p3 D8 y9 i  U) ~7 n<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
: K  a/ b, {; N: @! }- {5 m<swap>是决定字节是否交换
1 S) N9 F& o5 X* o  q<address>是地址,地址必须用十六进制表示,例:0x100248
: ~4 K- i, H7 I6 _4 K<length>是地址长度,长度必须用十六进制表示,例:0xfffff- v$ f9 [6 w( m0 A$ f' g. W9 ?
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
, C9 ^  f3 \! [  D/ t& \6 [9 K5 x; N, L. M5 H! m% E
请打help cheatinit命令获得更加详细说明1 p) t6 k! ?* q+ g0 Z+ _9 u

) @" g, e+ j1 q* A- N& gcheatnext <condition>[,<comparisonvalue>]8 }4 F' X7 F' Q" c
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
! a$ ^$ ]& S  \5 w6 U[eq]是等于
9 l) T; [3 Z" l, ^" z[ne]是不等于& _8 B) y5 m, M7 i, R
[de或-]是减少
; |' a0 Y" M/ S; F) ~" W* l5 D& h[in或+]是增加% d9 A% x' M& ]
[deeq]是减少或等于
$ @, e0 e" M/ f( y1 U) u[ineq]是增加或等于: A8 B5 M" ]2 }; X) W
[lt]是小于) L/ L' S- a. h6 H( d( }# z" B
[gt]是大于4 C- ]$ u7 J5 Q
[ch或~]是数据有变化' h2 Y$ B8 F7 z/ V

% w& y* z( Q* _& Q" _8 C<comparisonvalue>4 H) ]9 g6 Q2 V7 `/ A
要搜索的数值: M4 e4 G/ q: f3 S4 o+ T8 q

3 t/ V$ A, g# r/ Z" f& ^" O* M请打help cheatnext命令获得更加详细说明
- o. \. y9 v5 m) J. _
& E3 [9 k, N! g5 c1 ]( Wcheatnextf <condition>[,<comparisonvalue>]
1 ~, W2 z/ z! S. D1 ^说明同上1 y$ x0 t5 }! R) d% R* ?  [

  N' Y! L$ k% _: Y6 m( D请打help cheatnextf命令获得更加详细说明
6 `2 \, z7 t1 M1 z2 g. ^) I. v7 `) M9 }, K- F# D4 D# v5 M9 N3 D  J1 |
cheatlist [<filename>]
/ I* J/ ?2 F  S, g) N显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
$ S5 M+ N% `" I7 y  o. C% E" h3 W" R, }; ]5 ?3 U
请打help cheatlist命令获得更加详细说明
/ W' M$ H. X, D6 y
# F" c1 k& s" n# u# H7 @& y第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
5 v" ?- T8 Z) |- u( j+ V$ e0 Z: |! U2 w+ [9 Y0 u# J5 P
之后进行第一次数据搜索时要用cheatnextf命令来摸索3 s) W! X9 U) o  ^3 @& R, X& J. ~

! u3 f' ^6 k( u6 {5 k到第二次、第N次数据搜索时要用cheatnext命令来搜索
4 a1 m$ l; I9 Z' Q5 K3 v: t. o7 Z  o
举个例子吧:
$ \5 T( i6 j+ i! M
, Z7 U! C* l* J3 [) `. o* E( A6 M以合金弹头X为例:& J" l+ c" \0 ?% }* w  Z
1P生命数是2
$ s/ o* e8 L% s. V% X. U6 |9 H' b% S8 B' {1 k, s
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间# w/ L1 }- @; [" y# v0 n
/ x9 I0 F3 P% _' u- y, q% M& A. w
命令如下:
8 f  n# v9 O8 V+ @9 ~cheatinit ub,0x100000,0xfffff,08 i$ V+ x: g' C- X5 i: }. l& d; h
6 r4 _, {$ V3 i7 S, n1 W& p
再用cheatnextf eq,2命令搜索生命数2
8 }$ b: y5 `' \" |- d+ S+ D4 ?; |# N* Q9 A4 g- O& |
cheatlist显示搜索结果1 l6 \) y$ A2 b6 d6 l% [* K

' j, h" F3 ^$ z死一命后用cheatnext eq,1搜索生命数1
8 E+ k9 z1 J. j+ r1 u
- X/ U% d. O* m5 l/ }+ l7 G( c. hcheatlist显示搜索结果# p% f' m) N' @3 w, D
.......
0 ]: v( Z. O: O9 M* z* P直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
& M: ]) k! x* A: \0 S7 I% B; h8 V3 ]' G" _! u
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
  W" S4 K! \0 Q4 n5 q+ M  p9 R! G) w% [* F
没作弊码的话....
8 [0 w! ?3 Z, \! |# P0 ]8 W1 ]
4 {8 a6 F9 r3 {不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
$ I8 m  s* |& x. `6 @% i& `  H: |! R, r. X
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
4 z" e, {! S: T, B, _9 ?9 E6 r# b/ C. ~! p- T9 M+ p
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行8 k% _8 d. r9 t& N. t# U* J

) j) c2 I' a! ?) r4 w" o+ y" M要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

- N0 e) L; \, Q
' p# k6 v# h- N+ m回114:7 i$ J( S" f/ ]  x. B
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
6 X" t6 L, r( d; r2.没地址如何查询地址?看上面我给zsyf的回复

" T/ r( w$ v( J- W/ T% ?0 k
, f. E* Z% N# X/ J: `) r4 _$ j9 Y打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 3006 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-7 17:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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