EMU618社区

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

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

  [复制链接]

签到天数: 2172 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。; [. E$ c. ]) K' l9 ~
2 {/ i' p( S2 ]& W. V
(1)如何加载ROM
0 \) {% z0 m' t! B2 B5 F& z% {+ N# \
先说说如何加载ROM吧
9 V/ n% m" y0 m/ N' ]5 r3 C. c0 R# a1 }  g
以MAME 0.148 DEBUG版为例:) R1 B9 c1 t& A7 X+ ]* {8 _

) s( o9 G9 O. u& c) |; Y  q1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html9 M  g% s. U, W3 Z) D: ]
8 k+ L5 G3 S4 O% I* c8 ?8 L* A
注:MAME官网的MAME是命令行程式,没有GUI。) K% z* D8 S9 T2 s$ c+ z
) E* ^3 u4 j3 o5 o
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 h6 ?" B0 B" }. r  A+ d) E2 `
4 ~- Z0 T5 S$ P9 N  ~7 p" O5 @% Q
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:9 {5 w4 h/ c9 z
; G$ A* m+ q: C! P4 ]/ I( Z
d:回车) r4 T) J' [) T0 h
) U3 J: {" P/ ^- t% B
cd mame0148b_debug回车: J9 }7 I, K/ n

. Q2 ]% B0 }8 V# I$ v2 w! r* N$ Z如图1:. m: i) B$ `$ v$ w8 t0 j' q4 [" z3 }4 Z

& {: k3 h1 T- \& d1 M
( [. o6 D: t0 y% k* Q% S! p4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( L1 E! f8 Q: T, X4 M' y# V
. i. w0 H8 o) E; H& a% ]$ r9 i1 O7 {# B( s) }& Q+ e2 }3 t
4 f) |" x9 p* b8 {0 K7 a
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
! V% `& h6 ?1 D3 U8 B3 o, q- M$ U  Y; {8 R
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。' m; f3 h0 n; _; J5 F  ^

9 z% A6 y. \: |0 |. q(2)如何呼出/隐藏调试窗口
0 U( w" K2 B+ C# G' i
  t: W7 q; `6 t8 y4 I! |* n- q1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:  U5 Y& y3 @2 z$ B
3 Z" I5 S1 @9 X5 [/ n

4 B2 O7 ?/ m* d+ l) m' J& D, ]; l3 M8 B/ J0 e4 m" W& a/ H
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:# S) \  h3 l: G1 Z, r: ]
5 H2 x/ q7 h3 t

/ g  B/ _8 p3 u' E$ p2 D$ ]* \7 y! O
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
2 \. @9 e" }( n7 M" N5 E$ U, g3 y* B8 O+ L$ n( n% @: \3 ]
(3)如何下读/写内存监视点以及程式地址断点
8 L' f: X! m' {/ B& U7 Y$ f3 F( g3 Y" G; i" |+ B& v
先说说如何下读/写内存监视点吧9 n& v+ Q. q$ X4 ~4 M. q/ J" A
/ c* _% Y/ w: _
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ j& @" y# ?9 r. C: j: k& M/ T9 g5 ?: O; |
<address>是地址
1 T' s) j. E$ k6 ]7 q& d8 k+ J' y: E% a) k# M$ }2 `0 ^; c+ ~% Y
<length>是数据长度,长度必须用十六进制表示
# }( P6 v2 X5 k7 X$ I
4 h0 ?. J; b/ [<type>是监视点类型,r是读,w是写,rw是读写7 R* P' q  O5 C7 P5 ?
5 c) Y1 U3 ~# r9 G7 B2 q
例子:+ c( x( a, K$ r; D+ L

; n' z+ K! z% ?2 ]例如对ff8569地址下写监视点,数据长度是1个字节
- Z* n1 w- r7 Y
  U: t: E) l, ?, ?, z& Twp ff8569,1,w; H# k" }( h3 o8 r/ x9 E8 O
) ?, p: b, _" F8 o* X
例如对ff2235地址下读监视点,数据长度是2个字节: ]& Y* r0 Y" e4 S3 M

5 {" `; Z" e$ twp ff2235,2,r
  n* c2 j+ ~% n# k  N) F& w( s/ @. t  l1 u9 l
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断4 D/ n$ \7 \$ S+ g

& [: c1 l5 T1 D- Swp ff7533,1,w,wpdata == 0' F% ~: Z9 U9 s: H" P
) L& r+ W2 ^  Y! V2 o
以龙王战士日版为例:2 @# R6 S3 a7 u7 R. ]
/ @8 o- {# B& t; x- J8 v; Z+ R6 P
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
# ~2 |  q; P! e- p$ i  T) m: e# R  d, i* a: T- p! G

6 W, c. f; ^" C. x
% i$ h* k: w% i/ ^) M0 W1 @, ~
# L; n. Y6 X4 z* I" u8 c2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
3 Z0 G4 T: D( {1 C5 {2 p: X8 }1 s' E3 N2 h0 F) H

! L: V; ^$ _0 A3 s% e3 [8 j( n7 V
0 I4 f& z# [  @8 w: f' n0 v接下来说说程式地址断点. ^* z9 x+ j" s& i- l
! }- V3 q* x: n9 O0 F
命令格式:bp <address>2 K: a; ]" Y3 m

) `0 E! r& f, h+ `6 L  |9 {+ `例如对000488汇编指令地址下断点0 m) |, b4 O3 P+ X- f# n! b9 j
1 i* z* E1 D% ^9 i# r" x" {
bp 000488
+ r9 p/ G8 z- o, z( z" h: e
7 X; [4 G* U3 G* H当程式执行到000488地址时就自动中断
0 d# c5 P5 ]/ V4 E1 R+ Z/ C
1 f+ \/ [. ]  O- j% z3 X5 J0 u& e更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
! ~3 |( Q$ g& s  ]- z0 v- Y. V% z" ^+ }3 {' ^  t
有错误请指正。
& p( H6 R7 x" d% N$ x( B# y/ o  H, X4 D4 V; B% n
补充一些命令:8 u5 v- F9 y1 _9 }$ \3 v0 L
: l5 Q/ s5 A9 P; U) d7 k
"wpclear" 清除所有监视点6 O! T6 }; x" B
"wpenabld 数字" 开启监视点
& J+ |7 g( k9 I) Q& G& z"wpdisabld 数字" 关闭监视点0 H: G9 a+ @4 L+ g6 j
"wplist" 显示所有监视点
3 A. v6 X% O& u3 v! \( {
6 h5 d6 ~# }% `- {3 m"bpclear" 清除所有断点
1 {& ^* t0 c: O: n, W"bpenabld 数字" 开启断点) Y5 ]: ^- b% v& `) O
"bpdisabld 数字" 关闭断点9 b, {) p' j9 U4 a
"bplist" 显示所有断点7 r2 g2 y: X8 W" t9 Q1 b+ k( X

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3617 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽0 ?$ z/ ?6 b6 E% u; ]) o" N; o$ d
. @+ j+ K6 H$ R3 y! c4 Y9 y$ `
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2172 天

[LV.Master]伴坛终老

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

签到天数: 2586 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 3 x0 l, j: [7 E% o9 h8 [$ L
8 Y, B( ]5 e  o8 m
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
& L! R" O' F/ s0 f1 s6 D
( d( y/ }, D! G5 y6 D2 b; Y其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
( H' E2 O/ o& ~4 J/ M
6 b6 F/ o' L1 f) UCheatEngine搜到的临时地址当然无法对应MAME的内存地址
) K6 N/ B& L3 m9 R4 H5 g
4 V9 N6 ^0 x) E8 k, Q) c8 C  G7 N新版MAME没搜索引擎了么?2 c4 Y2 ]& V3 j
晚上我看看
. ^! n7 v8 u+ P( ~
) O. ]' [) K" n! C4 G8 n5 g$ SMAME查看地址的功能还是有的
  m" r) s, n. V' d/ m菜单里的第一个选项就是显示内存地址6 d$ M6 R) F' r3 U, m
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2172 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
# `3 z1 z* }" P- J, B) ]% ]; n! `
1.DEBUG版MAME有作弊码查找命令
3 ]* o( \1 @, t) R) o6 |0 }$ h7 X+ a: o* M8 T1 M* v9 i
命令如下:; A- {( c7 q7 I
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
- k* O! G5 \0 \- X<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型( R9 v& a( Z3 m: y
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
3 r, {, J8 K& r% r1 e/ n<swap>是决定字节是否交换; n3 e% p5 V9 y3 X% X
<address>是地址,地址必须用十六进制表示,例:0x100248  }" t# o4 ~2 M+ r! u
<length>是地址长度,长度必须用十六进制表示,例:0xfffff; V" B0 P+ k4 p+ N- }. A2 V  G1 N
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
# w1 w* g& l: m1 P! `  s5 r( H7 v8 b- z* [
请打help cheatinit命令获得更加详细说明5 M  c9 G! h/ m3 a. ]$ A5 J- c1 |
) }$ |$ S! N4 F' W0 G
cheatnext <condition>[,<comparisonvalue>]9 X4 M- P5 Q, d
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
6 V0 D' s, l9 ]1 r. ~8 y: m[eq]是等于
, m- J+ D# G# _% w[ne]是不等于& O$ x- u2 }( P, b
[de或-]是减少
/ b6 \& m4 `' o7 R7 |/ b) E[in或+]是增加1 ~8 @# x# N) M$ J' h9 O
[deeq]是减少或等于* l: u. s3 P4 w, |: W
[ineq]是增加或等于: S" P, B8 K) P/ v  K2 d
[lt]是小于
, R# U: l: b1 W/ u7 g/ o[gt]是大于  W" _2 i8 l' U0 T+ I; E, H( p2 Z
[ch或~]是数据有变化1 \5 K8 _5 b* e8 {) R& t

3 r6 A. ^% {  S$ b( g# Z# ~8 J<comparisonvalue>
2 S' p- }; k: W/ a- i要搜索的数值( V! h( f) j8 \3 D" A5 m

$ q3 P/ \9 o, P! e3 \: q请打help cheatnext命令获得更加详细说明
; L& R( E% F8 X' H/ z
7 Z: H% |% `) Ucheatnextf <condition>[,<comparisonvalue>]
/ ^) f& _1 `/ {3 ]0 K& E+ U* `说明同上
$ \/ C% C& E9 @" ?; x4 M2 `5 t4 q/ B! ?3 r* r8 Y
请打help cheatnextf命令获得更加详细说明
0 z8 r) t& }& q' R# G0 [0 I" M% @. C+ w/ f& W9 G0 T: e8 L
cheatlist [<filename>], t8 J! O5 |; x
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件* I4 ^. G; r/ b1 @0 l0 G! ~

: U5 o2 f+ k$ K  y3 |0 N; i请打help cheatlist命令获得更加详细说明, u7 _" |" s+ D! Y

; c% I' C& [) d第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
, W$ z9 v7 R7 S" Y6 Z
% [* V7 u. O) r% A. J1 p% Y之后进行第一次数据搜索时要用cheatnextf命令来摸索6 X* @: P0 p* p. |" B; i

& L# r5 k2 k/ b; m) ~4 S' c; {到第二次、第N次数据搜索时要用cheatnext命令来搜索6 A' E6 W, e3 f6 G' r/ ^* q
7 G" R* c: [8 v" I2 V0 T
举个例子吧:; f6 f" [% j, v- O

+ c3 H# I6 o7 ^以合金弹头X为例:; [/ H' A; m0 D$ X# E6 x" ^
1P生命数是2
$ Y# }6 e3 M, k: v4 L* E6 s8 C4 E4 x$ l  i" I
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
6 Z& s+ l" p( f5 }/ ]3 a) s* [
  R8 o1 D- ^) b9 w9 o5 |/ J! U命令如下:
+ g. n$ E# l0 t2 }* D; Hcheatinit ub,0x100000,0xfffff,0
$ X7 j% q; B/ Y$ f" U
. j3 q* {$ p  [再用cheatnextf eq,2命令搜索生命数2
9 u& G5 a) J. r0 f9 s, I; P( D8 ]
cheatlist显示搜索结果* v$ J9 l+ y2 t1 d2 H* m% J

% i3 @- Q) I) ]1 o) U4 Q  E: d0 O死一命后用cheatnext eq,1搜索生命数1+ c/ J0 A1 v# [6 {4 c
( I/ R! J# _/ S$ Z
cheatlist显示搜索结果
3 T' y1 |* C* h( H2 p.......
0 z- f0 _. R$ Z* [直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果  U1 G9 R7 s  k( P) ]& w! m9 B1 y4 L

) B7 }+ K2 f. x- n' S0 y: [; j) |还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
2 ?) T% n1 s5 f2 [- _& z6 Q
  o7 C4 M! G+ s3 l  n  `3 q4 o4 M没作弊码的话....0 Q/ ?, L+ `! B% H7 R

) f! Y' R! ^; C% t+ m/ P不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)  Y5 O/ f1 s) z

) o/ v1 L. n. u或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)- T/ m0 g# Y' R: W! C( U: ^
  d3 [- T2 t6 l
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行4 j0 M7 {) j) h0 j- T  r, ]+ ?
  L' a- Y% h. e9 _( W
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

4 m! x' w! H% d; j, l; o. u9 @9 T% n1 H0 O
回114:
( t+ W: A5 |* X; S+ m
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
) Z. {2 N$ e9 G8 _( b7 m0 K& n& g2.没地址如何查询地址?看上面我给zsyf的回复
# u+ h5 ?) _' Y2 _9 L" R
9 A6 y5 c' g! u5 F" F  ?4 R1 w2 y
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3136 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-26 10:48 , Processed in 1.089844 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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