EMU618社区

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

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

  [复制链接]

签到天数: 1999 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。) S$ ^! J" `# X; e9 r/ v: Y

4 Z% T, }4 d4 J(1)如何加载ROM
: {# o( j) A9 z1 [3 [3 B3 F6 F7 e1 a
先说说如何加载ROM吧
/ G6 A3 }  |$ h- ~( w. h, x2 ^
8 _; D# F, [/ y- m- q' U以MAME 0.148 DEBUG版为例:! C) O( W- Q& e0 a- P: u0 B

; s+ q0 R, ^" |5 x* E( ~# T1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
" z' N) |2 d( {% h
' P0 R9 V5 S2 e/ @) p8 C# v) C注:MAME官网的MAME是命令行程式,没有GUI。
6 v2 ^4 n. E9 o7 Z
& ?* P+ T  C, r  g5 S- X1 y2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;+ m# [) [; f. O( C
9 X, T2 b4 [" }  {1 `3 E
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:( S9 a( p" K5 q$ Z* O# ]; _
6 t4 ?/ Q3 ^# d# w+ O
d:回车
# R2 |* k( x' M+ h3 T1 V  Z- N! Y  ^& j" }% m
cd mame0148b_debug回车2 U- Q5 ^- O4 `7 W+ C
# q" V9 T; M/ A! t
如图1:$ T$ u2 v5 X6 x2 j

% q1 _1 h0 C5 g1 ]( w& i( z5 ~5 z; s+ u, y  Y: j* y2 y
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:1 B9 J( |2 w$ v) A
/ h' s+ C( b9 X9 v% w! U; t( R
: S/ W  j4 e) F$ `

# J: p7 m( s( }8 t* _3 \( T5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
* C4 F* u- [( R/ H  I1 C
' ]  c, @- j$ f( D6 i- W6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。- p% f% D1 I$ H  F: H" K

" O" k: c$ c" ^" n# ^% ~(2)如何呼出/隐藏调试窗口" X+ v% X% |0 W( l7 I0 j
- K" ~& u: J5 Z! P5 i1 y- ]/ V
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
  d8 k. r4 l3 i# L" O
% z) k( R4 L3 ^; C& m) j+ E8 I5 d
2 O7 A7 @- e; x6 n2 Y7 y
% E! m' |# T' P- U5 }2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:2 ^0 c, G! Q$ _2 {7 S

" y3 x% `9 r( Y7 b! q3 L$ o0 K# `& A! A. ?5 a4 X( m
% {' X: ^8 G" ]( F7 u
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
4 I; B" r7 a# U; F  t! p
. M4 \1 A% P! l$ ^0 Q' V% }/ k) W  P(3)如何下读/写内存监视点以及程式地址断点
( J/ S/ y8 M' \2 F9 z+ s& M6 L/ c3 R. ~/ \( {
先说说如何下读/写内存监视点吧
4 @2 H) J/ ~8 u6 {! y  K7 @3 b+ D7 G/ h, j
监视点命令格式:wp <address>,<length>,<type>,<condition>, J5 Y3 ~# V; k, G9 x3 Q  P

, O% v+ T( o7 ]# \9 O<address>是地址
  E* y( ^8 r8 H) d5 j; j
# C9 h( x; z; L. [2 ]  f<length>是数据长度,长度必须用十六进制表示
6 f9 i. a3 i2 j. \1 s6 x8 K* s9 \" Y) T
<type>是监视点类型,r是读,w是写,rw是读写
6 J$ \2 t0 Z4 k  C! V6 D$ j: ]# C- ^* C0 S
例子:* L  w$ ]% W' }+ F

* Q2 r3 c$ T( T例如对ff8569地址下写监视点,数据长度是1个字节$ ^) v; ^* k7 s% P( g
) g& \% G( |0 U: Q9 X, E
wp ff8569,1,w5 i0 J! N7 }2 X& ]' z% c6 T9 z

) R1 M( U$ U! x& j例如对ff2235地址下读监视点,数据长度是2个字节+ \; F4 m+ j. r: o+ u4 W! v
# K$ Q- V# [! H3 i" I: l
wp ff2235,2,r
8 m1 c& E# I! R2 u4 ]8 n
$ p& H$ y9 I5 H# y例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
6 W( [/ q. ^+ P+ G6 L3 _
# |3 h/ _  C" Y- F3 Awp ff7533,1,w,wpdata == 0# |6 h0 t5 M9 b( c& Y; m

0 O7 L+ ?" Q+ H4 w) E以龙王战士日版为例:
, C; t0 v  e8 n6 j" k$ B" k5 ^" |/ A/ m: _$ ?5 @' y; o
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
- f! K8 p" t  d( }' I% [
  t* A. U, f+ K! N: O
5 }" `5 l$ I) e: l9 Q7 z# @
' a; y6 b8 H4 n, v& c6 q& h$ ]9 n$ h8 w6 K- t- k/ Z
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:7 R% C! p: Q5 i5 |' @% ]
) [( F6 T3 C- q# l" L
# L" G9 ]! M  e
. ]/ Z/ w; i/ s) [- c. h
接下来说说程式地址断点
* \5 q% W  P0 ~' M" R- J' X( {0 H0 Z) f8 e5 U! l; _
命令格式:bp <address>, ?1 U# p8 N6 W
4 l1 r; t) ~8 K( q8 |1 b# P
例如对000488汇编指令地址下断点5 z/ W. Y$ b: r1 `# V

# g2 P" k" l& @6 _% X8 nbp 000488: |! `, N2 y; |
' }% J$ O# g/ V) J  G
当程式执行到000488地址时就自动中断6 A$ A) K' d' _

* h8 H) n6 R# z$ X+ ?; O3 t更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
2 B, m: S8 b- D' u) q/ U( H; v! ~) E0 s: H
有错误请指正。7 E. s1 v9 o( ~1 U* E- R; j$ g& M

6 I" U, |  j4 b- C+ k5 T补充一些命令:# W5 i# B/ Z* V( M9 [  V5 ?
. d5 f( h0 B+ M4 e# c
"wpclear" 清除所有监视点
: d, L6 ^$ c8 b0 Z! ^: h/ p"wpenabld 数字" 开启监视点
  T( l3 b" K5 h1 `' @1 @"wpdisabld 数字" 关闭监视点
# r" t. P$ `+ q0 ~; l"wplist" 显示所有监视点) T0 n5 j6 i% L+ I. P8 C
% b: r- H8 O6 k" Q. l6 s
"bpclear" 清除所有断点% W( j4 t9 K* l, G  A" M
"bpenabld 数字" 开启断点9 G8 |& n; e2 L$ ^9 {: H
"bpdisabld 数字" 关闭断点
! J. B* ~8 h- k& Y"bplist" 显示所有断点! W) F% ~6 k" K0 X; Y

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3443 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
& K# b9 u7 X! \5 g( I* b
4 C8 K& b6 k6 r$ b" i9 D以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1999 天

[LV.Master]伴坛终老

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

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 8 e/ V: u+ ?- l
. z9 g) A) e7 {' e+ ^& C
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。/ w3 ]! n& e  B6 W$ ?( U$ \" G- E

8 Z. y& [# f, i/ A0 O4 o其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
& @( l1 c* _/ u  k: t) a& d; k- e& `2 F9 _4 T4 a% V
CheatEngine搜到的临时地址当然无法对应MAME的内存地址) V$ E8 B; a0 o2 s9 k3 I# R( C

$ q7 h( a3 t" m0 E( D8 @新版MAME没搜索引擎了么?( a" y2 t, b9 `
晚上我看看
2 _, l2 a( r* `7 O' z; r3 k) n* O: m: r+ P; u7 ^" A3 P% Y
MAME查看地址的功能还是有的
4 [( |! }1 n9 i' `- \. f菜单里的第一个选项就是显示内存地址/ R7 g4 L7 T( Y* S8 z
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1999 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
" f' ?  ^6 y0 j; {5 n( W
1.DEBUG版MAME有作弊码查找命令
/ c% |; J" C" P6 G8 M3 R; W# O5 q& \7 J5 w" _. m9 |
命令如下:
1 }% G/ ^" I8 w3 jcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]* @: }( Q: A- C; c0 W( _
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
* o, m" \" ]  `<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)( Y! J) e" D8 V& E
<swap>是决定字节是否交换
' @/ V" w  N* }4 I7 Y5 l# V& a3 O<address>是地址,地址必须用十六进制表示,例:0x100248
" l5 R( x" \! ~<length>是地址长度,长度必须用十六进制表示,例:0xfffff
! X6 M" E4 k' H1 |* w<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU5 h9 y' @/ R# X  m3 O5 q/ P
* W6 e% k4 @- B. Q) L; r
请打help cheatinit命令获得更加详细说明4 ~  A& J! R: N7 M
  l& L3 w& J: B- m6 K
cheatnext <condition>[,<comparisonvalue>]
# _/ J' Z5 A: [# U4 E, }& [. s) x<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
8 _0 t/ n$ W5 h0 w* y( N[eq]是等于$ I) c( G! b. C7 Q
[ne]是不等于
" e7 u. J0 ?8 W& u" q7 s[de或-]是减少
* B. @' v1 ]- I[in或+]是增加8 W  J- n& M3 |% P2 z- X
[deeq]是减少或等于
% K+ J. m0 |2 {* S[ineq]是增加或等于8 J! j1 r; x/ ^. W3 @
[lt]是小于3 |# I9 q1 ]0 K) b, t: g
[gt]是大于
4 ^1 W7 b! e) s4 A[ch或~]是数据有变化
' ]3 j! Z: p# o+ \/ N; r. z$ ^4 A! D/ j) y/ ?6 C; ?
<comparisonvalue>  o2 H# ]+ @* L
要搜索的数值
- C4 ]! V  K9 |# q  Q9 Q1 l7 D
/ P+ Y# r9 {/ m+ j  R2 s, I0 P请打help cheatnext命令获得更加详细说明# f" S* i) B8 @2 H

" p7 w( w+ l  Fcheatnextf <condition>[,<comparisonvalue>]2 u' {# c0 u& u3 k2 ]
说明同上' G- O( S' z  F3 X  p* q! ^
" Z# W1 m8 l$ ], V
请打help cheatnextf命令获得更加详细说明# b3 Q0 L; O* Z* H- z

% ]) V) g2 p# T/ F/ {cheatlist [<filename>]
" H/ U3 h" a7 C显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
. v' `& m4 R3 \8 w0 y
/ i2 Z# Y4 E$ e请打help cheatlist命令获得更加详细说明- q! k( A& {7 J
) w( a. X9 W, T( c8 z$ R! V0 X
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
" d2 ]4 }( A0 z5 V' E$ Q7 C- |6 Z- ~: H& K" F3 t' P, @. V/ E
之后进行第一次数据搜索时要用cheatnextf命令来摸索
# f7 s/ [# e1 @$ \" L/ A. [7 k2 w: b# X2 M/ U4 n
到第二次、第N次数据搜索时要用cheatnext命令来搜索2 F& s& R# U& d* I. V$ p% b
/ w" b! w( I' K) b6 o( l
举个例子吧:7 d( s" [# a% p9 H" H. u( M
7 u: z9 B" c: A
以合金弹头X为例:' H6 R9 d. I$ q! {1 W' b, }
1P生命数是2! c/ P. N* C5 `9 X
: N8 }) j" ^) m4 M* ~; W
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
9 y( O0 ^6 n, [) I) G0 l+ Y/ J* f. f  X3 R/ P" P/ x) o3 K5 k. p
命令如下:# n! O' E; E) S
cheatinit ub,0x100000,0xfffff,0! u0 I# W7 Y6 A4 D1 O' ]
- o5 T8 [$ U( U4 v+ N' t: D4 g( L
再用cheatnextf eq,2命令搜索生命数23 B+ C$ r5 {; z( g2 ~

$ _* ~+ u/ H0 A- Jcheatlist显示搜索结果/ p% c/ ^( @4 Q( Y  q& {) V7 V
5 e2 `1 V) }1 E, h# I
死一命后用cheatnext eq,1搜索生命数16 _1 t; P4 |- H8 `
5 ]- C% x4 e, [7 s% i3 D  j
cheatlist显示搜索结果
1 m8 m+ L. o1 e- a" [.......$ P* r4 H: b9 O" W8 `  |& D
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果$ N' a& r6 x! n2 H, _3 e2 [
/ E/ [# o# y, I/ v. ]! [2 B
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。5 W- K1 T0 x6 D8 R
. i2 }  E3 `/ n, m
没作弊码的话....
8 A- P, }4 I: H% X1 q1 R- L% i9 H
- x0 n( I+ Q3 j* v5 q  p% T5 }5 j' d不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)4 h( I5 a1 B1 V1 c) r: M
, G  Q7 k: J2 Y# O- E
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址), z# z( k+ s1 p

( a/ _1 A- g( M8 u7 O2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行/ t5 o1 F! x# q5 f- X9 @) d6 [+ W

- K. P/ Q7 k) M+ A( A要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
# u! j/ K9 {; `9 T/ Q! o2 [7 C5 a6 R
+ ^4 k) X" E7 S7 z/ n& U) {6 K  a
回114:
. a. u4 N- O/ E* W
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
& q' r! S' v& g3 p& a2.没地址如何查询地址?看上面我给zsyf的回复

  q3 ^# E3 k5 w/ K4 x8 E# ?% e& B' W8 i+ O( [
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2972 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-6 01:17 , Processed in 1.097656 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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