EMU618社区

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

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

  [复制链接]

签到天数: 2169 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。% J& c: W( D4 A  k& V8 r1 j

+ w; O, w' ~2 T  Q7 j# q" y& E(1)如何加载ROM
0 A+ Q! F) I" t
8 \- C9 n" X7 P% X% ]9 S先说说如何加载ROM吧
0 |3 c* J: i: \4 {) T
9 P  v. a* O* t! k以MAME 0.148 DEBUG版为例:
5 c0 p4 {6 @( M4 W
& P& ^: u# K+ l% W" H1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
: x$ N# L2 O* X  j6 m$ |; c  Y# z2 a( n* U
注:MAME官网的MAME是命令行程式,没有GUI。
! U! m" M. o9 Z' v" Y# P7 R3 S( g1 p4 C4 y  Z, B
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;. w4 V5 l, X( ?' i  ^; A0 e

. ~; V. }& F. S0 V9 [- m* P+ }' M3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
( d  P$ j+ k* d- J/ ]& G0 l4 d+ g' l
d:回车( }8 I9 x% L5 ~/ \  O/ b

$ \* p7 m; E7 P6 ^& d! ccd mame0148b_debug回车
( L5 W5 X' d0 }: r6 \5 V. M! @: h7 A, c' R& l$ u6 u
如图1:
  b2 ?& E  r/ V4 z
- U; y, z! w" p* o3 ^3 e+ g$ z1 L$ ~1 c- P( N* G8 p3 o
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:" k* @: z$ p3 w( S

% R* P# }! y  F6 i$ ?7 y3 C2 U1 }. g- V! t2 {1 a2 ?! G4 @

( v2 E1 L8 ?6 |) \' E5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;7 j" @9 X: I% u: v9 x6 {
$ a5 R' Q! M% l& `0 K7 |
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! |4 D8 G; ^  J" v5 D3 d& X3 ^; J( f2 b+ S0 R/ T" U) ]1 R  V
(2)如何呼出/隐藏调试窗口/ M8 W$ f  M+ Y
: v/ _2 M  `, j8 t) _
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
% c2 U5 n7 c) C
( N! D0 `7 ?  P
; C6 }/ Q. U! p* Y4 K2 W/ y  z6 D
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:& G" p  Y( C9 K, d" t. y/ k8 }& q
& g. p, j: j: f/ p5 J
+ f( ~, A: k( ~& _
# B4 s6 j# I- H) b
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
8 F3 S6 |$ H; z/ {3 y  ?" z% V8 [. |& f% w% a
(3)如何下读/写内存监视点以及程式地址断点" v; W8 O; P+ m; {
1 I) Z& w! N4 W( Y1 m" l, n
先说说如何下读/写内存监视点吧
- H% I; I$ M$ R. z( I3 t; @1 F9 |( i7 C4 g) O
监视点命令格式:wp <address>,<length>,<type>,<condition>
+ s' _7 E! k" G& q9 E$ F0 {- Z0 Y5 x, v, L4 j; W7 U" B! j" p
<address>是地址
7 m: i8 g' a  Y  l' t, |4 n2 a8 n+ k. }9 R7 I, S
<length>是数据长度,长度必须用十六进制表示/ I) ?1 J5 Z7 J. D( @
: ?) T$ d" [& u
<type>是监视点类型,r是读,w是写,rw是读写
. Q8 O6 R, U: ~' @- n
& q% Q' k) ]/ h例子:) g! D/ e4 [4 C
  Q' n4 y  w, p
例如对ff8569地址下写监视点,数据长度是1个字节. `# _3 m+ ^7 {5 q; I

* W2 U/ B( j' S% [+ A1 m6 wwp ff8569,1,w2 E  q+ g; M9 M0 Y2 \/ ^
( X9 g0 B1 Z/ @  K) j
例如对ff2235地址下读监视点,数据长度是2个字节
9 C) a+ Q% g9 F, [5 L9 D  {7 m- r0 H. ^( J6 @
wp ff2235,2,r5 y- {1 w$ r% W& [) p

% [4 [. D: K! C# q! d. M例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
2 A4 a& {5 S$ b% |  }$ i6 V0 F, F& l- z/ o7 U, _/ H! _; Q8 {1 I* c
wp ff7533,1,w,wpdata == 0
  f: ~6 ^2 o1 n& C  T. \+ U/ u1 r' `2 e0 y: m
以龙王战士日版为例:. u: `- J# j% W/ w( p
* _4 L% x* Q$ p* I0 i) |
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:' H% D& t0 ]+ L5 Q4 m' d; e0 z

2 z4 l, I$ C% e! t3 G* x' p# z0 p5 ?  Q
! h2 d7 k$ k$ J* ^. u$ `! O
' }5 c" i9 l, D8 g: W
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:, v7 J9 q' x) U. a! u: \: c
: ?8 o& s- m9 A& e) d8 l& n1 X

( j* G: P- e. Z  M  A* T& M- k4 G# K/ h  F1 `0 L
接下来说说程式地址断点
/ o) }# N3 C% h$ P2 U
2 |4 V" i) h$ R( q: c命令格式:bp <address>
5 D8 d! m/ U& x" e7 B7 T, P$ M7 P7 n$ d7 A9 Z4 j9 x, ]) ?1 m
例如对000488汇编指令地址下断点# N, h3 f0 r  Z: C+ Y- @! j

: t0 D# l- I8 J7 w+ R! o/ d4 B' Lbp 000488/ _% v9 m$ g( ?- q9 c5 n5 f
" V( O0 r" X9 y! L
当程式执行到000488地址时就自动中断
( D1 m. X! y9 B
6 n) ^2 {- F: k: k. p) y更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
# e" R5 c$ `/ U5 ^& V; C, z0 {3 ?7 C( a% y; K) C
有错误请指正。
! p0 `6 Z8 W0 n. c% s  ?- e& H: A1 y9 W7 g* o- B" m2 K- Z, k
补充一些命令:) K1 E- X! e6 M% B

: |; u2 t/ y; b* E# f2 {"wpclear" 清除所有监视点& Z, z! p( w- E: E! b$ H
"wpenabld 数字" 开启监视点
; P7 N  S& l8 s$ a7 ~0 U"wpdisabld 数字" 关闭监视点
! l$ @4 q4 H  A: {! \; K- v9 ?) u"wplist" 显示所有监视点* e* r) z) y9 {8 ]3 p* b/ F
% u. P* Y- u) d* n8 m  Y
"bpclear" 清除所有断点
. _# q1 {! n" c# O0 j"bpenabld 数字" 开启断点$ e0 |# W( w$ i6 I- y& \; {# z
"bpdisabld 数字" 关闭断点3 [. @( C7 p/ A" z4 W
"bplist" 显示所有断点
: j1 _# T$ X, Z7 g4 D

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3613 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
0 V( r# _' V9 o2 Y5 N- N% Q+ m6 Y
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2169 天

[LV.Master]伴坛终老

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

签到天数: 2585 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 & Y5 V' p3 N# O
7 k8 o/ r; L) V% q
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。5 ]! }" S1 Y! [9 F0 c8 K2 B

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

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ' A+ l4 C, m; @; h

7 m  B: d$ Y1 k2 ?2 Q# y# n* FCheatEngine搜到的临时地址当然无法对应MAME的内存地址
5 j* _: _( e- _" M& F# X
2 ^3 K% Q! p& Z1 @: i新版MAME没搜索引擎了么?
: U) G2 S2 t' a" p晚上我看看' p$ I# A. e5 f; N( `& X! J

+ }1 F' l+ ~  Q2 C9 ^5 _6 \MAME查看地址的功能还是有的& K' l9 i) ?" _+ J' w4 P' x2 W
菜单里的第一个选项就是显示内存地址
1 a2 F+ K+ u/ W4 {  n不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2169 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:' o' T1 Y/ M- {: X
1.DEBUG版MAME有作弊码查找命令% w& G2 M& f( l- X* t* L

% H: e0 E1 M& T6 Q/ D/ @命令如下:
3 C- [5 q: T. ^5 g5 lcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
7 ^! b; N, y5 O9 C1 P0 X<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
. U8 Q+ }7 E; d<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
1 S- a& m1 Z# T& e3 [. n<swap>是决定字节是否交换. z$ r) P" r+ s  v
<address>是地址,地址必须用十六进制表示,例:0x100248$ H5 O9 q4 A6 k8 e7 U! }, s
<length>是地址长度,长度必须用十六进制表示,例:0xfffff0 [8 `9 H3 g* z. u. g% s: C! y
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU$ T" E/ p, k/ i  R+ `/ W

/ S) o1 v  U2 f# A请打help cheatinit命令获得更加详细说明! B' M- c  h" `; d# F+ D" Q+ Y# `
* s8 [7 b( N# P
cheatnext <condition>[,<comparisonvalue>]
$ {1 W+ F$ I! o$ M2 z3 P: c8 z<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
- t; n( {2 ?. F3 |$ Y! p[eq]是等于
; ]( }4 W( [& @0 u+ b. l[ne]是不等于+ o8 g0 ]% z" k  j& U3 b
[de或-]是减少2 |% ~& T+ h1 e0 g, H7 Z$ c8 V
[in或+]是增加5 ^" S* ?. ?+ X' K  i' r
[deeq]是减少或等于
0 X' x, f6 W  x[ineq]是增加或等于
" i  ^# ~% K6 n, g2 F[lt]是小于' ~0 e9 q% g  }' R0 m: T* r- B
[gt]是大于) W, g6 I2 `2 Q. |( {
[ch或~]是数据有变化" U2 Y! b& E! S+ g5 N7 e

3 I* [. G" g( H! x<comparisonvalue>- f) T$ u: c- l9 x, Q
要搜索的数值
* s9 A0 R' k7 i# p0 j& y' n
& f* u' i  O! W: y请打help cheatnext命令获得更加详细说明
9 J  j3 r5 V3 L! e7 l% v& A/ ~* u* t  S/ K* J8 r* n& c
cheatnextf <condition>[,<comparisonvalue>]
& H) F+ `5 H- v9 H5 r0 V7 u说明同上+ P+ O' q0 `" _: [% l+ g6 D

  z! Y  N3 j5 m1 K& _& m. x0 X请打help cheatnextf命令获得更加详细说明
# l6 B0 F: N2 @5 U) x! ?' o7 C
1 D- g3 p; x8 ~1 ?cheatlist [<filename>]
& Y, j5 ~1 f) z& M: `显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件0 U/ c# Q% q1 w& h( w' I) P# \1 h+ X
1 H4 |1 B* N" X; X* X& S! g0 A
请打help cheatlist命令获得更加详细说明
% d/ i/ \1 x& J3 d& S% w* d0 A' w" R$ p# Q/ f9 ^9 h
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
- u* h, q: V; p( G; ^8 b6 n7 c
4 ~$ K( I# ?1 n* w2 ~/ h之后进行第一次数据搜索时要用cheatnextf命令来摸索& W3 t4 H3 L: t2 e: r. W- H4 K* _

+ T+ R( Y; Y8 ]1 O6 B, `8 X% Q; j到第二次、第N次数据搜索时要用cheatnext命令来搜索
3 g$ [) o/ @, g# ?' x# J
- g% O2 E- V% }4 E& ^; }% a) o举个例子吧:! |1 Z7 w. L; D& ?; E" M- V1 _

. e% p, o* u# R5 r$ g; S以合金弹头X为例:
+ R0 Q1 q" s9 x1 Z) Q" a2 o4 a1P生命数是2
/ T7 |5 H, n! d8 ?) I5 @$ {) X7 x5 O" z, ^/ |8 ]0 Q- P$ I
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
* R5 @+ P; `" F2 f6 d/ R2 l( }4 D8 o( O( U
命令如下:( {  z! x0 Q# @' d* g5 k9 |( A  \1 }
cheatinit ub,0x100000,0xfffff,0
# l7 Q, ~6 {4 f/ D+ x- e( Q  n/ n7 u+ e1 H6 |
再用cheatnextf eq,2命令搜索生命数2- u' [5 B  O7 O: A

: Q0 D" ^* |6 p; @cheatlist显示搜索结果7 ]8 N/ O" y( b, J) k' H0 C

6 L6 _! E+ l- A. D& {& b3 }死一命后用cheatnext eq,1搜索生命数1
/ T% b; w3 i5 @2 V3 q% ^. d1 C
* _! F3 f& S! |0 P) _cheatlist显示搜索结果
- Y% G: l( I9 }.......
* Y1 s9 v+ I. M1 O8 t直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
* t& M: M* b0 a% s/ `, n" D2 _9 ?- ^2 R' x+ E2 C
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。9 ?: P# R) j4 s( r6 Z( ?1 e
" R5 Q* l$ I+ \0 S
没作弊码的话....
4 M- I5 Z6 j2 c- I* i! s4 I
+ E( T( W6 ?6 l$ {$ J不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)5 U' V4 J* _' g, V; M; W  l5 P1 _1 O3 B
& v; P/ i- x2 q9 P
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)8 s( `( P% ~7 O

" h2 W' t( A- I: d1 ^2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
; y* ?: x8 V$ ~# `" T3 f6 x( P" F( U! h; s) p( V
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

5 D! k! \: V$ q9 @
$ L9 j, v8 |. E, U: ?回114:
; G1 R# Q" {; u
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)! T# i3 ~. t- p1 c0 T% o
2.没地址如何查询地址?看上面我给zsyf的回复

* [0 J' h6 I6 X9 t& V; Q" _1 C
3 @% b$ \: ~% o1 M打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3132 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-23 07:14 , Processed in 1.112305 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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