EMU618社区

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

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

  [复制链接]

签到天数: 2179 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。+ L* d* s/ P) N2 }/ ^# i. O4 {

5 D; B  }% C& T8 f) d! \(1)如何加载ROM
/ c: E5 x' H! n/ n0 d4 _' n5 Q" d$ a, o% O5 p: e
先说说如何加载ROM吧
* X6 K$ U& ~' K3 R9 t! E, o' E' T" G* A: }  S
以MAME 0.148 DEBUG版为例:5 N- R  }3 e9 @- C- a

0 j$ q. j# P! i0 A+ `4 X( [1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 N& U; e% `; X/ a: [, P

( M2 V) m, N! k8 e注:MAME官网的MAME是命令行程式,没有GUI。
2 Q* W+ w9 p# Q& |4 b4 o
1 Y1 U/ i6 r# f; H3 {0 L; B2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
4 l2 j' ]9 i& [$ L% X$ t# J8 k- v/ e
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:' `6 a2 e9 d8 ^6 c% X
5 W7 H! a; S* q. A$ g
d:回车
( }4 d! U' s) [0 s  e# H+ n; K; K& _  C* A( P: o  u' t
cd mame0148b_debug回车
  q' @2 l$ i8 b7 f
; E: S2 ~: K4 P  U8 `8 V如图1:
1 D- q' Y0 p; Z' j, p4 s" H4 C9 O; x" r! L1 I/ T
( k6 ?$ t; C: i8 H& P
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
" Q: z1 o$ y1 ]2 ]
; m+ ^% n, y- e$ V/ r3 ?; l2 T3 S7 Q: W7 [8 R! f* J; K' J* L

8 O3 a% t* |! Z$ R5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
# W5 P6 C5 k. l+ P
* m8 P. Q* v7 h: L2 x- J1 w3 A4 Y6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
# ~8 x' Z9 b. R' j( I- U3 u' ?% J; }6 }
(2)如何呼出/隐藏调试窗口1 i1 r; D/ ?4 W9 P0 X

. s8 V  L. s4 a. e( d$ B4 Y9 f1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:1 o1 G* V$ T0 O' V' {2 R
% c2 R4 U( e4 k/ C' M* _
3 D/ F; ?9 C/ a0 Y* Z+ |- Z" T

$ p! |$ I3 u- t! Y- X3 x+ Y2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
$ ~' d1 z+ b5 M( I
0 N9 ^' o  b- c. U5 o- s
4 p% G3 Q! f3 Q- v, E+ Y7 {
" Z% H; G) [$ y4 ]0 W4 ?/ l! j) x0 W3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 o* y. `' h# U* @( C+ Y

# m' j2 G) o/ x( E1 F" |(3)如何下读/写内存监视点以及程式地址断点
, r5 _5 u1 M  p' T% @6 l* U/ _: ?7 m
2 P4 ]1 s* i9 w+ F3 T+ r7 A" A- l+ O先说说如何下读/写内存监视点吧
' ~0 H2 E" }* Q+ ?/ P+ T" \2 V) w0 }' I  K( h
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ v  X  a) P: Y. b0 w& ^! R4 v. y- ^4 ?. y+ p$ V4 K; o9 y
<address>是地址& W) U. [! S! A. i) F
. L6 M! P* G" ^( J) d8 a# x! F
<length>是数据长度,长度必须用十六进制表示9 K8 T( J+ U& h: E( G- b, ~

6 l/ u8 ]& k* Z8 K4 \! \! L<type>是监视点类型,r是读,w是写,rw是读写& V, x) x* V7 ~7 R
2 W% i5 b2 q* l- c
例子:
$ o8 J% s& `# G) C) ^
$ |: G( m, V# L4 y, V# Q( [例如对ff8569地址下写监视点,数据长度是1个字节8 l, z$ `3 v  p" I8 e3 q

1 U# a" i. `: Z+ g% b" m) C) U2 Cwp ff8569,1,w
8 X. I4 d3 M) n! \5 @2 k1 W# R6 q/ t
5 K: o8 S% C0 ]: v, y例如对ff2235地址下读监视点,数据长度是2个字节! z. U: i5 k; u+ J  [% N# B' ]
; O; F! b% b9 e8 ~
wp ff2235,2,r; ?. @. e; B' \7 q- N2 V
. ?" C; Z0 q8 B# j- C4 ]2 g$ u# j
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
, r$ ?$ f+ p8 o! q
& C& h+ e9 \' B  B( J5 dwp ff7533,1,w,wpdata == 0# j, s7 w' T5 Q) ]3 Q$ g
" W  N$ _  B+ @6 d
以龙王战士日版为例:+ I: \4 ^; g2 l+ I  Q/ }4 q0 P

3 H9 a, o. i! K% S& [7 V1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:, s$ Q3 B7 T6 K4 O9 b! a
; S9 h3 H  n9 ]' ~# M
2 l2 t, r+ M& ^

0 s& n2 K& S6 Z" ^! x/ x7 S8 g! k1 o. w& J5 U$ C
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# S' l- [9 {: Y

2 z6 s* N( v2 ]
& Z) ^+ h: W* t4 T; F' j
1 |2 J' H+ |5 w8 W接下来说说程式地址断点
7 R% C/ A. F% Z6 a3 v. }& {$ t4 ~" A" K
命令格式:bp <address>
# n7 m8 X& i3 }9 E6 }$ t5 \/ u; Y) Q3 ^3 F$ K
例如对000488汇编指令地址下断点
4 a4 E6 Q3 g4 r! V; f* r
2 H, d+ J2 W: Q9 S- V, L$ Kbp 000488
# k  J3 p( ~% A5 _& J- ]8 V) W1 v- u' H
当程式执行到000488地址时就自动中断
5 C. T: R+ {4 n: t. I! R# C
4 ^+ Z- K3 `3 v$ t; J& G' I2 B( y更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
0 g* X' U/ h% P9 U0 J! L: l& s
有错误请指正。
' ^" R: \) ~/ G6 L9 K0 B* X/ K0 [, G+ t3 P% [
补充一些命令:
" H: G9 J8 x! h, a9 n! N$ ?+ V) e7 D* v/ F$ J
"wpclear" 清除所有监视点
  d0 `' z, ]) u% }) k"wpenabld 数字" 开启监视点
  c( \  G, ^1 }( V& A"wpdisabld 数字" 关闭监视点; V7 c1 l. G6 N/ v: n1 n* T; s' b
"wplist" 显示所有监视点
) m4 f) D) Y: ?8 o
% }4 L6 M: i3 u8 H2 `; X9 g6 E"bpclear" 清除所有断点+ G9 W* j( _( n: j2 T
"bpenabld 数字" 开启断点
- R/ }4 _6 M+ `, V( U: c8 Q# J"bpdisabld 数字" 关闭断点* ^" K# T- j7 H! B  e" Q
"bplist" 显示所有断点
- t8 _! ~( F+ L' d

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3623 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽) |/ f2 q7 ^# b/ g& M2 h0 b8 g- T3 ~
- `; n% Y6 M5 Z7 M; U3 e
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2179 天

[LV.Master]伴坛终老

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 6 a7 a# @$ a8 w

0 z5 I$ H' z2 |9 j6 o" e( {太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。$ {; {% E& e! H' g" t+ \9 L
4 |6 ~/ A/ E2 L2 k
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
' o1 B( f2 i% Z8 f$ Q* r& @2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
" A& Q+ T: d7 d) ^( z" t4 j5 @) l  n- h  M9 U6 K
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
8 D* t" z# ^1 S3 [6 |8 B" ^+ G9 @5 C
* N, c7 E5 ?6 ]新版MAME没搜索引擎了么?
; `& x& w! |, [. C* w晚上我看看
) c8 ]* V) E  _$ J: F( N4 y
  q1 i, h$ _3 Y# d1 y% D" ~+ gMAME查看地址的功能还是有的3 D  j( r$ J" O3 r* b) h
菜单里的第一个选项就是显示内存地址, k7 d" a+ W$ [0 I) F! c
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2179 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
1 a' Y+ ^2 n# C; O) u
1.DEBUG版MAME有作弊码查找命令9 ~/ j: r! X4 i6 Z. u2 [
  u8 ^0 l1 o/ W3 t+ O$ ]' m
命令如下:
/ c; [& M* F; W3 @7 Lcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
. U# Q0 e# I2 L6 |<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型( F% m( |$ h/ o$ l) N
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
6 b+ g) b* t+ w# b+ |<swap>是决定字节是否交换
' _! u# _9 m( Y& w) s3 m' H<address>是地址,地址必须用十六进制表示,例:0x100248
, F' n$ p2 B5 B5 L* {<length>是地址长度,长度必须用十六进制表示,例:0xfffff2 T' w/ x% W; e( Y5 J5 i% O
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU* N1 M( `* p* a, y+ b

9 X/ g9 k! T3 E  J, Q  `- `请打help cheatinit命令获得更加详细说明
) \# V( i- f& ^$ S9 i' k5 B7 l' i4 k3 Y/ |# F
cheatnext <condition>[,<comparisonvalue>]
$ N! V2 b, a$ e; ~1 e<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
& J1 a1 x# ]$ I, T[eq]是等于! D( U# X" {# ?& n  {6 E
[ne]是不等于
7 S" y$ h( _$ N: N$ \, `[de或-]是减少
  ^" C7 Y2 x3 [2 J7 z* `, o[in或+]是增加
( j. q. c, i1 X' H[deeq]是减少或等于
. Y% P# p6 r! b- l0 y[ineq]是增加或等于# x, p* M( @1 M7 ]% h$ Z( ]
[lt]是小于
6 ^( a. q- g( I( t4 S[gt]是大于5 ~) b* d9 y7 o6 p/ |7 `2 i5 O- M
[ch或~]是数据有变化% _5 n2 @& f9 G0 {8 A* O

4 j: Z! v9 G6 Q<comparisonvalue>1 r6 H6 ]0 I- U6 c# ]3 `. ]
要搜索的数值
! b& x: q1 |5 d( Q9 a. _
& v0 ^$ A* G# I! p" V( i6 G请打help cheatnext命令获得更加详细说明  c- D: n" a. r+ J& e% B; E
3 D3 f4 P7 P7 f; r/ w
cheatnextf <condition>[,<comparisonvalue>]
5 s# f+ }. i2 B% u说明同上
1 R4 W! w& r1 ?4 v- A( a# w) A- N" Q
请打help cheatnextf命令获得更加详细说明
8 T4 W" W, Q# }! c* y8 [0 d
: W6 c# ?0 x- g% O" C* x) Qcheatlist [<filename>]
5 B. e) `& R2 G显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件  B( D5 G- X1 D1 J
0 T' @# O) J; y! K8 r
请打help cheatlist命令获得更加详细说明
1 e" @4 O$ e/ N+ K# o
! }( c4 C3 m$ c; W8 x3 i第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化3 Q! j# {2 y- T/ M0 t  m4 w( J
4 [) X5 H" j2 }$ Q
之后进行第一次数据搜索时要用cheatnextf命令来摸索
9 b5 K3 A; O  R/ F+ Y
. r( h* U6 d, g$ K8 X6 Z4 c8 W到第二次、第N次数据搜索时要用cheatnext命令来搜索- B% x1 u& ^3 t6 Q1 i& d% g

% I" D! p+ j$ c. V2 {( r举个例子吧:( n. D' ~+ N+ e$ W0 o

# e6 n! O9 I& S! g3 r: Q- E以合金弹头X为例:$ V2 I, g  ^: K6 L8 ]3 Q$ r# L
1P生命数是2
; X; C! W& l! B+ P: V  f" ?: I0 K0 P9 t" U' M
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
8 k+ g9 C+ ~9 `' A0 M" z$ V2 y. f: U  t. f  m+ b+ F
命令如下:
. q* J5 L; D1 ]: L3 Tcheatinit ub,0x100000,0xfffff,0: H! S* Z( x+ z5 q; |3 `0 P

$ _' y0 w+ U- ^2 c: F( g再用cheatnextf eq,2命令搜索生命数2% W( I3 E- l: N  U$ a6 S
. L0 j3 c% G9 C0 Z, r
cheatlist显示搜索结果
$ ^( C- P! Z& n6 k- l: x( ?( t# W9 Q/ _
死一命后用cheatnext eq,1搜索生命数1' |0 n1 l( O8 ?! a5 U2 @5 d
, s  O3 K" h2 G- e
cheatlist显示搜索结果) o/ p- b( d# A. _3 r
.......
- l" R( v+ @- z0 r直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果9 {  N" b# z$ v& s

4 K0 F9 Z" x6 x1 Q; q, y( J' L9 {' `还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。: f7 K) R/ [1 [3 H5 j

# h- G) }7 n: }# o没作弊码的话....
+ C& Y' M2 `3 E1 f3 P! v. U7 i4 ^7 \) o+ j
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
6 ^- `6 Z. w* G( e% \# N% |
$ a  V" x+ z( f* g! I2 z% V" F或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址), w6 z3 F( H  v1 q8 _6 Z' @: ]
, O5 X& j7 p* b  g
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
! c# x, u# J1 W# J1 {( T& Y: X& ^! u" b  d. \; x! @3 b
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
1 W, C3 x7 `: G1 m0 t
/ J9 L  T) u7 K4 }1 Z0 P2 }$ {
回114:& B) {% I% Y9 F) L! }- W) n
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)2 A! |7 C) z  F0 o; n/ e
2.没地址如何查询地址?看上面我给zsyf的回复
; X2 J  _( i* u9 s7 e# k1 ~( e6 c

3 b1 b1 N! {! C" q# M8 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. 幸运榜 / 衰神榜

签到天数: 3142 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-2 04:40 , Processed in 1.092773 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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