设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1950 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
  O1 Z* q+ d5 Z/ B
$ C! h! a$ j9 f9 [(1)如何加载ROM
! P$ B2 N; A# x# G( w2 G* a* T7 i' l9 Q: b8 z# I8 a5 w2 [, K& j! O) ^
先说说如何加载ROM吧3 B' d7 n# k2 R+ C5 ~
6 l: q! {6 u% O5 P
以MAME 0.148 DEBUG版为例:
& m- i2 T7 S* D# H7 ?
, \* ?7 z/ V( P) |+ l1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
6 d2 `) G: G: E9 ]: l) r$ T9 m/ A  {9 K6 |3 g: l6 W" c
注:MAME官网的MAME是命令行程式,没有GUI。% k0 A( r& T5 t. c4 c: B+ n3 U5 G/ s
3 a& w0 {2 f- {$ C! g1 N3 L
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;. M, a, r2 [" j6 b1 M( c+ T

5 T8 b7 ^( F8 g2 `3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
$ ?( |: i; _: _0 P; w( u
" l8 ~7 }8 Z) }d:回车. c9 D( I( |- J0 e6 U; @# o. L( e9 \
5 E, g5 }$ O" g/ p
cd mame0148b_debug回车- R; T- i# Q! A; P! h3 h& H

7 |: Q9 R/ v. b如图1:. M( |; L! n3 R7 n2 m, \4 i

% ~0 n9 P, D% w, `8 t0 q$ D- Z
* A: Z- Y8 d5 Z% A; K4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
' P! U1 a6 w3 l2 u- a6 z: S% m% f! c4 K: m) y
; X( d; j4 C/ A2 Q$ R

  _4 l3 j+ h5 k- {+ ]5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 s% Y/ a" [/ ]9 P2 N
2 d) E9 H" V9 g& Q2 H
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。, A7 g( S2 ?$ U8 N
% h/ j" d9 `8 e3 k. J/ Y
(2)如何呼出/隐藏调试窗口
! ?5 D9 Q5 h9 |( k% S* c
: W9 m4 @2 b) V2 \' ]; I  d1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:/ G4 \  D; \! N3 ]2 h
3 Q, A) m0 B/ {
) A" X1 ~: X6 S7 [6 @
9 Z, F; X8 U$ ^/ }9 g2 ?
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! r% J# M7 s9 E& A  C3 e' L6 Y4 G) O2 V3 [

. R5 [: H! }3 i! T( J$ e  k
: ^+ G, p& W5 Y& U6 @3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。; C1 e# H, x# D8 G2 g/ n3 y

; p- \7 [  t  Y5 n4 R/ D/ o(3)如何下读/写内存监视点以及程式地址断点
& Q, N) o3 j5 |8 i! Y$ q7 S/ o) ?# [
先说说如何下读/写内存监视点吧
; T3 @" R4 x/ D3 ^
- |+ J- q5 L1 K监视点命令格式:wp <address>,<length>,<type>,<condition>
/ J8 I" ]" }/ }
. u/ a* K- j+ M8 P6 N1 k& V% ^<address>是地址2 ?5 H+ f! [) ^/ N+ e& E, I+ E

4 A0 ]" S1 k; u2 ?8 Y<length>是数据长度,长度必须用十六进制表示
8 k$ w. s) r# Z( i) Z0 e' }
2 L- S9 h0 D' l, X+ c<type>是监视点类型,r是读,w是写,rw是读写0 |4 o! a5 X; P8 A
; H$ p" t4 j! B3 R
例子:4 Y" f- n1 }# L- [. X$ e. O' n
+ K: s2 i  H) \& V4 n: @
例如对ff8569地址下写监视点,数据长度是1个字节
( o7 _% N2 y1 x% R- \2 s9 v* c- ^) a  `9 e
wp ff8569,1,w
8 D* x5 T3 Z) q
! @3 f) v# k- d6 C5 A7 {) H例如对ff2235地址下读监视点,数据长度是2个字节
- N) L9 J) {! i2 f/ P8 J- C6 C
' v% U: G: o5 Rwp ff2235,2,r, @5 w, \# d4 S0 {
; s+ r0 X4 c2 X- A- }7 j
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断, v% {5 f! T6 h: Q0 ~7 [) o
5 a7 C  y) Q# S; z* d  O5 C1 ~
wp ff7533,1,w,wpdata == 0
* k) S; y6 ?9 i; G3 K4 Q
  t$ V( X, B6 |, a; L8 T以龙王战士日版为例:! X9 r+ s* \7 M% t) @
% a8 x: ^: N0 c  F) H% w1 W+ `( Y
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:; ]& Y: N( E; K* e; w
& o: i) ?. A4 p' k* c* M

4 w: _/ N7 v0 j/ O& T+ s1 b" {4 U1 A/ s0 `; l3 m( M$ y

, p: X' q+ j7 \. I; g2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:5 e' c0 h+ w9 Z5 L" `
+ v0 X' n# n; H9 L2 }3 ]

8 p/ @6 O& P9 N! e& ^' G# g3 p2 S% Y7 O2 s
接下来说说程式地址断点: y& [- A: S1 e0 O* ~

1 a. F8 f# u0 ~  a命令格式:bp <address>
) j7 N" A0 C' h% `2 Y7 ]( {5 \
1 a0 q6 Z6 Z" F- A" r9 D" a例如对000488汇编指令地址下断点
6 ?) j4 ?$ t$ _1 H4 G3 S9 d3 i* c) E: v  U7 o
bp 000488
, X$ o* N5 ^0 k4 g3 z4 R# w8 N5 v! u& K. l$ g8 N( V
当程式执行到000488地址时就自动中断
; [6 i! N. B+ f/ ~: }2 b) T  L+ K! Z; I8 I: N% L2 b" n
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 F* l2 d3 K$ o$ v3 m

5 N5 a% U: a4 u. p/ J有错误请指正。
# _2 Q# [3 M" m6 x' x; f# \
* V- k% `0 y: j% [0 y7 v补充一些命令:+ {9 j, m; }5 @0 U+ j. N

% X' O% W" a1 e. E6 f# r"wpclear" 清除所有监视点
/ Q& P2 Z5 f$ X, X) n" x, ?"wpenabld 数字" 开启监视点
6 l2 T  f; a! O( q# ]3 E"wpdisabld 数字" 关闭监视点7 G1 X/ C+ e5 ?% k8 `. T
"wplist" 显示所有监视点0 [0 }% V- `9 @, s, x. I# x/ W
4 s  _8 ]: _1 s% D# O  d
"bpclear" 清除所有断点9 L% }: Q) Y: t4 {
"bpenabld 数字" 开启断点) [: B' ?* _: ~! p6 o( W! l1 S
"bpdisabld 数字" 关闭断点. J/ s$ O8 r4 r
"bplist" 显示所有断点1 g1 N+ M. V- x: e, ?

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3390 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
7 G+ P" X. V! c! M7 f  q& G( Y9 k% }/ r5 C! M3 M9 _- p
以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1950 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2556 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
; F# M& \$ V& h2 J  p( u7 X+ n7 v: l+ `& Y/ e
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
" ^6 J5 s* N9 F! d2 G  t7 I( J* [- g8 o. r
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
+ B6 g5 P5 b( r4 a7 @3 G1 w7 n/ Z
* W7 x" {6 z9 x1 I4 j4 nCheatEngine搜到的临时地址当然无法对应MAME的内存地址( l& L2 L& R- j, l7 Z6 e7 u
% ?# v; }! {- t/ Q& B
新版MAME没搜索引擎了么?2 C! q* L& X7 f3 K6 U  L/ v' ]3 N
晚上我看看
( ?  y  T) |+ o& m
4 p+ _( y" t4 c- jMAME查看地址的功能还是有的
/ a2 b  p) [' ]菜单里的第一个选项就是显示内存地址; C) e+ ~6 ?! Y2 z
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1950 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
% i6 G* j/ h# v: H
1.DEBUG版MAME有作弊码查找命令( E: F' |, A& V: @0 D1 h- R
  Q; \' q2 G6 Q1 ^
命令如下:
4 `, W8 \: [  V, echeatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]7 Z1 v" p+ V6 }
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
* B0 I+ _1 h& Y) ?1 s<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)0 L: N% O2 X* y
<swap>是决定字节是否交换
  A: K" H5 Q& h( A& ]! i8 Q* q; ~8 w<address>是地址,地址必须用十六进制表示,例:0x100248) F" l# @1 [7 Z7 k+ Y7 k1 J( m) x
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
2 z# X) n  U) I/ E& m( J<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU% P, v' m) Q( l) N- G8 g0 b
$ s& u" N1 j! k# ^1 N
请打help cheatinit命令获得更加详细说明
* d# }& J. D, C  u  @2 i+ m9 q& v0 `" [
cheatnext <condition>[,<comparisonvalue>]1 R$ p7 |5 Z, [0 Q( o
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
8 K0 d& I3 O& Z$ j2 a[eq]是等于
! W  u) j  Q/ [[ne]是不等于/ S- ~+ O) C" j7 |$ t3 |
[de或-]是减少0 E$ e4 C' H) ?# x
[in或+]是增加- ~6 F3 @: ?  b7 E8 Z+ Y5 N
[deeq]是减少或等于
5 O8 q; m. o) r: G: z, k; q1 C[ineq]是增加或等于' O$ |/ e0 m8 P
[lt]是小于$ V: j' y0 M% c% t9 }( H! Z
[gt]是大于' B# o; u$ G: w9 A) s' H! s- \3 U" n5 F
[ch或~]是数据有变化6 Q7 s( z8 G  _

8 f0 P* \2 x. m0 E: {1 ]<comparisonvalue>
! I" @* B6 R; A( b  s% r要搜索的数值
; x  ~  `4 a, |* ~* B4 y- q* q' {, C6 r
) l: \$ s/ z4 e请打help cheatnext命令获得更加详细说明
) S2 `4 ~! Z! y% s0 V3 ?+ a& c) [/ y9 y- D- M
cheatnextf <condition>[,<comparisonvalue>]
# X( ~! ?: b0 s6 h5 i% w3 y说明同上
  N- Y. z& @, s6 S8 e
. L2 `: h! y! H8 B3 {) v! V/ }2 G9 J请打help cheatnextf命令获得更加详细说明
. [' o2 B7 Z* }/ o" E
" a, r, E* Q& L6 p3 @' Zcheatlist [<filename>]
# E9 E+ H% N7 n显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件( w) q9 e4 s2 m0 [- i4 W9 H( N

! G3 ?3 g; B( J& Q6 \- t* N请打help cheatlist命令获得更加详细说明
4 s9 L* r% H9 p0 J9 T. z
9 d  Q( W% |. w* s: x% S3 N第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化9 N. e' q  _. p; X" n0 Y$ M0 L
" ^! U! r( a2 p
之后进行第一次数据搜索时要用cheatnextf命令来摸索, i5 ?$ C) i1 H* ]  ?: i4 x. N

1 ]0 S' A* i5 Z1 \# Q2 k: p( \; o到第二次、第N次数据搜索时要用cheatnext命令来搜索- B0 y. P2 b6 x: X
# A% d4 o% u3 O, P
举个例子吧:8 k( g2 {1 O, u9 g
4 a5 d1 S) k& g& g! {7 B
以合金弹头X为例:
9 O, H" [+ i4 Q- a! D1P生命数是2- j: G! c% Z& N$ [/ f. Q9 Q' C3 D7 B
" X. t. j5 U2 C& H4 v/ F  s
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
5 t7 u6 ^5 I; Y, D" g) ^7 h  [# ~& C# ~3 E  u. G) v& N" e& a
命令如下:
( _) P5 c$ L  w. g4 c( rcheatinit ub,0x100000,0xfffff,0
+ v3 x) v3 A) \# e: a: \  _6 l. L- y! Y% r6 D
再用cheatnextf eq,2命令搜索生命数2
8 f3 i/ |. e3 D1 C8 T& ~& G; _( H9 ~. c( U& H
cheatlist显示搜索结果
, m" h  v! s+ }( ^' i% ~( I& Y; Z/ N/ n0 Y. Q3 l
死一命后用cheatnext eq,1搜索生命数1
; f, h& b7 B# R2 k! n4 i5 O. w
- Y- t5 O; ^# ?2 L2 ycheatlist显示搜索结果
* F6 K5 B2 N. l& N1 s.......
) i! h( x' b" E8 B直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果# q3 d3 a  B( P# A+ n  T  Z

$ E+ f+ K. j$ \: S! R还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。, Z2 s* I, B) {- a* B: O9 s
7 ^9 w2 J+ ]4 U5 w
没作弊码的话....
1 a/ l& i/ d! v  ^9 s
& }" \7 z$ c' z9 A, ]) w不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)3 n6 |( s8 ^6 ~# E5 C, G# A

" U+ C9 q! l5 @) T. e或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
( q: h, K: \) |( s5 c: H# o8 W+ d0 U( ~6 l3 b: V
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行# A6 r, c9 ~% Q& t. O

8 h! Q+ n0 M* @  f- ^要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
- P' G! L* U: I) H

8 x; z: Q/ W- P/ g- X回114:; E( G" c3 R9 H! k, x# y/ v% ^
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)6 d7 y% Z, `7 a9 j% h$ ~
2.没地址如何查询地址?看上面我给zsyf的回复

* f- b" @% J0 s: O6 h" i7 o" T; J1 z; L- }5 x5 u* L; {& `
打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2924 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-14 23:12

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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