EMU618社区

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

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

  [复制链接]

签到天数: 2166 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。$ G: g2 l! C9 d% u. s; W
9 {5 u% N" s: D/ ~% W0 ^
(1)如何加载ROM! Y  w* b1 n% @/ Y7 P7 p

5 r7 `; L) X9 S& |6 F6 a& u先说说如何加载ROM吧
+ _( @- [, {6 o; @6 n
; J- B% t8 Q9 h1 [" i以MAME 0.148 DEBUG版为例:
2 i4 w% g4 w5 A3 {( ^2 Y2 m% u- `; y  q& {' n
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
8 k, }: I$ r8 ~3 x& w/ f' k
7 C5 N! C( z' c1 I注:MAME官网的MAME是命令行程式,没有GUI。
( S1 |8 A# h$ i& n- z
. H* t0 Y% S' G2 M- q2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
/ Z$ k: Q3 u0 l! ]* N# ?4 x+ `7 @- ?1 |
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:3 y+ [' P8 e: a6 K, U4 z
' {/ z5 U2 K. e0 V
d:回车3 t, P5 m7 u% S" a0 g3 [

' M4 }! b/ k7 X7 scd mame0148b_debug回车; J6 M; `* _- w& R. ]9 G" U4 f

/ v; h. ~& w9 I8 p如图1:  k' j5 w6 Z8 `4 i# g; p% i) t
6 x: \1 T  M+ E% \0 p- _- A

; r, _, w5 x9 ^- V" @; _4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:1 o$ x& Q2 Y1 T2 V2 H. s8 Q2 H' |

) q$ }' a8 U7 w( k* T5 q; P/ b/ d* r5 z0 P; k  ]

, M; P7 l# }* m7 B5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;4 i" J! m3 g* y& y6 J
0 Q8 c! l9 K. m5 {, _
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
; s8 R* q7 Y' \
% g8 e( B% m; I  T6 V; n  @(2)如何呼出/隐藏调试窗口8 \" l0 w. ]& l% }/ p

( |1 B6 |, ?" Y7 q1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
$ D2 I' Y( ?# u# _6 w
: z# |+ G8 e, }( l! ~, i& R
/ \# \* i) O& X6 q8 a4 ^9 e
/ c8 h3 U( k" C# E% r+ Z/ p2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
4 A9 L" ^; A* R; [
" G# n# K: V* W1 V  [' z2 o- R" \- \

$ v# z- S: F4 a3 j% k! Q0 c3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
2 L! y2 w. r$ S7 g3 j2 q
# Z  _' H. ~! d, b( q' t(3)如何下读/写内存监视点以及程式地址断点4 ~" }: Y9 y& _  M* g( z7 U; B

* R( t3 E' R; |9 i* F' L% Y先说说如何下读/写内存监视点吧8 P5 }) |% E4 s" ], q- `& m/ M
* _6 Y6 G& a' ?+ c9 q
监视点命令格式:wp <address>,<length>,<type>,<condition>
( s5 h  {( y% R& N3 u0 |; i% e$ |
<address>是地址
6 B& G% P6 G5 w5 ?' F
* U0 j* N9 U: e) U* N<length>是数据长度,长度必须用十六进制表示9 j5 i  p/ v# u3 y6 h" P% L6 p  K8 w
1 e# z; `2 ~& c8 o5 L; p/ `; i
<type>是监视点类型,r是读,w是写,rw是读写
' ?5 u1 p% z. K  q2 W( H% ]. o" k7 r( T' J" \& M
例子:, r4 P1 ^3 Z+ Q% x. u7 @
% y: p: j0 S0 F; c/ J0 y) {; c* t
例如对ff8569地址下写监视点,数据长度是1个字节
" ?0 Y6 z3 D4 A- ~' |' u9 _) O% I+ M) S+ I. c$ j9 V
wp ff8569,1,w
+ e+ J" _, F* |) _5 G
. N( [4 C! \. o) w  [. d4 k# R- w例如对ff2235地址下读监视点,数据长度是2个字节% h& v! \( _% ]! Q/ ?# C
% |; m' A( f8 m8 o1 k/ H! W
wp ff2235,2,r: ^* ]1 s; u/ H& u4 o5 {0 A
; e' ?9 |8 q* {1 l/ T2 V6 ^
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断# }1 H4 g8 [7 }1 J
: V5 I# y% O# B: j* b
wp ff7533,1,w,wpdata == 0
" a* k, A. D& h8 T8 O4 u, M4 G' U' h  V7 |$ {, z4 o6 M9 {' q
以龙王战士日版为例:0 N6 U  ?1 W3 r/ N2 Y
, v8 A9 m4 m! p( c$ R. z$ H
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
, U9 D) [' [7 k0 \5 V% H& U8 A2 H# c' @# X. }
0 E; _; \( h2 m2 ~. ~

- m/ U) u7 D9 f8 o
# m- p9 r: J2 n8 c6 P; A2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:& x  T- ?$ m* \* Q  u, X% e
& N+ h' }% u; R. M% |8 q

! ]& d; e4 K7 w5 u4 j! P1 }# V: o$ n
# @* P. l! S3 H接下来说说程式地址断点
9 E5 I+ u6 L2 N0 b8 r- r) L) h0 Z4 y1 e5 f
命令格式:bp <address># ~3 p! A6 u" @6 ^2 k; _# [3 [9 _

0 ?6 F1 y/ ~, ~% }( b例如对000488汇编指令地址下断点. a6 a8 P* E) X8 x
4 ~3 f0 P/ p  c! \
bp 000488$ p& C* k/ o5 V" S( n
* K* a$ K+ A1 R9 C% t9 s
当程式执行到000488地址时就自动中断& e, h4 j3 Z/ p

. X2 i( I, D) i1 W; s更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
* E: y5 h8 x; G5 h8 _' a/ h9 Y0 g( P7 P
有错误请指正。( H$ [- I; o1 n1 J9 j
- I8 r( |& p& C4 n% }
补充一些命令:  V0 \$ w8 g- a! i' F' j

9 u, z" I. y/ Y' i! I- g% w"wpclear" 清除所有监视点
3 u  F/ b% U) t  `& X" `$ |"wpenabld 数字" 开启监视点
' B. H3 l: U0 g+ ~"wpdisabld 数字" 关闭监视点
: i; S8 d  L2 |* u4 K: D"wplist" 显示所有监视点* e; w. c5 M. c# f( K2 U/ g

% I4 \# i* p3 H" A6 p# M8 }% R: Z; e8 r"bpclear" 清除所有断点- x! }# l- c; k: o* v- q$ a6 t
"bpenabld 数字" 开启断点- }/ A# E, D/ p% Z  I# K. x
"bpdisabld 数字" 关闭断点* C4 J% c) c% K; s% ]6 z, Y0 d
"bplist" 显示所有断点0 F& C' y! }9 o, V. {

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3611 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
& ?0 ~3 K1 `# E. |9 F3 }0 k4 r+ \/ l$ i* b" c
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2166 天

[LV.Master]伴坛终老

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

签到天数: 2585 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
& `$ N  U' |+ v6 F$ [  S# O3 i8 v6 A3 M) y; L3 Y! Q& c
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
9 J% X) h2 }, A1 `5 H$ Y; Z, ~0 Y, T- |+ u+ v
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
/ M5 ^0 w( v' h0 T6 H8 t, n! P
3 l* `7 s0 X( B  xCheatEngine搜到的临时地址当然无法对应MAME的内存地址7 s/ A! A; N3 z: q# x; u; c+ H
' R2 `+ q5 @( s3 z/ |7 s
新版MAME没搜索引擎了么?
  _4 A( d$ e: q$ d- ]2 a晚上我看看  c6 O+ R  u/ g
- Q/ ~6 [& C6 y, z+ M. n) l! ^0 ]( j
MAME查看地址的功能还是有的
+ ]' {) i' p4 J- ^, R# H* Z菜单里的第一个选项就是显示内存地址* k6 S1 H1 k- y) {/ o# `/ m' Z
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2166 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:% B& w$ U8 f! D1 Q! z4 ]. O) R
1.DEBUG版MAME有作弊码查找命令
/ t$ X" ]" {1 i/ e$ _5 M8 w* `
9 L3 [* A  ^$ u+ v6 v1 g命令如下:
, N: o9 q+ D, Hcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
4 v6 q& @/ P- n3 B: t$ y; r<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型; t6 L& X$ L+ ~( f, b5 W, A3 T( F
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
7 K1 D: V; u- d4 P<swap>是决定字节是否交换: P9 @+ U* o# }9 e) A' U
<address>是地址,地址必须用十六进制表示,例:0x100248
5 O% N2 N2 t& M; B8 g0 L; x<length>是地址长度,长度必须用十六进制表示,例:0xfffff8 K) c$ A" _: S) V
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
" A- v) c* p9 E& x- O6 k$ `' g1 K$ m
请打help cheatinit命令获得更加详细说明) T& D* V0 Y2 P! M1 a4 @* X/ u
: Y$ E; |# B9 t' @4 g) Q1 C% ?
cheatnext <condition>[,<comparisonvalue>]* n6 z9 N8 p' Q. q
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
* B, i% ?; E: r  t0 y- ~[eq]是等于
) q5 o' g+ y: Z" }1 ?9 }[ne]是不等于. W* k/ @. m& y- p, O8 }
[de或-]是减少7 p8 t) E7 K/ }( E8 d3 g
[in或+]是增加& V) _. N8 A2 }4 D5 ]" N% }
[deeq]是减少或等于* m, e8 l. l" D+ G; q: }; D$ T2 u
[ineq]是增加或等于
! d' p4 F/ x* S[lt]是小于, d5 f! z0 s7 L% {2 V4 P& [/ ^9 f
[gt]是大于
7 W) w. s% {; V4 z[ch或~]是数据有变化4 x8 I" Y" X. q/ Q

* @; T" V4 z4 H. m+ }" T<comparisonvalue>
5 ]; K4 T) w# n3 N: j2 \要搜索的数值. `* e7 ]. r, d& j! t

+ }' I" e7 v, I+ G请打help cheatnext命令获得更加详细说明
8 ^$ G+ q+ b# z. r
  L; m8 M( H! C8 J) m& ^  S1 lcheatnextf <condition>[,<comparisonvalue>]
- |" {$ F0 ]0 K; U+ j说明同上
  E. m  M7 A& b# G9 ]
' p$ o! G" |8 F5 n* X请打help cheatnextf命令获得更加详细说明- \( D4 T/ v* @, C4 m
! P, g4 p$ b" o# D# e1 \: H
cheatlist [<filename>]5 S- i$ ?7 s4 x: Z& E: W: F
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件/ n1 t" T$ u1 N4 S, k/ V

2 x9 ^- E% h: ]# n5 L6 k6 T3 O请打help cheatlist命令获得更加详细说明
! I* V$ m4 q' g* K/ @( ?# Q. P; @. @' K" Q
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化; C7 l' m4 Q: x8 r, P% U4 k3 d

; N- G, _2 a' r9 ~之后进行第一次数据搜索时要用cheatnextf命令来摸索
0 P$ J: Y9 K! G( ~% Y! t% K0 \0 N! ?  E. b, M0 H3 n
到第二次、第N次数据搜索时要用cheatnext命令来搜索
, [( ~( ]8 S, u0 y  V6 B4 r  x* Z2 h' [* u2 s
举个例子吧:) Z+ Q/ r8 w8 _/ {% s" M

4 f( S7 e7 V" d6 f- e, M! O* J* z以合金弹头X为例:
& Z4 |: e6 c; c! i; ^1P生命数是2! g0 u( v# B% t0 P, P
# a: c$ [' \+ h  w
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间0 V5 L  C8 P/ M3 l
" T0 q, p: k) b7 S# r
命令如下:+ R; M. U; y; H: k1 S3 P
cheatinit ub,0x100000,0xfffff,0! ^2 F& b4 D! L

! r, D2 X) [; R3 f( [* s- d" _再用cheatnextf eq,2命令搜索生命数2
! _. H( ^& \- D( H9 m0 B4 W  E9 t) f' @  Z2 Q6 c
cheatlist显示搜索结果: q! |1 m% d" @0 Q, b! u

' S: b9 p% M$ @; M8 a死一命后用cheatnext eq,1搜索生命数1/ @; h& M( @3 Q$ f. S: v" V# B* V

4 p' d; L) N0 d% b$ Vcheatlist显示搜索结果2 N- F% G# V8 e  q
.......
* f, L/ j" ?$ w直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
, Y5 l8 O; w' z, |* n3 q/ P1 k* ?, I9 k
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。; I) N- j7 ^1 w

& x2 |) m5 a0 z2 Z7 }8 j* t8 O没作弊码的话....
( M1 s  p1 R8 _' [" j0 N
6 E& t$ G( Y# ]0 c; g' J不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
; d6 o/ P! ^* D0 E, Q" m+ c% i9 X& |8 k2 U9 j& y  K* B9 e- `
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)9 K7 Q+ Z$ c* Z6 q# a) o
3 ]9 p3 d9 B& _  m% G. H$ M0 n
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行" \4 x  q& T( _9 N2 j1 p
8 O+ e2 Z+ Y) E* F
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

6 b9 ]0 Q+ i7 [1 }# R8 p" ]5 g+ E. N  K& Q- ]
回114:) U8 _/ b& Y8 V. w- q/ ~) A' Z
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
# ?  c- a: l' z7 Z- L2.没地址如何查询地址?看上面我给zsyf的回复
* m; U3 `% v+ p$ Z3 G
  o, T& S$ C/ ~6 Y% D
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3130 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-20 17:35 , Processed in 1.114258 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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