字节狂徒
码龄4年
关注
提问 私信
  • 博客:183,398
    问答:595
    183,993
    总访问量
  • 59
    原创
  • 471,334
    排名
  • 1,369
    粉丝
  • 44
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2020-08-15
博客简介:

Byte Madman

查看详细资料
  • 原力等级
    成就
    当前等级
    5
    当前总分
    1,096
    当月
    22
个人成就
  • 获得867次点赞
  • 内容获得64次评论
  • 获得1,693次收藏
  • 代码片获得5,876次分享
创作历程
  • 25篇
    2024年
  • 27篇
    2023年
  • 12篇
    2022年
成就勋章
TA的专栏
  • ESP32打造物联网
    20篇
  • 树莓派
  • 街机模拟游戏逆向工程(HACKROM)教程
    19篇
  • 街机游戏逆向工程(HACKROM)实例
  • 街机模拟游戏逆向工程(HACKROM)进阶
  • 保姆级ESP32开发入门教程
    14篇
  • ESP32开发实例
    1篇
兴趣领域 设置
  • 编程语言
    pythonc++汇编
  • 网络与通信
    websocket
  • 嵌入式
    物联网
  • 游戏
    游戏引擎游戏程序
  • 前沿技术
    智能家居机器人
  • 3C硬件
    游戏机
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

街机模拟游戏逆向工程(HACKROM)教程:[19]思路的多样性

我们回到游戏开始,向前走一点,走到敌人马上就要出现的临界点,为什么要走到临界点,是因为在敌人出现前,会出现两个飞龙,因为敌人的内存很多是共享的,这两个飞龙很可能会占用掉这个地方的内存。我们已经知道,敌人出现需要一个条件,当这个条件满足时,敌人的出现,程序会需要初始化这个敌人出现的位置,也就是说,我们可以利用敌人的坐标位置来一步步找到敌人出现的条件检测位置。我们回到游戏观察敌的走动,我们猜测敌人向左走时敌人的坐标会减少,向右时会增加,我们发现敌人移动了,就进入调试器,如果敌人向左移动了,使用。
原创
发布博客 2024.01.23 ·
992 阅读 ·
18 点赞 ·
0 评论 ·
9 收藏

街机模拟游戏逆向工程(HACKROM)教程:[18]分析的思路

首先,敌人的出现是需要一个条件的,我们在游戏中可以发现,游戏开始后,我们如果不向前移动,或者向后移动,敌人是不会出现的,只有我们向前移动了一定的距离后,敌人才会出现,那么,我们可以猜测,敌人出现的条件就是场景的位置,只有玩家移动到场景一定的位置时,敌人才会出现。那么,我们如果需要找到其它的一些数据,我们应该如何理清其中的思路呢,我们下面用一个实例来实现改变出现的敌人。但是,我们同时看到,这些地址有多个地址的数值和FF8744的值是一样的,也就是说,这些地方所存的,也有可能是场景的坐标值。
原创
发布博客 2024.01.23 ·
1407 阅读 ·
24 点赞 ·
0 评论 ·
19 收藏

街头霸王II神经网络AI训练项目

该项目通过对街头霸王II进行足够的人工或自动训练,最终生成的神经网络可以让对局双方在AI的掌控下自动进行对局。要求:一、MAME版本:MAME01850b-64位二、ROM版本: “街头霸王Ⅱ加速终极格斗日版”(sf2hfj)三、同时,还需要先保存一个对局中的存档(用Shift+F7保存一个存档)
原创
发布博客 2024.01.22 ·
924 阅读 ·
12 点赞 ·
0 评论 ·
9 收藏

街机模拟游戏逆向工程(HACKROM)教程:[17]实战分析程序运行逻辑

在之前我们已经测试过,在"恐龙新世纪"这个游戏中,我们在使用扣血技能时,之所以可以实现减少血量,是利用sub指令来减少血量所对应的内存的值。那么,经过这个测试,我们又可以猜测,当我们拾取回血道具时,用来增加血量的指令是否为和sub相反的add指令呢,我们同样可以测试这个情况,我们硬重启一下游戏,默认硬重启为shift+F3。我们可以看到,这句sub指令和之前的一样,占用了4个字节空间,所以,因为每个nop指令是占用2个字节空间,要让这句sub指令完全失去做用,我们需要用两个nop指令来替换这句指令。
原创
发布博客 2024.01.22 ·
1358 阅读 ·
22 点赞 ·
0 评论 ·
28 收藏

街机模拟游戏逆向工程(HACKROM)教程:[16]68K汇编-条件分支指令

第二个逻辑,N(负结果)标志为1,V(溢出)标志为0,所以第二个逻辑成立。第二个罗辑,虽然V(溢 出)标志为0,但是N(负结果)标志为1,所以第二个逻辑也不成立。第一个逻辑,虽然N(负结果)标志为1,但是V(溢 出)标志为0,所以第一个逻辑不成立。但是只要有一个逻辑成立,就会发生跳转,这里,因为第二个逻辑已经成立,所以,这里会发生跳转。第三个逻辑,N(负结果)标志为1,V(溢出)标志为0,所以第三个逻辑不成立。第一个逻辑,Z(零结果)标志为0,所以第一个逻辑不成立。二、[为负] 与 [非溢出]
原创
发布博客 2024.01.22 ·
768 阅读 ·
10 点赞 ·
0 评论 ·
6 收藏

MAME模拟器debug帮助文档汉化五(断点调试器命令)

通过可选的 参数,可以指定一个表达式,该表达式将在每次断点地址被击中时进行评估。如果指定了 ,则只会列出该 CPU 的断点。请注意,禁用断点并不会删除断点,只是暂时将断点标记为非活动。禁用的断点不会导致执行停止,其相关的条件表达式不会被求值,其相关的命令也不会被执行。如果指定了 ,所指的断点将被禁用。如果未指定 ,则将禁用所有断点。如果指定了 ,将清除所指的断点。如果指定了 ,将启用所指的断点。
翻译
发布博客 2024.01.22 ·
123 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MAME模拟器debug帮助文档汉化四(执行调试器命令)

启动或停止跟踪指定 的执行,如果未指定 CPU,则跟踪当前可见的 CPU。忽略调试器中指定的 CPU。开始或停止跟踪指定的 ,如果没有指定 CPU,则开始或停止跟踪当前可见的 CPU。通过可选的 参数,可以指定一个表达式,每次指定的异常条件触发时,都会对该表达式进行评估。需要注意的是,由于它能检测从异常返回的条件,如果试图跳出子程序,而在子程序完成前发生了中断/异常,执行可能会在异常处理程序结束时提前停止。 参数是可选的,如果省略,默认值为 1。
翻译
发布博客 2024.01.22 ·
208 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

街机模拟游戏逆向工程(HACKROM)教程:[15]68K汇编-测试对比指令

测试或对比指令会检查源操作数 和 目标操作数的某些特定条件的状态,然后设置相对应的CCR的某些状态标志,这些指令通常不会对源操作数和目标操作数产生改变。
原创
发布博客 2024.01.21 ·
1311 阅读 ·
27 点赞 ·
0 评论 ·
24 收藏

街机模拟游戏逆向工程(HACKROM)教程:[14]68K汇编-标志寄存器

在M68K中,有许多条件分支指令,和jmp指令一样也会修改PC达到程序跳转或分支的目的,不过这些会根据一些情况或状态来选择是否跳转。而在M68K中,有一个特别的寄存器来标记这些情况。
原创
发布博客 2024.01.21 ·
1258 阅读 ·
19 点赞 ·
0 评论 ·
26 收藏

街机模拟游戏逆向工程(HACKROM)教程:[13]68K汇编-jmp指令

如:move.w d0,-(sp),执行时,sp寄存器的值会先减少.w长度,也就是2个字节,这时,sp的值为$10000 - $2 = $FFFE,然后才会把数据传递到sp所指向的地址。我们要理解该指令的作用,先要理解堆栈(stack),堆栈是一块可以用来临时存储重要信息的内存空间,你可以指定 m68k 的堆栈的地址在哪,也可以随时地修改堆栈的地址。bsr与jsr指令的关系,和jmp和bra的关系是一样的,bsr与jsr指令的作用基本相同,不同之处和bra指令一样,bsr指令的寻址范围是有限制的。
原创
发布博客 2024.01.20 ·
750 阅读 ·
9 点赞 ·
0 评论 ·
10 收藏

街机模拟游戏逆向工程(HACKROM)教程:[12]68K汇编-程序流控制

PC寄存器也是M68K的一个寄存器,他的作用是存储当前运行程序的位置,我们在之前的所有测试程序,都是存在“只读存储器”中的,也就是常常说到的ROM。这里需要注意,我们PC值的选择必须为指令的开始,如果设置了比如$1002,那么机器会执行:0000 0325这段指令,这种情况下,计算机不会正常运行完整的指令,这会造成两种情况,运行错误或者不能实现指令的功能。那么,也就是说,这句我们输入的指令,经过编译器的翻译,生成了一段长度为6个字节的16进制的数值。比如该段代码的第二句,是生成了长度为4个字节的数值。
原创
发布博客 2024.01.20 ·
1693 阅读 ·
22 点赞 ·
0 评论 ·
25 收藏

街机模拟游戏逆向工程(HACKROM)教程:[11]68K汇编sub指令

该指令的作用是[源操作数]减[目的操作数],结果传递至[目的操作数],[源操作数]保持不变。如果d0里原本是00000010,那么指令执行后d0里的内容会变成00000000。如果d0里原本是0000002E,那么指令执行后d0里的内容会变成0000001E。如果d0里原本是000000E4,那么指令执行后d0里的内容会变成000000D4。如果d0里原本是00000008,那么指令执行后d0里的内容会变成000000F8。sub -减法指令。
原创
发布博客 2024.01.19 ·
695 阅读 ·
10 点赞 ·
0 评论 ·
7 收藏

街机模拟游戏逆向工程(HACKROM)教程:[10]68K汇编add指令

add :加法指令该指令的作用是[源操作数]加[目的操作数],结果传递至[目的操作数],[源操作数]保持不变。
原创
发布博客 2024.01.19 ·
713 阅读 ·
8 点赞 ·
0 评论 ·
11 收藏

街机模拟游戏逆向工程(HACKROM)教程:[9]68K汇编move指令

我们可以把这段内存看成是一个对象(OBJ),在这个对象中,保存了玩家人物比如:血量,动作,位置,速度,人物ID,颜色,等所有数值。在之前的文章中,我们已经多次测试过move这个指令,move指令可以说是68000汇编中最常用的一个指令,该指令可以把源操作数传递到所有寄存器以及所有的内存地址。如:$10(a1)的格式,这个我们在之前并没有见过,其实,带有偏移值的代码格式如:($10,a1) 和$10(a1)的格式都是正确,并且作用都是一模一样的。而上面的部份指令,我们已经在之前的测试中尝试过了。
原创
发布博客 2024.01.18 ·
835 阅读 ·
8 点赞 ·
0 评论 ·
11 收藏

街机模拟游戏逆向工程(HACKROM)教程:[8]68K汇编指令简介

N&&V Less or Equal 小于等于(不大于)置1。
原创
发布博客 2024.01.18 ·
1293 阅读 ·
26 点赞 ·
0 评论 ·
26 收藏

街机模拟游戏逆向工程(HACKROM)教程:[7]68K汇编寄存器

在之前的章节中,我们测试了一些程序代码,代码中很常见的一些比如D0,D1,D2....A0,A1,A2......之类的代码。这些代码中的字符是告诉汇编程序,这里是指向一个寄存器。寄存器是处理器的内部也有一些存储的空间,不同类型处理器根据其设计结构和设计目的的不同,各自有着不同类型的寄存器。在寄存器中,因为与CPU联系密切,数据的移动,加减操作,读取写入要比任何其他的存储设备(比如高速缓存,内存,硬盘等) 效率更高,速度更快(但是由于是集成在处理器内部,造价更高,存储空间也更小)。
原创
发布博客 2024.01.17 ·
1436 阅读 ·
40 点赞 ·
0 评论 ·
9 收藏

街机模拟游戏逆向工程(HACKROM)教程:[6]68K汇编简介

对于ADD,还有ADDA(加地址,不会影响标志位)、ADDI(加立即数)、ADDQ(快速加,加数不大于8以便于直接放在操作码中,比x86的INC指令书写麻烦但功能更强)、ADDX(影响进位符,用于大数运算)等。自增间址,如(A0)+。目的操作数的内容会随着执行指令而改变的操作数,也就是说,在该指令运行后,该操作数的值会产生不同的改变。可以观察到,和之前的结果不同,这次运行的结果为:FFFF0016,是因为这次的指令操作长度比之前的指令由单字节增加到了双字节,所以,这次的指令的影响范围也增加到了两个字节。
原创
发布博客 2024.01.17 ·
1779 阅读 ·
22 点赞 ·
0 评论 ·
24 收藏

街机模拟游戏逆向工程(HACKROM)教程:[5]中断

在上一章中,我们搜索到了"恐龙新世纪"模拟游戏中1号机台玩家血量的地址,那么,这个地址在对该游戏的逆向工程中可以起到什么作用呢?我们可以考虑,玩家血量的变动有多少种情况:1、被敌人攻击- 得到敌人某个技能的攻击力,自身的防御力。2、被队友攻击- 得到队友的攻击力。3、被道具击中- 得到道具的攻击力。4、使用扣血技能- 得到使用技能扣除的血量值。5、拾取回血道具- 得到某个回血道具回复的血量值。也许有更多的情况,这里只列出常见的几种情况。
原创
发布博客 2024.01.16 ·
1701 阅读 ·
35 点赞 ·
0 评论 ·
26 收藏

街机模拟游戏逆向工程(HACKROM)教程:[4]MAME的作弊功能

回到游戏,我们会发现,血条并未发生变化,因为血量发生变化后,游戏的显示并未发生变化,这其中的逻辑为,当血量发生变化后,会调用血条显示的程序。2、我们再次进入游戏,利用敌人或其它方式让玩家的血量发生变化,再次搜索之前保存下来的数据,因为血量已经发生了变化,相对于之前的数据,血量的内存数据也必定发生了变化,我们把之前的数据与已变化的数据进行对比,筛选出已经发生变化的数据。在一个游戏的运行过程中,游戏中所有的变动,比如玩家的血量,敌人的血量,玩家所在位置,场景的位置,剩余时间,等等一切,都在内存中有所体现。
原创
发布博客 2024.01.16 ·
2560 阅读 ·
21 点赞 ·
0 评论 ·
19 收藏

恐龙新世纪jack所有动作数据

发布资源 2024.01.15 ·
zip
加载更多