EMU618社区

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

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

  [复制链接]

签到天数: 1590 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
, O4 d5 M+ r3 @! Z* n& ^" P+ x' g0 K! a% J1 b# u) H! h# _9 S
(1)如何加载ROM  u' i5 O; ]8 Y3 t' K& C: j( w

  ]7 x: I: q3 T先说说如何加载ROM吧0 P5 D2 b. H0 P
' ^* K5 M: h5 O* i
以MAME 0.148 DEBUG版为例:
0 l: C% U: T1 b* \3 Q' T
6 D; f7 a% t$ a) z1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html# [3 `, [$ s. A) n; ^$ S

, V: t1 I2 {9 D- g. I. i8 v1 S注:MAME官网的MAME是命令行程式,没有GUI。+ R. ]3 R5 Q& i8 y# H, i& f, S

. S7 w6 V# x# u! _* H0 r# d+ w. X2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
3 q0 x( K5 e4 r% J6 @/ ^- l4 c
* n' h+ F  v7 I* r# c0 W3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) E: a' F" H3 K5 @

  s4 m9 z. `5 C$ p% V$ }d:回车
5 p- |% u! x; L* u& {. I
; i9 W$ s% u( c$ C2 acd mame0148b_debug回车
; ^% [; h, ?9 D; x6 N
( _) f- n+ d+ p+ K: X1 U如图1:) H7 H4 @/ _6 w

+ M9 z! G. o2 b8 A$ R9 {" P' Z+ y
6 |) d7 ~; X! k( W4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
2 ~: W$ ~: }% P5 E( k5 K2 x/ J6 [& ^  x7 [8 @

" d7 d; o9 Z! v$ q. t9 x- q: j0 x( Q- S! x, v
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;8 y' U; g5 g" L' y0 g. }6 e+ L

5 z  @' w# G, g* ~' s& H8 _6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
( r# \; ^( P, F2 v. p" d9 H7 a6 O+ U' `: Z! J
(2)如何呼出/隐藏调试窗口
/ a% ?6 g5 z0 H/ {6 Z* V* @/ ]  a  i5 S+ W
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( f1 ?8 v! }1 `1 G  F8 k! B+ x) l' {0 v* |0 m. n

) T; k  H" X+ x/ A& V: \  w2 ^0 e: B) s7 a/ k( Q0 d6 G6 c3 f
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:9 L: O- i( E+ e: _  T" {( r9 N2 C
/ z3 M* d( m" T0 E. L) H

% T+ j1 M' ~3 M2 ~4 R9 R+ L2 N: k9 M8 a3 e# H* b
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
7 b1 ]* |: `) F  P' W7 y
) r7 [; A5 A% Z) [( i0 f' S4 j(3)如何下读/写内存监视点以及程式地址断点) j$ h  L/ {; a9 }( C( |

) I& C  f9 J" t7 C" ]2 E* _先说说如何下读/写内存监视点吧# ?, W- K- M$ S8 C- [7 d

9 ~8 g  p6 E0 J# e) x  N监视点命令格式:wp <address>,<length>,<type>,<condition>8 t8 e, x/ _% b' K
4 [5 \% R$ Q  R# _
<address>是地址  s( d  ?, S: _
) @" e3 R7 T) I! J9 t
<length>是数据长度,长度必须用十六进制表示' ~5 `" I# b6 K8 ^3 V1 Z

- }4 j; g' ]/ ^& a9 R: n<type>是监视点类型,r是读,w是写,rw是读写  @6 L! n6 K- T; l) `: G( i' U: w' P
' X1 Y$ @( V6 y* B9 {3 J
例子:
3 S* b* i) e9 v0 n$ L& b$ v
/ u6 m# y+ Y  ?: L" x% a例如对ff8569地址下写监视点,数据长度是1个字节  f- c6 V6 C& N7 x1 C

/ I7 t8 D% z9 Dwp ff8569,1,w) y6 C2 b" D8 O# o* a+ W
5 @* ]8 k. C5 r9 C% U5 \1 D
例如对ff2235地址下读监视点,数据长度是2个字节% j- L" S" j) S- W, O1 Z$ J: @
5 u  l0 N. ~3 p8 Y
wp ff2235,2,r& _8 o/ \6 Q9 a9 d
- A( N0 s' V! f
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
8 g! \/ Q5 }& Z# w6 v; T9 U/ V4 {# G: H  ~6 I2 v3 u7 L
wp ff7533,1,w,wpdata == 07 _0 r- _+ |$ s7 l) I/ H! L

4 N, @4 Z, t- _1 K# J! d6 @; T& I以龙王战士日版为例:1 m$ }( W2 T" _9 u4 D6 o

4 @4 F5 Q* E: d+ R1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
, z3 i+ D3 Y6 C2 {4 o" C8 `$ n; h  P7 T6 A! |

. b$ P8 _% e8 T* C
, h4 s7 v) V. P9 G2 f) q' r: A# D1 J+ ]; T; N# q
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
3 X, C' ?! `# |5 v9 P# o& @5 E( j! G' \4 n. W+ m# u4 {
! _, |- L: B0 P, n4 y
2 @$ v" Q3 g+ X0 P* C
接下来说说程式地址断点: E2 m% |' f( P( N  H) y
' p) T( Y, N/ L0 k$ ]
命令格式:bp <address>/ D  @6 E0 W( P  k

( J1 z/ ~% ~2 Y, h8 ~0 p+ d0 o例如对000488汇编指令地址下断点
- |* S: R/ r: P: B4 K* D0 L# u
7 h1 ]9 ]. Q( c4 m" P, jbp 000488
. M/ Z1 h+ c/ V- Z
. d* D: ~& a1 T! S1 N当程式执行到000488地址时就自动中断0 A3 y! X# `& U8 _7 I  F, Y/ C

6 `9 `2 k+ |8 U4 _, c# i" k更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
9 K9 v. [' d; a* u
7 C! l# b$ I8 h% J8 P$ A, ^( h有错误请指正。
5 D/ d% ^- o0 }( u9 H! u( q4 J% X8 |/ v/ ^! S7 u
补充一些命令:9 X. g0 M+ @# E+ A
' J( G1 q" u2 L4 Z
"wpclear" 清除所有监视点: l% n! @& ?. S9 {6 W, j6 A
"wpenabld 数字" 开启监视点
, x! X- o7 J7 E% H% D"wpdisabld 数字" 关闭监视点
* d! S( D" K" p4 [/ Q"wplist" 显示所有监视点
2 q& T* \, \) ~- E; [5 j& J3 q( `  i/ A2 O7 |0 p1 A
"bpclear" 清除所有断点- r% s2 S0 I. J
"bpenabld 数字" 开启断点
6 {* d8 B! f# K3 X7 d6 `$ ]8 [8 @"bpdisabld 数字" 关闭断点
, i5 H$ a1 z# o9 y"bplist" 显示所有断点
2 C3 W. l0 e: U6 z

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1546 天

[LV.Master]伴坛终老

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

签到天数: 3039 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽/ b0 U+ M1 d$ f4 t/ r
: R! g( _! r5 u6 O  i
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1590 天

[LV.Master]伴坛终老

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

签到天数: 2498 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 1 t* A2 S: h; G; e. \
: Q- y( A6 m# M$ t
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。2 a1 `! |$ t* L! S! y( _. \* G

8 {$ t. u: l9 Z4 O! W$ u5 T其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
1 `/ s+ s3 n% M3 A( [& c: D- V, I* j
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
" x, d" Z, `$ b6 W, L, [
6 u! b# D4 j$ ~# }# {" [9 W新版MAME没搜索引擎了么?
( d" b, e4 j( i6 }. U( b晚上我看看
- U- x4 e& e8 ]6 _6 V  S7 a0 _0 K- Q2 \+ ^+ r0 b6 G
MAME查看地址的功能还是有的
+ ^  v2 ~8 I9 y) b$ H, l菜单里的第一个选项就是显示内存地址
2 \3 }; u& ~- Y! V不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1590 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
1 I8 ~  d: p+ r* g
1.DEBUG版MAME有作弊码查找命令! B" P$ Q- t9 w  S

+ X% c7 [+ r3 T% _; d8 {命令如下:2 C" l; C9 G0 s
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
+ S5 h& }3 Y8 u; U, _+ i( H<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型8 x; j2 x" v/ [9 K
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节): ^& z/ D( N) w7 U. H& }
<swap>是决定字节是否交换& ^! `/ k9 j8 E- g0 P
<address>是地址,地址必须用十六进制表示,例:0x100248; m* D! P+ X; d3 q  A1 e/ a' _6 R
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
' b0 l* g, C; K7 [, ]. X8 V<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU$ P$ `9 P0 T. A# x
# o' J1 l  a0 G% \. P9 M9 d) o4 b
请打help cheatinit命令获得更加详细说明9 d& |/ O$ x$ }; D4 ?

; q* y# ?& l/ j, {cheatnext <condition>[,<comparisonvalue>]% A  y: V5 \" F) g
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
8 d# E# S1 B  I: i[eq]是等于2 ~( ~* |; l3 y$ T2 m; k5 \
[ne]是不等于
' }0 H+ L" N2 `  [* {( \[de或-]是减少1 _' h5 d) q2 s; E; X% S
[in或+]是增加* U  g2 e* |4 o
[deeq]是减少或等于3 x3 B9 Q- \2 E) K' ?
[ineq]是增加或等于
6 I/ |- \  q- P- U3 Q5 P[lt]是小于$ ^  z5 t+ A/ G8 x$ d
[gt]是大于
& W. `9 u1 \* c[ch或~]是数据有变化  f$ a8 O( ]6 T7 a6 l

5 Q& x2 ~' y# E3 W  ?6 V<comparisonvalue>0 h% E. I/ a) N# g/ Q$ l
要搜索的数值$ r, v& N; I0 c" a; y

/ q; o: s! ~* l( Q+ L8 @% I请打help cheatnext命令获得更加详细说明" f: c- }* p6 |& ?' y1 D
2 h( K* d9 V; y. I; D
cheatnextf <condition>[,<comparisonvalue>]: ?+ J4 a/ L4 A! S$ S$ C6 j8 ]6 G
说明同上0 \4 c5 D2 g5 N3 Q

' T6 z8 _7 p+ [8 G4 v请打help cheatnextf命令获得更加详细说明9 M9 }0 o( c& a

0 ?! b6 A$ w5 l% ~5 Z' v' l0 scheatlist [<filename>]
, Z8 F+ E* a8 k) ?* R, Z显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
, m$ T5 p$ O' n. g' F4 p1 M8 N
( o; h) [; q) D8 f, q请打help cheatlist命令获得更加详细说明. A+ Q( q3 W* u+ r
5 k, j0 L" w- h" m7 ~
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
6 f, V( _8 ~+ n5 U, I& k
8 K2 @1 m3 K4 S0 t3 _之后进行第一次数据搜索时要用cheatnextf命令来摸索
' W% O( k8 f) m* {* U2 Z1 ]
' }2 [4 o( Z# m, X. N! Z到第二次、第N次数据搜索时要用cheatnext命令来搜索
' v$ @1 K4 K" X  H) @5 K& W( a' w8 c% Q; }' u7 w# k3 }9 t$ c
举个例子吧:
. _9 b1 m' z8 G) F, k% L$ }  H7 q" |) n
以合金弹头X为例:
! z9 n! G; g- k6 |% @4 G4 K  C1P生命数是25 l8 X- M' a+ {# f& B: G
+ n6 w9 D, d, q; C- b8 R
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
6 t  q! M0 P# k# H- n8 E# \5 \$ K, ?
命令如下:
8 i& C( t- U- J+ E8 C3 G5 G- hcheatinit ub,0x100000,0xfffff,0
0 ?& |0 R% r0 Y( t" v9 ^1 d/ F* v2 l7 A: G9 D5 x  X/ S
再用cheatnextf eq,2命令搜索生命数2- @3 `& _: y( A# w: [# q8 R6 D
- M) U: ^7 l, b
cheatlist显示搜索结果
5 F& K# Z9 e( r. `1 H0 D1 c# y" i7 [0 {7 X: a. h
死一命后用cheatnext eq,1搜索生命数1
6 m. B+ D/ F4 D8 w) V# a! M# k
' J$ X2 A! n+ e2 X; Gcheatlist显示搜索结果
' d0 j4 y8 I% K2 q.......0 C& P$ R$ g9 O! a
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
2 T' H$ X" B- K2 G5 F
" ^1 J* n% H( u  e/ B2 i还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。  s) `1 l% R8 g7 i% i2 k, S. v

$ @4 |( T, U0 c0 i' M- x+ r" Y没作弊码的话....
$ n2 E/ P  B4 z
9 P; G3 I+ Y! n* M不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
4 s* s" I. |' M2 v$ t3 m  w
% n. e* Q8 @% @% X% `7 X或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)9 c% d. ^  ^/ E2 D0 r

4 ^; L$ Q8 M1 F2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
7 i; @# m6 v7 S: {" Y
* [/ P$ Q- X0 @! @要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
$ y. D/ x1 |- y
9 N5 o) e0 F, @
回114:
7 S6 l  O  C$ d0 a/ M4 d6 F
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
* d. Z! s, }, h5 D$ }/ o8 w, C% a% A2.没地址如何查询地址?看上面我给zsyf的回复
1 b: q' |/ q) ^- r/ G

3 M/ _4 J% s5 {) X6 ?打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2565 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-5-20 07:58 , Processed in 1.078125 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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