模拟器游戏修改之教你如何修改gba rom里的程序!
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                模拟器游戏修改之教你如何修改gba rom里的程序!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                模擬器游戲修改之教你如何修改gba rom里的程序!=原創=
 
*獻給我親愛的wwy* 今天是它的生日!祝她生日快樂!
所用工具:No$gba1.4C (調試功能異常的強大的GBA模擬器) UltraEdit8.10
文章說明:教學類?
作者:大老?
所屬組織:=BCG= =[DCG]=
本人作品:文件加密狗檢測工具 2.0 文件加密狗檢測工具 2.1
本人郵箱:qddalao@126.com
本人主頁:http://www.chaxun8.cn/?blog
本人論壇:http://www.40440.cn?blog
本人的博客:http://blog.sina.com.cn/dalaoqd?
? ? ? ? ? ? ? ? ? ?http://dalao.blog.163.com/
Oicq:79234668此文獻給所有愛好解密和愛好模擬器的朋友們!
如果大家覺得對自己有所幫助請回復支持一下謝謝!?
轉載請保留完整謝謝!!!
GBA是日本任天堂公司出的一款32位的手掌游戲機!本人購買了一款!呵呵沒事的時候消遣一下!最新的型號是GBASP帶背光功能!
簡介
GBA是一款注重便攜性和2D圖形性能的游戲機,它提供了類似Window的旋轉、縮放、α混合、淺入淺出等特性。它有兩種位圖模式:雙倍緩沖模式用于實時重寫全屏幕影響,單緩沖模式用于顯示靜止圖像。顯示屏是2.9英尺寬的反射TFT彩色液晶。聲音方面,除了兼容于GBC之外,GBA有一個PCM立體聲發生器,可以通過CPU重疊模擬播放多個軌道。控制器增加了L和R按鍵。雖然GBA使用的32位RISC CPU在性能和數據處理能力方面都遠超過GBC,但是耗電量卻少很多,可以連續游戲20小時,因為它混合使用了多種RAM在一個特制的芯片里。GBA的軟件可以用C語言編寫。總體性能相當于或超過SFC。
進入正題
GO
(1)<<例子說明>>
----------------------------------------------------------------------------------------
今天的例子是GBA游戲就是大家比較熟悉<<魂斗樂>>GBA版
這個游戲只要玩過FC的都知道當年非常有名射擊橫版過關游戲!第一代是科拉米公司1988年出的!當年
3人通關呵呵!印象深刻呀!GBA版的是SFC(超任)的移植版!畫面還可以就是太難了!所以嘿嘿咱們把它
CRACK一下讓他變得容易點!
------------------------------------------------------------------------------------------
(2)<<修改目的>>
------------------------------------------------------------------------------------------
今天的目的是讓他的人數不減或每次死后增加人數而不是減少人數!
第一步用工具找出存放生命地址,這個用VisualBoyAdvance1.6即可!用它的里面的金手指功能即可!
最后找到地址是03002C60:0003 這個是他存放人數的地址,0003代表是3個生命!找到這個后就好辦了!
現在出場的是No$gba1.4C破解版這東西現在的注冊費是$5000!!!昂貴!最新版本是1.7由于1.4版本的破解!作者不放出新版的演示版了!
----------------------------------------------------------------------------------------
(3)<<分析>>
===========================================================================================
先說明一下GBA核心ARM CPU
指令集
在本文檔的匯編語法中,用 # 前綴表示立即值,用 & 表示十六進制值,用 % 表示二進制值,用 {花括號} 表示指令中可選的設置字段或位。下面表格中粗體的指令是核心 ARM 指令,其他的是值得包含的位和片段、移位選項和匯編器助記碼(mnemonic)... 還列出了協處理器指令。但是用于 RISC OS 機器的 ARM 處理器不支持協處理器,只在一個可訪問的芯片中提供了實際上的協處理器功能。其中包括設置 ARM、cache、MMU 的設施,等...?
指令 意義 最早的 CPU / 注釋?
ADC 帶進位的加法 -?
ADD 加法 -?
AND 邏輯與 -?
ASL 算術左移 這是一個選項,不是指令?
ASR 算術右移 這是一個選項,不是指令?
B 分支 -?
BIC 位清除 -?
BL 帶連接的分支 -?
BX 分支到 Thumb 代碼 StrongARM SA1110 ??
CDP 協處理器數據操作 -?
CMN 比較取負的值 -?
CMP 比較值 -?
EOR 異或兩個值 -?
LDC 裝載內存到協處理器 -?
LDM 裝載多個寄存器 -?
LDR 裝載寄存器 -?
LDRB 裝載字節到寄存器 -?
LDRH 裝載半字到寄存器 StrongARM?
LDRSB 裝載有符號字節到寄存器 StrongARM?
LDRSH 裝載有符號半字到寄存器 StrongARM?
LSL 邏輯左移 這是一個選項,不是指令?
LSR 邏輯右移 這是一個選項,不是指令?
MCR 協處理器寄存器傳送 -?
MLA 帶累加的乘法 -?
MOV 傳送值/寄存器到一個寄存器 -?
MRC 協處理器寄存器傳送 -?
MRS 傳送狀態標志到一個寄存器 ARM 6?
MSR 傳送一個寄存器的內容到狀態標志 ARM 6?
MUL 乘法 -?
MVN 傳送取負的(值) -?
ORR 邏輯或 -?
ROR 循環右移 這是一個選項,不是指令?
RRX 帶擴展的循環右移 這是一個選項,不是指令?
RSB 反向減法 -?
RSC 帶借位的反向減法 -?
SBC 帶借位的減法 -?
SMLAL 帶累加的有符號長(64 位)乘法 StrongARM?
SMULL 有符號長(64 位)乘法 StrongARM?
STC 協處理器數據傳送 -?
STM 存儲多個寄存器 -?
STR 存儲一個寄存器 -?
STRB 存儲一個字節(從一個寄存器) -?
STRH 存儲一個半字(從一個寄存器) StrongARM?
STRSB 存儲一個有符號字節(從一個寄存器) StrongARM?
STRSH 存儲一個有符號半字(從一個寄存器) StrongARM?
SUB 減法 -?
SWI 導致一個軟件中斷 -?
SWP 交換寄存器與內存 ARM 3?
TEQ 測試等價(概念上的 EOR) -?
TST 測試并屏蔽(概念上的 AND) -?
UMLAL 帶累加的無符號長(64 位)乘法 StrongARM?
UMULL 無符號長(64 位)乘法 StrongARM?
================================================================================================================
用No$gba1.4C載入Contra_Advance_The_Alien_Wars_EX_USA_GBA-MODE7.ZIP載入后設置監視斷點!?
先說明一下如何用這個工具進行內存斷點的設置!
下面是這個東西開發手冊上說的!
This break-family allows to capture writes to specific memory addresses, or memory areas. Membreaks are defined by pressing Ctrl+B, and then entering conditions such like:
<按CTRL+B進行內存地址或內存區域的條件斷點設置>
[02000100]! ;stops on any byte/halfword/word write to [2000100h]
[02000100]? ;stops only when writing new/changed data
[06000000..06003fff]! ;stops on any write to first 16Kbytes of VRAM
[02000000..02003fff]? ;stops only when writing new/changed data
Normal Breaks (F2-key)
<按f2設置或清除斷點最多可以設置50個斷點>
Normal breakpoints are set (or removed) by moving the code-window cursor onto the desired opcode, and then pushing the F2-key. Up to 50 breakpoints can be defined.
Run-to-Cursor (F4-key)
<按f4程序執行到當前鼠標處停止>
Hitting F4-key directly starts emulation, and stops when reaching the code window cursor. The break address is not memorized, ie. it is used only once.
開始跟蹤分析
按CTRL+B 鍵入[03002C60]!點OK后點擊右邊的游戲窗口進行游戲!當你死掉一條人命后!
游戲中斷來到下面的代碼
08014EC2 2878 cmp r0,78h
08014EC4 D95D bls 8014F82h
08014EC6 8898 ldrh r0,[r3,4h]
08014EC8 2800 cmp r0,0h =========>比較R0寄存器是不是=0 如果是游戲終止也就是GAME OVER
08014ECA D05C beq 8014F86h =====>R0=0就跳轉到GAME OVER
08014ECC 3801 sub r0,1h ======>不為0則R0=R0-1 剩下的不用我多說了吧!
08014ECE 8098 strh r0,[r3,4h]
08014ED0>8B18 ldrh r0,[r3,18h]
08014ED2 2800 cmp r0,0h
08014ED4 D001 beq 8014EDAh
根據上面的分析咱們只要吧8014ECC這句SUB R0,1修改就行了!我的改法是讓他加+1而不是減-1!再這句上點鼠標的右鍵!
選擇第6項CHANGE Instruction添入add r0,01確定后記下機器碼3001然后用UltraEdit8.10打開rom文件!查找5CD00138
找到后改成5CD00130存盤即可!再打開試試!嘿嘿是不是死了加生命而不是減生命了吧!其實我寫這篇文章只是個拋磚引玉
告訴大家怎么修改ROM!希望能對想修改游戲而又找不到門的朋友有所幫助!
---------------------------------------------------------------------------------------------------------------------
大老
3:44 09/19/2003
凌晨?
在文章完整的前提下可隨意轉載。
總結
以上是生活随笔為你收集整理的模拟器游戏修改之教你如何修改gba rom里的程序!的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 现代计算机之父—冯·诺依曼
- 下一篇: ESP32在WIN7下USB调试串口驱动
