EMU618社区

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

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

  [复制链接]

签到天数: 2105 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。7 m+ }: F) T; ]) X8 Z4 e+ k

. T. X" F* n' m! S9 R(1)如何加载ROM9 Q3 }* L/ k- R* \* A
/ ~, j7 h! W9 r. h; k' z# [! V
先说说如何加载ROM吧7 `& j) E# s" Z7 f% d

+ i" h  e+ X0 Y- X- A$ f( s2 ?以MAME 0.148 DEBUG版为例:' T9 x9 t7 L% P5 J

/ I* O: k5 l5 q  P9 y1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
* f% D/ I# M" J: q
1 P# H, w0 l! d$ ^+ B2 D, A5 [  l注:MAME官网的MAME是命令行程式,没有GUI。
; S: M, e, |3 M& |$ ^' N5 j6 d  R) M+ T& I$ d" h4 B
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
1 u3 p* A3 G: `, t/ s8 W; w" k1 d( @1 c. y
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:# @& N# A2 d  [5 J$ g% B( R9 }
! \: n' J, x, }/ v
d:回车& z. d2 J$ W' a! N/ i  ]: p; [! T6 ?
3 b3 O  q$ }+ I7 e5 K9 T) U
cd mame0148b_debug回车
) l! r" o( h* `8 D: {0 e' I6 I& F
6 K( b9 X9 @' K) L( C+ i, S1 a( T如图1:- Z3 B5 M; O1 [0 d  R+ z
1 q3 k* v2 P; j4 R. E8 A

  ]1 V9 ~0 F9 I4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:4 r5 J" j! R& @% O" R2 Y; r
+ o9 e# j, X2 G# d. N/ k5 y' e, H
6 ^! s6 G' i1 e: a
% _( e  a& \, P# h0 I
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
/ p) o8 _5 [. w
5 d3 ]. Z. I" }2 k6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。+ E9 v9 S2 A4 q9 @: q6 o& t) K
! p% U! p/ J4 A
(2)如何呼出/隐藏调试窗口# D6 @% T+ t7 q! E+ R

1 f1 L' m! ~9 r/ w# t" ]8 z1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
' p/ X5 C$ Y  R
" d7 r4 x9 w2 Q$ H1 N& f7 q: G% V; \, {& H! s1 T8 a" Z7 `0 \& W

( e; {/ f/ }* [. {) }6 l2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- a* l2 G0 {* l+ B  R) B' O' I6 }6 R, r! z: g
% y( [$ S5 ~9 W* Q

* i" _! I; w4 o. e3 y# X; Z3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。, W  E. I) l! v4 S' W7 t! I
+ I# t6 l$ g0 U1 r( A! I
(3)如何下读/写内存监视点以及程式地址断点5 A' c7 r9 Q, r" K4 U! g7 J# ]6 y

* |( D! k. q6 c  Z; y( P先说说如何下读/写内存监视点吧% _! E- V' c  U6 ?, l& Y: h1 Y
; A; l# |! {1 {' ^. ?9 S+ \, ^3 }, V
监视点命令格式:wp <address>,<length>,<type>,<condition>  Z& f5 x" A4 N
% i! X# }) j7 G3 m# L4 O
<address>是地址
! k9 n( a4 k5 s& z* s0 ~' `9 d) |; l: [" h4 P4 U5 h
<length>是数据长度,长度必须用十六进制表示* ?# J. W; P4 q3 W4 T( o
; \8 H7 g7 }% }8 ^
<type>是监视点类型,r是读,w是写,rw是读写( f4 q& Y5 }" ^
2 s) C) H; a0 a0 x
例子:
4 k. S0 C* |5 E
% Z0 ?+ c7 i3 I( P5 [例如对ff8569地址下写监视点,数据长度是1个字节
7 v1 w0 I% [3 _
3 s/ b6 W; l$ P9 k$ Gwp ff8569,1,w
& [8 b! l6 @5 P% X6 V! V: F3 @$ N
! `3 s6 r. ^3 e/ k+ N7 |8 q例如对ff2235地址下读监视点,数据长度是2个字节8 V% A/ z' f8 \: w& h4 C0 s) B9 @

/ B3 _1 P  s2 D6 Q5 j3 [1 e/ Rwp ff2235,2,r
5 E2 H. B- c# s# t" ~+ T: }6 r7 X0 ~2 e; k! i" j+ m
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断# I& R2 ]& \& {- N1 n" N' k
4 T! H* |" n6 h  A# }" P: t
wp ff7533,1,w,wpdata == 0$ b. m  H) V. F1 P# q* Q+ P

0 Z8 P, Y# l# j* l以龙王战士日版为例:
( ^, o0 I& h- I  e) l9 L7 T, W% @6 m. u5 G7 L
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:0 [. H0 t! {2 r( Q0 j
8 H. U  g# G8 W" o4 A/ u( I3 ~5 x5 J. a
0 M$ i4 @4 B1 p! @) }
2 T* Z& ^' |) o/ ^& \
. f0 j8 {( z. t4 t4 c! n) x* |+ k
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:0 T  s* J5 {. m! W) k
, h4 M7 L, G# U5 I. f* _% r: Q
9 }" a0 J2 {0 F" r" [: j5 C* F
4 U9 s4 O6 N& q! e9 p3 q$ r
接下来说说程式地址断点* R+ E+ q. k& \: e+ |* Y

" c* y! u. {% p3 w命令格式:bp <address>& P# |. k8 u8 ]7 l
/ R  R9 j" z3 l0 j& b: D. r" m
例如对000488汇编指令地址下断点
" X/ j7 Y, B+ ?8 z* t! q. }7 c; h% x1 `3 R- {# u
bp 000488( Z6 [2 B9 l& D6 c( L, \) v/ k. b
" A5 ^) C0 a- A
当程式执行到000488地址时就自动中断
! J; `7 w. K4 S1 ?, e1 N. f) U! b/ {- c/ o7 I$ b* ?* y7 S
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
3 d; ~& V5 ?5 Y) |
: `2 }) q9 u; e* K: A; L0 f有错误请指正。6 Z# w" b; D/ B- G5 e

6 B, s/ p/ X" x5 A9 M补充一些命令:1 D* x( I& ~3 p8 i, c

  p6 i% I" E& V! }7 P, ]4 @"wpclear" 清除所有监视点
) n9 \2 {% ~, c+ h; q# t4 a"wpenabld 数字" 开启监视点4 h" H2 s8 T6 N/ o- q( r
"wpdisabld 数字" 关闭监视点  k+ E! C; A' W# w0 k
"wplist" 显示所有监视点
1 r7 m1 a1 K. \7 j
; w& I$ ^0 w7 T% R% k; A"bpclear" 清除所有断点
) W: H6 f; m0 H$ T"bpenabld 数字" 开启断点! _: p5 T# A4 g6 Q  l
"bpdisabld 数字" 关闭断点
. e. w7 w# C- x$ p! F) d"bplist" 显示所有断点% {- R$ \3 Q* b5 m; H- `' o

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3549 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽/ X  w  K( p9 k! a; z" D
5 ]' }: l" Q9 R+ V& J9 r
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2105 天

[LV.Master]伴坛终老

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

签到天数: 2577 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
; W: @5 H: Y* I$ ]4 F  a6 e! V: _: u- ^; I# T1 i
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
1 u* v3 z8 x; o  o6 v2 Z6 M  r- u7 {% f8 Q- i7 M
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
& d5 d" d/ @+ m3 W$ i. S! y2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
1 h0 h! B& O8 O/ v$ F# i& n- l: q4 m3 w/ \7 A: _& c
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
& H3 R2 b# P0 l3 E  b0 ^6 N7 T0 y. y; s; g
新版MAME没搜索引擎了么?' K, X( M0 e; T/ H6 l( w4 y
晚上我看看
& @9 ~  H4 ~0 c4 M
. j- V' D1 N" ~& i& x7 f- u4 wMAME查看地址的功能还是有的9 K3 Z- ^2 X" `$ P* \
菜单里的第一个选项就是显示内存地址
4 C& ?  _+ M( x( C4 e5 S- n4 [' E$ y2 |不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2105 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:* ~- h: `& _- K& `) ^; s+ _
1.DEBUG版MAME有作弊码查找命令
  R( Q' E! q; T3 {
5 d# e: }$ k! R$ t' [! M命令如下:
- Q+ a6 _: O1 t( @# k  i1 a) zcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
" |' J- I. G" X: b3 J<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型8 g  C0 a" O: V, w  u# y/ i9 n
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)/ e  f4 d$ a8 T6 p5 a$ P% ]
<swap>是决定字节是否交换
, a9 P' m8 {' a: Z- o! i- \<address>是地址,地址必须用十六进制表示,例:0x1002481 }, q; b0 Z7 q  {$ |! u- E
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
6 h' [/ I4 S& d<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
3 D, [, a' V3 b/ Q) \
% d8 s& @2 s& \请打help cheatinit命令获得更加详细说明* X3 j; c. J# A- x& A, n
$ |6 F9 R& U& u( [
cheatnext <condition>[,<comparisonvalue>]
2 z* S: I+ Y! G" _$ n5 l<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
# L/ W1 r7 e5 [4 `[eq]是等于4 J: Z0 s2 Q/ `$ S
[ne]是不等于/ Q  B3 r' ^( A( x- y3 v# I
[de或-]是减少
' K0 g% H& \. d- T% f. \) ^[in或+]是增加
6 B2 c, R- K7 `- W5 n5 m& D[deeq]是减少或等于
" J6 ^  h2 K$ K: M8 f[ineq]是增加或等于
  s/ T2 C  U: x2 d- B[lt]是小于
" h7 S; G: ?: Z% O! @1 g[gt]是大于
  B- Z6 \& K5 k8 v- L; m[ch或~]是数据有变化
, M2 X: |) z1 p8 R- U7 W5 S
& M% {3 U, u- q: t5 P+ z. Z<comparisonvalue>  x5 m6 B. r9 b# E' X- \
要搜索的数值  f$ j3 W7 ]. i: ]* m

4 r4 O; l/ U) V! F3 q请打help cheatnext命令获得更加详细说明# F% H3 O! g) x( ^

. O; _! a# y2 k6 F" C7 ]cheatnextf <condition>[,<comparisonvalue>]1 @9 F- y1 J' J1 Z* ?+ [
说明同上3 Q( j3 I2 V& z4 _

" o. R+ J7 n: Z8 }2 v请打help cheatnextf命令获得更加详细说明
9 Y: I3 i( y" t
! r- K& Z* J# \2 ccheatlist [<filename>]
2 I6 @+ K& ^0 M显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件) Z/ N& ?) w* |1 l1 \8 \
: `/ ?3 e- f! B5 ]! T
请打help cheatlist命令获得更加详细说明) u8 K6 ^9 b1 k" f
. [9 n3 a& b# H, k4 d9 w8 c
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化. U6 h9 [9 G" ^) c2 e/ h! t8 `
# P: t+ d2 ?0 j/ @) @9 O. [* Y
之后进行第一次数据搜索时要用cheatnextf命令来摸索, |1 `1 M) b0 M- A+ L: H
! Z; x2 M6 Z6 s+ ]$ p5 `; U* R1 @
到第二次、第N次数据搜索时要用cheatnext命令来搜索
" ~$ a% Z) v; O* ?; C; p1 B& x5 C+ ?  c) K
举个例子吧:4 z3 g# t# o  O* z6 R$ p# K
$ f$ a4 u3 y# a( i0 q) P
以合金弹头X为例:. u4 G: ]5 V$ U6 D5 d
1P生命数是21 g( w3 K2 y2 `) g* f# C+ E
* ~8 ^) e6 R  X. P
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间; d- l; ^/ Q" M6 c/ L( \6 M
' z( a' ]& v4 [+ m5 g4 S! X. M
命令如下:
+ `& ?% f. T# ~' m4 {! i+ ~' Icheatinit ub,0x100000,0xfffff,0
, K1 u( G/ r! O% k1 }2 ~
7 j" o0 |  T4 D8 N再用cheatnextf eq,2命令搜索生命数2
0 N9 W. B/ |$ h/ G1 ~( c( B6 Q
9 P& [! E  B1 _cheatlist显示搜索结果' }: {4 G7 S/ l' G" x
. q4 o- v  @1 Z5 T6 z4 d
死一命后用cheatnext eq,1搜索生命数1) @- j! C0 E* c: H- h( V. ?. n

0 \+ R" p% t9 ^6 Hcheatlist显示搜索结果
9 K$ f; _7 h/ ?" E. a6 d  n.......( p, a% V* Q$ ]( E# ~
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
# [" J$ [$ \( }! U
3 a# W& C1 c+ k0 y还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。( _6 h# A+ ^' `
9 O) k. ]0 D7 e6 Y* Y) B
没作弊码的话....
6 f4 {. i' ~9 o+ e7 [# T  V" Q2 T0 q3 g2 T3 b' x) B0 F
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能): `# x. o% d8 {$ H5 M" B

, B1 H, e! e0 ]; D$ K或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
% @0 x- n! c) j5 N" L5 U& m6 y* \# {6 x" I* b) a% i* B1 [
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行$ c$ I+ s: f4 o- C  y, V

0 b; X  [1 ?: q5 s" R! ~, K/ {要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
/ J) O3 X) ^, q

5 D. e! z& e: G& p回114:2 q. x+ w7 J- O6 ]
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)9 T" R4 p4 e3 \
2.没地址如何查询地址?看上面我给zsyf的回复

- a' v- R  o  J% S% ~# G2 C4 M* {9 F& L+ I  k4 t5 p
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3072 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-10-19 17:38 , Processed in 1.104492 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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