EMU618社区

 找回密码
 立即注册
帖子
查看: 3370|回复: 17

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

  [复制链接]

签到天数: 1952 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。* H3 S* Z: Z2 [$ h7 }
. x. X, D6 B, q, N9 O
(1)如何加载ROM
+ h" f( E7 h) d9 W& s! d
) H: J. Z* h) [* g先说说如何加载ROM吧
9 a. |8 J( a# y) B
5 \  Y3 G9 }& b* a4 s: `以MAME 0.148 DEBUG版为例:+ i; g! f2 C0 I0 y& z, [  T$ r

1 F" J4 U/ n5 m  i/ i1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
( ]! S0 B8 j6 R$ B' R+ Y; B. C& x/ [$ ~# s7 N% f; X1 p
注:MAME官网的MAME是命令行程式,没有GUI。/ P7 a7 C, Y# J1 g
# }, f! z$ _2 @2 X
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;0 p8 ~1 R4 P% v4 ?* [; o

) C5 }- ~* c1 f& G* R3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:% o; L0 d) g! N7 Z' ~" `5 Z
) u" q/ [. g" j$ P& J
d:回车6 I, v+ i" Q' x" x) ]8 C& T/ V, c
7 l; J- U6 a2 {& V" F4 F. h
cd mame0148b_debug回车
( ~8 T# N2 N: J, _6 c0 O. m) {
& ?- Z. d% U3 q: o( i  [( Z4 q如图1:7 @6 D" x& X0 K2 u
- R0 i% j& o" u) f- I  h3 }- O# @- m0 C" Y# c

+ K  }0 d# U$ U* H: m6 O4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 x8 f( i- E* N3 B/ A" i( w+ D, Y9 W
; m) f+ F  |3 i/ R" u
- A! \- U+ V9 @/ O/ s7 a# O' @# K  v
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
1 i4 @$ T- A: X) L! Z2 l5 b3 k& {' u8 v1 H& S4 k. }
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
3 n% v$ x; X0 K+ |5 q# _- d) l) e# E  v3 r3 O; p' W
(2)如何呼出/隐藏调试窗口* b  P3 B7 L8 I0 w0 p9 {; L

9 Y1 s, }5 o0 r% R) v5 e1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:+ Z1 l6 _) U. x7 r# u4 u
3 N$ ~0 ^1 ~6 v, |& Y

2 B$ z4 n  H% _$ i
' X; j7 I- ]5 [; P7 ~" H9 L, g# J2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:0 m; D) r% N- j) m2 |: U

( s! m" e; K. o8 ~# b
% a7 ?# S! f8 R6 \6 n. C; V7 t  g! i' P0 t# w# [6 w5 x
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 P1 a4 B1 Y1 w6 y( r: |$ }4 }
; \; O: ~9 `: J0 @& A, G/ f3 H" v
(3)如何下读/写内存监视点以及程式地址断点  p1 \/ X% U& f. o. |8 n' v
& s$ U9 C( [+ s, a' h
先说说如何下读/写内存监视点吧
$ H' D9 b; C# X: i$ a9 p5 e- C' K  A) B  w) h9 p: x
监视点命令格式:wp <address>,<length>,<type>,<condition>
9 r+ e$ `; ~* K6 r3 I; l8 O0 y, \+ U7 E
<address>是地址& v' Q) Z$ D5 y$ u2 X* d' {+ b
  G" A3 _; `( o/ p3 L
<length>是数据长度,长度必须用十六进制表示+ F1 m) @2 }$ G( k" l

; b) A; i( o  r* C- s- r4 {# H<type>是监视点类型,r是读,w是写,rw是读写
2 c* p3 y  c& d9 N5 t  Q2 V+ d* |; E# b# F
例子:
' r. d4 Z; l2 c- J# O) K6 X% z! r9 N( h2 V2 u
例如对ff8569地址下写监视点,数据长度是1个字节2 y8 N/ i/ _9 p
: i' r8 y5 C: O
wp ff8569,1,w
8 S* {7 k, j- D- R( I! w! r& x% L# j/ o' G# ?% D3 K
例如对ff2235地址下读监视点,数据长度是2个字节$ m0 ]1 E  Q; a' l

& e/ f# |! h9 Y# k7 Zwp ff2235,2,r
6 |+ P- Z( Z9 m& s
9 B+ a! ^* D' b例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断0 Y, ^: U9 U- z. p7 z
- P% u: X0 i, d8 R4 ~
wp ff7533,1,w,wpdata == 04 v: i# ~0 y% z& b0 X% N0 l

) p, o. k8 ?4 f  t: O/ g! N( }; R以龙王战士日版为例:
, j: O! U3 J1 s6 ^! ?: {
6 o5 }* P# `; ~5 n6 C! x* ?1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
- f- G( W. U" z$ Q, \2 i, p
9 X2 g$ l0 k6 f+ ]. M# k6 Q# V' [  H  Z( z7 t4 s

' m6 u& x# I) G1 N/ b- D, z! w" H) y
2 n& ^. {1 y' O0 {1 d2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
+ o" y! A% ?' R! \3 n+ {9 N: Y$ D/ [7 ]% I
0 H% c1 g/ K) }& ^, g5 a( W

, z; q: R4 @" e- [8 o/ {) z1 x接下来说说程式地址断点
+ R+ W- h# S& e3 [9 r% m1 x/ ?- v( u/ N
命令格式:bp <address>
0 x8 T! t7 w- m5 L  w! L0 I+ v7 d& D& l8 E* S
例如对000488汇编指令地址下断点
2 I6 b1 c) J5 g0 y8 e
& t' h. Z. J  Nbp 000488
1 j: B3 ^: w( v0 ~( T; b  P1 j3 e- c1 _8 {8 t; |
当程式执行到000488地址时就自动中断$ s, _9 A9 U! b) M5 L+ u% g* g

/ D$ b8 U5 |! P, {* N, A更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
- i) W1 r! R/ @' c" E4 E0 f. L. u9 B$ T
有错误请指正。
3 }( h# f9 R( \8 _6 c" `
' l$ T3 B( q7 f; s补充一些命令:
! o9 Q5 w+ p& u7 u# l7 m7 X, X6 ^  ?# I+ m$ r, @1 \8 K
"wpclear" 清除所有监视点
( w7 o! [# `- ~6 J, b, w+ j% ?"wpenabld 数字" 开启监视点
9 P) @% P. C& G( i$ O"wpdisabld 数字" 关闭监视点# x$ y/ S5 t% p; Y  M8 y+ n7 D  S
"wplist" 显示所有监视点* o, A/ O4 S# v! J8 z: v
" @$ r/ \' Z4 }# G) o) k; E
"bpclear" 清除所有断点+ c! |; P& N0 U4 @" a! m* T: v
"bpenabld 数字" 开启断点, @! c* z7 M' L7 A3 h, x0 D
"bpdisabld 数字" 关闭断点7 _, j) ?. [) H  W- Y6 |
"bplist" 显示所有断点
' L% m% q  c2 X. A

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3395 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
" y3 t- E& h2 L; P  @# R! Y7 ^" w) W; ]
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1952 天

[LV.Master]伴坛终老

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

签到天数: 2556 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 8 ?3 k+ I9 h: V

8 e* `8 D% A9 o/ l# \* Y太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。7 Y/ ]! x1 s& ^' E/ A0 W% j( ~
2 M% \& A, U8 [2 j  r& z* j& ^# ?
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?, K. ~: ^$ L, M0 g4 q/ y, t+ I
2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
7 t9 M% c( o# p7 f5 k1 R! O  K$ p0 J: l! l0 M* e
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
; Y0 D2 \1 h5 ~: C" g7 Z$ ~: I1 R
2 h9 V5 C  v6 w% x新版MAME没搜索引擎了么?/ {! T" g% L' q1 @6 h: K+ \2 v
晚上我看看
" G+ H# p1 G0 Y6 ~8 {3 M8 k
" Q& Q2 x  b% P" k0 MMAME查看地址的功能还是有的: c7 y; I8 m& P; S
菜单里的第一个选项就是显示内存地址
( Y1 ^5 Q$ d0 N2 ^3 x不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1952 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:. x" p0 d/ b( D- |8 T1 J' y) {
1.DEBUG版MAME有作弊码查找命令3 b) N. N: ?( _4 y0 d( Y0 o
/ o0 z: N6 K5 t0 G" X2 ?" p1 I
命令如下:, r" o6 C% J( }
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]8 i# K3 I9 I- Y' E- Y
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型4 x. J$ a% J' B7 X5 @2 a, L
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
6 o; @# r% H" T<swap>是决定字节是否交换
' Z3 x$ D8 V  H<address>是地址,地址必须用十六进制表示,例:0x100248* G: v8 I& Q) l; x/ i0 B. V& X' k
<length>是地址长度,长度必须用十六进制表示,例:0xfffff  z# V+ z6 I+ `, T4 v
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
0 E1 Z# k/ u1 o5 ~: i1 S" A
5 m' j+ O9 z, j& e请打help cheatinit命令获得更加详细说明, l1 b9 h: [0 C; R6 p

2 L/ C% Q4 S# U& U5 Kcheatnext <condition>[,<comparisonvalue>]' E1 B  r9 h. r( o* K4 {* ?
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
9 v  J& c* E) i) _[eq]是等于
7 z# W; L! j: W+ B5 @$ m( z[ne]是不等于
/ a8 F9 ?3 j. ]- p[de或-]是减少
4 j3 M0 ^% O- Z2 V3 q, Y[in或+]是增加
: o6 i' v) ?$ x& `6 l) y) _[deeq]是减少或等于6 w1 Y- G8 W" U- @+ R
[ineq]是增加或等于
) p8 p$ W4 ?2 ]5 \; z9 {[lt]是小于
* x3 B) v( R+ P[gt]是大于
* S0 E) J. R; ]1 M[ch或~]是数据有变化
9 V5 t; w" p* |& A7 R4 u+ K. x1 m; B1 K; R% f
<comparisonvalue>' s1 \7 ~' Z* u$ a
要搜索的数值! I( ~2 r3 J7 R% z) @

1 S1 R2 E4 ^5 @2 {& K* N请打help cheatnext命令获得更加详细说明) Q6 I* n* C9 f3 H* ~

% ~  v" w1 A, M. T1 N" ?( Rcheatnextf <condition>[,<comparisonvalue>]4 @$ f2 |; L  |8 D3 G) W* a
说明同上9 L9 ~5 m  _( Q9 Q# z& b( U- Y) n
+ M7 m9 ]/ e, S4 y7 j# `1 ?
请打help cheatnextf命令获得更加详细说明( a' d  L) F9 t( Y

6 P2 m; i" N! Ycheatlist [<filename>], _( E, ?( {9 j0 B5 f9 W" z
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件4 Y. I* Q: b5 v. c

- p" L. Y& L0 b请打help cheatlist命令获得更加详细说明
( x. ^8 B; x7 q2 m/ }7 o, H  V
* a9 u/ o8 v6 T; [# _7 V  U第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化0 I, Z  h4 B: p3 m' \

+ r3 ]) m  w+ g之后进行第一次数据搜索时要用cheatnextf命令来摸索
3 O; c6 Z% ~) ]! F, f9 x5 t
# d5 l! S- z4 R) T( d+ I2 k到第二次、第N次数据搜索时要用cheatnext命令来搜索
6 \7 m  _, |# o7 y
3 k  @9 M' H$ h8 a7 J$ H举个例子吧:
9 v5 y4 F8 f0 r1 f' C
* y, O( P  d6 ?4 B以合金弹头X为例:8 {% W* X/ ^! ~  b0 h) @
1P生命数是2
4 R" J( O) m7 ~9 {# b' j  Q  @) W* }1 R5 _. N, I+ O
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间: X# ~7 L0 ^, n+ N; _
: g, W" |, A# |" Q, k, A
命令如下:
# r, V. G( u) ?1 ^7 rcheatinit ub,0x100000,0xfffff,0
) v% X# A  W  @3 Q. i# K9 E8 Y$ g0 T8 Z! u: j( q' M9 H- V1 y
再用cheatnextf eq,2命令搜索生命数2: p; N  j- B, K' g+ y
& q! B. ?; g* b/ B
cheatlist显示搜索结果9 h1 J8 y8 `/ T+ g! F, D7 W

7 A# {4 p3 @% C死一命后用cheatnext eq,1搜索生命数1" S/ s: V6 N& g- s/ P

# {. M4 J" a' |$ Hcheatlist显示搜索结果( f- v, a, r: _: P+ F
.......
6 n9 C# H9 w" q) o' L% P直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果) D# k5 T- i0 T6 u

5 G' }! x" y" y+ u6 |) f还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。' {5 C- B+ v/ G
9 |/ F: }- J$ \  q: b  j2 b% s
没作弊码的话....
! V. l" I  H7 `7 |1 t; b/ S3 u5 ]3 `) k7 T+ H4 E- a) e$ B
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
) X- ?3 Q! k4 f0 T/ u$ Z2 K  Y1 O" K8 c8 ?8 O# Y( w* o. |2 Q0 T
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)8 a. c% T$ u# l8 v1 K0 U- K6 f
0 @+ H! w) z) D% U
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
6 k$ Z0 a3 v: Z- k  n: {3 s+ B0 o7 T
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

/ N& D5 _8 K, u! }8 N
; e0 C7 m/ V$ }7 ^" R! u回114:
: O) V. C% |0 S- |% j; D
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)3 T6 p/ V  L% c8 E. L1 z* G
2.没地址如何查询地址?看上面我给zsyf的回复

: e: m8 ]4 b9 |) g( Z) @: @1 v5 S- U4 N2 v! u) O: K7 I
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2925 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-5-18 03:02 , Processed in 1.122071 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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