设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1930 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
  B4 c& q" D6 B2 N1 j. T  }
1 h' j' w8 S+ Z+ q(1)如何加载ROM
/ z9 O6 {2 G3 Y+ u* W
' d+ U! s: `8 `. U; n' }先说说如何加载ROM吧
) N* d9 D2 ?: R$ p: j; y8 B, D; _$ z! R1 c7 }# W' E1 ]( i' ]
以MAME 0.148 DEBUG版为例:
1 m& J5 Y# h4 |7 p! Z: t) G5 F3 N  Q) T* V$ h! {
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html5 ]3 d. S/ I1 y/ G  q; k' U

. l* n5 X4 J: X6 z5 W9 c# x注:MAME官网的MAME是命令行程式,没有GUI。
6 @5 W6 r% _. ]% ~" G' [. \
9 q7 X2 h+ Z- Z; b% m+ O5 c2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;+ V0 B, L, k  t& C, q

8 s) L* v3 M+ q. d) B: v/ k3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:1 [* a4 C  K3 T, r& e

; D  m# q: R) vd:回车
9 |. h6 m8 R) k& C
3 Q- ~5 m3 n$ m- o9 icd mame0148b_debug回车7 S  i3 m  L# L/ I- ~

$ @( Q& Y. ~6 s$ o9 p, x. E9 w如图1:
1 X9 L, p- H+ {# h( [& L1 L2 |# r

: {# S. |% \  I, H) V4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:) h. W1 ?+ V2 K7 f
# Q1 P, E7 J( C; T  a! w+ ?) j4 n
1 a& Y& \. {2 w" L4 P
6 X0 d) j; e8 g0 a. ]  _7 M3 w) u6 k" u
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;8 n( s2 J0 w$ b  q7 ]' I/ K) w
- ^" L# ~7 o* @
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。5 l& o6 x: Q/ r1 `
5 {6 ^1 b$ ~$ e5 d+ [8 X  V" {& f% z2 U
(2)如何呼出/隐藏调试窗口( C4 @/ {! O" K: L
7 j3 P' d& K) F* F, l- {
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:5 _* I) r& q# u4 M9 f. V$ R8 f

. ]: r  d" L9 l: v/ q. B/ f; ]; U9 J
! B/ O& ?" b5 R/ V6 M
" g" ?3 g+ r- k% f2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:7 ~% p' y- g1 W4 o3 j# H4 ^
+ g/ p3 R4 v6 m2 k3 o+ y
$ _& K! Y0 p- v. o$ s9 T

3 {0 A% _" X; f& k# U3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
1 ~+ h1 I: \8 y  G- ^+ F" u& E9 B8 e9 Q$ l- i# m
(3)如何下读/写内存监视点以及程式地址断点: I# t5 v- D: h# d7 t
% a" q# s" U1 E% ~" s
先说说如何下读/写内存监视点吧
1 K$ H! S4 ~7 ~( {
4 r! a' n- X# q监视点命令格式:wp <address>,<length>,<type>,<condition>
+ R: Q9 ~% e3 K0 e* a& M
8 e$ C- q2 P! m. Y<address>是地址, F5 M* D6 j' h2 ?$ |

# j& H8 [  y; i3 s7 j+ t& K- v: a" ^<length>是数据长度,长度必须用十六进制表示- ~8 n. ^; q2 D& r$ t* D3 E5 [- R+ o

  K* s1 _5 V! O9 c2 p" }<type>是监视点类型,r是读,w是写,rw是读写- y( A5 n0 h. D* D
' Y, N3 `1 y  k2 q  ~7 a
例子:
  ]$ Y" ?8 B& K4 p5 C" Y8 q) P
$ [9 i% _( U/ b. m例如对ff8569地址下写监视点,数据长度是1个字节
7 r7 h# z9 O! T2 ^/ j. @) S& w# ]1 v/ E0 R& T
wp ff8569,1,w8 X8 z1 _# u( o1 t4 D6 u
0 ^. t9 M' y+ M/ k+ i
例如对ff2235地址下读监视点,数据长度是2个字节& g2 h7 j! |3 c, y- x

/ W/ M2 A$ I7 Y; a! c7 k- _wp ff2235,2,r
, [" _- M" y; ]' g/ n. D* n
. s/ d- F$ Z* t+ H+ F8 a+ r例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
0 L6 ?2 a, Z0 q8 H' _3 H/ f5 Z& s+ [% g' v5 a  ~1 `
wp ff7533,1,w,wpdata == 0) B/ X) H; N0 D6 W
2 d2 \/ F1 y; G4 b# w
以龙王战士日版为例:/ b! a7 p; R9 ]1 w! p( i
2 c3 U# M+ M  p/ ^- ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:9 {: S# ]3 [: {1 X" }
. E  m. n  R9 i
, K& g/ I' t  C2 n

, y! t# c- i$ \5 y1 P. A
1 f! ?, f0 A  A9 v  h3 ~, h$ E2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# ]$ x1 b# Q  A8 b5 [( O8 ?! R; @% G3 R
# U! q3 c0 U8 @7 {+ f2 p8 j

5 A' I. D  E' p# k+ c* ?( I- l" ~# S  I. o4 |' ~0 P4 G& c$ w
接下来说说程式地址断点
/ e3 [& K: |& F% q8 T) |: W. E& r$ E) n  C/ L& D- X
命令格式:bp <address>) ^) }4 u  ^; l& A9 {; L" m: n( ~

: r% ]# s) P5 B例如对000488汇编指令地址下断点
8 c1 o6 C- M$ Y6 I# U, J/ H" H: y2 f9 D' G
bp 000488
6 [& O, h* ~: A  D1 z
0 h) ]4 Y6 }' w: Q当程式执行到000488地址时就自动中断: E2 U2 M/ `2 N+ d" v4 E
0 x1 N  F4 z# s
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 l! g$ ]+ w( k% j
( O7 L  X# D. @; F. y
有错误请指正。
- m% _4 G& O4 r6 y5 _) ?. h" ~# m/ p7 h5 `1 S' p
补充一些命令:' K7 k; y5 i! t+ k9 e# W
( T7 r4 ^1 l- }8 ~% h
"wpclear" 清除所有监视点/ G3 l1 V: Z: M9 ~
"wpenabld 数字" 开启监视点2 v  j3 e. \( Y' \, y* k7 f0 l
"wpdisabld 数字" 关闭监视点3 t% h5 W, E+ t5 n; \' K' M- @
"wplist" 显示所有监视点
2 S. l3 G. c0 Q/ d' M: h6 R* Q
* Q# ]4 ]8 S7 f! m"bpclear" 清除所有断点
4 j' F- g: K' _+ _"bpenabld 数字" 开启断点
7 H0 y4 z- m) j4 H"bpdisabld 数字" 关闭断点1 w. O/ A; A7 p
"bplist" 显示所有断点: R8 U/ h) n/ V+ ?4 i; `4 j& ]0 W" u

本帖子中包含更多资源

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

×

评分

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 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽! @+ z$ y1 I) |0 _5 m

& }) b$ [1 c0 }+ P. F3 B以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 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 编辑
5 z6 w: ?3 C" E, A2 ^" q# t4 B. P8 R* J) l5 a2 ~; W! C
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
" f  N) U9 |' n6 Z' y# ~
, {& q3 l* q2 h其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ' |/ o9 @. C! D8 m4 S  b2 W: L3 M
2 {$ f- i/ n2 y2 x2 ]: P/ i& j
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
0 y# K) B& F; W: G2 n& x3 E1 W4 a; u9 _  {
新版MAME没搜索引擎了么?9 g9 J; z0 J: c7 D3 o
晚上我看看
& W6 P- G9 r( Q' _) J: K, P$ T
! ]/ `# o5 [. e  V/ {# N. U6 g2 TMAME查看地址的功能还是有的2 F- g# o/ V8 j3 E
菜单里的第一个选项就是显示内存地址
- A7 ~* X% V/ l5 G不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1930 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:0 D9 Y) V. C4 k+ U. N
1.DEBUG版MAME有作弊码查找命令! f. i5 w  w, a9 A4 C3 z% g; [
6 Z. _# |4 [5 d: @, N) D) Y4 A
命令如下:
9 e  M% Q  Z8 e. z1 Ucheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
  X4 N. X  h$ e8 j) ~<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型5 q" r& z' B. p$ y0 r
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
1 u7 m+ F2 l" u<swap>是决定字节是否交换
' c3 M7 t# a, F" p( |2 O) ~. _<address>是地址,地址必须用十六进制表示,例:0x100248
+ O+ E' N" [1 f9 U7 K" H" x<length>是地址长度,长度必须用十六进制表示,例:0xfffff) S$ f; s$ \6 N# f) b& L( N: V3 d
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
$ W: L( {1 p( j/ x2 E( r( o0 G
& A5 l7 Q0 u9 a; p0 Q请打help cheatinit命令获得更加详细说明7 m2 h* w' Z. W. ?( Y7 b* V6 {

; j+ @3 F7 N+ w+ ~4 Icheatnext <condition>[,<comparisonvalue>]5 v. s& P% N) `+ w' j/ p* z
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]$ f9 E' Y/ q5 z4 J6 Q
[eq]是等于) q4 T) D5 e: H6 T' |3 l: R
[ne]是不等于
* v& N0 b3 I! a, B! ?' ], H[de或-]是减少$ ?! z' x6 J- g0 [. V
[in或+]是增加
5 E2 H* |( e  I9 @2 J7 ~& C[deeq]是减少或等于, _1 S# B3 Z* q' X
[ineq]是增加或等于
  |; T* e9 N+ c) Y: [# O2 X[lt]是小于) @& R! N/ n6 p* W+ R: c
[gt]是大于
2 U/ C: u+ |0 Q3 \0 m2 E1 g( A[ch或~]是数据有变化
0 G9 x9 ~1 [' P, y) P3 U7 x/ a' w$ {4 j: I" s0 I, c) X
<comparisonvalue>
% a- ~7 b; n) f0 C& ~! w1 T要搜索的数值. e* S7 ]. N2 ?- P
' `' j6 i4 n7 Z
请打help cheatnext命令获得更加详细说明
5 I8 H, V$ R! g! Z2 X6 L: m/ y8 I% p2 f" I: N# W' K9 @
cheatnextf <condition>[,<comparisonvalue>]3 `4 {5 p- H0 {
说明同上9 l- O3 |" S  P! f/ q; `
/ b# R3 K8 H6 v& s% g6 g' |# y9 P
请打help cheatnextf命令获得更加详细说明/ N& }/ F4 g3 A0 J

* Z  H9 c% q1 O0 l" B+ Vcheatlist [<filename>]3 |5 D/ v; i) ~& n: R
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件& p% s' {, r! H

- G5 ^) y4 U* a! Z0 F+ m) {请打help cheatlist命令获得更加详细说明
, P# G+ ^6 k& g0 J% _( ?% @! v! v% I' E$ w% Y" H0 ?; H8 x* H) ^9 v
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化: V0 H9 b- l# X4 \$ P( i! B
4 W3 A6 `' t$ B# O" f
之后进行第一次数据搜索时要用cheatnextf命令来摸索
3 g4 ~# y: z% |8 b- U
5 p3 Q2 K& Q$ a到第二次、第N次数据搜索时要用cheatnext命令来搜索
0 j, f  S3 \. ?5 D+ o' y% R) {5 [% u+ m; i
举个例子吧:! C& i) b- Z7 J+ {' x6 s; b
$ ]# S8 x. G, u9 u9 G; M$ m/ S
以合金弹头X为例:
* U. n! J* R7 G% D: z5 r& g1P生命数是2
! ?4 i; J6 a, S; R9 o
2 }0 e6 F+ g1 B, W" I先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
9 k! l; ?' _. r& q6 e) a$ K; {4 W  M  b2 }% Q" o- |, U9 \/ W* S
命令如下:
2 E, ^% e9 _6 z+ n1 z+ @cheatinit ub,0x100000,0xfffff,0& R$ i3 p, h* c% L# U

% U' N+ I1 s6 n: e, }再用cheatnextf eq,2命令搜索生命数2
  s) _/ \2 o( Z7 ]" k* U' l& \7 F& E4 f1 g
cheatlist显示搜索结果
" C& o+ v0 r6 K0 W2 v; L7 a: a) ^2 j7 N) Q
死一命后用cheatnext eq,1搜索生命数1- F9 s& O, D; ~/ d

2 z+ N  {+ q8 c. q$ u1 C, P# Wcheatlist显示搜索结果
) n0 u! ]! u; Y7 h7 J.......
* h0 T9 e) N9 s; M直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
/ i: S2 d- h. F
' H% w( x6 i$ B& _5 q还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。" x0 p) V: ]9 X' g9 w( \% K3 Z

# N: h% e0 G  ~没作弊码的话....
2 g; o& t' r9 S1 ^8 E" U$ }0 \' `! Z' {3 ^0 C: r
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
8 Z/ V0 ^) H( j  N, \0 S! z3 Y7 n2 _
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)7 J% c+ _+ C. @+ w8 `3 Q% u
% X% x8 W1 R' u( F/ G
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
, R# `$ c4 R$ d/ r1 E/ U
( F0 j' }" Q; h, @# q要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
7 i$ T/ y  |3 O- `- `

( G. w. A$ d4 ^1 R3 w回114:
9 [4 a. w* O& L. F
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)+ M2 C4 @; h; ?2 D1 i3 f+ G1 |
2.没地址如何查询地址?看上面我给zsyf的回复

1 x6 E" X( y  u2 |* `& I4 b$ o- f& ]  T# ~! `
打字真累.......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 13:13

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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