设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 2012 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。- m+ t8 D" A: P9 Y+ j+ H
, T' A+ `2 T2 F  n* J6 u
(1)如何加载ROM
: [$ Y% H) ^; G* t0 l8 `/ A4 u+ D' l4 E7 E  Z( T1 A' I7 J- {
先说说如何加载ROM吧
$ Q# v- d1 ?9 Z8 B! w  A+ g" J+ I9 d: V; W% t8 w) }: G
以MAME 0.148 DEBUG版为例:
$ R1 `& N6 u# J" Z5 W/ J/ N! A3 w0 x) V4 Z) m4 p
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
( X# `$ U" D7 U, E: T7 `$ W1 G9 l  t8 \! U) ~8 p
注:MAME官网的MAME是命令行程式,没有GUI。' ^2 M3 Q. ~9 w8 j1 @/ k

2 R; @7 }. Z3 N9 n7 T2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;: z" L0 L' E7 _

7 U) Y) y/ F* G' h  A3 J( s* S" M3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; N( W7 d* g/ _* K
9 e# b: r3 {, u! A4 Od:回车& `/ X: h% O, C4 o5 n

% h+ d0 @' o7 z' _  ncd mame0148b_debug回车7 z4 A' w4 m& p& L( I* H
  F2 U, f7 X) u1 }
如图1:1 ?' j7 t) v4 p$ X
) `6 }% Z+ ~2 C* W' }3 b0 z

8 z2 o# Z* ^+ j: q8 P- _4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( A( Y& M& S5 x! t! s7 p
( ]) ]6 x. O7 S4 Z* S0 p% ]+ w" s
+ ^: b4 _. D' _: p
9 _9 T: I) E& G: c9 s5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;4 s+ Q# r) p: X3 e& f' x
! {* d; i+ Q! h* p
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
' [# ~  q: L. u( a% V0 s8 @7 C8 i) W3 Y
$ P! F, C" a" v5 d8 b9 M(2)如何呼出/隐藏调试窗口, q4 C3 l  E* S' w, b3 H
) M' }. l5 ~& ?, P4 s5 ^- D# ?
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:8 F6 b% e; o$ N% k7 D, `
& S4 S# ]" A; @+ h
' h: V& k: Y8 \. W: C# z* k6 V! ?
$ m; j1 R2 ^" Y+ V$ b  D# d
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
5 a/ a4 a+ m* O& h
7 Q, O) E1 T; J5 i0 s
6 }  I- J$ T( r5 A. h
6 X  a; s3 F; f! `7 f3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。. `. v( Y% h( Q( W& v2 a

* D) O* @% [, o" m" G(3)如何下读/写内存监视点以及程式地址断点
$ d6 d1 m# m6 M5 Z6 h9 g7 H7 S3 t3 F: _5 o( M% F1 G! \! v% @
先说说如何下读/写内存监视点吧
: C0 _& r# M& U; i
  v" I+ G0 l0 a- I+ _0 M监视点命令格式:wp <address>,<length>,<type>,<condition>0 m/ n$ i) L7 r1 I% J3 u' M% K
$ {! a' y9 M9 m
<address>是地址
, e6 @$ k& W: v4 ]" O2 S5 L  f6 d
0 p/ G1 b) s: y2 k* x<length>是数据长度,长度必须用十六进制表示+ f; ^" V* p! S3 i3 r: W

/ }5 V: r2 \- [, g& a2 [/ r<type>是监视点类型,r是读,w是写,rw是读写3 s3 X+ t$ W& l7 w: F& t
8 T4 r' Y5 F- W( x5 U7 q! E2 B, T
例子:
0 q  L% N  F, Q' E3 W+ X+ U
4 j6 D: x( }% w& H例如对ff8569地址下写监视点,数据长度是1个字节
. z7 K0 X  m* f2 G1 @, j- U, Q5 a
* {2 p3 [9 V2 m1 {% M# ~wp ff8569,1,w$ {4 F4 R6 V2 i$ p3 P
' X+ W% K6 r  u
例如对ff2235地址下读监视点,数据长度是2个字节0 j3 I0 w2 o" o9 r6 S4 b5 a% K1 t) s

3 b" A0 ^+ G( f/ F  swp ff2235,2,r
$ |% r9 D; ]( p) T3 l2 H' G( f% x) h, {1 c; f
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断( z& c- K: Y$ s% W1 H& V6 v5 p

' N0 `% ^% p5 J' V$ L. Z1 m/ G, dwp ff7533,1,w,wpdata == 0
- K8 h4 N+ {2 I5 n+ G8 R1 P( L- U# n/ u5 J  V1 w& Y& E
以龙王战士日版为例:
2 h% V; |( {; G- f& h
. P; K. s8 I5 ~" i1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:6 g. j- O  C  _+ ]% X* z" C
& Z9 z/ C9 X$ H/ A$ x
9 y. h2 q  [: s8 c
0 ?8 v, Q' @5 N7 g" J1 z

( N+ I# B4 [: ]5 V" P2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
* w# W  M1 J) |
3 k) q5 G( ?! w8 ?' z) r# I  b8 W9 {! W0 g+ E' j4 B
+ E0 M6 v5 v7 G
接下来说说程式地址断点
, [) V5 t, P$ v( Q, m! {+ n1 t+ S) t" ?! c2 g
命令格式:bp <address>
/ Y# |! P) f1 v' x5 y
" ~* z( t4 Y" u  t% I4 W- S; G( K8 C+ A2 d例如对000488汇编指令地址下断点! u/ x' G, U$ V2 y7 c8 W2 f
& D/ c% I# G% Q, `: [* v8 n
bp 000488
% b' J! j& s1 }! l! `0 Z( y0 J% I5 S8 i/ q8 f, P7 k& j
当程式执行到000488地址时就自动中断0 d+ q$ u7 B) q* c  V- X- J% d$ d

9 A; d- @2 P; E3 Y: D$ E更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
( Q6 a8 \# L$ p  [- I- P* g9 D# E- ~7 F$ d* R4 G' j6 N8 c: n
有错误请指正。7 G' Z6 \/ ]' G3 ]- t4 Y
! n2 Q( L" p# u# e- |
补充一些命令:4 O+ l" d+ u# H! |4 [& z
# B- e1 l) ?( g; Q# h$ G
"wpclear" 清除所有监视点
% d- b) y3 `& C& A( |"wpenabld 数字" 开启监视点
, }3 `* }9 ~1 A; Y7 C"wpdisabld 数字" 关闭监视点
) E  }4 L( U4 u$ r$ h"wplist" 显示所有监视点* X  K4 n7 P0 N7 u6 S+ C

! u. f# z) W# n"bpclear" 清除所有断点& G1 M( ]( V" V: p  q5 X
"bpenabld 数字" 开启断点, ^& Q+ N7 u7 r3 ]
"bpdisabld 数字" 关闭断点! ^5 J0 F3 z  M6 a! K" w4 C; ^
"bplist" 显示所有断点8 Q0 w& s2 g: P2 b& _- N, n, o

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3452 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
  z8 d% ]7 k( k- A* E. J, T' S" S5 I" H& y3 Z9 `3 f. y
以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2012 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2564 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 . I. U/ F: \5 l3 \/ }+ [  T  X
3 t) u3 W9 r7 S! e
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
7 k5 |5 I6 u$ [5 x) f
9 R/ ~% e; g0 ]# `2 O其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 * G: B/ }$ W. M" c, }  a+ F

+ n/ z; n9 @+ t" s$ _/ r! sCheatEngine搜到的临时地址当然无法对应MAME的内存地址
* C5 f; S  {& l
: n1 L/ N4 ^: N( d& B# J新版MAME没搜索引擎了么?
6 M4 d5 a6 O) |" Y$ k+ B晚上我看看4 R  L/ B  L( K; O7 ?& K+ G3 f  d

& J: S% v3 J( Q2 {- ]MAME查看地址的功能还是有的
9 L( [. b/ K: {( Y' P1 W菜单里的第一个选项就是显示内存地址2 h- D0 p+ {7 n4 E  Q, d6 U
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2012 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
" O% I" n1 u+ G/ y  w9 A8 z
1.DEBUG版MAME有作弊码查找命令
  \3 s. y2 R: K& U7 X- @, T+ F! @9 L; r4 v7 q% \
命令如下:# }$ j2 q' y( S# ~* x
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
9 B& s. ^4 l: F) ?) r1 M. {<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型, T% ]: [5 X- J  G! \9 r
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节). E- H) u0 E9 e" U4 }  m6 K. K
<swap>是决定字节是否交换
% Y2 f8 P) H$ o0 X, p8 a/ V<address>是地址,地址必须用十六进制表示,例:0x100248* `) t$ q$ p# P! E
<length>是地址长度,长度必须用十六进制表示,例:0xfffff+ c& H: C' c. b9 y$ z
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
& z3 C( E, u, k1 c  M# ]. c9 N! b) P+ V  C
请打help cheatinit命令获得更加详细说明0 O, N: Z! K  U7 H, w
" u7 z# s( C" Z3 y% F9 N0 \! Q# V; j
cheatnext <condition>[,<comparisonvalue>]& C% f# h/ T3 J1 T: |
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]/ Y  A3 b$ E3 _* @
[eq]是等于5 C" m: [" O8 o. G( X2 L# M
[ne]是不等于9 x' c& c9 P& V/ r! n8 n! }" ^
[de或-]是减少  @! b" d6 J6 ~* ?8 e
[in或+]是增加- |& \3 R* T* s
[deeq]是减少或等于" e, i1 Q$ I0 M/ U5 m! \6 B
[ineq]是增加或等于2 G( i9 z- r- \9 T' X" i! {
[lt]是小于# j0 O8 y- O2 I
[gt]是大于
# T3 u! B- Z# l3 Z' k[ch或~]是数据有变化# g, y0 }8 k- H+ t9 j5 \
' I6 m( N% [" t1 f+ r
<comparisonvalue>" Z' B: Z  Y/ m. D' q$ _6 n
要搜索的数值
' z4 d$ ?4 d; h2 N4 m9 g9 ?
' f. s' v; Z* k5 O0 {8 U( K, J请打help cheatnext命令获得更加详细说明
5 z/ c6 M# r4 }3 M$ N* e' d2 f3 e! [! O* }; t. Z% M5 P
cheatnextf <condition>[,<comparisonvalue>]9 D; b$ ^& P1 W+ F
说明同上9 W* p6 X) H# h: N

  M5 v9 R% s* X. |& F9 E% d  t% O请打help cheatnextf命令获得更加详细说明' o& B0 p# A; ^$ t7 Y2 {, U5 j" N

" p5 O7 {! o4 A2 Q. Tcheatlist [<filename>]" L4 V1 o. m8 h8 Z% Z+ `& S% y
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
( W- o. k; x8 s- {; \# A) P7 ]5 y: l
7 X0 N5 p5 [2 O' k# d请打help cheatlist命令获得更加详细说明7 L6 N2 `3 z6 r. j
  s( f6 U* F, g# p
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化) k5 ?5 l, z' }( l( `( u

& J7 C5 N0 G% K! `) M之后进行第一次数据搜索时要用cheatnextf命令来摸索
! K3 `; g% z& M9 W1 w# a8 m1 B7 W) c; G# t; I! n
到第二次、第N次数据搜索时要用cheatnext命令来搜索
" e; m. F: O1 ?% R* p
4 }1 a( ]1 L0 D& k举个例子吧:0 `& a6 J  F1 F7 m! p( M3 P6 `3 e9 E

5 U1 m9 E/ {) Z' [* L+ s0 S% e  M以合金弹头X为例:
) g9 H8 f# z% B9 k3 h' M7 S1P生命数是26 {4 i4 r" `, P

. ]& ^. j5 y; C# U2 j4 Z4 ?* j+ Q! N先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
( A  S/ e' g. ~0 x
# _; q- C+ v7 L7 i# x+ o* ]命令如下:  R4 Q# p2 `; w# ^7 U- d, Y1 k4 L
cheatinit ub,0x100000,0xfffff,0$ O8 @) r+ c: `. z$ L" S

2 N7 @. y  y5 a$ q再用cheatnextf eq,2命令搜索生命数2
! m  a9 P- H1 L. Z' f
) `; g- [3 ?% p# icheatlist显示搜索结果
  ~- k) D$ O1 q( c$ e
! I* g3 f" Y& q死一命后用cheatnext eq,1搜索生命数1
9 t% U* ~( @/ ^: x  j# U  J" u
) @- T4 H* E( M, \! f9 V! Ycheatlist显示搜索结果5 U% I- u6 @( e2 F' q
.......4 ^# Q; v6 C2 @7 c8 g9 f
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
+ L8 p: }; j3 K2 f% o3 Z
+ }# N8 @& {# U. S( H- c; ]还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。. C2 n3 {* D$ T; ?& l
7 Q4 [& ]1 Y; Q( a
没作弊码的话....
: N$ Z, ^9 R' e, m" V0 `, g2 r0 j5 }2 @6 ?$ E: R
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)  i, m- @( B/ y% {) s

6 M3 L2 c( [: J( O7 n或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址); R  D, P' E2 t  D4 k4 n
' l- Y8 E9 r" }1 H7 i
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
& W- z2 ~% v& F" N, |$ B+ u0 j3 [$ e# @
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

. }# u4 Q' b6 A# R) x
. W9 z" y& _8 F- ?, U" u- @回114:4 v, W. T* v3 N; z
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
8 \* H! g6 Q2 R  N9 s2.没地址如何查询地址?看上面我给zsyf的回复
; W% _9 Z& n- F6 w6 U5 w2 ]

' T5 Y0 ]9 r2 q3 U' G打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2984 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-16 01:37

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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