EMU618社区

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

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

  [复制链接]

签到天数: 1574 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。* N* v' Q+ d$ r$ Z( [3 E: a: V* f
0 Z. a9 s  S6 X
(1)如何加载ROM4 c" H1 k+ l6 H$ `, h+ t

. D/ g% G" o4 T  Y2 ^/ [先说说如何加载ROM吧- L; `: s; w* p" E+ f+ B# ^
' v+ G, Q# Z' B1 k' h# r+ f
以MAME 0.148 DEBUG版为例:
5 {2 F# @0 h4 m+ T; q
4 H0 U# k2 j% A" C1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
3 I8 C1 L% H0 Q- @% N
) K# c0 T) y) a4 L* F& A: A& ?注:MAME官网的MAME是命令行程式,没有GUI。2 X0 T* ^- K, @2 y2 D! m

9 l" e# B! [, I7 \8 U: K. O2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 {* c* f* k$ A; M7 V; a" u9 |
" z( H6 G6 X  k1 R* u: p8 _' B7 E
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
  T5 O, X: z% r6 S+ j& K5 a! f: T/ M2 ?
d:回车
; g2 T. G4 \" x1 F9 o
8 B+ D. P# S7 ?; hcd mame0148b_debug回车4 J' k0 k/ ^9 b! H) C! J/ h1 D/ z

: ]2 _6 B4 i: X2 \- s& w1 [如图1:
$ g3 F; A5 C, z. X! ?
5 y- L. j+ T% V& ^5 b( \! ^# |" x- H( Y* N) G% o+ R
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:9 e* {) Y+ s+ w$ F7 x- i
3 b% e4 p' f, ~' }& J. v1 ^

  ~, |- {2 n, D/ e  r6 @$ T. o) O$ R+ v3 x" {  [
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
% n# [6 n, G" r/ O  P$ G, G5 ]! a8 b7 g9 U2 {! k" o7 r
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。* c1 V& f" p! U. Q  {3 E8 U4 H# T

4 p( a4 p% J# I, Z  D6 {$ D(2)如何呼出/隐藏调试窗口
, l1 {: x' r. M: p+ |* q
/ s4 f* h# j' b/ z% Y% ~1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:4 p4 r; Z: g: f; e8 r1 g

& G) u6 y' v! K' K% S/ ~& v, n
& \  @9 l4 G% E8 N1 t* k# V6 K3 N' @5 t7 p4 e+ v0 W
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
0 Y% i8 A5 }& R& \+ w/ L' E4 n8 I4 T& E- H0 s
. V( {( x* y4 b) I8 c

7 v9 q, L% n8 o# o3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 a' @% a# k* N

! }7 \* E& |$ [% x5 y(3)如何下读/写内存监视点以及程式地址断点
( [3 ?$ ~3 I1 o: h4 s8 |
7 X4 g" p. R0 _1 c先说说如何下读/写内存监视点吧( k3 p  y, U/ J. F6 k! f& H6 U
8 g" G1 d# b; K7 v0 J( x( B
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ R2 m$ y' l+ T4 J" ^
+ X. A9 ~5 o+ S) e* M% Z<address>是地址
& e5 \* c! @& U& o
$ P! l% q3 p$ C( T0 b2 f<length>是数据长度,长度必须用十六进制表示
* p  v" H. ?( R# f8 E
1 i3 M9 w/ B8 W/ Q; q<type>是监视点类型,r是读,w是写,rw是读写
  U# B, h- }! h- H/ g$ K- _& g( D& B3 @! I0 o, R7 K9 P
例子:
  q- ^( O- K" L2 [
" ]+ I8 b' l  `! A. f  {. g; K2 D例如对ff8569地址下写监视点,数据长度是1个字节
3 H2 E" h4 \+ w1 u% V
! i! N+ `/ W) K7 c% @wp ff8569,1,w
% h7 A# g7 f  q) o, P/ ^. C' d: [* G# N7 A  z$ l9 [$ u
例如对ff2235地址下读监视点,数据长度是2个字节
1 B$ B& m; s/ p: S) J2 N$ t7 {2 s: ~( n. J: Q
wp ff2235,2,r/ M% n# X5 @( o! s  ]. d

! D4 U# S9 l5 o% a( i1 @' l- N例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
2 F& U0 m% N0 T! B! S. D$ e$ H+ k6 d
/ }0 ?+ ~* V1 t1 p* l  q* y3 Bwp ff7533,1,w,wpdata == 0- w2 n6 O+ u6 X/ O
* ?  A0 [, p& I9 c5 O9 G2 C- P) C2 M/ O
以龙王战士日版为例:( f, H8 e1 A7 I1 J( N* N
' x# t+ _9 Z; W+ }  _
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
2 D7 v, r9 y, w8 `: A
" E) C$ r6 A9 g& `/ L: v1 W5 {7 r& [7 Z7 Z

8 F: _5 ^" @3 O9 O* V; M4 ~
* n( H+ H( G" B5 ]2 Z" |+ a  o2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:6 ?4 G+ z& {: |! @, H# p4 o1 h

7 P3 J! T9 d# w4 W$ U! d; y/ V0 g& e9 N
9 C) j' h* Q' ?
接下来说说程式地址断点, u' _3 Y2 \# c0 v0 Z0 B8 S! K
2 J9 a0 M" c; h( ^* D0 [
命令格式:bp <address>
  v3 p! b. X$ T- f0 T3 Z
1 b! J0 F$ [8 |% b/ a1 P例如对000488汇编指令地址下断点7 X7 g/ L0 I7 u8 u7 ?* s0 o
; L* W; A" V* }$ X! o3 H1 P6 [$ O1 y
bp 000488
7 |9 L/ b( y% c& P
/ I8 I6 j; C' |& D! ?当程式执行到000488地址时就自动中断
6 c7 z0 |( }' l( e" O* L, j5 E; V/ \  R2 n) R2 Q! o+ M
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看3 O% v' L. m" Z, c  P

/ d. Q$ Q& a6 @( d4 P  |有错误请指正。
( L8 ?7 ^% T* T5 w( B# j
! Z( n7 k( t* E4 z+ V补充一些命令:
$ g' a* w( `6 N& h5 V3 i$ n4 V
"wpclear" 清除所有监视点
( Z5 Z8 e( t9 J1 B"wpenabld 数字" 开启监视点
9 u) m; W/ a) C& S0 k  c"wpdisabld 数字" 关闭监视点+ ~5 N6 Q( _; J, H: Z# @% W" e
"wplist" 显示所有监视点
0 a' n3 w0 X* |5 T6 q
9 x2 z1 f  V" {- P* b9 h5 d  _8 Q"bpclear" 清除所有断点3 I/ e: r8 k; F+ y3 Z
"bpenabld 数字" 开启断点5 k' f# S8 \3 G1 ?/ p
"bpdisabld 数字" 关闭断点
& n6 i% T. s( {2 [& b+ J6 B"bplist" 显示所有断点/ T. G9 }7 C% s8 K! k2 N' b4 D

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1546 天

[LV.Master]伴坛终老

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

签到天数: 3024 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽+ @% @+ \4 m! w* h* G7 x

1 D/ H- @7 b0 a/ }以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1574 天

[LV.Master]伴坛终老

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

签到天数: 2493 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
! ^5 b, u$ x- |
" o3 P: O% s7 k- {3 f太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。, o& @. ~' C7 Q3 E; Z/ [, J
3 E  T3 r: D" n: ]& M& Y
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ! p( {. \0 o" e. P, |. T" K
2 W+ |+ A) @2 s. o
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
  X5 q+ M" ~* P/ k* }- A9 [
4 L& s) G7 `( h  R, U1 ?/ Q新版MAME没搜索引擎了么?
- @2 v4 u0 V2 v3 a+ K晚上我看看
; ?% R9 b& m# q, v" W  R. ?: z9 N; k8 B- D
MAME查看地址的功能还是有的& f) W* m' \; D
菜单里的第一个选项就是显示内存地址
; B! K, c2 Q1 P; q: b3 V% m1 x不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1574 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
$ T2 G3 C* ]! n3 Z9 z' f
1.DEBUG版MAME有作弊码查找命令/ M. N/ Q4 ]2 l
( b; u" X' Z/ m& C9 x, _* {0 w: c/ Q7 D5 U
命令如下:
* b% O! h6 z: f1 Rcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
$ c5 z1 u" O1 I% Y( h( ~8 n<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型0 V6 x6 x' \& d9 u! ]
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)# P: e6 A8 i: ]- s& P) c
<swap>是决定字节是否交换
( p: y4 z8 E3 I7 i8 H<address>是地址,地址必须用十六进制表示,例:0x1002481 ]5 M+ r# \% U. b/ |
<length>是地址长度,长度必须用十六进制表示,例:0xfffff# B1 ?% F6 m8 n
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
1 |3 }8 Y3 [% |
* d: D9 f8 c4 r% N2 G  M8 P- z请打help cheatinit命令获得更加详细说明: ~3 @9 \% f) V! A

% F- \3 n! |8 U6 Z' Tcheatnext <condition>[,<comparisonvalue>]9 w( V  j8 }. x3 K2 D
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]: d$ l/ |; N5 r+ e
[eq]是等于
2 r! b- ?! a$ {[ne]是不等于' ^9 k( H  }+ l7 \4 I) |( k8 @
[de或-]是减少1 s0 c  x3 F9 u/ x: o. G% @% V
[in或+]是增加
' _# h" K5 G. o7 V3 r6 N+ D[deeq]是减少或等于
/ w8 g0 r3 p  x- G8 i' s. M% j5 L[ineq]是增加或等于
+ X- t6 u+ c0 ^, [1 Q$ L' L[lt]是小于' p7 O8 X) I4 _# I$ M& H0 q* K
[gt]是大于+ t* L+ Z9 N. z$ t4 i
[ch或~]是数据有变化
: E# D* w4 ?* n; C4 u0 D4 Z& @. ^6 i* G
<comparisonvalue>
+ J7 W( j5 t+ p7 B1 B要搜索的数值
1 M0 J( }9 \& y4 I1 G
" o; F; X0 ?( p) M( g  e请打help cheatnext命令获得更加详细说明
, {" n( Q! k( c( M& H. Y1 h% Q6 o6 O/ u+ s
cheatnextf <condition>[,<comparisonvalue>]) j$ ]5 w- K' m/ H. b
说明同上
, K" b0 A' Z# }: ?( Y9 o9 ]7 j" W, o) B
请打help cheatnextf命令获得更加详细说明
3 v: B" K! j' d+ d3 ~
. E* s# Z7 B  r/ e. Tcheatlist [<filename>]- B/ S. R# o0 F( \/ ?7 s6 h2 D; |
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件4 z5 I; N# }# S+ u3 C( j  L5 G
7 J& P8 ~, ^2 V& j& k
请打help cheatlist命令获得更加详细说明
( g, ^5 Q' z( x0 x, Y) r$ q9 R, x. g7 p! r* B1 l6 G% x  n) X
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
6 R' `4 k( h" C) s
9 N  H+ @6 H' M. U% [之后进行第一次数据搜索时要用cheatnextf命令来摸索
. `* O) x% [; J, b! x# G, g* @/ ~( m, ]
到第二次、第N次数据搜索时要用cheatnext命令来搜索% u2 C+ e) M1 M
& z( x' x) [+ g4 k. V3 S+ t
举个例子吧:
- x% p/ n( Z3 c% I6 w# R. u: l4 b+ I$ H. ~
以合金弹头X为例:" Z7 q- w+ v% B1 k6 L. l$ q
1P生命数是27 \+ P' q7 f, g3 J9 {( u! w- q) r( t

: ^' H% C( C* V* E# A" H先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
% @, }$ o2 W2 m* X5 L8 k6 |2 a9 y$ f! ]9 D4 N
命令如下:8 V  X/ J4 J1 N) M
cheatinit ub,0x100000,0xfffff,0  h0 K! R& d. g* |/ h

3 s1 r" {( k  L再用cheatnextf eq,2命令搜索生命数2
4 ^1 O" H, v8 W# O, `6 n% G1 x* _
. ]( S- O) s. h, {6 Gcheatlist显示搜索结果- E+ V, s$ e+ u4 L
. ]4 J- ^, h5 M; i! d
死一命后用cheatnext eq,1搜索生命数1
( Q$ V/ b1 u0 x; b, ^7 q7 N; c, G: {4 m$ }% q, ?9 |! A* h
cheatlist显示搜索结果& d  V& f+ ]7 |7 O+ |
.......) E4 ^8 l2 s4 ~) ?  H' i4 G
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果$ Y: |+ L3 L' ^- A/ G, z; H7 ~
/ B0 u$ B# m! N: B: a
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
" f5 p! t- y' Q3 t8 Q$ `" ~$ w$ Q" h( t/ Q' b' ~
没作弊码的话....
3 _+ b" ^8 c9 S! G' ]) }+ p4 b' i1 H/ g. g6 |) z
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能); [4 W( g. k: H9 `& q  K5 F
- T& e+ F# T8 T. S/ h
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)& h8 R5 i- F3 o8 y3 I: O# `

( L" W# k" m+ b+ B- }! _$ z2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行7 o5 S! A; `) G0 i" j
& Q; O! Y% y/ H" ?$ p
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
6 E5 n1 W' A; d: M

3 V* N" X$ {. `5 i6 t; B; w回114:) s9 p+ I5 e$ ?, H+ w" C8 w  ^, d
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)( D% p) j+ m- l1 T
2.没地址如何查询地址?看上面我给zsyf的回复
$ B/ b' o3 }/ P

! U4 ~& X: E' i3 ?; Y, k( f打字真累.......orz.......
[发帖际遇]: 疾风之狼踩坏了花花草草,被罚款6 个 柠檬. 幸运榜 / 衰神榜

签到天数: 68 天

[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. 幸运榜 / 衰神榜

签到天数: 2551 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-5-5 09:57 , Processed in 1.093750 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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