EMU618社区

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

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

  [复制链接]

签到天数: 2074 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
5 h; s/ k9 r1 _6 h+ d( L
% V7 ^$ E/ J$ ]6 I5 E  S(1)如何加载ROM# Y5 Q0 A0 W: V. L
( p) @; v1 v, }! G3 @
先说说如何加载ROM吧- R9 e7 f5 w' M4 M' R; ?
  _/ _; X1 A9 X$ n
以MAME 0.148 DEBUG版为例:
/ c* B5 I% `/ D0 u) y
- g& w- @  t) N3 w" P1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html3 M* j, q" l; _3 c

, S) l. a+ ~+ g/ o% S7 I8 ^  l注:MAME官网的MAME是命令行程式,没有GUI。
  \4 p) j, ^% I6 r0 E& `2 w% A! V6 D# W$ ]
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;+ r* W$ f3 C) ^. N/ F
( H  u: y$ |0 {- O
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:; k9 r3 Y- u# [9 X7 R

& G! B; I9 k' C0 ud:回车
4 y7 _$ X2 a* \7 ]2 s: `4 L3 C5 r% t- e# w! s/ I
cd mame0148b_debug回车
( f9 X& f4 O, Z& y
8 c2 o, m; f5 }5 R如图1:
# p0 W) F' n: }) A3 A0 G/ a
: \- I4 `* X' |! a/ E0 `- U5 R& p  S' W/ u; k9 c6 T
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 ~% P% d/ Q( V# I- J0 A5 V
( x3 E: a& t, [, A9 H/ h, _  X
; t& [5 W* O% L- `3 k4 v% z2 ]/ H. q# z- C, {
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;! ^0 O* G* |' o1 w% o# c/ Z: u
1 h  ~: R0 ]1 ?% H0 i3 X  ~
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。! [/ q; ?# E, Q0 c
) f# F% {" P) m* L% _7 _
(2)如何呼出/隐藏调试窗口
; e2 E  y4 J5 F9 O
# e7 l& c9 K: Q7 w1 S- f& Q1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:2 G( O/ ?9 M$ N

9 E- H5 ~  _4 n0 A  Y5 m' m  D: F- K5 \' W+ G6 t

2 L4 q0 y, i5 w# y7 |# a2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:2 a: p# y, J, O8 j) ^9 V
, h+ B  l" _% _. d% m

9 K: H! N8 ~* d
( \, m) M" i) P6 e# ~/ q! ^. x3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。: D' U% @# g& I( y3 W

. C: }! Y1 W4 N! t( G' m, w3 ](3)如何下读/写内存监视点以及程式地址断点
3 R2 ^+ y5 P& u4 J+ \; A
7 a8 \. i0 O  D% x# J0 [1 _先说说如何下读/写内存监视点吧
: T& Z: W! z* C7 C" G
- t, y- S6 t) x$ i6 `! Q) P监视点命令格式:wp <address>,<length>,<type>,<condition>
% f  Q3 v" N' ^: r  p5 a( q* i8 L, W5 I2 d) M' P% V
<address>是地址: ]" d1 P4 [3 R
) H9 o; s3 ^7 O) ^* t
<length>是数据长度,长度必须用十六进制表示
3 {9 Y& H6 A: M5 Z
1 z7 {+ w( J) g$ i: M9 c<type>是监视点类型,r是读,w是写,rw是读写
% D8 E8 p# B1 C+ j1 I; `5 z% R: x. \
例子:
' M4 `  n' U0 q# q; M* [! F0 O' i  W. Q
例如对ff8569地址下写监视点,数据长度是1个字节
6 Z, L$ T7 V7 i" L& {- [5 b2 C0 z6 n3 v! v& J# ?' x
wp ff8569,1,w
& R; N$ J6 J. J9 b: P" d3 r2 G/ W) v6 h
例如对ff2235地址下读监视点,数据长度是2个字节
/ F- u7 }0 h; b# Y: F% \
2 {& e, t6 i+ W4 y" b) s2 j' H3 y' Gwp ff2235,2,r& s! y; \. c0 L3 M; y+ ]" N+ u5 D: i

  R, G% T- Y  r例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断. J& j7 d* Q2 c: @3 V

) q. f2 V2 D5 V# Awp ff7533,1,w,wpdata == 0- z5 m- A" h% C2 N

" Y& |/ ^/ J. D! a) C0 |7 k以龙王战士日版为例:
) s6 v$ `9 n2 Z( z% i7 Y$ f
/ X$ O* L# d6 Q, \/ w  I8 [1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:8 F+ S% [* l! }" m& D

* R/ ?  [% `4 M( ]: N& {% ~" Q* s4 e* u5 }  V

6 `, r% v" D# ^, z7 L1 b! P) v4 U/ K
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:$ `, k1 N: s7 p% X& M- z5 Y

6 D+ E; G/ D' @* l  f6 W' S1 i$ W' I0 x( n4 f

+ T/ h: r! \/ D( h0 X2 l接下来说说程式地址断点2 _7 l, k$ \1 W3 u% a/ m, K) e

- u( P2 W, w1 ^& v. e命令格式:bp <address>- V+ W, C2 z+ s5 }. n

: B( M' D5 S  P0 Y, z例如对000488汇编指令地址下断点
  \# M& a7 j: _% z4 r
' i5 ~- C9 s0 u2 A2 ubp 000488
- e! Q& j' N$ Y4 ?) c" t! h7 V
+ x4 u6 z4 j# P! E4 ?$ z当程式执行到000488地址时就自动中断6 ?& j0 i  B# a/ Y, t0 L) E- x3 @

2 B! @& ~4 N1 X更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
. ~# H3 @# A$ J! @5 |* X4 o0 C  f( a+ c; g0 `1 T6 }9 B: Q
有错误请指正。1 `+ F. v( X/ y
1 M4 \6 d) Y  ]$ E6 @" U" K
补充一些命令:
2 P0 m6 M# m! Y  m9 ?7 l$ H0 u) T- V3 F' s9 W+ t% _. `% B. |+ ^
"wpclear" 清除所有监视点& }2 h: A- B7 q, }
"wpenabld 数字" 开启监视点7 S3 C" D. K/ l
"wpdisabld 数字" 关闭监视点1 H; S6 r. B- w$ a2 e
"wplist" 显示所有监视点
) ~4 d! {3 }7 z* }/ O& Y7 O- C2 }$ _" u8 w/ `
"bpclear" 清除所有断点
& Y5 A2 B2 k2 A"bpenabld 数字" 开启断点0 K% J. c) E  {) k- z
"bpdisabld 数字" 关闭断点' [* `0 n- l3 C+ K3 @
"bplist" 显示所有断点
, L; E7 L( |1 {' P3 a6 r

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3518 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽- R; T; n( N# n  [0 X4 C, C

' G/ Q% x; I% ~0 F  ^1 R; `以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2074 天

[LV.Master]伴坛终老

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

签到天数: 2573 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
/ @: u3 }$ x' h1 m, U' I
9 d$ \/ X0 u& M& f太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。$ |0 e% a2 }9 U/ l
1 [% M' w6 T( G8 O8 `! L; @
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 , C2 J7 b4 T( I( @6 I& M" p
0 ~) M& f. U# I: f  b; J
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
# B6 M) Y1 C  {2 J! l" C* W0 U) Z1 Z
$ R: R8 g' u9 [" S新版MAME没搜索引擎了么?/ q7 X3 h8 N' L
晚上我看看
! ]6 O  Z' `. ]9 L# p+ U  u3 H
( s3 ~: L* Q/ \$ u2 I* \MAME查看地址的功能还是有的
5 n0 p3 Y: V9 O5 I, |/ L菜单里的第一个选项就是显示内存地址1 s+ {% V/ M3 M5 v2 G
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2074 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
# S; c7 O2 U* K. X. m" k4 T
1.DEBUG版MAME有作弊码查找命令5 i1 U* u6 q" z' p; w' S/ t4 P
( q/ F8 x/ X+ q/ y. s: i  h- W; E. q
命令如下:- M. ]$ D  C5 S7 W" c6 i1 }1 W
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
0 G4 }# F2 j$ h7 v& P* j5 v' |<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型* H( v) l0 z6 T& a' q& f" o
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
" p+ P5 q/ m7 U  l) i1 `<swap>是决定字节是否交换
( Y5 ]) O/ e) E' C2 W5 c<address>是地址,地址必须用十六进制表示,例:0x100248! A# [  X& p2 \6 y" c% k5 ~, D3 o  a
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
- u+ g; A% `% i1 Q+ Z2 b. x, x<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
# V& ?/ V% {  e* u6 d5 _/ _
/ y' l& a+ l+ W1 C( t, M& q请打help cheatinit命令获得更加详细说明
2 f$ l3 n- p) O: \0 m, t, ?* c4 ?* S' q2 V0 H$ b% U
cheatnext <condition>[,<comparisonvalue>]5 u4 _7 }# a  F3 i
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
0 o; E) M# I1 x. D4 v, g[eq]是等于
9 L6 c7 R; Y$ S4 Z[ne]是不等于' e/ l! o3 _5 o# z
[de或-]是减少
# p1 r7 f# N3 I) |[in或+]是增加6 p9 t% H# Z  U. W9 E6 o6 Y' D4 \
[deeq]是减少或等于
8 t5 T1 p% u3 n4 R[ineq]是增加或等于6 X. e9 t  c1 e$ C
[lt]是小于
3 H+ Y% l  s; t1 b) U' p5 L! b[gt]是大于/ B6 S  Y( v  F, D5 Z! }
[ch或~]是数据有变化
! r2 i4 G+ Q( e; i+ l
8 V2 U9 x4 v: B% \) _<comparisonvalue>
, v. W6 B- h. F: i8 E+ s要搜索的数值; i! o# k- ]. l  }, H1 h

9 P/ F" K- F$ o# q请打help cheatnext命令获得更加详细说明6 i* K. M& [: {2 r7 q6 ~4 @6 l
$ t! _) M# C+ X# x% S
cheatnextf <condition>[,<comparisonvalue>]5 @2 H" s3 i; R2 `5 c8 Y6 [
说明同上
* T, p! M2 a' h) l4 U+ e% @& S8 V; J  Z8 \. D( R) F
请打help cheatnextf命令获得更加详细说明
$ J( N1 F0 L( w1 L% \8 g' F! R0 \  I/ g# ~& Z7 X6 X! Y
cheatlist [<filename>]$ j' j" m0 p* r$ b, r
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件: b! V+ l  |& w4 [4 Z0 n
! q" m! I' ^8 f
请打help cheatlist命令获得更加详细说明5 r, ^! o  R/ O3 P3 K9 Z1 L* B

* H# b3 v& B: b% O# C% K第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
) g! m" G7 B1 h! r/ v2 Q
7 }! U1 J) [$ l2 g之后进行第一次数据搜索时要用cheatnextf命令来摸索$ c+ ?$ X2 H& w, H

( e4 m$ p" G/ E$ N- Q5 N( s/ Y" q8 S到第二次、第N次数据搜索时要用cheatnext命令来搜索
$ r% o9 c( F% C9 ?; L
6 V  z9 ]8 S5 l3 W3 X0 {% G举个例子吧:8 p6 V' n/ P$ c" \: X

9 ~' |8 C# ^, Q* l& g4 z. g以合金弹头X为例:
2 j' z6 I" A) X" ]  P! Y1P生命数是22 |0 y. R1 r  Y- X' \
2 a2 |1 w" X0 O/ V+ C$ ?' H
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间% U' Z8 J6 E' y7 Y
# d+ l, t1 z8 }  M( f8 I' }
命令如下:1 |3 W& ~* A6 l$ p; E( p
cheatinit ub,0x100000,0xfffff,0. }( ^4 t' Z7 P! i* ]# V1 q7 d& _
# ?( q: F, W+ R" T
再用cheatnextf eq,2命令搜索生命数2
) I5 ]8 l- v) ]- h+ v# _, b
: Q" w3 \) \, H; e0 f6 @cheatlist显示搜索结果1 S4 q0 f* q+ U; O8 E0 W( [& i
' p, v4 a0 E* I- Z: T( v1 G# f
死一命后用cheatnext eq,1搜索生命数1& v: M9 W# M3 X- }! _" m
4 T% P. W2 f# x8 Q7 o, H* x
cheatlist显示搜索结果
3 C  t- X2 A6 {2 l+ o/ z.......% N9 C9 C0 B, t
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果  z7 f4 Z2 a: [6 c$ q* I$ z: h
* p7 u5 q! B) F5 g3 e# r
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。! S6 i& S& _" d( P  e4 ?

4 D1 F* Q9 b" |: P; G- J$ ]) n没作弊码的话....! H9 ~: u0 p4 ]9 ?

, T9 B; j3 [) v2 q# X+ C8 T9 Z不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
! x1 O6 w0 b( N) V) H
  q3 T/ d% ]. |2 L0 C6 d0 \! q或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)* c$ b2 b- s! |

" Z) [( l9 H+ t- V7 z6 N* b' _, X2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
1 h6 G* v2 s6 ]1 s; }4 J- z8 W- |5 v( ~# h+ T( S# Z
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
! i8 |# C" e& _

- X3 Y  M! N6 a$ E回114:4 O6 {$ \  M4 d0 C9 A: M' f
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
' b6 N  r- J$ Q4 d. E2.没地址如何查询地址?看上面我给zsyf的回复

; E, V8 b, L* @. b1 o$ a
7 b2 d3 y) b# g5 X1 C6 o! Q1 j/ 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. 幸运榜 / 衰神榜

签到天数: 3045 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-18 14:55 , Processed in 1.083008 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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