EMU618社区

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

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

  [复制链接]

签到天数: 2113 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。* l7 b* U$ {4 ^( R8 R% t4 j

5 A- S% h, C) X, Y; L: ]$ y) O(1)如何加载ROM
' ^; `3 l6 w' m& l' e  Q' e, a8 i; b1 w; P( f  a" V
先说说如何加载ROM吧6 m; }) w$ c  j; Q7 {8 J( m* t3 {
* ~2 q8 s- H/ V2 Y
以MAME 0.148 DEBUG版为例:8 f5 h2 B- ]3 z# L
3 s/ z) A4 Z9 I, `
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html9 V$ x/ j5 P* I6 T5 G0 N! x# y
6 K8 g9 k3 L1 {0 x4 ?
注:MAME官网的MAME是命令行程式,没有GUI。
$ x* L( D$ I! {2 A3 D% x3 v) U  k, \1 G) F9 O+ Y' n. ?2 ]( K
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;" }' \& E# f' j, i

" o* Z% I. I  f* b  _0 F/ A, ^3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:9 y9 r% `# p1 R* L
( w4 V9 Y0 @$ l; f* v
d:回车
0 D6 o! R' X4 S/ }& m3 ]1 I- Q5 _* m& {, [
cd mame0148b_debug回车
1 O) d! b1 H- ^4 f+ w' F2 }9 s. M0 y" U! X. U; X9 [' M, v/ Z
如图1:
/ w1 m9 D/ c2 \* H+ ?! k  I* n8 b$ I& ?# G% h" J" f
& q( D2 W% Z$ M, x8 c: ~6 G. M" a
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 j8 `; c$ x4 `# e
. p* K9 w; n4 M9 m+ j  Q* m' F4 p2 n' T7 d

, q3 W" v) C- ^3 d5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
  t1 \  n0 T% F5 v0 Z: J% F3 N* ~; \5 ^9 c6 s: f1 K  c
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。0 A  Y2 g% I6 f- i
+ P* j# [& a4 ?' t' F1 m1 [8 @
(2)如何呼出/隐藏调试窗口' P, {6 g% L4 r  }2 D4 j4 u( O" A
2 Z9 n, |( A8 [, F
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:) w' q% F- ^; N! j& v
1 w! }2 _) \, g: j* A  B2 C+ E
3 U. e8 E' p! r! S9 _+ O# @  L
/ J2 {# |1 d4 u$ _% l3 A
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:( ]5 S# P0 H$ w( N0 F% {

: _% k" G7 k) m3 D3 @( H% N: r4 O* `: e/ `& x6 s% h8 s

( x8 `+ N( B0 P8 |" r8 N" |3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。% X7 s, ?5 r* x3 P! x
4 F2 o* H: Y" v
(3)如何下读/写内存监视点以及程式地址断点
3 _; ~# Y7 y7 b
, ^8 ^; \/ x$ K! s2 c0 L先说说如何下读/写内存监视点吧
8 U7 t: b2 ]0 V% V9 G( L6 _
- @/ h$ B4 ~! x* i" `监视点命令格式:wp <address>,<length>,<type>,<condition>* G$ J; i2 Y" H

. u2 V  N5 U7 h; b, c<address>是地址
& w. l4 E. o( o& m. l  W& U% f/ t% @/ H1 M1 A/ p! @2 y8 k, L
<length>是数据长度,长度必须用十六进制表示
' J2 ?& v  h, m3 i! _9 b" I* E6 C- s& ^% q7 y% h
<type>是监视点类型,r是读,w是写,rw是读写! g. W- u, Y. ~4 P- V$ M- F+ |% f

4 J3 `/ e- t' `9 D2 }- z例子:
/ R0 h& q7 o! y: N/ I. E# {9 s
) Q# n7 T9 s5 V; g% i9 C) G* r例如对ff8569地址下写监视点,数据长度是1个字节
$ w. M/ w# U) E# K3 G3 D, k7 {" }6 s  A2 M
wp ff8569,1,w
% O! I' H) p  _; J* f; E' X6 e7 j
2 D0 ?% G$ C: n4 l% \例如对ff2235地址下读监视点,数据长度是2个字节5 N, |+ K1 l# Y" i
8 o* ?: a# k/ a/ t  k
wp ff2235,2,r
3 E! F9 h' w3 l
2 ^/ D/ i) o" g5 N例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
2 k, }8 S  d8 o
1 P9 i) T) g; O) C, Swp ff7533,1,w,wpdata == 0
) W+ y# X. z: r) ]0 v7 ?% f# K; B2 b4 Y) t) E8 D/ N; v
以龙王战士日版为例:
. I% }% \3 b# S  q3 V; }% Q% W8 f4 D3 ~9 K! W* a
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
2 X% u3 y" a1 K: _. Q) x/ x6 C; a, ^9 @- M3 k( {/ ^; T

9 e8 I; f& n! O9 _* `# h" f( |$ c& Q6 h' ]3 g9 }  V' @+ E& t* K  P7 @0 F

8 x: E6 @, A: d" `2 R$ q2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:4 s: v6 z% A1 W- {2 y, E; d! [- F. c

8 j8 B, U9 q$ m9 }) P8 u5 C) A; ]! T
  A7 J5 [: x, t( L, I3 j' j
接下来说说程式地址断点
  J9 S5 \% Y; \7 ~2 l. ?  R9 c  W
& }* b" j" v9 j2 N命令格式:bp <address>
, o# t" M" m. D* w' L2 }/ J/ C% i
) G! [$ H7 m9 n' m3 K例如对000488汇编指令地址下断点
. d. A+ t+ g/ j  _) G, p
3 F- K! a5 d5 K6 N2 c: E. pbp 000488/ k0 {* d# x# T! @$ ^) }

8 L+ ~8 ?# D3 n- f. l当程式执行到000488地址时就自动中断
% V. I; o" d/ j
2 \+ ~. v6 W* b( F/ B. J( R更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
4 Q0 p2 }. f* Z. N( O; h0 {0 H$ W3 Q1 X
, L$ }) Y+ q/ Q8 _+ `有错误请指正。* C3 K2 B1 S2 h: C
8 ?# S: b1 u5 r1 Q7 u& |
补充一些命令:2 n8 g! T4 U# Q: m+ S3 E/ P" {' Z% Q
3 u  p. u! X- k; u9 u- V
"wpclear" 清除所有监视点. c! f* i: K* M" d, z; x4 j
"wpenabld 数字" 开启监视点) M+ I) M/ I. O! p
"wpdisabld 数字" 关闭监视点
- i# P2 O% @2 ?$ X* s# R6 F"wplist" 显示所有监视点
3 b- ~. y" o3 N
! ^6 B1 q. u4 ^+ j$ J2 I3 W7 _"bpclear" 清除所有断点
2 u5 ?. c7 m4 @"bpenabld 数字" 开启断点
- O( O2 K# U. C# g"bpdisabld 数字" 关闭断点
4 c. {1 g, Y6 F8 E( L3 [* ~+ v+ ~8 L: c"bplist" 显示所有断点% }1 l% t0 n3 @3 P, T) G6 O% H( f

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3556 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽& J- Q! o1 m6 @" Q* A

# T' B3 I9 s$ p( d以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2113 天

[LV.Master]伴坛终老

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

签到天数: 2577 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 ! L6 f% @( m7 h8 F5 |

: g" c. y9 Q" k% Y; ~2 D太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
" ~0 I! `3 M. R6 D
, |) v) [$ {- f其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
* G7 c, R2 P; |  [
: n: O4 w2 W- Q( p- c3 zCheatEngine搜到的临时地址当然无法对应MAME的内存地址
5 [' Z3 Z  o) p! h+ p" J& b1 |* b% @0 y4 z
新版MAME没搜索引擎了么?$ }+ r. E8 z0 O- q% q
晚上我看看; n6 W& ?# K# @  q& r

6 W+ e( R$ B0 Y# [/ X) c0 q# `) YMAME查看地址的功能还是有的
7 p" W4 G, d5 ^& |, u菜单里的第一个选项就是显示内存地址3 b+ x' f/ i+ _4 E
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2113 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
3 D. f- E& _2 {6 g: G! I: d3 w
1.DEBUG版MAME有作弊码查找命令( w; o& B4 \2 J  b
; Q( O9 g8 S9 p+ }0 Z4 w( g
命令如下:
" R" g6 k' \, c7 _cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
8 D" z6 S5 p) ]  A2 ~1 H/ E<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
7 M/ s9 `- v& `. P" {<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
9 G4 [: a& }9 F' p<swap>是决定字节是否交换1 f7 L/ M3 s5 I9 `% a7 G
<address>是地址,地址必须用十六进制表示,例:0x100248
# |. X0 m% f- k9 b3 o<length>是地址长度,长度必须用十六进制表示,例:0xfffff
6 M) `1 T" A* T2 {<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
2 e) s7 U7 _# ~" {$ ^+ p# J' V' ?4 n% ]. z: r5 K7 D, Y
请打help cheatinit命令获得更加详细说明
7 S3 |1 a  o" a! ?, c1 s
4 ^) Q  g3 E+ |) z# d" [8 z  j) }cheatnext <condition>[,<comparisonvalue>]
9 r3 {( ^! L2 `7 l# m% O. Y<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]$ ~4 U1 _' E3 \4 J1 G8 j
[eq]是等于& o4 J. Q6 O* L# T* q
[ne]是不等于; @0 x1 W; b  y4 f& _- f0 s
[de或-]是减少7 \6 D8 J- Q  N0 k  [) s
[in或+]是增加
9 m; w1 k+ n- Q- x" |+ t$ A( H[deeq]是减少或等于. e+ P% j7 ]( M5 S3 M" |
[ineq]是增加或等于
! B4 E7 K( o2 a! S- g[lt]是小于
* b# k: h: U5 r$ V( U8 Y7 H& X[gt]是大于# F/ u8 o2 B# {) m/ t
[ch或~]是数据有变化
! a( A% A+ q! c& _: C$ d4 [/ p
* m- Y4 F5 Q" c! b* q<comparisonvalue>
/ q. T8 M: C0 R! Y+ a要搜索的数值' I+ n+ l# F. I3 ^$ B& K% J& M% b
4 j, H3 x# h! b+ P1 M
请打help cheatnext命令获得更加详细说明
2 R! N$ s6 |) H& \2 J; E( f* I  m* A6 W) L9 L4 r5 }; B# J
cheatnextf <condition>[,<comparisonvalue>]; I& m; u" G& I5 c, I( i
说明同上6 a3 M2 t, o  U# Z

' \0 j: e' ?  I4 R% Z& ]6 G请打help cheatnextf命令获得更加详细说明
- x. L0 m: h9 c, o5 y
6 N+ J7 Q0 V6 k1 R% K" l" h, J; Pcheatlist [<filename>]
; S. T. `+ N& m) Q. e7 a" G显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
* c9 w3 L2 R- q& j! z$ s+ S2 U- l$ N; U) Z; A
请打help cheatlist命令获得更加详细说明' U8 ]; D! `9 c' q# d
% _. e4 V/ r+ @4 z+ M3 F8 f& }& j
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
9 p! [3 C& ?$ [, w
5 c' n! ^6 C2 J" I" A+ y( q之后进行第一次数据搜索时要用cheatnextf命令来摸索
4 F4 e' {, r9 H' Q9 ^. F. z/ o4 D# r
; \: k5 X) E  D- h" \到第二次、第N次数据搜索时要用cheatnext命令来搜索8 W# I6 X- C- I) K

- u% r+ o$ [: n- P9 c举个例子吧:
7 m7 A/ C; j' A4 ?. h# S- I# a' K' W) M+ F5 c
以合金弹头X为例:3 E4 a2 g8 P# {. f8 {
1P生命数是2
3 }# v. [* w9 Y! k- U  K
. `9 `) G- ^( {% D+ m: T* ?4 q先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
9 A9 W7 @8 L2 g8 |3 u' q& y; W
& B5 b% d7 ?. P2 d命令如下:
% \5 V5 y3 t" d6 h1 ]cheatinit ub,0x100000,0xfffff,0* p7 |& h8 p9 e: ^) d

8 ]4 [, t' `& B7 L; ]/ z( u再用cheatnextf eq,2命令搜索生命数2; U' ~0 _: Z' n

4 N# p% `$ P$ k" scheatlist显示搜索结果
, W' s9 {8 P5 M# F" g' J# f3 x
# Y. J$ E, j) @死一命后用cheatnext eq,1搜索生命数1' g  k% w6 u% D$ b$ L2 F
# x2 A/ L2 B: N
cheatlist显示搜索结果
0 ~' c. Y. _, w& V9 |.......
% J, Z/ w% }% P! J% ?直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果2 o! v% E  O5 s7 B- z2 x0 h  S
$ ^* x$ E0 o( y: g; P8 X+ \, W2 K6 w
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。& x7 o& r! B, {. B9 {+ i& r
2 z. v6 K( B+ p
没作弊码的话....
- g7 ^1 e, p9 a0 W* B
4 B- h: U" G! U' |* z! f" U不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
& e! p) R8 R! A# V( r" g
7 v( o+ l) Y  ?& U8 d7 J. O& T; k) r' a或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址). c7 C' c# d. Y! t7 ~# W9 U

" d/ ~  N) H* [% v1 m2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
* I: t; m& ?! N
# ~" {: o. b+ E" E: j8 L要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
* Z- }, r- R" |. C6 q
* a& i! Y7 j$ ^4 H7 I/ s
回114:
0 J4 H; P$ L$ A1 y) i* k9 |
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M); O+ o2 H( c5 M& w+ q
2.没地址如何查询地址?看上面我给zsyf的回复
9 s0 W7 [: R4 G5 q7 e
+ H5 ~( }/ Y: q8 S  ~' j
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3079 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-10-27 05:06 , Processed in 1.086914 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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