EMU618社区

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

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

  [复制链接]

签到天数: 1769 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
" ~( q) u( H! i% g. d$ `6 H* B" ?3 B0 ~( p) \0 w! B
(1)如何加载ROM
) f; N) |0 L. c& i' k2 [2 U
3 \  x$ l4 W8 a) {" H先说说如何加载ROM吧5 O+ T+ r) k/ F4 j+ M9 s: K

, N  P. o* s5 `9 q, C以MAME 0.148 DEBUG版为例:
! [4 v2 e1 M8 G9 w
" M, A8 x1 d1 q2 n1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
% `! S( J$ c+ m2 F7 B! f6 T  C
" ]: x, p! \6 E! Q8 n注:MAME官网的MAME是命令行程式,没有GUI。9 e" [# B; s& I7 }3 S6 j( f6 F, e4 B

9 V# s+ A7 V( j$ i- M2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 v& Y- S6 r) H, e

! V$ O/ O9 o! [$ ^1 {, C- g6 @3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; L7 c( |0 h1 ]# Q9 j3 B  G5 f- K0 v7 c' x8 o# S* t4 `, S7 v" e; G
d:回车
2 q6 }$ E- _2 ?9 x; j( ]& w+ `& E# c: F& ?, y8 v0 `6 Q
cd mame0148b_debug回车
3 }. p0 \' Z9 @) g1 L' O6 |6 m* Q. M8 E# B" m, W5 W) A, a
如图1:# M- \; L* W. ?

6 S( ]3 Y1 c. w& u* ?5 ^/ w$ `. {( C) a6 n
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
3 g: B' |) a$ `4 }8 I" m7 U! W" I) h8 @

! x2 y/ ~; V6 D- O2 |; f7 y: o% k. _, y
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
9 y& W3 r( D" s7 X
: l5 x0 U  B2 b& l# q6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。5 S: {; F5 K. B) I
0 t9 r) q. ^; t/ U' v! r
(2)如何呼出/隐藏调试窗口
6 h* g6 s5 G, W6 G6 c3 z. E5 t
9 O( l9 \# O2 I8 e: _$ B" ]9 ~1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ ~/ p% M+ M5 \8 |8 f0 N9 Z
1 i4 n( n/ X' r& G* R! X. G

! ?0 W. W/ f3 B' r: `9 ^$ L& w) T+ I2 b( I+ a7 @8 Y; {
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
3 r# ^6 M' ~# a+ t, B# W9 q. W/ [' N* [# e$ a8 M' I( p
& ]! n( I$ Z% L
3 \4 C* E" f8 r& B; O/ f* Y# |
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
  K/ y2 T# X6 J* p) M
3 I! ~  p4 `) O# y(3)如何下读/写内存监视点以及程式地址断点/ \% Z7 S$ z4 e. w  Y

& f: f4 M- D# L9 s! b7 w先说说如何下读/写内存监视点吧
4 E7 [, M0 f$ K' ?: I% k" c. z2 n3 \  M- j8 J
监视点命令格式:wp <address>,<length>,<type>,<condition>* `6 E( c, R+ X+ o1 A$ b3 g$ B

" q+ F6 ?" P" i<address>是地址
8 j# q0 b' |  X5 \, g5 ^" p8 [' d3 G, ~  w( z
<length>是数据长度,长度必须用十六进制表示
# R% k) }6 {- t3 T, P: \: N! F' r) ?
<type>是监视点类型,r是读,w是写,rw是读写8 X, _) F5 x7 @" G$ W+ z/ e* `4 z
9 b5 j- x5 v9 ?7 y; s
例子:
" X) {" S( A2 A/ f7 x
9 j! H: v. u( E1 z6 O/ M4 M* N) @例如对ff8569地址下写监视点,数据长度是1个字节
  q  d* _  R/ T  K/ b( j6 r, u) c: N& n8 i
& I# N' x3 E6 e/ twp ff8569,1,w
4 ]# I# `; L+ O8 D+ M
7 u# d. D" Z2 g" \& o/ I8 o4 L例如对ff2235地址下读监视点,数据长度是2个字节
4 c2 J, O7 x; |
- Z% w/ Q  J0 M3 t  }- xwp ff2235,2,r
8 R- L/ r3 r# k3 v
7 k1 F* a5 M# \" f4 c* G例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断2 Z; ~9 z5 Q1 o

, R3 G, S( ]7 S" E" x0 M( l+ vwp ff7533,1,w,wpdata == 0( x; h: r( I5 S3 N: [1 E* F( D

$ M7 h, }( V# C1 i$ r8 H5 L以龙王战士日版为例:) q# y4 }% o, W8 |% v6 a
, N) A+ k! D6 Z0 i% l7 B
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:1 A3 P* i3 P$ O9 i

" l4 v" @- J8 G- V0 }+ ^7 T1 t- n9 l- h
5 C. d9 e5 n+ U- e8 X- S- ]# Q2 o; \

2 `  E3 f# ?3 f2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
' {0 J4 {5 r- U0 V5 s) ]7 g6 [) _, s4 Q( m' J
3 c; k& p$ H2 O2 \1 F( W( w

  [- ~& \$ g8 x, W8 y4 ?# v! |接下来说说程式地址断点
) r0 L5 Z. `7 h( Z. y4 Y  r) ~* Q5 X3 t9 T2 |. N+ x3 w5 q
命令格式:bp <address>3 F+ m9 P* V5 s2 W/ U  y+ ]) ?
( s, O6 m' P  z
例如对000488汇编指令地址下断点- W) p; e' v6 m3 q& L# p

& s/ e% s' y1 p3 ~$ k6 n& \% ybp 000488
  u: F* ]) N) i% a' N
) M6 J4 X& _6 J) |7 ?当程式执行到000488地址时就自动中断1 A& i% _- V; _# B: u

9 j. d4 f7 b0 S! P) @更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看# ]" E/ K, i0 l; Y

, d7 t) _* I. ~' A有错误请指正。' J+ m* |4 p* Z4 F6 P  c

5 q2 G  F% M) h* L2 W补充一些命令:
. O5 H7 b/ q, E8 F1 N
8 h( z( g1 x5 a9 ]% F- J/ b8 D"wpclear" 清除所有监视点7 u8 X9 E( f! |( J0 u9 r
"wpenabld 数字" 开启监视点
, \" g$ ~& l* m% A"wpdisabld 数字" 关闭监视点
  F8 h  c/ d7 |4 C' w. ^# Z"wplist" 显示所有监视点
" u0 S8 f% B, y* L) T9 U
6 @' Q( l- B9 ^: h"bpclear" 清除所有断点* w$ F& h% d- j
"bpenabld 数字" 开启断点
* N- }1 B( b% W. N: i"bpdisabld 数字" 关闭断点
+ T! s- _) u4 @, c4 W  l7 i"bplist" 显示所有断点% H2 u, @  d" U$ n! m% ?

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3213 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽4 |9 _7 h) N* ?7 v* ^. C

$ t, @6 }- k# ]' a. m: W1 P* i# B' t以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1769 天

[LV.Master]伴坛终老

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

签到天数: 2531 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 # J; u" F5 b  M# A) E

: t6 T2 m  p5 V# y太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
4 K3 y: }* x5 f, |' D( R
( s- L1 n0 x3 X( A1 a  k6 Y其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
" }% w, L' @5 x9 ~# p9 u2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 6 O9 S' N: }+ O; L* u9 @
2 E% n! X! a0 v5 n
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
  W4 B/ b. x6 c
% v( Q' m! r4 U/ I8 v* L$ J/ H5 _新版MAME没搜索引擎了么?, t  v5 m4 I6 v0 \* U' Q6 u' P+ J
晚上我看看, ?/ h3 V2 `; b* J
; O$ ^% W8 ]* F8 f6 _
MAME查看地址的功能还是有的
* _" n+ m( q0 ?9 Z, z7 X4 ^菜单里的第一个选项就是显示内存地址
1 M& j; B( ]* \+ A5 q不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1769 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:& i+ S( D1 x9 M; Y& _) W
1.DEBUG版MAME有作弊码查找命令! _' L* ]1 c) w: }9 P
. r* S- _7 i' }2 i7 r
命令如下:
3 ~1 K9 ~" H: E1 _% rcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]. |) C  E' Z2 w/ g$ b3 l0 ?
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
5 l# C* d' }- N: m<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节); I" ?7 ^4 |+ i; M  n: s8 I
<swap>是决定字节是否交换2 I2 W2 x8 n6 y
<address>是地址,地址必须用十六进制表示,例:0x100248- j3 o7 @+ Z5 e
<length>是地址长度,长度必须用十六进制表示,例:0xfffff2 i3 u. l# [2 c0 q% V  r
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
7 p" i9 t& @" T8 c+ o5 L4 U: F& u& e8 k( o
请打help cheatinit命令获得更加详细说明" r5 B0 G& A- P3 E8 F
: z' X1 ]' L# K9 R4 H0 m
cheatnext <condition>[,<comparisonvalue>]5 F5 ^! O" e% B. a4 I' u5 N: i
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]+ W; R, a3 F. x8 a
[eq]是等于
% K  C: s1 p! W- f% a; ]( i[ne]是不等于) D( t( A. h0 v& E0 g$ x  g
[de或-]是减少
4 S) m7 g3 f3 ?7 o0 [. c[in或+]是增加
$ m9 q( \2 C  k* }[deeq]是减少或等于
; T/ _3 F$ r# R) S8 ]: w3 _& L; U7 Z[ineq]是增加或等于+ r& A: {- S) Z) ~4 `( a! F
[lt]是小于: O' |" r$ j7 Z0 M
[gt]是大于
/ W+ X4 U4 Z( {[ch或~]是数据有变化1 N' E9 q7 I+ E8 ]

/ K3 f- U) u  K9 R<comparisonvalue>
9 c! C# v, s: j" }* r$ R: O要搜索的数值
2 j3 E5 x3 M( s5 j7 H, u1 g3 L/ V" I# P$ O
请打help cheatnext命令获得更加详细说明
2 y7 r  N  C& t. J+ j
1 i8 Q$ o! B& }$ \- @) ucheatnextf <condition>[,<comparisonvalue>]3 b! l0 Y8 S7 B: I% ?
说明同上' \+ {1 z- |' j  z& d
  u' p" U; n0 ~3 B7 ?4 K
请打help cheatnextf命令获得更加详细说明) w, w& Y2 h- _( y& h* \

, H& z0 o; e% _cheatlist [<filename>], u/ E+ ~, }* b, |: ?. [/ T, x
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件8 k2 `: `# E3 x0 Q
% S1 d. J5 |, g2 Q8 V' G
请打help cheatlist命令获得更加详细说明  x' T# ~* C3 \! Q

4 r5 w4 s- R: k$ H1 I第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
( A) B2 a. W; D; X+ D2 b1 r0 |8 `$ K# a8 `2 k
之后进行第一次数据搜索时要用cheatnextf命令来摸索
" v  V* s$ Z# `0 a, r& c7 v
/ T% P- r1 z0 S& j8 d2 l到第二次、第N次数据搜索时要用cheatnext命令来搜索% O7 n: P6 \1 J. n
2 q5 ~8 ]/ Z% e1 o" l4 @
举个例子吧:
2 Q8 M2 p3 Z$ k; n8 u8 S& ]) B6 B
以合金弹头X为例:
$ o' ^% A, @2 b6 Z1P生命数是2
) H6 k+ b8 E# C9 P" J0 \6 K* [  d3 R5 X$ R
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
: D8 K8 _$ H8 G; q6 {
6 Q+ N' f8 Q) O4 f命令如下:2 J- A. c4 ~' B( [0 B
cheatinit ub,0x100000,0xfffff,0" b3 W) T% a1 ^6 L# `' M
" M& M8 N5 ]9 O8 Y
再用cheatnextf eq,2命令搜索生命数21 H9 S9 Z9 b! n

$ i0 w; f/ O5 X& n1 [1 P: F7 Rcheatlist显示搜索结果% H2 p* v! c4 E0 B' n" N9 q

; S$ D0 }9 ^9 M- r* k8 r! I死一命后用cheatnext eq,1搜索生命数1: T5 s* M1 z- ^% A- {8 @

9 ]4 n0 Y. L1 I* R2 _8 L0 ncheatlist显示搜索结果
8 D- U, @7 m) ^- y.......8 K* @- d+ J; W& j: q
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
6 _, v4 d/ m8 F0 [" T3 R! r
5 Y4 @. }: @: p7 Y8 F8 {9 e3 _还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
0 c# L9 B9 {" e, |/ G
. D$ |3 u7 n9 [9 t3 Y4 }没作弊码的话....; C6 W4 I/ G" I. d+ u
7 c! B. q; `8 T" z+ p7 z5 U3 C
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)) O  Q1 Q" x- i, t3 s" n' W; J$ B- @

" c8 G4 u( ]) J" p' m0 g  r1 Z+ }) t或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)$ T$ d* R2 y( ~9 k& y

6 Y0 p) B" Z' w2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行5 p* o" C9 k( W! t5 w0 q7 j

, a. N+ _* K* U! U) s. F要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

* C- x8 C; [) S& b5 g9 H% v5 i% F0 T; P2 X3 P+ Z# l
回114:3 Y5 E+ m( D9 t5 |
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M), s  e; q# Z$ C) P. t! a7 x
2.没地址如何查询地址?看上面我给zsyf的回复

+ Y& a$ q5 M+ r; @4 @
( j+ b. f$ _) j9 }+ ]  n! s+ T1 r打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2742 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-11-15 21:52 , Processed in 1.094727 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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