设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1947 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。* A$ S) W3 \- ^
$ \3 z" C! r) L$ |; e9 S" d
(1)如何加载ROM
: g" ]  ^. x/ S6 W- P2 p9 T. P# P1 T1 ?3 ]' N
先说说如何加载ROM吧+ }) Q1 i- b: ~5 j* L2 P& J0 J
+ S1 ?2 h. U% A# A% t
以MAME 0.148 DEBUG版为例:' A1 p/ k/ K" q* B' Q4 U+ d

: g$ P/ f6 B. s  x# B1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
/ V; l+ E8 d4 I+ Q1 `* n" y1 _/ ~* |1 V8 I' A' }$ n
注:MAME官网的MAME是命令行程式,没有GUI。# F8 a5 \; L+ p' _; e
$ c' [) U1 Y0 \" z7 Y, E" g2 y
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
, o! V' \, n% }1 g4 Z7 ]2 M) P; I5 n) N, K3 y) |* L5 U' l% G
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
1 H, t8 Z& f9 b2 t( J  h  Y
& W! J/ |9 E8 w# Z5 n+ J2 Od:回车0 J2 L- V6 @* n4 ~, |4 j
5 m- `9 ]5 [( X
cd mame0148b_debug回车
0 l5 r7 A# f. y" b
9 J  ?. [7 z! H$ y7 h9 V如图1:) C1 I9 j& s2 b7 L6 @, b
" U$ H; @6 o; T) H, O: d8 s

- @$ C, J2 Q8 O& e7 d& r3 E9 j4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: V) \2 p1 @# k, f  v3 Y% c& i7 Y4 z" P
4 r; Y3 r. O* D6 ?: h2 H
, t$ U# Z/ G0 r  J- H" H( `) o; G
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;! Z7 @" I: t: Z0 ]* t8 u9 w
" Q" i0 J) t7 K% \+ e' c2 ^+ D
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。, u5 `5 F/ c( Z& f1 [, G' q

3 h+ }! e9 n+ A(2)如何呼出/隐藏调试窗口
+ z6 e5 r1 P* Y6 v% C* ?) \. v% {8 ]* b& J6 x( Y: k
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
9 R1 x* ?! y; B: X
0 \# q* `  B7 f- ~
' ~) ~$ F& q) H
- c! D! y' _/ M- A3 u/ J2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
8 k: G; c+ ?; D/ G
5 B% ^  A) P1 _1 S- C& t
7 c; d6 S6 c1 E( y3 E' H" L: }
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
2 E; S4 u1 Q5 H
$ I! s1 A( w  _! V9 `, y" ^6 v9 z(3)如何下读/写内存监视点以及程式地址断点4 A' U2 O# X; }3 U( Z# `

) \- I) n2 E0 T2 r0 a1 ?先说说如何下读/写内存监视点吧) j7 k8 ?1 M) G4 h" \7 w. e/ c3 {% o

6 _; n7 k; p; o+ ?- i监视点命令格式:wp <address>,<length>,<type>,<condition>
4 e7 s5 l& \1 o, y9 G" I1 j! j# p/ u
/ ?% V2 r; Z  L' @3 k<address>是地址
% J0 j* O1 z0 k0 B7 s1 v/ u7 w( V( D! V
<length>是数据长度,长度必须用十六进制表示" N* q. @+ ?7 z' ]  J+ n* e

* Y3 m9 m# T  P9 n; x8 T<type>是监视点类型,r是读,w是写,rw是读写
. ]2 c! T: V& J7 k5 P3 y; X/ ?2 E. q1 @% L% V
例子:$ W) K# J, _4 W, ?  Z

" }; C7 h1 z6 S# r例如对ff8569地址下写监视点,数据长度是1个字节3 N% S9 v+ m- ^7 i* f

" p0 ?; ~' S9 N1 l; e& A# ^9 Bwp ff8569,1,w) L0 B( p" W2 d
+ @" O; y. [; f7 ]. P( v
例如对ff2235地址下读监视点,数据长度是2个字节1 k4 V8 z# {/ G: s
9 F4 W' ~: c& F! x
wp ff2235,2,r
2 l) q" L* I: {8 }! @! l! O! U. v
% S# [9 r. F+ l4 m$ ~例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
  i  S# u4 }& i, m5 ?6 d9 i) u) r) O( I+ L) |% |
wp ff7533,1,w,wpdata == 0
' x. @# m* U' k( z( @. T; U4 o8 r* I' f4 [3 e8 [
以龙王战士日版为例:
) y) m3 H+ \4 }' e$ o1 x. M) w' [
! Z* T6 I- e+ W1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:2 k" q* y* ~9 J. K9 R" z8 f

7 n1 A, R. f& D5 |/ i7 b/ P# j1 O6 I. \1 C. \  {) R7 z( D
) C. Q7 |: U* d7 R5 A5 j! n

9 q: n- i4 V6 L! I4 N1 e3 [+ M2 \0 E2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:% v3 y( X, V, t: w' T
; ]% y- c7 ]+ x5 H; e: D
+ t2 u- j) ~' t+ c

* b8 w$ H; o/ M/ B9 v接下来说说程式地址断点
( L/ [1 l( F! c7 s9 k" Q, G  J7 _% x/ X2 S
命令格式:bp <address>
6 [' H+ N3 q& b" G! W2 A8 f, ~9 d, l3 M
例如对000488汇编指令地址下断点
. }- y, f1 p& F; e/ a3 y: F) |5 [. ]9 f0 @: B* L6 x; ~) h& A' s5 j
bp 000488
$ I' X1 `6 A  Y! \, t, y9 L2 ?0 l/ o! e4 \5 p6 F+ z4 \* l5 ?
当程式执行到000488地址时就自动中断, E9 v3 J1 b& j- P
2 J4 f: v* r3 i: W8 }
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看5 v, Q2 e5 A6 s. \$ V

' @( }9 r9 ^% Y% U: W+ N有错误请指正。( B0 z; \5 h& A& j: Y2 h
+ v2 M. y- g) n6 O! F  |
补充一些命令:
: S) Z: F% ^" o. n4 v. U7 E4 T: S, S2 h  |
"wpclear" 清除所有监视点: U( d8 L# R3 j* s9 P& D3 A+ f2 v
"wpenabld 数字" 开启监视点# b9 t0 X0 b6 ]  J; x6 k* t$ G
"wpdisabld 数字" 关闭监视点! U5 [0 ~" \1 ^  k: Q* p5 Y
"wplist" 显示所有监视点7 W/ K, }$ Y: }4 W- Q& |
+ D) H2 ]* l! g# m' o9 f' z
"bpclear" 清除所有断点; O3 r+ g) I7 V" f
"bpenabld 数字" 开启断点
* k9 C  N3 \/ C7 ~$ B! g% V"bpdisabld 数字" 关闭断点, ^2 M" n) @( F% x6 _# q: W" H# @
"bplist" 显示所有断点
& r/ B* D0 ]/ d4 O5 M' F

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3385 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽) }  Z* s: ~' q; U6 S2 H% t

6 a- |8 s* Z6 |以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1947 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2556 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 / g7 m  o  T4 A5 q8 ~/ U

! ]3 [2 V/ M0 s- u5 D; X5 Z太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
3 i' n7 J+ Y2 Q
! _: v; [+ V4 t3 |其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ! F# p( r8 }% f% d: }

; _7 [- M  H6 g7 {6 MCheatEngine搜到的临时地址当然无法对应MAME的内存地址
2 U  g8 P' B1 m0 O  L, T) ]
5 B; P7 x! |( C  f  Z, e8 {新版MAME没搜索引擎了么?- {# k4 T! N9 p2 y+ E9 [1 G
晚上我看看0 M- A" T4 |8 j" ?7 E

5 B; C7 R7 i* s) yMAME查看地址的功能还是有的
! i# P3 ^3 b& {+ O菜单里的第一个选项就是显示内存地址4 P4 z$ P9 x, R* g" C; T" w3 P
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1947 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:2 ]! `% x; [' F9 A
1.DEBUG版MAME有作弊码查找命令$ k: k! c4 D3 J9 g: H6 D. N
- T( I! o9 c) ^# q4 n
命令如下:0 D. J/ E* h6 S9 z5 q5 [
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]1 n3 b. j" }  E0 F& Z) b. S; B
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型" N6 V/ @# I* F# p/ F- c" s
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
. U& p3 b6 s4 G) m  i$ ^/ x' h<swap>是决定字节是否交换
* L# W+ }- f, q  o$ C2 v<address>是地址,地址必须用十六进制表示,例:0x1002488 L. R; J& o# s( E4 b6 p8 s+ H+ l
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
- [% V: H* g. w/ `9 Y<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
+ u7 I# M( ?2 e  x1 M) |6 b( E6 ]3 ?1 |9 l, T- I& a# Y! p
请打help cheatinit命令获得更加详细说明/ }  i6 l1 ~& w' R+ {" M# c
6 n' k7 H1 E1 c0 d% x1 ~) @
cheatnext <condition>[,<comparisonvalue>]- d5 p5 t/ \/ s
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
( ~8 I4 U5 z5 k[eq]是等于8 w9 F) F2 [& U& Y7 N$ N7 P
[ne]是不等于
* o" U. w: K% u8 j[de或-]是减少
" M" j' K! a/ Y% b5 ^[in或+]是增加2 ]0 R% w+ u# p2 o0 k4 {" A" W
[deeq]是减少或等于& j7 i8 r3 M; r6 ^
[ineq]是增加或等于, J( T+ P0 S& a) c! Z! `2 z
[lt]是小于
# }# U/ C8 S& j7 }, K6 x0 A$ r[gt]是大于
) s8 h' q% A2 c2 ~+ y$ i( Y; i[ch或~]是数据有变化
# \; E- i8 I& v+ s( @
" {+ T$ G& f  |& q9 E<comparisonvalue>& k: B, y7 U% D5 ?: W5 O, e! R
要搜索的数值6 [. V+ D$ k& V' f- Y9 t, l5 ?

' L$ f. ?: `4 W3 c, b1 ^请打help cheatnext命令获得更加详细说明
# P) N2 R4 Q2 C' I7 E( h3 J+ E2 p. \1 v
cheatnextf <condition>[,<comparisonvalue>]
7 q( Z2 N6 r1 G  O( p3 d说明同上. i+ [" s- o% r, \) ?" k

9 W. I7 c$ L& H$ u/ X; _* k1 i: M请打help cheatnextf命令获得更加详细说明; r  h& V" I+ J' A! W  G8 R$ x
; G* B' G4 h; K
cheatlist [<filename>]
- O' M3 J  U/ W- |8 ?显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
: T3 y, I5 Q* K  H( k' Z& [
, ?9 V/ t1 w- y# ]! k. O* ]7 I; d! @. k0 F请打help cheatlist命令获得更加详细说明
$ @8 Z/ S& ?# A  w* P3 Y/ {, P5 C9 L9 f
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化7 l% T. k5 O- i5 k. u5 o
8 S. ^5 C9 s$ d& w6 i0 _: i9 \% m
之后进行第一次数据搜索时要用cheatnextf命令来摸索+ H2 |; G' J' r) F7 _

- |, j9 O: w' _3 _8 g) ~/ n到第二次、第N次数据搜索时要用cheatnext命令来搜索+ t% |" U) [  y+ a+ Y% P1 Y% Z
' P/ B* d3 J2 i3 n6 ^- i4 V( V( {
举个例子吧:
. x+ @8 G  t6 s5 a
+ T  P+ y9 q5 g5 B3 ?  G+ M- K以合金弹头X为例:
" t4 q( Q' ?6 b7 V( H1P生命数是2
! @0 [. V* s" F3 x7 M
8 ?/ s8 Y/ E3 q& J7 a* K先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间9 L8 i# E9 L. k0 I; {0 }

2 d# R  M9 w5 n7 y命令如下:
( u4 B: h+ j; s9 M+ N, xcheatinit ub,0x100000,0xfffff,0) T( I( B: C' Z3 S5 H- s' k
) N! {4 i4 r/ n
再用cheatnextf eq,2命令搜索生命数2! I6 t2 O* C0 }
$ m- Q9 Y6 T. A3 p0 \
cheatlist显示搜索结果2 _# {  c! Y8 A% X2 [1 }' l

/ }! b* w5 a/ p2 m死一命后用cheatnext eq,1搜索生命数1/ X! ?3 Q& c+ ]+ d1 \* f0 S

" z9 U" O8 v" w  W- Hcheatlist显示搜索结果* H- i) |3 l# x  @% z6 ^# c
.......
. f( S7 {4 ^" q: d) s) |直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
  G9 f& O! @# T' ~2 m* b
. ?5 J* h6 v& W) z' V" W; Q还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
( {" }* c4 j; o; O8 i: R( Z+ I3 O4 X4 S/ @
没作弊码的话....
2 C2 N; e2 s, o
/ [3 ^6 E1 L1 H8 A: J! g0 n9 r不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)+ U4 z" f( o8 v$ N" E7 ^
# C& E' v; o% M, W3 w6 E
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
! X* k5 {: n! Y; h/ a2 K; K8 A/ q: j4 S& `7 Y
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行* t8 o) {8 r9 s% z" K0 _6 H

; h4 T0 Y: G, [要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

8 j" q3 y5 a4 _0 s/ u1 q5 a/ ?" S- g2 ]1 a' P
回114:0 b7 y6 X' x6 l* q+ ^7 _
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
% M4 j0 {; @/ c# F" m2.没地址如何查询地址?看上面我给zsyf的回复

# V' H  m2 ?" i* e! S2 y# p! N$ {. W6 D7 b- A  f
打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2919 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-5-9 16:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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