EMU618社区

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

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

  [复制链接]

签到天数: 2216 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
& O/ Y; a! Z) x8 O& K
5 m* T2 n3 r! h3 x2 `(1)如何加载ROM( A3 c; M' ?1 w5 t, H; x1 E
1 g( n; b) Y& n& y2 p# r  _
先说说如何加载ROM吧
& {4 P5 Y; R4 A8 E) Z
  E* i7 b; |: o2 F以MAME 0.148 DEBUG版为例:: T4 I% y+ X0 N6 R, R7 H

8 ]) E8 b* P. N' O- e3 l1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html; h" H3 W, `* H$ g0 U" Y
7 N" a! u& r2 b' w. I
注:MAME官网的MAME是命令行程式,没有GUI。) T- o0 t+ R0 I2 ^

" E! A% b/ ~1 A: y8 o4 Q2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;- u0 C1 g! f5 H. F$ M
" _! e+ I8 ^6 C  A& R
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
" |! h3 [5 f- ?- H- o5 z4 K+ H6 o0 u! O% S6 [% x* y
d:回车
( B8 K1 ^+ [9 Y) s$ P% P
3 z0 L1 Y7 h8 H5 S6 }3 m3 P: |cd mame0148b_debug回车5 ~) F2 y' v  `& h- }

) j' r3 x+ G* a9 z% {8 O2 S如图1:
0 X' C" S6 p4 g) Z
: y  g, V& g% I+ m. ^* j3 n1 T* r2 ?$ F3 t- W# c2 b
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:9 ^9 e7 p- M5 F7 D4 r; ~

) S5 x1 s% O# i- S' G
+ _5 E' E8 C; \  g: L9 W8 B1 m) ~( e
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
" D% E8 H3 s1 {& e0 U9 z( s$ U
5 v0 s5 b  ?) [" r6 k0 d$ c9 o6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! m7 P$ _8 O, ^  d$ |, ]8 x7 x  n
3 P" H6 {( y/ U1 ~2 R6 k(2)如何呼出/隐藏调试窗口
2 B. F% Y! x$ n) I9 x$ ]) W, X: y
5 H: `( x3 e' `' g2 `( k1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
1 V9 h( [. `3 R# N/ ]* ^5 H
( f4 ], S7 I* j( {8 s& u& f. k0 W" _; N

5 ]7 \7 {) a+ |6 |2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:0 b7 P; c* z7 y
' A* x5 g* ?( f( _7 q
# K8 D  \8 n  o6 j0 V0 c2 W6 m% f

- ?$ o5 m5 M1 z" m. m+ j3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
8 [' c7 j) P& J: r3 B$ ]# T- w# E+ I, y/ a
(3)如何下读/写内存监视点以及程式地址断点
% `+ o- R" d! p) E; w: [0 m4 I4 j6 K! F7 c. [2 t* z4 u2 v
先说说如何下读/写内存监视点吧! y$ H( U2 R9 U# z# _* i" {
9 V" z$ t( h7 u4 C
监视点命令格式:wp <address>,<length>,<type>,<condition>9 Y0 ^! p# Z) X8 h% F% T' d* \
0 C3 W& N5 B/ q! o4 m' O. T! q1 t
<address>是地址1 O3 o, W$ V# ^0 S

" ^, p5 D3 [7 R<length>是数据长度,长度必须用十六进制表示6 i1 u, g. u1 o* Q8 S

& [3 j4 H8 j! U, j<type>是监视点类型,r是读,w是写,rw是读写
* R: I8 o$ N% q+ i9 H* `, t, \% G" Z$ ^' U
例子:
5 a7 @1 E* V0 R* c" N: g# V5 I2 X$ O& c9 K: w2 \  h, i
例如对ff8569地址下写监视点,数据长度是1个字节2 c5 Z. j( G) H1 R" c# M" x. s
8 X- D8 x7 F$ D" M8 V" p# i
wp ff8569,1,w( u, M' P$ P1 S" B& g

' u6 @* f6 ~7 f- K, ]7 k5 i% O例如对ff2235地址下读监视点,数据长度是2个字节
: c- p) Q/ @7 S3 s( |/ Z  O# @# \) `
wp ff2235,2,r
8 y7 u, c( T, O! N) F* {
% ^2 ?7 k8 M2 ~例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
) }% p% |4 E0 c- P5 R9 {: c' q" W8 e; q8 P1 t6 B. X
wp ff7533,1,w,wpdata == 0  C; j0 t  O: V+ O( j5 R
  j! U" x5 x: R" X# V2 [
以龙王战士日版为例:
7 ]5 [# U$ y- m/ M) p: \. V/ p1 l& k- V
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
7 H* M9 k) O+ a1 R; b
) Z. j, L6 S9 _5 V/ V! m9 \2 G' w8 ~! ?5 l4 w
1 h2 `* S8 u% {9 u+ w# U9 \8 ^

: v4 V! m$ Z0 Z2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:+ i) h% k5 k2 ^
8 u7 Q) P. ~$ O: Z
: _2 \. G5 A* V5 n3 @8 S) h

$ B! N* }5 ]; I6 v) H- f1 g; s接下来说说程式地址断点/ Y# ?4 B1 B2 Z8 ?* k# R# q9 Z8 g
( |0 t2 R  _  j% |% I
命令格式:bp <address>
/ b' I" y$ Z: f
& b5 K5 P/ W+ z, L, M/ v例如对000488汇编指令地址下断点( F& T. h# g3 [  P0 y% C7 i

4 V: y' x6 k. Pbp 000488: M7 z0 P  ?" o% g- _
, m: S, H; @. c! a: \9 ]
当程式执行到000488地址时就自动中断0 G  n! M# ]( x

% Q$ v; S7 d7 L7 c7 P更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
/ L9 w# e2 E, l; e' M+ |2 @1 q. e1 b; b& E2 \/ s; g' o; A
有错误请指正。
, v0 ^& s- l9 _8 \3 D& O
+ ^% a: Y; U& ], m补充一些命令:. F, U2 K; X0 p, U. [/ U

2 C5 ^% ?" S4 w' `: z"wpclear" 清除所有监视点
1 L3 c8 d0 B$ F  K"wpenabld 数字" 开启监视点! d/ W, G: e3 F" \
"wpdisabld 数字" 关闭监视点
( p& H6 @% s" j; m"wplist" 显示所有监视点
0 ]% Z! S" i. S, e1 ?/ A# ?: T+ r& u0 @) f* n- ^7 p( {
"bpclear" 清除所有断点
) ?: y9 @# v* u! u"bpenabld 数字" 开启断点7 p8 V3 j) J, i
"bpdisabld 数字" 关闭断点: l% A& h: W% a8 t4 }
"bplist" 显示所有断点5 r& e6 j; l& s+ D

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3661 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
8 J! H  \" [0 @/ F: j' o; H& U) v! [# [3 m  B  a. M* C
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2216 天

[LV.Master]伴坛终老

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 2 b- H) e% e: _( ^
* H$ V8 \( O! v. R- S$ C+ K$ m
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
8 u4 n" A3 z2 N8 u. a4 Z) i, G- U5 L+ j) d
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
1 y! w: Q1 S7 J0 Q
- m) j" R: f! M- Q3 V( VCheatEngine搜到的临时地址当然无法对应MAME的内存地址" E3 J  _* w# K9 \

. `8 n3 a0 O/ a! V9 R6 E) A; c; B新版MAME没搜索引擎了么?( K  Z: m3 D7 y" e9 i: t! I
晚上我看看
; M5 m1 r% [8 N2 Z  C6 q# n( E( B0 e& D* D6 k  [
MAME查看地址的功能还是有的2 f& X/ Z+ E' b* Q" v5 o4 t
菜单里的第一个选项就是显示内存地址' \: J, ~- r7 H# G
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2216 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
; L) f! V5 C/ m3 z0 |9 ^* J' ~- `
1.DEBUG版MAME有作弊码查找命令" Q* K$ n5 G0 n' d: y! V0 w

+ h4 k4 f0 \' l5 `0 W4 M: y" e命令如下:5 c7 z1 J9 j# y' T! p2 E) y# Y  L
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]0 w3 J8 Z: v& i5 z9 C. i% l
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型6 T* _6 `. y1 I/ b. z
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)) O) }3 R4 o" y0 M* h' g' g# X9 v; n
<swap>是决定字节是否交换
9 }% O% X: b! z: P( v3 U, Y<address>是地址,地址必须用十六进制表示,例:0x1002489 v- \# W+ x: M) y2 ?0 U0 U4 a
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
& d7 k8 \4 V2 N% H, A<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
7 x0 ^: m/ L3 @2 V$ M! }3 G' f$ L4 R  `6 {0 A6 ?. g
请打help cheatinit命令获得更加详细说明
/ r" R  r+ ~- Q  v
; B* `! V0 l8 icheatnext <condition>[,<comparisonvalue>]9 C( D: U4 ?" \' ?) w
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]* o* ~  C; O- g( w; J0 C
[eq]是等于
6 C2 z) [& V) c6 E8 z) t[ne]是不等于
) ?: p5 C2 ?* T' i9 F% j[de或-]是减少; p( n8 p/ w- X- T# X: y" A1 G
[in或+]是增加
0 O! |. a1 R1 S2 W) W[deeq]是减少或等于
  `7 W  C" ], z9 N; v, ^[ineq]是增加或等于
( r7 {3 r) a% X* J- c) y[lt]是小于
. |6 s- |- o/ [* Z1 q$ q[gt]是大于. ~8 I  u* |# _, U4 h# I
[ch或~]是数据有变化
- {" D& p4 a6 r6 _
3 r9 h: g$ y9 W( J* n* N- |8 V) }<comparisonvalue>/ F7 W" G' r. u, a
要搜索的数值
0 k8 [* \( @! A' O* [( m6 |! i# v
2 b+ x/ b! T; _9 i请打help cheatnext命令获得更加详细说明
0 m& K& y% @/ c# @2 `& K( l3 Z6 D( \% A& K
cheatnextf <condition>[,<comparisonvalue>]) J: K* H6 x4 e  {8 t& j
说明同上
4 J5 x. H  E, Z  T9 v9 K
& Y9 k  d' h+ D- p2 Y请打help cheatnextf命令获得更加详细说明
0 t- v# P. E3 `9 r" o6 a) G8 |3 R% J- v3 K3 t; l6 R
cheatlist [<filename>]' c# B+ `1 b8 z! n2 D: q. q7 w4 u
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件+ Q  M8 \: P# l2 o+ T4 a

' |2 R: I2 g9 W& Y3 y请打help cheatlist命令获得更加详细说明
' F( u# y( b) k) P( n3 a9 t& U$ A: z6 a5 \* h( H+ \
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化" M. N! r# y1 }3 U* W" j2 g

' f) p& D0 T0 |3 b之后进行第一次数据搜索时要用cheatnextf命令来摸索3 }0 X, _' B) m0 d$ g
  K; R) t1 ~3 \3 }5 ]! ^) h( R
到第二次、第N次数据搜索时要用cheatnext命令来搜索
) W  h9 T- F# g7 ~% M
& h4 }9 o: J  e$ F2 y0 _' N2 {8 z举个例子吧:
1 S6 z8 r& Z# w
- X  T& p1 J5 \3 Z' d3 R& Q以合金弹头X为例:9 a$ U" C, @1 ?
1P生命数是29 A9 L. A4 Z; W& k- H) C
& p* B" h8 F: f
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
5 K5 F% g3 K% ~% t
9 O2 b0 y) {; a命令如下:
0 s* r! U8 h: kcheatinit ub,0x100000,0xfffff,03 O" c  b# N& I% e6 Z
% q; @# S1 [- I( Y1 C  j
再用cheatnextf eq,2命令搜索生命数2
% g+ ~" H8 o6 H( X  A3 s$ `: e4 K6 S: s: ~$ C
cheatlist显示搜索结果* V) ?. D6 C2 \" Y9 d) b  z5 a

" @3 e2 J6 ^' O0 T% X3 a死一命后用cheatnext eq,1搜索生命数1
# e2 }5 p4 p+ b0 p: d. B+ S& _  ?% ~8 ^2 P8 m' V/ n$ H) o% n2 `
cheatlist显示搜索结果
) W- ~% N4 T7 ^# w3 @7 _.......
+ H, h3 |) G' ^9 C2 X3 F直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
/ A4 {$ X$ l; J1 b7 f/ J+ R. g
& P4 d2 c, P; x1 G, |还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。6 ?# ]7 o6 z" r+ U8 G! G" I5 u4 j
) H6 w; H* ^' C7 t/ ]! m/ S
没作弊码的话....! z4 v& H* D" m. A

8 S" k1 W; K7 {7 Y) x不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
5 G8 o$ X  r# e0 ?2 E5 G2 o2 ?5 C. B; P9 z" x+ C
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
/ h8 E1 p" o2 M  K5 Y% |
. }  i' @& d) d5 v/ u* n2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行! h% N  K6 G8 A8 E! x
/ M3 A" P! V2 B6 N3 [% ^3 y
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

5 I' v5 D& G4 `7 Z1 h
. P1 s1 g1 w. k0 k4 e! c* Y6 ]回114:
6 n4 {1 ~% M4 F0 q" h- b& V
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
3 ]3 R5 r9 _9 S" O2.没地址如何查询地址?看上面我给zsyf的回复

2 p( F( z' q1 N9 S0 }4 p' _" j) c3 m# I" z# ^  U9 o$ 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. 幸运榜 / 衰神榜

签到天数: 3178 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-8 14:21 , Processed in 1.099609 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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