金手指(Gameshark)机制原理

金手指(Gameshark)机制原理

查看: 3773|回复: 4

金手指(Gameshark)机制原理

[复制链接]

puro0304

puro0304

当前离线

UID179300 繁华都市的喧闹

积分211

主题11

注册时间2024-10-8

在线时间76 小时

50

回帖1041

现金3

勋章券

繁华都市的喧闹

繁华都市的喧闹, 积分 211, 距离下一级还需 89 积分

繁华都市的喧闹, 积分 211, 距离下一级还需 89 积分

积分211

发消息

火恐龙 Lv:17

电梯直达

1#

发表于 2024-10-10 23:23:39

|

只看该作者

|倒序浏览

|阅读模式

本帖最后由 puro0304 于 2024-10-10 23:23 编辑

这是我从一个介绍GB(C)的网站里面看到的,这个网站看下去真的是收获了一堆GB(C)知识。

看到这里好多使用金手指的玩家,所以就想告诉各位GB(C)金手指是怎么工作的?

以下是该网站地址连接:

https://gbdev.io/pandocs/Specifications.html

金手指都是8位16进制的一串数字/字母,比如美版红蓝的穿墙金手指010138CD这种。

从左到右:

1和2位代表SRAM bank,即使用此金手指会将SRAM切换到bank1,对于宝可梦游戏的SRAM,简单来说就是存档RAM。但金手指一般不会直接修改存档。

3和4位代表新数据,即使用此金手指会在对应的RAM位置写下01.

5678位代表位置,注意GB(C)记录位置都是先小后大的,38CD代表的是CD38。一般金手指写的都是WRAM(工作RAM)区域,也就是C000-DFFF这个区域。

所以总体的来说,就是切换SRAM的bank为01,并把01写入RAM的CD38位置上。

据了解,金手指的机理是通过挂钩原始的VBlank中断处理程序并每帧重写RAM数据来实现的。(或者你可以简单理解为每次GB(C)更新完所有RAM原本的数据就马上被金手指更新为规定的数据)

所以金手指有一个缺点,就是会占用GB(C)的CPU时间。(但现在我们都是用模拟器的,可以忽略这个缺点)还有它不能去修改ROM的程序,因为ROM在RAM里面是无法更改的。

收藏1

分享

淘帖0

顶0

踩0

回复

使用道具

举报

提升卡

变色卡

htxx34zyx

htxx34zyx

当前离线

UID178683 口袋学堂外的努力

积分38

主题1

注册时间2024-8-27

在线时间6 小时

15

回帖79

现金0

勋章券

口袋学堂外的努力

口袋学堂外的努力, 积分 38, 距离下一级还需 12 积分

口袋学堂外的努力, 积分 38, 距离下一级还需 12 积分

积分38

发消息

2#

发表于 2024-10-11 13:09:47

|

只看该作者

其实跟外挂一个原理:直接修改内存,而大多数游戏不能通过内存进行对游戏直接修改,所以不能改游戏资源(rom)

有需求发邮箱:htxx34zyx@126.com

什么资源都有

回复

支持

反对

使用道具

举报

htxx34zyx

htxx34zyx

当前离线

UID178683 口袋学堂外的努力

积分38

主题1

注册时间2024-8-27

在线时间6 小时

15

回帖79

现金0

勋章券

口袋学堂外的努力

口袋学堂外的努力, 积分 38, 距离下一级还需 12 积分

口袋学堂外的努力, 积分 38, 距离下一级还需 12 积分

积分38

发消息

3#

发表于 2024-10-11 13:10:48

|

只看该作者

先小后大...也就是说我先输入密码再开机?

有需求发邮箱:htxx34zyx@126.com

什么资源都有

回复

支持

反对

使用道具

举报

leoxxx

leoxxx

当前离线

UID180112 与恶势力的交锋

积分475

主题23

注册时间2024-11-10

在线时间541 小时

127

回帖412

现金3

勋章券

与恶势力的交锋

与恶势力的交锋, 积分 475, 距离下一级还需 25 积分

与恶势力的交锋, 积分 475, 距离下一级还需 25 积分

积分475

发消息

毒刺水母 Lv:47

4#

发表于 2024-11-10 11:47:09

|

只看该作者

本帖最后由 leoxxx 于 2024-11-10 12:26 编辑

htxx34zyx 发表于 2024-10-11 13:10

先小后大...也就是说我先输入密码再开机?

其实是他这个表述有问题。

这里的地址是以小端字节序(Little-Endian)表示。

举例代码:010138CD

01:SRAM bank,通常为01。

01:值。

38CD:地址,以小端字节序(Little-Endian)表示,即CD38。

Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

举个例子:12345678

大端:12 34 56 78

小端:78 56 34 12

个人猜想:整条代码都是以小端字节序表示,即大端字节序的CD380101

在My OldBoy!中Cheat type默认为Auto dectect。输入CD38 01会被自动识别为RAW码,并改为CD3801。

回复

支持

反对

使用道具

举报

leoxxx

leoxxx

当前离线

UID180112 与恶势力的交锋

积分475

主题23

注册时间2024-11-10

在线时间541 小时

127

回帖412

现金3

勋章券

与恶势力的交锋

与恶势力的交锋, 积分 475, 距离下一级还需 25 积分

与恶势力的交锋, 积分 475, 距离下一级还需 25 积分

积分475

发消息

毒刺水母 Lv:47

5#

发表于 2024-11-10 12:29:04

|

只看该作者

htxx34zyx 发表于 2024-10-11 13:09

其实跟外挂一个原理:直接修改内存,而大多数游戏不能通过内存进行对游戏直接修改,所以不能改游戏资源(rom)

https://gbdev.io/pandocs/Shark_Cheats.htm

这里提到了Game Genie说是ROM patches。大概类似IPS。

回复

支持

反对

使用道具

举报