设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1930 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
7 k- R# X( z" n5 W2 ]" O7 ^* Y
(1)如何加载ROM
' x$ J4 l/ B7 t  P: ~- F$ R2 n) U$ Y' }" L; z
先说说如何加载ROM吧
0 V* Q( n; Z1 R/ y& ]
$ U* }. o3 f; |; Q9 u/ N& H/ [7 a以MAME 0.148 DEBUG版为例:2 G6 Z4 M$ O( p$ w& [2 x8 d
0 M8 d! t* v( M. G. f
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
6 H/ U4 Q* t' b! D. a
" b8 x9 p4 {8 f, C, ^注:MAME官网的MAME是命令行程式,没有GUI。
( X( c( Z6 D5 @, D" c7 I
. O% u* A" C; e' L' X2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
! s2 Q2 \' ?  |( b; j9 x( z4 [0 X. A' Q4 N9 O
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
! d! c3 c( y! p9 X, c5 y: N4 {, v+ u$ l6 R2 c* M9 o
d:回车6 Q4 C! o/ j. M

. x4 J. ]- c, i% a+ pcd mame0148b_debug回车) _# I! P6 n* Q2 [
4 l* [* ^2 d5 D" ?6 g+ {2 j% Q
如图1:+ T6 a2 b- ]/ {' i7 l9 B% U8 U

2 Z& L, d) g! @+ u3 S1 Q' b8 ^% D, ]: u! p
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:8 j8 ?. m  B4 ~$ N5 `% E

: l' o8 ?9 x; k
" p" f0 [% x8 C( a( Q' E4 y  W+ {# Q
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;# D# N" z& B: i1 z2 b

, O3 N# W0 j" }5 b  N6 i' l& E4 @6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。, j1 U& R3 ?5 C6 O2 P
; K( I* g$ x/ F
(2)如何呼出/隐藏调试窗口( Q  Q5 Z! e; g) O) @

: b# Q( S) ~( b# P" W4 N7 u1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:" S# I, ^" m6 K4 K7 X4 l/ p

5 {& J9 r! h3 q9 n# o0 K! |5 ^+ J4 M" o8 u5 s! l6 }% U

% i* f1 s7 f3 c2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
9 |( ~9 ~( C$ t1 T& ~4 c4 Q6 a* P/ d$ Q6 z

# K0 C3 p7 v  W& w1 Y
: K2 t/ Y- p: t1 N3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。/ u  D- v, Y5 y
+ z" a$ w4 ^% _+ ~+ D& R" m
(3)如何下读/写内存监视点以及程式地址断点: J( S6 _1 k8 S7 S9 [! b
& C0 n7 b& \$ o4 ?
先说说如何下读/写内存监视点吧
- R& n; a; e6 z8 b4 n* E# c  P: A9 G; \! P# {8 x
监视点命令格式:wp <address>,<length>,<type>,<condition>
  M7 Z6 x: q: c$ x4 Q- y
7 |1 }  r* f) P# g<address>是地址/ v1 ]# J1 b/ x; N2 q4 L; d
, }. q; n5 _. H; _& j' Z
<length>是数据长度,长度必须用十六进制表示( P% f9 M9 M! r4 e3 ]
  A' X1 \2 G; f) G% b3 B6 K) Q
<type>是监视点类型,r是读,w是写,rw是读写$ @5 D$ m( b1 R* I: r* n! H/ S1 ]

( {+ D9 F; }7 `例子:$ U1 S7 l4 L, V$ Y5 X0 Z
4 i& m* a& N9 d
例如对ff8569地址下写监视点,数据长度是1个字节
" g* p- v1 a$ f$ }' s# }5 z; `1 j8 q& d% D$ x( o5 w
wp ff8569,1,w
& @  C# p3 D' F0 T9 ~1 |
' C, O6 B. E/ {$ H% F; f: e5 k' z例如对ff2235地址下读监视点,数据长度是2个字节9 a& B. S+ K# _3 R- {( M; {& ?

4 s' g4 f3 J, ]: mwp ff2235,2,r; Y; |+ ?# n3 ^' E, D  E( N1 e
) s5 k6 O8 p# u
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
4 T6 v6 Y0 f" g6 B+ B( J/ M0 O/ R; t% o
wp ff7533,1,w,wpdata == 0
0 W, ?, u7 I. e6 o' h# y# U4 |- r1 s4 d  V5 T9 X$ g* @: [3 i
以龙王战士日版为例:
. A  Z6 T7 o7 M5 t5 t! w9 }
1 @% D9 k2 F- ~1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
3 p, P, |+ z- R- k3 ]
1 a9 c0 {5 U$ T, j
- H$ U) b3 T% ]3 U8 z0 Y. o5 T! \# W

6 A( y6 ]" _, g; @& V2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
: d. V( O* `* T% Q! l4 Z1 o: D6 A5 _1 z+ C, W& |2 F" d

: ?5 F: O1 ?. O. k/ B
& @' g( ?: W% A" t& Z5 U接下来说说程式地址断点
0 g8 X! u! n' m+ R  w* s. y: p3 d- p/ @" T, a3 i
命令格式:bp <address>& p% x6 {9 `: G& V, [
; \' n6 l" E4 }& r9 @
例如对000488汇编指令地址下断点
. d! O- u2 S4 V% ?2 E3 R: `  n* t. U2 N! a4 }' Z
bp 0004889 u+ N9 q% K( e1 V0 f1 u  e4 k
- b3 T0 u# b* X) \( r$ E
当程式执行到000488地址时就自动中断/ A8 v2 t6 Q5 q9 V
/ `9 M9 b' T1 y* g) e
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
. `6 U* A' }1 m7 d: r( }& n3 v3 B' b: b1 y" @# I
有错误请指正。
5 A1 S' {4 ^4 z- B4 B
* m3 k* }- Y9 s2 s1 h补充一些命令:
: v3 |2 n* S7 ^5 w- d; o1 @
+ V* w; s# P# H, A( L& i  _6 H"wpclear" 清除所有监视点* O6 t/ @& o6 Z( H6 X
"wpenabld 数字" 开启监视点/ r( n  o0 X6 j0 H% H& H$ G
"wpdisabld 数字" 关闭监视点
! C2 a" `7 z2 H& {; i$ p3 X8 Q"wplist" 显示所有监视点
; A- s/ Y6 {4 d8 q6 d9 F! {& s, `
"bpclear" 清除所有断点8 [, {: E! E1 v- u; w4 |3 \1 K+ }5 T
"bpenabld 数字" 开启断点) E6 Z' ~" w2 {6 l5 ~% _3 }
"bpdisabld 数字" 关闭断点
1 E6 n4 }7 B3 B# r: B# ~"bplist" 显示所有断点# v% G+ e5 X+ W- K+ l

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3369 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽" r$ E) I, ^" m
* S! Z  r4 t) K/ F
以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1930 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2554 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
7 u4 ~+ H, B' \1 c  B8 V9 C8 \% J5 U: X
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
5 d  X" I; s- T1 K0 j& Z$ U! Z, U% q* t1 t8 }
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
' x; j+ \. R0 e
. c/ ?. h, J/ J. LCheatEngine搜到的临时地址当然无法对应MAME的内存地址/ U$ f- [7 K! K2 X7 R# h% F

- p  k! A  s9 y; u新版MAME没搜索引擎了么?
. Q6 y  C' R4 b* t0 {晚上我看看* ?/ ?5 l- F! [# _

  R3 \. G) v- T+ [* C( t4 x6 a* M! qMAME查看地址的功能还是有的8 S- L+ Y0 i) ^* y6 n! y7 {
菜单里的第一个选项就是显示内存地址
% w. K# i3 @  q7 K, X+ o4 w6 G不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1930 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:4 _# R4 g+ L9 A$ U0 P7 W$ ^$ a
1.DEBUG版MAME有作弊码查找命令
' X- _7 n9 D- `2 B' ?: M4 o6 O3 U9 {: R! p) p# m* W' ?
命令如下:
$ X, O$ P- D% D; lcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]$ t( A* @3 m. u9 L& Q! Y5 f2 A& Z
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型- S" Z3 x8 @! \  V( D8 y
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)' `  @0 i: S  P( ]8 D+ c
<swap>是决定字节是否交换
3 z$ c* y# U% j<address>是地址,地址必须用十六进制表示,例:0x100248" M" o3 y, q9 a! @( F$ ]
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
, M  }, C0 s4 h% R) \$ U# m$ t<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU  A, |% w# Z8 P/ m3 D

% f' v1 y" R* ]7 r+ `( _请打help cheatinit命令获得更加详细说明; x- Q' ]2 u! ~" X
! Q# w' q/ a: B; b+ |7 W
cheatnext <condition>[,<comparisonvalue>]# ?/ u0 Q; G- h4 e0 d
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
9 u9 i) F5 S, P7 x( I( w[eq]是等于- t. x% D) d5 d3 s0 v  x6 }& ^
[ne]是不等于' @9 G* V) M2 k2 O; r9 W4 P5 b
[de或-]是减少. g3 J. T9 B7 x7 b: t/ U& p
[in或+]是增加- Z" l9 T3 y0 ~1 |  H1 s6 m  F# `9 @
[deeq]是减少或等于
+ U- y- o( w8 Z) A. E$ c[ineq]是增加或等于# z  m7 p0 z7 E: d9 }5 u/ d
[lt]是小于
2 {' p$ I( a* k5 n9 z4 k8 K4 O[gt]是大于: E& ]& F: |  l
[ch或~]是数据有变化
6 b* P6 {8 {& D  V8 `( r0 j/ d$ z. a, L1 W
<comparisonvalue>/ Y# C% [; ^- X/ \8 K# f; ]
要搜索的数值6 D+ i" u4 x; V' h" y  B; f

4 U) o( m' O6 }8 P请打help cheatnext命令获得更加详细说明4 U. `9 X+ \0 N& P# n

7 V8 O- f2 M) y# i4 gcheatnextf <condition>[,<comparisonvalue>]
! M5 N% U' x+ G* O7 R说明同上5 \& _0 b" r, C( \

: j; _5 r$ Q1 L0 t6 ~请打help cheatnextf命令获得更加详细说明$ `/ f0 J7 S* Y

* V5 w! Z* s( N1 Ncheatlist [<filename>]7 O  s( v5 ?! Q% n, X3 y
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件0 T1 N- ]$ ?; z/ U! P0 |2 O6 D

3 b7 t; L8 c& f7 Z" b7 d. g请打help cheatlist命令获得更加详细说明
: \- N8 K) h# I6 [1 V7 y- ?( u: S
& ?# f/ S; j. c* \/ j+ N7 l/ \9 E, _  G第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化3 X$ h1 I% v* R2 d. G/ U9 D9 e% m- h

% B3 H3 v! P+ M( @. \之后进行第一次数据搜索时要用cheatnextf命令来摸索
6 D$ |+ p4 s) P0 L, o8 e" J' h' X
& R% q1 @0 u. E到第二次、第N次数据搜索时要用cheatnext命令来搜索* f" D# W  o/ \% w& c

# d/ T. T/ \! p) L举个例子吧:" k" R3 J5 S# ]) z$ O0 s

# t1 V$ @% B) [以合金弹头X为例:
* |' ~1 A3 |) Z( T$ S# d; I1P生命数是29 U3 ]; P, }$ T/ a% {
& C% p3 E: A( |8 M
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
+ h& o; P/ k; ?8 U) N: b9 z, ^& t7 l! W; H
命令如下:
- p& ]) y( `$ |: ccheatinit ub,0x100000,0xfffff,09 \* z& I# d+ r- X- r3 z' C
$ G% E, o& I3 [( d" ~
再用cheatnextf eq,2命令搜索生命数2# _' P) r3 {. ^3 k/ \

' D. h( `  A: W) Acheatlist显示搜索结果) \$ a3 G1 J$ h% }" r6 ?

  Z" ~; U* H( G: Z1 c1 ^, I死一命后用cheatnext eq,1搜索生命数17 J, \$ w; _) R

+ K4 o- @0 i3 L: t) |: O5 r/ ~3 ]1 |cheatlist显示搜索结果# A7 v6 m$ ]$ z9 i+ l5 M
.......
0 D- N* P! a* n' P直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
% n3 G& {% H, |$ U% J" o- Q, b7 C- z7 {6 F' [/ X8 |  t, J4 s
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
9 s! u. C6 O& f0 E/ X& I  C0 b6 i" q, R6 f2 r# G
没作弊码的话....! ]) d1 v1 A5 T, M$ E( k# c% S
' l& n( p1 B- _' b
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)0 l4 G# H, O+ _; |7 R5 ~

1 S" ?) k) L; D  K5 l- m  V或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
  Z9 K, R! l, x, D8 C$ O1 Z2 a
7 K8 |; c5 G# q. Q/ }2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
" \) }% H7 T+ D% N- Y0 x$ T% ?8 {5 r, {2 F2 {
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

! T4 G7 z4 `& q8 S3 x: y
1 W$ {) x0 S& F, n8 a/ B. ^+ j回114:' k0 x& X& Q' v, Q
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
+ ~% F2 k0 \: r" h2.没地址如何查询地址?看上面我给zsyf的回复

0 R! v1 _8 P1 c- {& w3 m3 a' O5 n4 f) ]. S, I' R" H9 S7 ~
打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2903 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-23 11:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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