EMU618社区

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

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

  [复制链接]

签到天数: 2201 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
; r% F  [5 M* w& T6 t: i* s1 ^( m6 t/ f* M7 D
(1)如何加载ROM
1 ~" P* D& X' ^. h) \/ f+ L9 k  g: h
5 k3 z# C5 {4 r, X) H' m, v先说说如何加载ROM吧
5 o- |4 S  L7 X7 f
' L5 M+ j+ S6 t6 ?. s. T% b+ u以MAME 0.148 DEBUG版为例:' w$ \8 U6 d+ Z
& }# g" j7 n. U4 r; h
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html, z" j' B7 K* O0 e# ^7 |

6 t6 O8 \5 g/ j& L+ F注:MAME官网的MAME是命令行程式,没有GUI。" ^: k7 g7 ?% h# _# \) D. [

$ {0 i+ {% r6 o% j) ~2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;+ F1 a& p6 L. X: U

/ e+ K. S% Y; v2 m3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:, o. }. A1 C2 T3 H# E0 g3 F
' c8 {9 s9 C5 y0 K# n1 X2 b
d:回车3 C  W: [6 E" m  M1 E5 ]0 A

% J9 a1 ~& W7 x( b. Wcd mame0148b_debug回车3 a  G2 i7 B) [- _/ U. s0 x  W

( u9 L3 ^( b$ f6 ]2 B如图1:
& X6 g, ~9 w" H; v# E& a  o/ ^( [+ I# j! h
- ~6 h3 X5 Z3 z6 I
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
% |5 W* t: }" g+ B, i1 {# A. h, Z4 B$ H
1 M8 W, e  S! B: y/ P
7 @* u) [& n6 d$ X7 u' L
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;( a. l, i0 @! H* C

6 d/ e2 @; y- G8 V6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
- d$ ^; d. l2 [% x0 b; D% M& p$ G1 R% H8 c2 h& Z$ s' {: p3 u  n
(2)如何呼出/隐藏调试窗口6 A! R  d' D1 d' B) z. i
  @% ~" z6 Y4 M; \
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:  D+ ?, q8 m/ ?/ o% `8 ?2 j
! m& c$ w1 B. {
  W3 T7 w( z9 }$ q7 E7 _0 n

- ?" R7 P! p6 O& O' K2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:! C2 v4 X$ z! W1 z- U* I5 a
! v9 x/ r; h& {* j9 [0 w
1 @  s9 A+ g( z; C6 X
0 O; t4 O2 B& C& u0 N" m, j4 h
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。+ F$ Y6 E6 i+ U7 D
. w) B+ y# {2 }$ ]/ T6 O$ B1 Y
(3)如何下读/写内存监视点以及程式地址断点, q7 A+ }! Z+ m7 \  M; _

1 F% }) h9 R: }先说说如何下读/写内存监视点吧( }: ]; Y2 O9 I* r5 g

' U2 {2 r' ]1 R0 T( {监视点命令格式:wp <address>,<length>,<type>,<condition>
& c5 x# M$ R; m, A1 r
! i& @& k" `, z8 [7 x7 H<address>是地址2 O# c- E8 q( s0 X
& a3 a1 J, O) S/ w8 w
<length>是数据长度,长度必须用十六进制表示9 |. b- x1 `# J. U7 T, V: p. g0 O0 B

, F, u3 }- ]6 P# w, i+ x+ N# b<type>是监视点类型,r是读,w是写,rw是读写% L! Y, ^' f3 g- a0 }3 v+ f# N
3 e* w: T6 N) S
例子:. E' w4 ~. r5 F/ I3 f$ |, W

0 ~* T$ G% J! w" R7 P- v例如对ff8569地址下写监视点,数据长度是1个字节. j& _$ ^4 [7 r1 k- J2 A

* U& Z$ ]3 H, j+ Z9 b( pwp ff8569,1,w9 @+ j3 ^, q( \9 |7 r" u/ p$ @5 C
& n; ~! o( _; D( p- d# g" v- l% j
例如对ff2235地址下读监视点,数据长度是2个字节
" c3 _$ [7 h4 b& Z# M5 d
" I0 ^/ N, r! s+ mwp ff2235,2,r$ f' C- L" E/ Z
* S( \' ]' Y2 {. c
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
) j: o. H, a/ h7 c* m! m- R
# s/ v% _3 [% D4 ~7 ^  {wp ff7533,1,w,wpdata == 0
" |- k. Y) x0 Q9 o; |3 t: [0 Z1 D) q" O) l6 x7 J+ o
以龙王战士日版为例:, v" N; }, c3 H
4 k" C" S+ r+ [8 O& r
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:* `3 b# f1 ?: A( O

, a0 G9 L2 ^2 T4 }6 F% o  J4 v# U' w9 p1 d+ I4 j
( O# }- a3 b2 o8 `6 z4 ]7 d
+ T7 y2 G0 }% |* a
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
2 W5 p6 o( F: M* f, M" i& W% `1 x* U/ |7 ^' P5 [
: ~  [) U7 {( @: a* S" {

; W$ b0 h1 N9 j( M接下来说说程式地址断点5 }- f  ~4 a8 x$ I

7 k8 U5 l& X" h, E/ D* Y+ x# n; B命令格式:bp <address>
  c9 W: F8 F$ d- }' `' A4 P; \2 D; }: g% D5 ?
例如对000488汇编指令地址下断点( X. b9 N. H% o* a/ y
7 G' N) O/ e0 e3 D; J/ H0 M
bp 000488  t% x  l  `$ W' ^
0 ?) Q5 C; ~6 i
当程式执行到000488地址时就自动中断
; p$ ~+ X. ]* A1 E3 k2 H
4 N! W' Y- V$ B; j6 g) }' m更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
0 X3 `$ [1 w0 U/ A2 ^) l$ Q7 I3 K- E+ D( I& h' J
有错误请指正。
6 C7 }2 h( C+ u$ g$ N0 x( D/ N7 \* b  T  ?: x9 @! M
补充一些命令:
) _& v5 l+ P2 Z2 S5 X+ l) B  P' [& c9 C7 I. b$ o7 G/ l- h
"wpclear" 清除所有监视点
* |/ X2 j/ w, Q"wpenabld 数字" 开启监视点
" H) F8 W% m6 M6 n"wpdisabld 数字" 关闭监视点
- p/ g, {& ?& A) p$ f( o+ ?# I/ Y"wplist" 显示所有监视点
! d6 ]" c+ X' F+ [  W5 ^' ?8 y6 |4 h0 j6 n. o9 e2 C
"bpclear" 清除所有断点
* p, s0 C& p( y; j2 X, L2 H"bpenabld 数字" 开启断点' Y& Z6 @5 i! j/ Z* J- \7 B* ]! M
"bpdisabld 数字" 关闭断点8 g/ K" l6 o. q( @8 Y9 x# s
"bplist" 显示所有断点
: y8 U- w! O3 x0 @

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3647 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
2 j, Y! g$ U& L" W! m( Z! c, ?
% E: s+ v7 r2 y. ^- h8 W以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2201 天

[LV.Master]伴坛终老

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
' I1 M8 g& u7 X9 [, }5 U$ l
6 z' j* I5 U1 Q% q$ m太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
+ M9 V7 {4 f# U7 b* z; m- s* N9 H) |6 E# `
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 9 A  C  d0 Z3 `, {# E& i6 S  N9 t3 ^

4 W9 c" Y8 \2 P( @5 QCheatEngine搜到的临时地址当然无法对应MAME的内存地址0 K  O" N( _; M& [+ Q  B# f

" E$ U0 O* d# Q* O. z2 u新版MAME没搜索引擎了么?
4 v: e! L, u3 Q) |晚上我看看  y( K, j9 M; ]0 z; w

; Z: i: o2 M" sMAME查看地址的功能还是有的
2 x# N; f, S3 M( c菜单里的第一个选项就是显示内存地址
( ^+ ]- ~  \' j不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2201 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:- U  }* }3 b' p  h7 g
1.DEBUG版MAME有作弊码查找命令; ]% c* ?0 l4 r: t

4 p4 \( J1 U. m% a8 s! a- m命令如下:2 r3 f! ?$ i! h. X
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]& A' D0 \1 s# _9 n* N8 i/ f
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型' K* m  k1 D& R8 }7 ?3 i
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
& x/ @& C) e2 Q" ~$ @( m<swap>是决定字节是否交换* r  W# g  \3 x* X# _' ]# J
<address>是地址,地址必须用十六进制表示,例:0x100248! j" O! r# }& C* O* x
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
0 f% q8 n: j7 p2 F# W<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU7 ?0 p3 l( x& i- C: |

' ?# N5 q/ {. L5 u/ Q请打help cheatinit命令获得更加详细说明: J* l% p( h7 O4 |
( S- Q* s7 m/ M# ^" T
cheatnext <condition>[,<comparisonvalue>]
7 Y) C) D+ S# ^<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]8 }$ H" Z0 P9 y) j
[eq]是等于7 Q. P! L. v; G5 u. T
[ne]是不等于
, J& S0 Z' H6 a0 D5 _4 u[de或-]是减少
8 t* y' L- Q# X) v( ?- q( W2 @[in或+]是增加/ A8 ^+ r) I3 N- f
[deeq]是减少或等于+ a2 E1 ]6 z. @( @$ j4 a  w* S
[ineq]是增加或等于. e: V* L/ L+ d1 R- g# H; }4 _) P
[lt]是小于3 R1 m8 t. O8 `8 T7 j
[gt]是大于* S  P5 U! \* W. ?7 l3 p5 n
[ch或~]是数据有变化
( B2 t' y4 A* z' X  O7 A: c% d
  i; F4 x4 C  G0 x<comparisonvalue>0 _) t" a0 l( _! c  A
要搜索的数值
: Z: ]* i' n4 r$ i) K; b  K
; U2 h" R+ E  S9 v( q% @请打help cheatnext命令获得更加详细说明
( h1 a: Y' q0 P9 k5 [
# Z' M% m' f9 mcheatnextf <condition>[,<comparisonvalue>]6 G' Q5 P/ `# y( |" p
说明同上% }4 D' y, z/ H1 l0 N% q) C* m- {
9 d- [8 w+ c, F2 v! k
请打help cheatnextf命令获得更加详细说明- j3 t3 F5 o3 f4 C

+ h$ z/ p" a4 H# m. Lcheatlist [<filename>]% n/ \" }7 u  h1 w6 a, n* J  T; @
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件, i$ _) v5 w- N7 g* a6 {- J0 R
6 n/ D0 [, o( o1 n1 {
请打help cheatlist命令获得更加详细说明9 p# E3 e: D. ?% ]: q

2 e/ F! w8 y: a: T$ O+ e( ~; ]第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化1 ^1 f* s* ]7 T- c) u: }
( w, U9 a" P5 U; x
之后进行第一次数据搜索时要用cheatnextf命令来摸索. y/ C' H1 S1 N$ w, x

7 Z% f8 R: D# [. s' O到第二次、第N次数据搜索时要用cheatnext命令来搜索8 s9 C- X' ~% @5 ]( H
* q. L4 c" ^0 l
举个例子吧:# D/ z9 L5 z, n& G

, u* ?/ A$ p( h0 W" r6 L$ J& [: _  D! X/ R以合金弹头X为例:/ Y4 @  v( U# i  O- z; P9 [
1P生命数是2; g0 h9 ^7 n. L6 Q0 Y: j' d$ y

: Y# U, }$ ^; k% {9 x先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间2 r7 J6 E1 V3 K3 I( D) r

0 b6 ]! n/ u8 M命令如下:
; P" B  u+ i) ^! `cheatinit ub,0x100000,0xfffff,0
  J' o7 ]5 A% F* U" z
: r: u0 H& c7 c* I/ X8 x. a再用cheatnextf eq,2命令搜索生命数2
' d: g; P5 M# b0 Y, P7 a9 t
( r& H9 {$ i+ R2 n7 {% |8 U: scheatlist显示搜索结果
/ L5 W2 n- Q4 M5 P4 H
- u2 v& ^! r' r8 }死一命后用cheatnext eq,1搜索生命数1
$ E; k/ w* Y, @0 O
- c! Y* x9 B& e! x: z* g, xcheatlist显示搜索结果1 w) b' R1 v. N. K6 d0 c$ W- q
.......
) ?; s( h) T  E2 s' l* V6 F' A直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
% w' h4 d5 D2 A) e% v( n
8 I  m1 |4 L: t' Z% Y还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。5 Y: A$ Z  a: I- t3 j
4 L: L6 k; c# a) g
没作弊码的话....
7 l. `, i$ L9 s- J' r8 k) g* o( S. X
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
) P& q2 [" z& ]2 x& A7 i
. p" i6 D9 W4 V0 _2 G) G4 e' \或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
- \# X2 \. c! e) ]
  f4 K2 b) u) M1 s  o: S4 E. R2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行- Z8 U. X6 k# i% w# e7 d

* j% ]: ]+ v! S  s要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

1 j9 n- x  {* `$ O4 Q
& y) }7 L, }) q9 F) M% x2 R/ ~! ^1 }6 I回114:
5 z# S  _! W; X/ E, h9 Y
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
6 W8 q  `- W" C" O0 U" I2.没地址如何查询地址?看上面我给zsyf的回复
9 @: s. ]0 w( \7 O) K
- ^! t8 ]+ Z/ r5 y( {0 _
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3165 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-25 14:00 , Processed in 1.083008 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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