街机模拟游戏逆向工程(HACKROM)教程:[1]数据的存储与读取

news2024/11/20 13:44:34

简介

在计算机中,数据存储的介质一直在变化,从最早的穿孔纸带,到现在的固态硬盘。但存储的原理是一直没有变化的,在计算机中,我们所存储的数据,一直都是以二进制的形式被存储存在不同的介质中。

计算机用位 (bits) 来存储数据,每一位可以是两种状态之一:0或1,这就是二进制数字。而这种形式十分不方便记忆,所以,为了方便记忆,每个二进制数字,都可以转换为十六进制数字或十进制数字。

二进制十六进制十进制
0001$011
0010$022
0011$033
0100$044
0101$055
0110$066
0111$077
1000$088
1001$099
1010$0A10
1011$0B11
1100$0C12
1101$0D13
1110$0E14
1111$0F15

数据长度

在计算机中,最小的长度为位(bits),也是计算机中用来存储的基本单位。

当我们把8个位(bits),放到一起,那我们就得到了一个单字节(byte)的长度。

把两个单字节长度放到一起,就可以得到一个字 (word)的长度,或者叫双字节。

我们把两个字(word)放到一起,就可以得到一个长字 (long-word),或者叫四字节。

在街机游戏的逆向研究中,我们通常使用一个名为M68K的汇编语言,在这个汇编语言中,我们常用的数据长度就是这三种,分别用B,W,L来表示这三种数据的长度。而位的形式,在这个汇编中,也常常会使用。

长度二进制十六进制
字节0010 11002C
0010 1100 1111 01012C F5
长字0010 1100 1111 0101 1001 1101 0111 01102C F5 9D 76

二进制存储原理

我们以最早的穿孔纸带为例,来说明数据是如何存储的:

位(bits)76543210
10进制16进制值
1$01
2$02
3$03
4$04
5$05
6$06
7$07
8$08
9$09
10$0A
11$0B
12$0C
13$0D
14$0E
15$0F
16$10
32$20
128$80
255$FF

 我们把纸带的每一行看成是一个字节的长度,在纸带中,用1来表示该位置已穿孔,代表该位为1。用0来表示该位置未穿孔,代表该位为0。这样,我们就把这些数据保存在了一个纸带上面。

而对于现代的比如硬盘,光盘,它们的存储原理是一样的,只是存储的介质发生了变化,硬盘是用磁性物质的S和N极代表示该位置为0和1,光盘是用一个个凹凸来表示该位置的0和1。

当然,因为二进制数值难于阅读和记忆,我们用各种工具软件,从中读出来的数据是已经被转换为了16进制数值。

助记符

因为我们从计算机中所读取到的数据都是二进制,我们基本上很难去阅读和记忆,所以,这时我们需要一个翻译器,把他们翻译成人类方便理解的方式。比如在m68K汇编中,会把读取到的比如:

0011 1101 0111 1100 0000 0000 0000 0101 0000 0000 1111 1100
3D             7C            00               05              00              FC

 如果只查看二进制或十六进制数值,我们很难理解,这段数据有什么作用。所以,M68K把他翻译为一段方便阅读和记忆的助记符:

move.w  #5,$FC(a6)

 我们把这段助记符分成四个部份:

1、命令:                - move ,代表了这句代码在程序中的作用

2、操作长度:         - 指定该指令想要操作的数值长度,以B(字节),W(字),L(长字)表示

3、源操作数:        - 表示了数据的从哪里读取

4、目的操作数:    - 表示了数据在运算后会哪里会被修改或者操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据在AI任务中的决定性作用:以图像分类为例

人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

数据结构——顺序二叉树——堆

1.树的相关概念 在介绍二叉树之前,我们首先要明确树是什么。 树用我们的通常认识来判断应该是一种植物,从根向上生长,分出许多的树枝并长出叶子。对于数据结构中的树而言,其结构也正是从树的特征中剥离出来的。树结构是一种非线性…

求斐波那契数列矩阵乘法的方法

斐波那契数列 先来简单介绍一下斐波那契数列: 斐波那契数列是指这样一个数列:1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始 &…

Scratch优秀作品飞翔小鸟

程序说明:在无尽的划痕堆中飞驰而过随着你越来越多地飞进迷宫般的街区,平台变得越来越难。 演示视频 scratch飞翔小鸟 其实这就是一个类似像素小鸟的程序,只不过水管角色就地取材,使用scratch里面的积木图片拼成了水管&#xff0…

【算法】了解哈希表/思想 并用哈希解算法题(C++)

文章目录 基本了解解题1.两数之和面试题01.02.判定是否互为字符重排217.存在重复元素219.存在重复元素II49.字母异位词分组 基本了解 哈希表是什么? 一种数据结构,用于存储元素。 有什么用? 用于快速查找元素 与 插入 何时用哈希表&…

代码随想录 Leetcode160. 相交链表

题目: 代码(首刷看解析 2024年1月13日): class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *A headA, *B headB;while (A ! B) {A A ! nullptr ? A->next : headB;B B ! nullpt…

Shell编程自动化之Shell数学运算与条件测试

一、Shell数学运算 1.Shell常见的算术运算符号 序号算术运算符号意义1、-、*、/、%加、减、乘、除、取余2**幂运算3、–自增或自减4&&、||、!与、或、非5、!相等、不相等,也可写成6、、-、*、/、%赋值运算符,a1相等于aa1 2.Shell常…

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接:https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码:8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式:esd/wim/swm 安装方式&#xf…

高光谱分类论文解读分享之基于形态卷积神经网络的高光谱影像分类

IEEE TGRS 2021:基于形态卷积神经网络的高光谱影像分类 题目 Morphological Convolutional Neural Networks for Hyperspectral Image Classification 作者 Swalpa Kumar Roy; Ranjan Mondal; Mercedes E. Paoletti; Juan M. Haut; Antonio Plaza 关键词 Clas…

Ubuntu下使用Virtual Box中显示没有可用的USB设备

Ubuntu中使用Virtual Box,但是使用到USB时只有USB1.1可以使用,并且提示没有可以使用的USB设备,解决方法如下 下载并安装Vitrual Box提供的功能扩展包 分别点击帮助->关于,查看当前使用的版本进入到Virtual Box官网下载链接根…

LabVIEW在金属铜大气腐蚀预测评价系统中的应用

为了应对电子设备和仪器中金属铜因大气腐蚀带来的挑战,开发一种基于LabVIEW平台的先进预测评价系统。这个系统的设计宗旨是准确预测并评估在不同室内外环境中金属铜的腐蚀状况。我们团队在LabVIEW的强大数据处理和图形化编程支持下,结合实际的大气腐蚀数…

【Java语言基础②】Java基本语法——Java程序基本格式,注释,标识符,常量

通过前面的学习,大家对Java语言有了一个基础认识,但现在还无法使用Java语言编写程序,要熟练使用Java语言编写程序,必须充分掌握Java语言的基础知识。今天咱们就来聊一聊Java的基本语法。 1.java程序的基本格式 Java程序代码必须…

制作docker镜像时,使用copy命令统一文件的不同所属用户

一、背景 在制作docker镜像时,使用COPY命令,可以统一原本不同所属用户的文件为同一个用户root。 我们都知道,linux系统,不同的用户之间的访问是受限的。 整个文件夹的用户通体都是devuser,但是里面的文件却是其他用户…

4D 毫米波雷达:智驾普及的新路径(二)

4 4D 毫米波的技术路线探讨 4.1 前端收发模块 MMIC:级联、CMOS、AiP 4.1.1 设计:级联、单芯片、虚拟孔径 4D 毫米波雷达的技术路线主要分为三种,分别是多级联、级联 虚拟孔径成像技术、以及 集成芯片。( 1 )多级…

训练FastestDet(Anchor-Free、参数量仅0.24M),稍改代码使得符合YOLO数据集排布

文章目录 0 参考链接1 准备数据1.1 使用以下代码生成绝对路径的txt文件1.2 在config文件夹下新建一个xxx.names文件 2 配置训练参数3 稍改代码使得符合YOLO数据集排布4 开始训练 0 参考链接 官方的代码:FastestDet 1 准备数据 我已有的数据集排布:&am…

Python Matplotlib 动画教程:提高可视化吸引力的强大工具【第24篇—python:Matplotlib】

文章目录 🍖 方法一:使用pause()函数🚀 方法二:使用FuncAnimation()函数🥋 线性图动画:🎻 Python中的条形图追赶动画🌌 Python中的散点图动画:🛹 条形图追赶的…

Date怎么转localDate和localDate转Date

Date怎么转localDate 首先,将java.util.Date对象转换为java.time.Instant对象。Instant是表示时间戳的类,可以精确到纳秒级别。 Date date new Date();Instant instant date.toInstant(); 然后,使用java.time.ZoneId类来指定时区&#xf…

LV.13 D11 Linux驱动移植及内核深化 学习笔记

一、设备树 1.1 设备树 设备树是一种描述硬件信息的数据结构,Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核,而不再需要在Linux内核中包含大量的冗余编码 举例:让LED2闪烁的代码中,有逻辑代码和设备代码。Li…

VS中动态库的创建和调用

VS中动态库的创建和调用 库 ​ 库是写好的现有的,成熟的,可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 ​ 库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态…

基于Java SSM框架实现体育竞赛成绩管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现体育竞赛成绩管理系统演示 摘要 体育竞赛是各种体育体育项目比赛的总称。是在裁判员的主持下,按统一的规则要求,组织与实施的体育员个体或体育队之间的竞技较量,是竞技体育与社会发生关联,并作用于社会的媒…