EMU618社区

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

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

  [复制链接]

签到天数: 2127 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
; f8 u- N: l% r! c3 d: ?4 L$ W% C4 U5 D/ v  {* W8 }4 L4 f
(1)如何加载ROM
& _2 C4 B+ Z$ {4 Y5 L8 ]3 l7 m- B
- U3 l: Y2 w' P! B  J4 l/ ^先说说如何加载ROM吧
4 Z. b+ }6 O( D" o/ v  k; h' ]) H# N; r0 R
以MAME 0.148 DEBUG版为例:
' |0 B( v8 L% Y( \7 K% ~7 P( Z5 i  p/ j! K8 J- B) p+ |
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
4 x) j5 S; h2 S+ l
6 `! E- @8 A$ ]; N/ k; ^1 v2 h注:MAME官网的MAME是命令行程式,没有GUI。
$ O- q- y$ O0 O! V; x  D" O7 r* ]/ h. ?& e; w
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
2 Y- g' l4 A3 D$ h2 |3 f3 H4 a# D- G! y9 `
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:2 Q! N! R$ F9 h# q) j4 N* |
! k8 d& g! q$ u9 T1 S
d:回车
& M) @9 C4 r( Y& M
1 L6 L! R9 |6 Y! b: l1 a5 Y# Z- ~/ R; Ucd mame0148b_debug回车! x1 B6 B+ _- S0 M3 f

4 T; y2 t+ q7 O1 \  o( x8 g如图1:
& H+ f7 \/ X0 W" _1 G9 ^( ~6 {0 C2 Q8 r5 j; t
* W$ H6 e- N- x7 Z4 W* W- v; N) }4 G) S
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:. T# ]: y3 _# C
0 P# h2 W8 \" M7 u9 V
# w0 E/ i, ^3 ^5 J  e) H8 J* _# {

- H# t5 @5 `+ ]9 S$ }1 k5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
4 d: R9 y% N# m' m; s( j( L: A6 T  v' U7 S2 P) U- s: Z6 l
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
  i0 q* s% j. R" y2 O) [8 `5 v# [( k* Q8 t9 m; o% X  [
(2)如何呼出/隐藏调试窗口
8 x; y" w1 c# O4 S) B! B/ E( H8 s. ^  M, k! o, q/ B# |
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:/ o4 F$ X8 ~- X
+ R3 Z8 ~2 ]; T4 z5 D- {
) e, n5 c' D! k. I; z: Q

5 c- r3 F) l' m3 a& E( X2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:$ k- C8 [7 l/ j9 [; O* d+ X, R

# P  K( w% Z, u( C, ^$ r
5 A+ N4 f" N7 o$ {) C+ r( S: P& _. r; C- }2 k$ l/ h( }! g% y
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。* \- e- P0 x" ]2 F! Y8 ]
) [* p( Q/ C- l
(3)如何下读/写内存监视点以及程式地址断点
1 D) L. w! q) m# ~6 b- u  }$ l' t* h$ }& K2 S& m
先说说如何下读/写内存监视点吧
0 J6 I8 P$ _' q0 |9 Z8 G7 q/ V0 I6 m9 v
0 {3 s, ^1 a' b9 \8 N监视点命令格式:wp <address>,<length>,<type>,<condition>
, a% Z  \- j! `+ G7 h
' M5 V7 P- {% Y% D' Q6 c5 u) N: l<address>是地址8 e: p% f9 Y; Z' Y& f& W5 M
" `5 R# V0 @& v9 o
<length>是数据长度,长度必须用十六进制表示
, h" z$ z; G. y5 z1 w9 X' S, q3 x4 I+ X
<type>是监视点类型,r是读,w是写,rw是读写
- E0 H& N$ _7 P% K( ^1 Q, R: r; `, F. X
例子:" w+ w6 F2 J. j) [9 E" y
. y* g: f+ ~0 @# B# J% e/ {
例如对ff8569地址下写监视点,数据长度是1个字节( z3 q5 P$ R: o5 u0 [9 q% T; S

9 q  Y( T- i$ d0 `wp ff8569,1,w
$ p7 J7 Z6 [/ z+ S  p" g3 _% K# }! Y/ ~8 F
例如对ff2235地址下读监视点,数据长度是2个字节; w2 u, B1 x8 w; b0 b! }

) w/ F3 J* {0 bwp ff2235,2,r! j% w0 W: _' I0 Y$ V
5 `2 u: f$ R1 W) b+ h" P
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断8 Y+ O# z  ~' A$ f& h  f+ l  ^
' j% }$ S. s/ I: e
wp ff7533,1,w,wpdata == 0
- U  i) ^, A+ J* c* u7 G* ]$ p3 N2 p8 q3 j8 K/ V
以龙王战士日版为例:1 `, Y  X# d3 i2 B% f
# R+ }# P' I* \
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:1 V0 f! F7 {6 P0 _% s, n3 P

( n1 M* e; m0 p9 ~- k7 a( M" M6 i2 L/ r( P* ]6 L, a

6 j! `( q4 |. l! |! |7 i7 o: ^6 H4 n& p% k1 z& D7 f7 ~. l$ G
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:0 @$ r( g( @6 \
4 K* |! a' u6 \! e

" R0 O, g, U, w" ?! b8 l) o+ ^! D6 n3 L# I: n
接下来说说程式地址断点! {# y+ e: u% e; p

1 u% h: r2 [5 ~; ]6 t, S命令格式:bp <address>/ y4 v* {1 H+ u  n7 {9 s& D' E' S
) D1 g* R- |$ u7 P5 K: A% ]  y
例如对000488汇编指令地址下断点. a& `) m* U' B5 k

$ G# [9 M" L$ Z+ a' Cbp 0004885 @; z( L% F3 W- C

6 h- U' w7 b' Y- X当程式执行到000488地址时就自动中断
! |+ x' E! d+ M8 o
7 x* m; z- T5 u" ?- d0 {更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看8 t  F0 x; N+ y

) x7 \, m0 X& A2 |- _5 ?有错误请指正。
9 v- h  D& _! T+ T, k
9 |: J  _" f0 ~+ h补充一些命令:
4 Y6 X) q! V2 @- n; o% D# `' r# v# g9 C7 `0 d* x
"wpclear" 清除所有监视点
8 ]9 [9 n& H# h/ j; }"wpenabld 数字" 开启监视点
7 F4 f4 `- S8 @) Z: U% O"wpdisabld 数字" 关闭监视点9 U9 }3 {5 u' K1 [) W
"wplist" 显示所有监视点+ \& W; j0 O! I/ V$ ^/ E
) P3 f3 ^1 A9 A; L- f& z+ s
"bpclear" 清除所有断点
- [7 y* K9 h$ T"bpenabld 数字" 开启断点' ~1 r1 v  F& ~6 f' i
"bpdisabld 数字" 关闭断点% X! B; W, M# b. t
"bplist" 显示所有断点
% \1 W) \7 r) S, |: s/ l6 z

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3571 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
- P) o+ j! p( O3 q0 @" j
7 S' O9 b* V  g/ K. k以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2127 天

[LV.Master]伴坛终老

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

签到天数: 2579 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
7 x& Y% O. q  v/ f% t; x5 C, l+ i* V7 `5 ?' ~, n/ g
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。$ J/ X/ {1 t6 E0 r/ s7 m: b5 ~" \

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

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
0 V; m( r+ b, T0 R
7 r2 x0 U0 {3 [, TCheatEngine搜到的临时地址当然无法对应MAME的内存地址: ]( t$ ?$ A0 x  M# e7 {  l

5 k3 r4 {; N9 D* {' B/ G新版MAME没搜索引擎了么?, F* G" j  q; d
晚上我看看
9 j' w* y8 I4 V( q- z, W9 D  w2 t6 p, N1 l6 }2 q! N8 ]
MAME查看地址的功能还是有的5 b' B3 D1 B8 q1 _0 C" P) l
菜单里的第一个选项就是显示内存地址. F" R! [3 ?: p; K) \  `; K
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2127 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:3 O$ Z/ ^6 g0 h' d
1.DEBUG版MAME有作弊码查找命令$ \: k& B/ V0 C6 a/ W3 a

6 V+ m& {& c5 l2 a' ?6 T命令如下:6 Z; w! e$ O+ I" G7 `9 G7 [
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]1 k  e/ o9 O' t# \. a1 O
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型) R% X. r* p4 u. X6 ^8 _
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)+ m# p$ R! }  A% q; J
<swap>是决定字节是否交换5 a; N# E+ h8 ~, v- ]  l1 \' n4 S" _9 M
<address>是地址,地址必须用十六进制表示,例:0x100248
2 `* ^5 l8 E1 m! F- Y<length>是地址长度,长度必须用十六进制表示,例:0xfffff( F* @; a% T7 |) [/ B4 f7 s( H/ o
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU. p# e* \1 y2 y6 U0 d9 F

1 T0 b7 K  L; z, w0 y% S& w请打help cheatinit命令获得更加详细说明
( @8 J' J6 G  Q% ]( w% j* D5 T& N
/ I5 E) t* j) I  r, I: k. d6 ~2 Hcheatnext <condition>[,<comparisonvalue>]% |8 {$ c7 {. N1 ~; M
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]- W$ ^- `- Y) |# _
[eq]是等于
+ O. T0 t0 p  Z[ne]是不等于4 [# o5 r  b8 L% c; y$ ~: e
[de或-]是减少
' Q5 l; ^* {* Q! S8 I% {' I. v[in或+]是增加& ]; L% X- {5 U7 s( U
[deeq]是减少或等于; j+ j1 t, B  y1 t) i* \. l
[ineq]是增加或等于
8 B4 k$ t$ F2 Y" D( v[lt]是小于
/ e1 C5 A3 c) i) |. _: H4 @* |[gt]是大于
% k) T0 [9 |9 L+ m0 k5 X[ch或~]是数据有变化
' Q1 \: l/ u: [8 O; r+ R/ A6 c) R2 k# c( K
<comparisonvalue>0 @- d. W0 {- \* V
要搜索的数值
, Q- }, g1 P- ]5 X& O# g# N9 r& l/ e6 T2 h' p+ V
请打help cheatnext命令获得更加详细说明& W% W) N0 b" W( H5 q1 `  ]

7 B( V3 Y( J; ucheatnextf <condition>[,<comparisonvalue>]
* z/ V! K2 N* t- ]7 k. r  Y4 {说明同上
' j6 V; o, }" i$ I# I
% n: M# m% y& M请打help cheatnextf命令获得更加详细说明
( g/ x3 l' U5 R3 E% l4 r  p3 ^9 S, l
cheatlist [<filename>]* ?* e" q' G% d
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
# a$ g' x0 Y5 ?: t6 v
6 n4 n* Q4 X8 v6 R% f8 y- O4 _请打help cheatlist命令获得更加详细说明2 v% l) x7 C3 C) w' e/ v

; s9 P0 p+ }' {, |: b第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化- U1 d9 T: }% @6 f* P, o2 _9 S

; C# s7 G- V/ B2 b' b# B  k之后进行第一次数据搜索时要用cheatnextf命令来摸索
/ {% Q$ z6 b8 e4 c# C/ u
! e- R! J# r2 F* |. A1 g* C到第二次、第N次数据搜索时要用cheatnext命令来搜索
0 `% p' c! e5 D  n5 F
1 b) e; }3 V. ]% I举个例子吧:
+ Z" \0 q* s# T* `5 Q! {4 E% s, c4 |' i# P+ J9 s, \1 u; l5 ~; [' z4 l! ]
以合金弹头X为例:# N" x6 V" L( x( ?  f0 a# Y' F8 Z
1P生命数是2
: O7 h" E! K" O/ Q4 |! Q4 y% q2 }7 i
" E- w7 u! K$ M8 R先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
- D& M. G) B8 C
8 |4 }$ B" s- |9 Q; }9 L命令如下:+ \. q# D* Q/ H" M7 A
cheatinit ub,0x100000,0xfffff,06 s6 |& j/ ^3 d2 ?8 G7 v& _

) f' \, I  z7 c7 ^再用cheatnextf eq,2命令搜索生命数2) o3 q1 f8 B. u( u% x; ?

* S' ]) ^7 _) x7 T* b  ncheatlist显示搜索结果4 W4 x% ~4 _  _

) w  d" Q( v7 t死一命后用cheatnext eq,1搜索生命数17 R, C  b% H  Q- p9 g4 ~
1 z5 a$ u. e0 \, e% U
cheatlist显示搜索结果2 h+ z+ {8 R, ]8 k& H  e
.......
, g! l5 e$ v! X4 d- z, ^直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
: R: f6 t: l/ _2 ~5 I5 c+ T7 C2 I  Q& J% d0 w; u5 Q9 g
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。0 \% D2 \, y" e  ^: i* `# ?2 E: A

* `7 Z3 }0 d+ l: q没作弊码的话....7 f: S% v! N( i0 j' v
  S" N6 s7 `% D0 D
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
5 V2 e5 }1 C" W( J
& }& F, ?0 f  a' b3 I" l, e, C8 b% p或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)1 f" A$ {7 v+ Z/ R0 t9 Q7 q

. C! F; H: {4 q6 M5 z& ^0 [' I2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行' l* G1 h) k% o- I# E. ~
& h/ s7 v7 U) Y
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
6 S4 ?2 c) r- f6 P; \7 {- G

5 D' M- a9 E2 z1 V% h$ Z; T回114:! Y& r" {0 \- h& Y% T* @" D
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
3 D* R+ t7 F) N8 k  ]0 J9 V2.没地址如何查询地址?看上面我给zsyf的回复
+ S+ n8 z) ^+ H) {4 ~
3 \( N6 M2 b  S; P2 j) k6 U0 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. 幸运榜 / 衰神榜

签到天数: 3093 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-10 09:24 , Processed in 1.082031 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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