EMU618社区

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

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

  [复制链接]

签到天数: 1804 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
7 X! d" E2 v; T6 P
: L# n6 c6 w8 \(1)如何加载ROM
, X5 V. Q# f# ?4 v" P9 \7 m7 @) u* G6 D3 X! p
先说说如何加载ROM吧! B. x- ^! B1 ?  b
& r$ L4 ~! w. Y/ p- X
以MAME 0.148 DEBUG版为例:0 g% U) L  k" t3 e; @" P5 @$ J: L
0 H, c1 D" u/ j; y  P2 K% x
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html, d' C  Y" g6 s, q& E# }5 [8 {

/ b* ~  v6 s+ T6 h, u, R  e注:MAME官网的MAME是命令行程式,没有GUI。3 i* B! K& ?3 ]$ N. \

- Q5 e  O( K# z3 v2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
/ m8 t: G1 }% O* A: Q, L/ }, V" P0 l* i0 X2 _* K3 l$ ~* D' ~
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:- _. O5 y$ |/ y9 [0 d
! T2 b; r4 z8 n4 g
d:回车
0 }  u% r8 e3 c+ q% I: p% T  N& \* I
cd mame0148b_debug回车; L! @% h3 T: g5 x4 N) R
0 U" S. A! R1 C2 H5 o
如图1:4 E0 [' W$ u# z& w* i1 V( v
/ e! A, N7 u4 e
& I/ ]3 E: i5 Q; E$ z% m$ A
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:+ d4 x8 w9 h9 z2 F4 J

- q* `9 r7 B% ^& ]
4 k7 X# ?: K( v, F$ B, ~( |5 ?4 G3 t& F( k7 j
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
9 F( [( G2 \0 y# J% E) t, `/ o. }
+ E0 ^7 R- S. E  l9 C" m; t6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
9 d/ G4 N; y6 i$ v' N1 P) U, E. p
3 R" D* u, z$ n# F) U' K(2)如何呼出/隐藏调试窗口
9 m: C7 V! y2 o3 c$ h
+ {: d( f5 }5 ^! F1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:8 j$ |5 ^" U( T3 L& y

- e7 w/ w: J+ b" y2 m/ y, O0 \' B5 J- Y2 v* {4 X
. B1 H5 l9 f, m8 E# _/ l" c
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:7 @3 g" f/ a# S# u6 z% O# q4 V, W
1 A: ?$ ]) ^/ q1 ~
/ T/ p% N$ ?8 ]1 s1 x# G0 M

& B' a, K3 S8 p+ }  ^, U5 y3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
+ [3 y0 n: k8 N$ i0 L/ d0 V0 U7 C6 u3 N7 C
(3)如何下读/写内存监视点以及程式地址断点6 }9 D3 h& w! O
) X9 L  N" z- H& |# e9 o2 @- a  V
先说说如何下读/写内存监视点吧& U1 m" O. B. U
9 O* r! z( j$ S4 a2 F
监视点命令格式:wp <address>,<length>,<type>,<condition>/ [4 r# P) i0 Y2 y- i5 N

; r. C' i( I6 E9 z: T<address>是地址2 s& `$ k) O3 r4 b

" e% T( S& }1 t8 A5 y6 u<length>是数据长度,长度必须用十六进制表示
0 s8 ]: s9 k* b0 ]  P% R: h
, `4 y+ j, M0 H+ O<type>是监视点类型,r是读,w是写,rw是读写
# ?5 z: l! O% H# e' @5 E# T' F. L4 H* N% w. Q8 v6 N2 ]/ R
例子:
9 U- r4 A! k. v$ P( i/ y( t! ^/ X" n6 n
例如对ff8569地址下写监视点,数据长度是1个字节
2 C0 X  H. c1 E' T  h7 z4 M  ~( u% c: B8 d  c8 Z
wp ff8569,1,w" O0 E" B! j/ O2 s; p7 y! t2 L# P
* l& v0 S+ G, m# B4 |0 g! ^
例如对ff2235地址下读监视点,数据长度是2个字节
( V. C# {6 Y  f- r  ^8 N: j5 Z  c2 m( e9 n/ ^3 Q) Y5 r5 w
wp ff2235,2,r
9 A, h: I- e3 `' |1 V1 L# k  W1 N2 K; R/ t4 `8 E! x5 C8 a, C3 N" r
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断& T- o: a: r9 g; f( b" {/ K

9 Y& T/ D  e( N) d% \wp ff7533,1,w,wpdata == 09 N9 K% a+ \- O) l  _
  s  b+ d$ L/ O) s6 t
以龙王战士日版为例:
" _, x6 P6 x; j3 X, A' z; a% v1 O/ T8 Q* c! R4 ~
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
1 V- q. ?  a6 p. g. F+ W
5 _# \* W$ N5 ^2 X1 @; F/ O6 U3 K2 O( a

& V6 z+ P7 e1 E) {$ Z1 Q
: [8 q1 p0 ^1 g2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:" l. {7 p5 W9 f3 p8 S

9 C. N! H/ z, J9 w4 _. x) I0 D1 N6 R. d3 x5 ^2 Y3 o7 ]9 J5 ?+ b
* s* @& x( T7 Z
接下来说说程式地址断点) G- `, N5 u. D  q

1 v* i! p/ \, V9 y命令格式:bp <address>
$ b7 V& N- E. C8 f3 ^# n
- ?5 ?! `- W7 }例如对000488汇编指令地址下断点# u, {/ u, y, ^- [; |4 Y$ P
8 Q( f: c6 {' i* F$ r2 P
bp 000488/ X" n5 V6 ]  s; j

$ a% Y' }* L8 b! [, X3 W: u当程式执行到000488地址时就自动中断8 w7 }$ v5 ?# |% J2 v& r$ f4 L
+ O8 l" s; [5 \
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看8 N- M! _, X& n9 s! d% S: u

! D7 U# h' p, X! T  O7 e有错误请指正。
( c7 Y7 y( v* M8 z, V; Y) }: v. l2 L
补充一些命令:
" X0 M, ~* V4 z8 R4 ~! e5 `  l+ N+ O. h7 a! |1 ^  S$ L
"wpclear" 清除所有监视点  i- J' y7 t5 N) ?4 b
"wpenabld 数字" 开启监视点
9 R5 J. [# B, O, U1 W% ~"wpdisabld 数字" 关闭监视点0 b+ {) I& N  L3 m8 S% ]2 \2 Y1 m4 M
"wplist" 显示所有监视点! {4 n* n5 |& y8 @
9 ~. W; |' O  l7 `, W. W
"bpclear" 清除所有断点
- X! W& _; @7 k% E  ?"bpenabld 数字" 开启断点7 y) [( ]) w5 ~* [' u5 E, O
"bpdisabld 数字" 关闭断点
: Y! ]: T( `+ U1 Y# B" K"bplist" 显示所有断点
4 j9 B( _; h$ K, u( E+ f3 @

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3249 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽' R$ G& y) a5 p" j' H, [5 U1 p
; D+ v1 \0 ?) a' V& n% `
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1804 天

[LV.Master]伴坛终老

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

签到天数: 2537 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 / ]; s1 A7 }2 v2 F* ~
7 @% f5 Y0 B3 h
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
1 i3 ~% D9 I$ r7 k% E( `9 e
# D9 s2 K* @4 J/ B& Z' b其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
/ J0 y( Z' r* N8 A/ ]4 g
$ o1 H5 y  K/ u/ Z- q& jCheatEngine搜到的临时地址当然无法对应MAME的内存地址
$ N, |2 n  \4 @4 ^7 F! D- j, n6 v" e
新版MAME没搜索引擎了么?
0 A7 e# g0 r8 G# W8 R晚上我看看
- n9 X# \+ Y) r$ H  q6 s0 W
2 V  H% t0 h3 P0 j& RMAME查看地址的功能还是有的
+ o, l" l" r3 {" }菜单里的第一个选项就是显示内存地址1 X+ A$ s) A1 P9 t/ Q- {$ |) ?
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1804 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
& L' ^6 K. W7 k" A5 M
1.DEBUG版MAME有作弊码查找命令) c' a( U4 }8 H
9 `: f* V- ]/ A! h! N# e
命令如下:
! Z7 q" L4 d3 Echeatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]( i% ^; e1 t3 F! y6 z
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型, R6 g0 o" E. S; Y% S; V$ f( @- J
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)4 r! v# o$ G( d' R; F  C
<swap>是决定字节是否交换
# O# R. P, j# E<address>是地址,地址必须用十六进制表示,例:0x100248
+ p9 F# {5 @  I: c: C9 n: L: M7 V  x<length>是地址长度,长度必须用十六进制表示,例:0xfffff1 s/ Z* e  @: d1 X7 U0 v
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
2 x3 i9 n' s* ^0 c3 I! P" H% z+ g# D' q- t/ P$ u# j6 I$ F  o
请打help cheatinit命令获得更加详细说明
+ u+ l/ ~% c3 \4 c4 B+ p! h
" g/ }% h  ^4 L3 ~9 M! r' tcheatnext <condition>[,<comparisonvalue>]9 x7 P' [# n" k& H: {# S
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
. e# M! e* r) G5 h[eq]是等于' L; ^; Z+ q" V3 d. J& r
[ne]是不等于
  h9 p/ @+ |2 r[de或-]是减少
& p6 m! g! i5 S9 c; ?  q[in或+]是增加
9 M8 J& y' \2 _# M1 ?$ f[deeq]是减少或等于
, B2 o' u" c1 E: d5 f[ineq]是增加或等于
6 l" ~! v; o+ j& E+ |[lt]是小于
; y+ k% U$ d0 ]( @1 g; x$ d[gt]是大于
! Y" F0 ]7 ^! L[ch或~]是数据有变化$ h. K, p- c& i; j- z& v2 y: p

8 u  d) J3 Y3 }1 z" y9 J<comparisonvalue>- }& M" J1 m+ r# a" N3 q8 e& `
要搜索的数值$ i5 r  O* ~0 l6 m% g

6 F9 z. o6 N, {- B& I: F请打help cheatnext命令获得更加详细说明
4 W0 J5 j1 ]* ^1 e7 d+ w
# N9 V: c+ E9 B% gcheatnextf <condition>[,<comparisonvalue>], ^. E) ]8 B" m1 H- ]1 X0 F% t
说明同上, M2 B  E9 m. \, k% R

7 e# `" {( Y, b  E请打help cheatnextf命令获得更加详细说明
& {. B4 \* e1 o* @, W7 X! \2 ]
' x3 o" z% a3 |$ G5 t2 o2 Zcheatlist [<filename>]
' j: p# N5 d2 R( {# b/ ?显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件) p- p% [$ z0 g4 r3 v6 _4 [2 h
* x2 ^9 _5 ?" @6 F+ L
请打help cheatlist命令获得更加详细说明' _9 d! `* M, h. B9 h1 M
: d$ k/ q! [0 {! b
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
( l8 `# o+ `! V9 J6 g# w- O2 w9 G; g- v, ?+ |
之后进行第一次数据搜索时要用cheatnextf命令来摸索
% S% v  F7 w7 c8 _: |* ?3 y+ \
4 G9 _( u6 \3 E* q/ N# _到第二次、第N次数据搜索时要用cheatnext命令来搜索
0 q& ?8 Q! [9 h$ }6 \3 M" j' w5 f5 U) T
举个例子吧:
3 ?0 {+ |# B, n$ I: c2 I
3 h) }9 c9 e( b3 y- ]) w以合金弹头X为例:6 h1 I5 ]# f  _
1P生命数是25 [8 ^& J% ?/ Z, N" V! p; u

8 l% [3 ^& F6 P& Y先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间( c. V. j% T3 \! x$ |* U3 ?

# R2 O  }+ z- R$ g' ^命令如下:
6 z2 d/ f) ?/ ccheatinit ub,0x100000,0xfffff,00 U. m# ~4 ^: B' u5 n" Y. |" F
' M) g9 l- t' X2 _
再用cheatnextf eq,2命令搜索生命数2
: N7 v4 q$ a4 k" ~7 O/ s
7 B6 O6 l# L% q" Wcheatlist显示搜索结果
; s1 q' i! L1 \
4 Y1 @* l5 O9 O6 a3 L* L! `8 l死一命后用cheatnext eq,1搜索生命数1
4 J( E. r7 `2 ^: F% ]  E) K" C: Y: E- U0 o
cheatlist显示搜索结果
  y2 y9 ?) y- x, u.......7 z2 D/ M* Q* [" l% H9 Z1 B
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
' d7 H/ r" a% Z" U# x$ U8 G
2 b. e0 J3 L( T; C, X还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。) m. B! N; l5 F/ G, H: z
+ v' {7 v0 l& b% A5 s7 q( \( l
没作弊码的话....
) @+ q, W, n, I' f
0 y2 ]% i% `9 s! ]不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)# y+ w' D* r- i, E; O

$ P/ M3 C* V/ R或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)# Z% i+ A. I& u1 q5 @3 t

4 t% S+ n2 U7 L3 P! V2 M- I2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
6 w3 E6 ?2 C4 b; X% D" _) \: ?& `' M4 ^0 a
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
% ?( k; G+ u3 w, M; o& N
8 m0 {/ z1 B* \5 k4 \2 f
回114:3 ^7 K' H& p6 M" }. ^
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)4 @% I* \0 \& ~: @* O
2.没地址如何查询地址?看上面我给zsyf的回复
0 K3 Z0 h# n! H7 |' N+ r: h& p1 \
3 k; W. d; c/ L$ V9 F# _
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2777 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-12-21 10:21 , Processed in 1.110351 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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