EMU618社区

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

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

  [复制链接]

签到天数: 1826 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
8 x! j" l0 {- M
" D/ J% j2 p5 J1 W- a7 W, V" Y7 b: ^; Z(1)如何加载ROM
% D- l4 x  d# z/ r8 z4 P) m/ I4 F/ d' z6 W  U) ~/ ?
先说说如何加载ROM吧4 A6 Z+ u6 u6 a7 Z8 l8 d- E$ [$ u
; Z- T9 B# Q+ O( r4 V; a$ ~7 ?
以MAME 0.148 DEBUG版为例:
* Q6 [; ]  I3 N+ i# R% n% s* T: r5 `8 s" B; Z/ {
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html8 Q( x$ D& O4 L6 Z6 t4 ~# n
. Y% X* I9 c; y5 R$ p4 b0 O
注:MAME官网的MAME是命令行程式,没有GUI。
+ Z& p* A) K' w; {& V0 T
. u8 u+ u" Z; D$ Z2 @( m2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;2 L- K* ^% h  e3 H* C% U1 S3 N

4 w/ G& J3 C# f# K. l3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) U9 D8 ?% ^8 n* e0 o0 Y, T! g
+ p  [: J) C# F& {: y+ {
d:回车
7 }7 X1 l; c% ^0 W" N5 ~7 ]3 B, C  I, X
cd mame0148b_debug回车
* j8 N( T5 I* c) i  ]% x# F' C" t, U* R
如图1:
7 m& \1 p8 P2 T7 D9 t
+ ]5 r0 j0 N; p; t% B; z: k, \! `, C* a( }" i7 }& y
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:6 c( D9 c& J5 V! Z2 k
; K% ]( P. M2 S( A. ~: q8 g
" g) P1 p) I$ Z8 y  f1 f3 r

, J  k' j8 E9 R' q5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;. _% q1 h) o$ Y6 `  T% l" F

2 S) v( A, t4 W9 f3 |5 A6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
& x- D* }4 Z6 Y* a/ u8 k
( Q' ?( J6 @" f$ g(2)如何呼出/隐藏调试窗口
. }1 A2 c7 R/ w  k- j! C
2 j; P/ h2 v' q) }2 f1 v0 q% d1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:& X2 ?% Y- s- g9 q# p3 I& F* ^1 Y
' _. p7 w% H1 X3 w! Z1 O* W9 ~5 |
: Z* G& m' ^9 W! C- l+ M4 A" j
+ L# j2 \- {5 t7 }4 W; R
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:% t2 B& e" g$ S, m/ W( `
: E- w& Z8 _; [( z
7 E- w4 `3 U  U( Y7 c
% j3 Q3 I" E+ L8 F, p* z* Y
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。; p2 b! v/ v4 N% H

; G% L* w) o( ~2 z6 u(3)如何下读/写内存监视点以及程式地址断点
* {1 V* W( K0 ?3 n* d  f0 |9 G8 v# b* u9 X1 G7 m/ I. x+ [
先说说如何下读/写内存监视点吧+ C+ s2 [2 a( `6 f' M- _
' N1 n8 v& {' c6 u1 d7 {! K
监视点命令格式:wp <address>,<length>,<type>,<condition>  f3 q+ [5 Z: Q2 r! G

9 ]- g: b& W; h% V9 ]) T( z) n3 g<address>是地址/ ~; Q- x+ H& o" Q1 f

. i7 n- D1 J) T$ z8 q<length>是数据长度,长度必须用十六进制表示
# x5 j0 S9 X& c1 o7 ^% ?
, b! ^" L' ^* E4 B<type>是监视点类型,r是读,w是写,rw是读写
; ]3 E, l+ }' d# R% r
2 n7 l3 J' H- F; [$ @例子:' @' r0 K- F+ k. \0 {" P; C

7 P' Q5 q7 Z7 ]6 Z例如对ff8569地址下写监视点,数据长度是1个字节
' X( l8 u' H0 N
% q( ]5 N$ P/ ~. e9 t* xwp ff8569,1,w
$ f+ {' v7 E* d& l: V' T
1 k4 Q4 b2 O: M+ K* U例如对ff2235地址下读监视点,数据长度是2个字节. {) x+ e4 C; B0 P) P7 G* m1 D

- B/ l8 Y1 O  D" O7 ~! z& g* p2 Swp ff2235,2,r
2 W. [2 o2 b; |% |8 l6 r
% }( j4 e6 j8 y5 v/ E' n0 R$ Z例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
: [) a3 x6 I8 z8 Q+ p5 s+ s" u1 A$ a; |6 }, s. i8 Y! p  r+ v
wp ff7533,1,w,wpdata == 0% P& ]2 ?, {- i2 l
0 ^4 o# {5 h. E9 Y6 W& [
以龙王战士日版为例:
1 A3 V! S" n0 F' E: W
" W+ c" `8 N+ x) f1 f+ h% W1 T1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
8 m0 v5 j' O2 s3 x1 Y, F2 W
2 ^4 s3 C4 v' Z5 V9 S
& n; [1 C* ^* W
- Z6 d( x3 G! I- J( Q6 J3 |+ F
4 r, _7 x0 |0 t7 P4 j2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
3 l' G2 k( r0 x) p* H! P$ Q) b+ _
2 G& @/ [0 S) u# B' L! q; z1 t4 D6 [; n
! h- G! k3 M; J" B  D  R* |
接下来说说程式地址断点  ^+ {5 s3 Y7 Z
! Q1 c6 n6 n; n+ P  o& ?
命令格式:bp <address>% d# O0 k7 u/ f5 {9 h+ q# L
9 n8 s& H# N& |( C/ P; x/ {
例如对000488汇编指令地址下断点$ i; H% n/ P( t3 X# j  m

7 M/ g  e% h. |7 ]/ z" j% Abp 000488
2 c9 m7 v+ v0 [& X8 U  a1 g1 x* n* p8 A6 _; Z1 N. X( M
当程式执行到000488地址时就自动中断
% z- t1 @8 ~" t5 Z: Y
# [9 I/ I2 A; j* E( Z更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看* D3 f; t/ R3 O3 U8 d3 e
% ^0 }' {! T# R6 D+ Q
有错误请指正。+ ^/ j, W4 ~9 s' L; Y
. T; J4 i) C- c; O* S! a
补充一些命令:; J# B* S7 w& \- j. ~

/ B% z' p0 U% @"wpclear" 清除所有监视点8 l+ o5 e0 p% _; T
"wpenabld 数字" 开启监视点
1 K6 O" ~& d. s. R7 C8 K* P7 S/ L"wpdisabld 数字" 关闭监视点4 {  z7 c  ?/ A3 F' |' {  o
"wplist" 显示所有监视点
9 R9 W6 \  B. \/ e+ u4 ?6 P0 ]9 a
"bpclear" 清除所有断点
; c8 d- t( Q/ v7 y. n"bpenabld 数字" 开启断点9 Y* e3 }2 i( ~' _
"bpdisabld 数字" 关闭断点( k6 x1 T8 }! v
"bplist" 显示所有断点+ F9 L) f; f! y2 d2 @

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3270 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽! c' I8 B- \( l0 Q6 @
. R5 E+ a2 g) X* ~$ e- p$ m
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1826 天

[LV.Master]伴坛终老

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

签到天数: 2540 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 ; c) ], \( p2 L+ U1 B
" H+ L9 r4 y, ^
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
. e% A2 G" N; Q
% i3 B; F: j( X6 \0 [/ S8 Z其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 # {8 Z1 ~. x  T/ K9 C
3 q  a# n5 x. z8 ~
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
$ M$ B' K' p4 ~5 ?+ ]4 z  O; l! F' x7 Y/ i& U, b4 }, P
新版MAME没搜索引擎了么?0 V$ L; b2 L' y- G
晚上我看看9 J: B- C. |* W6 c

8 T7 v3 |9 W( x8 d/ i3 u& YMAME查看地址的功能还是有的: K5 `; F. O- |6 s5 m; o- Z
菜单里的第一个选项就是显示内存地址
1 v1 t" |  o- P/ n4 l4 R/ ?' g不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1826 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:9 X, C# i+ e1 \% I* @6 }2 @/ m
1.DEBUG版MAME有作弊码查找命令
" F- l1 Y6 t7 l" ]+ k/ T& {) K, c/ S# d' E* m
命令如下:4 a: F; S) s9 g% B$ s
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
/ I) m, S* I. w# g. Y4 q<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
+ X' U: |2 x, V4 o+ ~; u' p<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节), U2 F! I4 a% l, @3 P4 ~' ^6 S+ _! ]
<swap>是决定字节是否交换, W0 H$ Y* q6 R6 K  O) |
<address>是地址,地址必须用十六进制表示,例:0x100248: D0 S  O% P& R2 w
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
) M6 G0 K& F7 j1 _  T+ A( [4 f8 P& Q5 w1 _<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
, r& s2 r! A/ `% Q5 h1 K! h; _+ P- ]- o0 J( D/ r
请打help cheatinit命令获得更加详细说明
3 w9 }, Z# a( p. S/ y8 O) i; |6 G' s( r( c3 N6 x
cheatnext <condition>[,<comparisonvalue>]
: ]. h0 T* w6 j; L/ c$ M, M<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]; x1 B0 H3 y( [
[eq]是等于
, o  _& @7 B3 M& p: Z4 D[ne]是不等于
3 n. b/ x6 U( K+ w$ M[de或-]是减少
7 |6 u( b6 z+ s  s. [4 Q& ?[in或+]是增加
; @$ t1 N, V: z1 ~[deeq]是减少或等于
; Q- p! ~3 E4 e* c8 E8 g5 f[ineq]是增加或等于
$ C' [& \; m* t& Z/ H4 o% M% q[lt]是小于9 N# w7 r8 z* m# Q# a4 s
[gt]是大于
5 g: s7 l: h* |[ch或~]是数据有变化
* a8 j& D# u7 \# N; k" l9 O9 V8 A6 g. a+ c# @
<comparisonvalue>- G  p  C# s. R& K
要搜索的数值
. S+ w3 K* V! a7 C% r5 ?) O7 N7 f: }/ B; b$ W8 R% V8 F; ^& k, T
请打help cheatnext命令获得更加详细说明# {* h& c1 M1 y; w

9 X$ ]* T. }  l; o5 E  s' t; g% Xcheatnextf <condition>[,<comparisonvalue>]' k8 {7 G0 [0 U9 ~
说明同上
9 b, v* J4 _' S
7 Z: m% t  b) b0 V& e: u$ h请打help cheatnextf命令获得更加详细说明
9 W9 h9 j" \3 ~! K$ X0 |$ [. N/ _% j" x5 H; V( r4 H
cheatlist [<filename>]
0 p; z4 a& _3 F6 A* r* m显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件: e  B# a! t- \: r9 j
1 V* `* Y% G4 w' \6 w
请打help cheatlist命令获得更加详细说明- B# A- S6 s# t8 C# X

6 g3 l2 i/ n/ e" J" }第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化: t! L7 y$ ]1 A5 y. l1 |

9 C$ O6 r; G1 u) K% v之后进行第一次数据搜索时要用cheatnextf命令来摸索; ]" S+ H& i7 b# s0 z3 {

3 G6 m. Z! o2 D. U2 v$ w6 h6 m, `到第二次、第N次数据搜索时要用cheatnext命令来搜索
- j9 t: w0 l/ a1 ?
$ c4 B8 q) X5 `0 X3 s举个例子吧:
3 ~9 ]; f5 U! ~6 Z# B7 `) z( U" g7 e! _5 i1 w- K
以合金弹头X为例:& [9 n0 l% O  |/ B7 i$ _
1P生命数是2. }( Y8 `9 Y0 _, Y0 k! q+ L

3 r! o6 `' l: E/ g' Z& x2 R3 A% c$ c先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间0 K* `3 r1 q9 U3 h+ G. y

" I( D5 V2 ?2 T" }  n命令如下:
7 q6 w7 p1 k0 Bcheatinit ub,0x100000,0xfffff,01 v. M% O) H& j( E& W5 P2 e- I

1 A9 S2 ]# H! d) C再用cheatnextf eq,2命令搜索生命数2
( [, v" ?5 D( x% g  r. N: d: h2 n0 }7 K3 }# \( R
cheatlist显示搜索结果4 e% t6 {2 Q, X3 Y) `

& N: ]) A4 e5 W' w7 a9 m% E  L8 S死一命后用cheatnext eq,1搜索生命数1
) x7 ]7 m. C, s' a, p1 p6 m+ ?% P" q  F/ I& N0 R
cheatlist显示搜索结果7 M6 Z7 N2 t8 K) ^
.......
& k) |+ |* k7 H' b# K直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
: k9 j' \$ C! _! _& W  i# S) ^: ?: w: [
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
0 a3 R6 W2 b$ z, v8 n: i/ g2 e( ?% {7 z
没作弊码的话....' P" H6 D5 U) \: b

% h5 q' @$ ]' H2 J不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)% T3 N# N5 T2 y4 o; p; Y' H
+ C! l4 ]1 H! q
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)* K" H. c3 S+ L3 q

% ^9 W2 j, I( ~6 @  w  r3 O+ ~2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行7 X# x# _- R% U9 Y1 X

2 V$ N9 ~1 C8 \) n5 A; a" Z要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
+ A; H* |, P& I3 [) m

9 S- t8 C* o! ~回114:
& Q( |/ z" n2 p
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
3 b$ d* S% w' r7 z8 J5 H2.没地址如何查询地址?看上面我给zsyf的回复

1 J" I, P( T6 u4 k" s! n) H" X
3 H* y4 N: B" Q2 E0 r5 a7 ^打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2799 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-1-11 16:01 , Processed in 1.077148 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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