Skip to content

yami-hack/gba-hack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gba-hack

因为GBA的游戏机能,所以可以把GBA游戏机当成是简单的嵌入式设备。所以,利用标准C的特点,可以实现用纯C来达成修改目的 ##下面介绍修改所需的工具

  • devkitpro *这个软件包可以在sourceforge.net找到,有window和linux版本,软件包已经包含了(gcc,make,as),只要设置好系统环境就可以使用
  • (*)python
    • 这个是可选的,只是为了更简单的用脚本生成.c源码和导出rom里面的数据 基本上,一个工具就能解决了 ##生成GBA游戏里面所需的修改数据步骤如下
  • 找出数据
    • 先通过逆向找出游戏的数据,可以是NO$GBA,也可以是其他逆向工具。或者别人提供的数据
  • 数据结构体
    • 然后在更具数据的结构定义C结构体,再利用工具(或py脚本),有规律的导出C结构体数据 例如, [1] = {10,20,30}, [2] = {50,60,21}, //... GNU C编译器的初始化可用索引初始化,当想修改某项时,直接[索引] ={初始化列表} 注意,必须是const struct n[] = {}... ,这是.rodata数据段,对应gba ROM地址 0x08000000 .. 0x09FFFFFF
  • 生成数据
    • 得到file.c源码后,使用下列生成file.o文件 arm-none-eabi-gcc -nostdlib -c -O2 file.c
    • 导出二进制数据 arm-none-eabi-objcopy -O binary -j.rodata file.o file.bin
      • -O binary:输出二进制数据
      • -j:只输出.rodata 然后向ROM指定地址导入二进制数据

##生成GBA游戏里面的程序

  • 找出程序首地址
  • 使用链接脚本修正符号地址
  • sub_.c 生成单一过程的源码
  • 分析函数的二进制接口,一般gcc命令参数添加 -mabi=apcs-gnu
  • 分析函数的cpu模式
    • 如果每条指令是2字节或者函数地址是单数,那么就是thumb模式,
    • 如果是双数或者指令字节是4字节,那么就是arm模式 根据函数CPU模式添加gcc命令 -mthumb
  • 最大化优化-O2
  • 需要学出个ld脚本,link.ld
  • 生成二进制数据 arm-none-eabi-gcc -nostdlib -c -O2 -mabi-apcs-gnu -mcpu=arm7tdmi -mthumb -Tlink.ld file.c
    • -nostdlib 表示不使用标准库,直接.c源码一对一生成程序
    • -c 生成静态文件
    • -O2 最大化优化
    • -mabi-apcs-gnu 普遍的游戏二进制接口
    • -mcpu=arm7tdmi GBA CPU
    • -mthumb CPU执行模式
    • -Tlink.ld 使用link.ld作为链接脚本 arm-none-eabi-objcopy -O binary -j.text file.o file.bin
  • 对于ld脚本的编写,参考"/ld"目录

##更多内容待添加

  • hack_data
    针对游戏数据的修改
  • hack_program 针对游戏程序的修改
  • rom2asm 把rom转换成汇编,汇编会以数据的形式展现.比如某个地址引用其他地址,会以汇编符号引用其他地址 利用脚本来生成

About

gba,rom,hack

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published