EMU618社区

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

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

  [复制链接]

签到天数: 2162 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
3 {4 Z" E! \! h- e* u9 Q# H4 m9 d. C% ], }
(1)如何加载ROM
! N2 F) V9 e( |& p( ~. [! K! {- V- V, ?7 h( r
先说说如何加载ROM吧# Z) v. v/ D) c  L4 Z/ ?0 f* W, i
' ~! @# Q  g8 R7 b, r6 m# d- [
以MAME 0.148 DEBUG版为例:% R& b* U5 I6 r! d

# _  Y0 d$ L8 v) \( Z" L) N) T1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 a3 w8 Q" C* M

2 N& @( H% g& U注:MAME官网的MAME是命令行程式,没有GUI。) g* ?/ ^: P5 D8 F

6 j7 u5 K. o1 j$ i/ e2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;6 ]1 I5 E8 h! S' k3 m/ g
9 \( T8 [+ ^. Q% s$ X
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
0 a6 o* f" h8 N7 K2 X. ^0 Q- f8 L6 r5 a* T- Z
d:回车' p8 l" L! l& m: ?) F9 ~
  n  @* w5 u% z7 X! `1 {( ^
cd mame0148b_debug回车1 m+ w6 v! |* L, P/ C

' s9 P6 {. H) C, y+ x如图1:; T( }0 I3 f5 S: o

8 f, M+ I0 R# V5 J0 @  K& A/ n$ G8 X/ s! D  f# ]" u. z
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:) w) N3 z' k* d0 p! t. h8 k" j
- K, A4 U5 X* {, m/ ~" g+ J

1 o6 @0 Z7 j4 ^7 d: p- T, }1 d$ U7 J7 b3 f) d; n. |
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;7 M$ \" |2 _! ]+ J" O* m

8 q1 t3 R( S! y6 l' X# p& n1 [6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。) L- E( s- ?" t! T: I5 p) V
3 B2 V0 c5 ?* `: c0 e
(2)如何呼出/隐藏调试窗口2 E0 w* b- y, ~7 k8 M0 N9 M
6 a7 W- \8 Z( M9 d- z
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:0 a9 @* K8 H, T9 y. R. S: _

- t4 I" K- y2 U8 i0 F8 o8 V
4 }( C: v+ O, m7 H
, v/ G5 @/ ^, B/ T1 i# b. G2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! R' ]4 I/ B' P) Y8 n0 F% j
9 w/ N. J0 V" O" ?# _0 q' ]& F: k) [7 ^, d2 M( S, O8 }
9 v% c! W$ W% K% W: h/ B, q2 [8 b
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。9 v2 P5 M; H- b7 ?# l. {
" a" Z  A) H5 c
(3)如何下读/写内存监视点以及程式地址断点
" X; n4 n- t8 F, g) ]' b3 [, Q& o$ ^9 l, Q9 d- I
先说说如何下读/写内存监视点吧
: ~( U3 r* F  x# v
8 X$ Q8 Y: I; z) V监视点命令格式:wp <address>,<length>,<type>,<condition>
* a, o; i% g: C5 s5 E& I1 ]! p4 S5 z+ O$ S$ T+ S! h/ H
<address>是地址
5 @9 w3 m# f# M/ ^1 i# }1 d; P$ y' F/ ^2 n! [1 D$ O
<length>是数据长度,长度必须用十六进制表示
& r% i, N& Q4 x: T6 @2 N, D) A- [2 ?" ^2 U
<type>是监视点类型,r是读,w是写,rw是读写
# ?& C, s2 N6 [/ u0 q# v6 u' ?' _; ~6 Z& @/ D$ i1 [
例子:) h- `7 _5 d% j( V- E7 l
7 i' s! b5 P) [8 F
例如对ff8569地址下写监视点,数据长度是1个字节9 J' _. h5 [, p. L! {
% l- Z3 x: n! v% v
wp ff8569,1,w! ]  G! V- K& S

+ I; B! v$ R* |! |- B例如对ff2235地址下读监视点,数据长度是2个字节
+ }! Q9 [( o8 d/ W5 E$ _" d
9 v/ {, G8 f8 p- m1 f( twp ff2235,2,r% n# X# e# E; G$ R7 ^/ Y
% e# n$ U4 w8 r4 k9 Q
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断9 D4 Z# {4 B4 z! u
7 h1 u1 u$ S) }" G: ^; O
wp ff7533,1,w,wpdata == 0# d/ z$ _9 w! R" v2 ~) p) t
" {2 t9 T& D: {
以龙王战士日版为例:; }; ?, d4 K) `
/ Z/ r; S& X0 n. \% r0 _
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
  T$ g) ^, U9 x7 e% D( P4 t6 J, M! Z# C7 m4 i
) h& r3 c% C. f+ ?

8 ^% @& T+ ]8 c2 C# S+ X5 }9 ]+ K. J
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
% Y  ?, J) I! Q+ ^  O1 ?5 u2 z. B" Z5 A
; @/ Z* @1 J6 P! H, v
4 k0 W1 ]. {' r. p9 N
接下来说说程式地址断点
$ ~- e7 Y6 d: K, K( b2 D6 r( v( C
4 b: j. U# M' b- t" Q/ p命令格式:bp <address>
! F7 c( J9 {8 z: J
# b7 ~/ R$ x+ n9 n/ x: l/ v% d例如对000488汇编指令地址下断点
) D# S5 X7 j- `8 B  j8 F; Y3 q- u6 T0 @3 v
bp 000488+ r9 J6 _5 b% @" d3 V
7 O0 a+ |# N9 M# A( {4 E' {
当程式执行到000488地址时就自动中断& [8 I! N5 Z& h2 G$ F) L7 B* z

9 t9 h- y) J) g0 O4 g0 q更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看3 j, g9 Y  R3 y3 e* a, h
$ f6 G, _' ^+ Z! [0 u- G/ U
有错误请指正。6 S3 {% d9 }9 B
5 [- n5 T& ~2 ]/ c( E
补充一些命令:& z* Q* L  [& L" T* q
. u, N) T' j+ c7 y/ R/ f
"wpclear" 清除所有监视点: v  p1 z* m; X
"wpenabld 数字" 开启监视点
/ w. r' k9 C' `"wpdisabld 数字" 关闭监视点! j6 O- ]. I/ B0 k
"wplist" 显示所有监视点
2 o7 L7 ~9 z# X- ?4 F. f1 x4 Q7 o
7 s  ~' h" `, i% c( ~: c( ^"bpclear" 清除所有断点8 ]4 f3 M1 l+ e  S/ k1 }* i4 x3 j
"bpenabld 数字" 开启断点
1 [' D5 E9 C( L) ^3 d: {"bpdisabld 数字" 关闭断点
- X# @% h( n3 j/ f- d"bplist" 显示所有断点
4 k# D0 U8 S$ z6 w! K( F) l7 c* z

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3607 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
8 r7 H* H; F. Y* f
: |, |4 [- K: R8 C$ ^. A' x4 r以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2162 天

[LV.Master]伴坛终老

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

签到天数: 2585 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 8 E$ e2 n1 X' r6 r; ~  o$ G

( O, e2 Z0 K& D1 v0 q* C太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。3 {/ G, ?6 q/ ?7 w

+ e9 i5 K. U9 i4 _8 D& Z; X3 u其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 * p! X& f3 E( L4 t1 C  T

2 u  w4 n& G0 l' WCheatEngine搜到的临时地址当然无法对应MAME的内存地址% ^6 e+ n* ~; X9 e& g. E
) L8 q2 b% s$ I) Y0 d! G( t5 [
新版MAME没搜索引擎了么?
7 m6 U) ]3 B0 `3 K/ F晚上我看看$ Z( r3 e- {7 [/ ~) D# P7 B, g+ ?: N! b
4 r# b, X; d+ U% j% A+ j
MAME查看地址的功能还是有的
/ ^, c2 W' Y) b& c菜单里的第一个选项就是显示内存地址$ K- e6 F  u' E3 P# X2 v
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2162 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
3 k( p6 F3 w3 x
1.DEBUG版MAME有作弊码查找命令
: ]9 c6 X0 X4 q
/ x* p5 A$ ~% b命令如下:
& t6 x$ D0 w9 [5 h( e6 L& acheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]], T8 ^1 }2 Y6 t7 g5 p- f& Y& `
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型1 ^) `% s& p& y& W+ S
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
: }# X! h* q4 n' k2 O<swap>是决定字节是否交换
; J6 o7 f$ y4 R* b& N3 a. ?<address>是地址,地址必须用十六进制表示,例:0x100248# V4 z, ^# u6 c
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
; ^, B! h% s, ]<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU# M/ w9 p# _, e9 T# |5 G/ M4 f
- G- ?7 g$ n: o) u# Q$ t
请打help cheatinit命令获得更加详细说明8 ?  F( D" G5 k7 h3 Q" e! L
, S! [0 Y3 q# X/ v8 m
cheatnext <condition>[,<comparisonvalue>]$ Q( [; T( x8 e6 H& l
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
# H: m) _" k  F: U[eq]是等于
, ~' I# d/ H# }* i[ne]是不等于( `/ X0 l8 M* G) h% U/ p
[de或-]是减少
. w0 f* K% d0 s9 P4 O[in或+]是增加
1 c, K& u3 u! }2 f" t' y% m[deeq]是减少或等于
* p* L1 G, @+ ~1 f4 t[ineq]是增加或等于0 A0 a9 X# y5 E; s5 x9 X0 X7 ^
[lt]是小于
- }! L. l1 M9 L) O; L( `5 T[gt]是大于
/ R3 B( B& c  P; }9 S  c[ch或~]是数据有变化4 I, Q+ W7 |2 v" w1 t) I' p. G
& _8 s9 B& o( ?0 y+ A' A) s
<comparisonvalue>5 F4 `- p8 t9 z( K( n0 L) O6 b2 l
要搜索的数值/ \( _; W4 t! J3 }$ Q8 S

$ j7 S; u' U' ^% A( f/ w请打help cheatnext命令获得更加详细说明& [$ q6 _8 N7 p9 M

( p! o4 i% o0 }/ Zcheatnextf <condition>[,<comparisonvalue>]
6 B) R# H1 |: V& p; S0 u$ v说明同上9 g! m! j5 z3 P/ r- P& x, _
8 u$ d& j4 i. G$ A7 w# _, V* s5 f0 T
请打help cheatnextf命令获得更加详细说明2 J, ?3 A( \6 i  z8 e

  l7 ]) X4 |% Q+ F. a* @. w; Jcheatlist [<filename>]
  d% h% \; G- ~" P显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
1 f+ |+ i) A9 z5 \& z: Z0 r; |. M9 t1 \5 W* z& F* l, `
请打help cheatlist命令获得更加详细说明' ]2 B1 q$ u$ p& |# E& @
5 j6 |! Y" ?" F, F2 E9 o  @$ }
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化7 ~# W1 L/ X& G9 S  s
0 G( c( P. T) ?4 w/ k
之后进行第一次数据搜索时要用cheatnextf命令来摸索
8 q! o+ `8 B& {+ d/ j% ~( E' E# |% `, j9 A
到第二次、第N次数据搜索时要用cheatnext命令来搜索
  W4 I, ]5 ~  V' S7 M# \; Y
7 r$ h, l$ y1 r6 h% f$ K: W举个例子吧:
3 z* B+ v" [7 ^: `! c
  Y" z4 u5 o& M1 X# [( z( ~/ }以合金弹头X为例:
- R- A& {( W& d1 k0 W1P生命数是2# M+ e' y3 ]9 U7 p
: i. `1 r+ C( S% K" w; L" r
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间. F, y: i. q; p+ j' [$ M# V2 r
! [( s4 P0 ~! C. K1 ]
命令如下:
$ ]! d* v8 t/ e4 zcheatinit ub,0x100000,0xfffff,0
3 l7 E8 M: C+ d$ ~' v
7 V4 D: `" F' \, I) i. n8 o再用cheatnextf eq,2命令搜索生命数21 j, X) k( L0 B4 Y/ W% P0 x1 }
7 K$ ~8 f7 M- x
cheatlist显示搜索结果4 J8 |/ x# Z+ |6 h4 U
& z! A. D6 c/ Z
死一命后用cheatnext eq,1搜索生命数1: Z* f3 x, A% `" R$ {+ n
0 f8 s, D* r; |, G
cheatlist显示搜索结果
5 z4 ?1 l6 L/ A- f2 j' ~/ i9 `5 w.......
! O) @, `' E0 U0 s. G2 z直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
1 P0 R2 G8 |3 _9 B" t, G4 D+ U4 `1 {, B0 _- _1 t
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。* d8 Q5 ^. |4 {4 y, L
" d( ^* \( y9 M$ j( o. Q
没作弊码的话....! x( l7 d- f) E
& r3 c* A& M0 {
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
: y. X  f" z  i1 Y
& B+ N/ v0 `' h% H9 p或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)% {' z8 ?  c) z. A" p" {
, c% A# a( ]7 ^/ l. I4 U# P
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
% T7 t9 L5 _  ^. Z# p
$ m: O6 i+ W1 Z# v4 O' w/ `$ }8 ~要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
! n/ z) G% o0 i% _! K

; e3 @0 Q% U! L; N( D回114:
2 K  d& }, B$ Y$ T0 V# `& A
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)2 X- z) F7 [6 z1 e8 e- c8 h% m
2.没地址如何查询地址?看上面我给zsyf的回复

6 s# S- ~( H! Z2 }3 W5 Z4 h3 y1 l; r% {4 q* d
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3126 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-17 01:37 , Processed in 1.119141 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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