EMU618社区

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

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

  [复制链接]

签到天数: 2050 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
2 b) P% S  ?  T
8 f/ \4 C5 I: a$ [8 h1 ](1)如何加载ROM
0 K$ _) C" \5 I) _9 h/ _1 y7 \: e, f4 T
先说说如何加载ROM吧
1 B3 g/ w; B! L# g* _5 ^- N2 p, |% A) K  f
以MAME 0.148 DEBUG版为例:! y. O5 V2 h7 M" H- z

% X, @* N6 N; i% M8 @7 }1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
: s& [" z6 D- `; C9 m) k/ L5 S) m9 _0 `$ q+ ^$ m2 k: S6 K
注:MAME官网的MAME是命令行程式,没有GUI。
/ }& j5 {$ @& R- V& w& r
, N# h' |- A$ h# l( I0 {2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;4 t& R$ Z0 u* q' H% v% g+ l% [
3 m3 Z0 w$ L+ H- c) J- J
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
! _) g  H: r/ q$ C3 b' P. }* n: I5 x, w
d:回车/ X3 A; T5 c' ^

( p+ Z( e. E" A# H/ tcd mame0148b_debug回车2 |9 j+ s# X/ {) j% T* }
$ w) b( r' r& h! G8 p) R
如图1:/ E. E& t: j6 t+ W+ e+ W
+ f( s5 d& h, U" q
0 @* I, o( j+ v) t1 K* S# N
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:0 f5 v' e; g1 D* u

2 u- B% u( p! P* q9 {
4 V4 M+ \9 {; d# i4 G) b2 ~$ R. l8 [  K/ {$ l( m
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
* F. A3 n+ q( t2 P0 ~
( n. {0 S1 H0 X' y7 J6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。. Q% w# Z6 o" l' ~+ K% l4 _
- y* p) ~1 j/ t# W5 V' o0 o* `
(2)如何呼出/隐藏调试窗口
$ a$ Z3 b# |$ I) v3 G# `+ h
0 j4 r3 w: V2 p: M/ K: I6 D1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
+ i; H; ]9 m# S" }+ f
. a: i( [2 Z. x9 h4 U7 H
6 k7 ]! V. e) M& e
" r" z0 P0 N5 L% l7 j+ o0 Z( ^7 V2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:/ z+ C0 @. g0 c/ o
2 B6 W) h' c1 k, x; i2 B
, ?. {( W# A  c/ ^( Q% f- A3 U
. j* X0 {( T4 M/ g+ f5 F
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
% M/ _& C: y6 ]2 d. u* e
5 {( `5 R' b% o/ y. C(3)如何下读/写内存监视点以及程式地址断点
; f' P# Q% F5 z4 o$ [; |9 {( i
- C- ?0 c+ }2 \/ q先说说如何下读/写内存监视点吧3 r0 Q* i; A8 d7 [: K

2 ]4 [4 G" t; }) f( U监视点命令格式:wp <address>,<length>,<type>,<condition>
) u) `6 L, w- ^7 b% m- _' P3 b* z4 |/ D
<address>是地址8 f- E# ?# ^. \- A9 G

, Y( a1 a4 D4 Q  T% H, Y2 y<length>是数据长度,长度必须用十六进制表示4 }# L8 d% v9 Z. [4 g: P

$ e' V. ?. a( O) X: s0 g- F, |6 s, x9 \<type>是监视点类型,r是读,w是写,rw是读写
5 D+ e3 G0 X& }- ?' Z4 Z
" v* Y7 [+ k, ?例子:
8 X& @/ O+ @' x3 Q( b5 `( C9 a- T  @) W" b1 Z$ l) ?2 ^) F$ D
例如对ff8569地址下写监视点,数据长度是1个字节0 i) _  w9 k+ q, \
" `+ L: j& L: D. ^7 E7 F
wp ff8569,1,w# m: g7 m2 ~9 F' P

+ z. ~; ^9 G4 z7 j2 U, J: A2 ~, K例如对ff2235地址下读监视点,数据长度是2个字节5 v6 u) b7 t$ e7 U- g
# ~5 Z6 c( F; V7 j
wp ff2235,2,r3 J5 O2 \$ c6 s# \$ a
; z7 Z* H1 P, K
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
9 I! B' A  f" c  k( M5 |8 A4 b( _/ u& Z  m7 ]
wp ff7533,1,w,wpdata == 0
, k2 e& W2 j3 _5 f* w  m
" h% k1 M4 w; q- L! a. r8 J以龙王战士日版为例:
( V: d5 }$ t  x! D4 L+ d0 o& {. `9 a
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:( i- V  y- z' w, P, D

+ u5 t0 I* i6 a* D7 @; t$ i2 X. {$ {

- a) R  S& E+ h7 M7 X( K  ?, e; c! t1 C
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:% `  ~8 ?/ r/ J  Z/ e4 O

, ~1 T/ p5 R, O0 t5 p* s
0 ]+ ?- q) q2 Q" ]% Y- W4 }, E$ y3 q$ S' y& @) W
接下来说说程式地址断点1 u& ]( b  ?) W/ q. v/ N$ r
8 Z4 e6 v$ z% l0 W  L$ h
命令格式:bp <address>
7 y) {7 B$ V. q! i. z5 y
: Y; Y# |8 d4 W3 ?2 \例如对000488汇编指令地址下断点
  t) @' U$ b5 N" S# {
" E6 {' z; e) [/ Z4 r0 L/ w  Obp 000488  m* o( x" o. F& u% [- ?8 o$ v

3 B% U6 O8 H$ g# g1 h9 z当程式执行到000488地址时就自动中断
- ]7 K/ V% r1 a8 A6 {5 Z  H2 |+ s0 j3 K( q5 M# X
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看. M$ J2 Y2 f4 z2 `/ M9 w+ N* S
' d6 N+ N' K7 g: H6 b$ Z
有错误请指正。
  A- j/ m" y- N" H5 z4 J4 _" Y$ Y. p* p  l9 g4 u. n
补充一些命令:$ o! n6 i2 T3 q
5 I2 o) [$ S# Z) N, [
"wpclear" 清除所有监视点
. ]; S" o3 j9 s6 R% L5 n"wpenabld 数字" 开启监视点
0 k+ v! ^' k$ B) e"wpdisabld 数字" 关闭监视点
0 ~7 ]& u) n+ |' `+ n( X7 w( |"wplist" 显示所有监视点
5 K/ H5 Y* }% G9 J# C3 |9 ?: X
3 Y6 d: ^$ g$ F7 |6 Y$ B# ?"bpclear" 清除所有断点& t# C9 \$ i/ g5 O/ T0 ?
"bpenabld 数字" 开启断点
: M! m7 @8 y: A3 @"bpdisabld 数字" 关闭断点5 z/ }# |1 ~& _9 n0 p
"bplist" 显示所有断点
& D$ R7 o' W) ^8 s3 W  R

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3493 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
. Q; ]/ b3 n7 B" N8 V( W" v; h3 h" [1 t, K2 T$ Y
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2050 天

[LV.Master]伴坛终老

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

签到天数: 2569 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
( ?8 f& I2 n; b+ p8 t$ |& g9 ]$ W$ R: w% O
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。- v* n8 y# \5 d
+ D& W8 @$ F  x  H9 O; O. ^
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
# o  Q/ h# H3 k% b6 ]0 ]7 m3 f% s( z6 Z
CheatEngine搜到的临时地址当然无法对应MAME的内存地址6 W2 \2 ?& O  }8 ^1 ^; r6 _+ ^
* L* s+ L$ b- A- c8 M, ]; z; ^* x
新版MAME没搜索引擎了么?
6 i* h0 H- F8 H! z9 E/ b- t, l* R晚上我看看
' q' b. b4 ^  F
5 H) o! W7 `. ]' T: H% b% d( CMAME查看地址的功能还是有的$ S3 A0 ^. ~" V( E6 c, F' p$ L- O2 `
菜单里的第一个选项就是显示内存地址
$ C5 ~5 r7 Z7 C9 h6 f! H6 u不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2050 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
) b( j6 k- b2 r
1.DEBUG版MAME有作弊码查找命令: P" b8 k6 q" E' _$ \6 _" V* k

  G- X' z) o) L( Z( \  k' r3 y命令如下:
! H" @/ k. \, Y; I& B0 Acheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
" U) x8 P  r; _" s<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型" i# D8 {  f5 r; ?. o; _
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
- g  e8 D" u( ]<swap>是决定字节是否交换
: H. D$ v. C1 F; {; @2 u6 ?) H<address>是地址,地址必须用十六进制表示,例:0x100248+ `! r- h: \, t& `* Y& E
<length>是地址长度,长度必须用十六进制表示,例:0xfffff: u: K- W6 z- e. ^# k1 c1 d
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
: \0 {2 n, ?$ E- u$ h) q
1 \0 V3 }# n/ f& e; w请打help cheatinit命令获得更加详细说明" h6 r; T* b" X, @" T% }

) ?% N2 c' y( W+ Z/ f5 U. U- bcheatnext <condition>[,<comparisonvalue>]* O, ~* B; d7 s6 @. C
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
* n/ O5 y0 s7 ~[eq]是等于+ C& p. n: B" c& _. k4 ?  v! l
[ne]是不等于% |! N! L7 C3 _6 j% [
[de或-]是减少0 F! s* `, y; d, z" w4 B
[in或+]是增加
8 \2 ]9 @6 K  M6 \- z3 p[deeq]是减少或等于# M3 a7 ~* ~" y5 D! Z
[ineq]是增加或等于. P9 g0 H8 [7 ?# ~4 C8 `# V* {4 q
[lt]是小于
% V" D+ J4 e% Z. |[gt]是大于+ n( O, ^5 L9 v8 I
[ch或~]是数据有变化
" }+ }/ U8 S/ Y% Q9 B6 Z: \6 c# P* i! e/ G+ K& g8 s; h
<comparisonvalue>
6 O2 r- T( |% p4 M* s: s- D要搜索的数值" `6 o2 x, [8 N! s* t, O2 Y

; W- @: [+ a* x) Q9 P请打help cheatnext命令获得更加详细说明1 [/ }5 C1 A3 K8 E! _" t3 l
- k9 M$ X' j0 r% q. ]0 f( r3 m
cheatnextf <condition>[,<comparisonvalue>]4 a' V6 C. Q6 S% b
说明同上
! L3 J  Q4 b" X- k
; d9 S# V1 g- M+ R" q, F6 o; f请打help cheatnextf命令获得更加详细说明
6 W4 |- K" a6 z' g
+ y) M0 }+ Z1 I; ?3 Y: `& n6 _; i7 ycheatlist [<filename>]8 G$ [! b2 y& g
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件+ h" t3 l" G; a8 B: R& f3 U9 ~: T4 Q

0 @6 f! N8 f8 a  b3 K$ b请打help cheatlist命令获得更加详细说明
6 [- g5 }1 E( ]5 X+ t' M: m. ?1 @; G& k6 i
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
  C0 x! l* Y  {. o6 X: _
7 t5 a+ }. \4 T2 E' g  p之后进行第一次数据搜索时要用cheatnextf命令来摸索) |* z0 ?1 g& J& B: r3 e
9 q& ?2 |# @' N3 n8 p* @0 B
到第二次、第N次数据搜索时要用cheatnext命令来搜索& u' k# j- q! x5 [, y# R9 E/ \9 R
3 Z& }7 b# P- q, ]8 N; A/ _  @( i
举个例子吧:
: V8 b0 d; y' d) f' t! Q/ q3 p  @6 j
以合金弹头X为例:
9 M( N: M1 R$ P' v4 F' e- y! q1P生命数是2
* L  N3 r& O$ \6 H# U8 S" q3 p. F$ u
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间1 b1 d; V0 M2 X2 H& X
  o7 j5 a2 R, J0 Z' {2 t0 Q
命令如下:
6 Y: F$ A0 i( W1 [( Scheatinit ub,0x100000,0xfffff,0; k# v; A# {; _
# {' K( v- O! \3 l
再用cheatnextf eq,2命令搜索生命数2
6 v- f. w% q3 }* ?' D: l- ]$ p; W* ~. _  w1 ?9 |; V8 K
cheatlist显示搜索结果( v# d4 @- H9 p5 W) U8 W0 {
6 U% y. ?4 _$ w4 G8 t
死一命后用cheatnext eq,1搜索生命数1
3 S& l. E" I- I, ?; q1 T" j7 f
: _" K! O% z9 Y! T2 Y" gcheatlist显示搜索结果3 M1 N( \7 w/ o) t& e! }0 G; @
.......# L) \9 n% g+ b6 I5 O( k
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果( R9 ]& t  }4 {3 G: l! ]

, k/ e, @% D! X+ @. i* l. ?3 A还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。* N6 W/ }( w8 b

( F$ U- W! b% b9 t( q没作弊码的话....
6 F) R9 c+ u# b7 |; j6 ?
; B& ]9 R9 |8 `1 n不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
+ D- m0 j% {9 v) N
: n% I2 U: R3 u: V$ {或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)& w" q, n# s4 E5 A. R  _

( y( V# x& t! s: R% i$ {* W+ H2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
% o- ?# E- f$ ~+ d: T* N; C  y+ J- K& {
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

% j* G$ Y6 J- U. m2 r" W. A; \& l" A3 L0 T5 _! M8 ]
回114:  [+ P$ B2 S$ q$ C! m/ ~% d3 [
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
- u6 ~6 Z$ _) S2.没地址如何查询地址?看上面我给zsyf的回复

( V# y, n5 ~/ A: Z' u! K
, D& s4 p+ I7 ]. |打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3021 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-8-25 01:05 , Processed in 1.130860 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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