CS420 课程笔记 P6 - 游戏逆向中的虚拟内存

news2024/10/7 20:25:17

文章目录

    • Intro
    • Virtual memory
    • Example!
    • Static example

Intro

在上个视频中,我们知道有些地址在你重进游戏时就会无效,有的有时有效,我们需要了解称为虚拟内存的东西

记住这些信息:当你双击打开 Squally.exe 游戏时,系统会复制一份并放到内存中!

当程序运行时,首先给一组虚拟内存,此时系统内存的分配是:

  • 0~2GB 之间某个地方作为开始,存放 copied exe
  • 2~8GB 从某个位置开始到结束都是系统使用 memory reserved for system use

那么 copied exe 到系统占用的开始部分,都是空余内存 free momory

一般来说,当系统是 32-bit 或者打开的是 32-bit program 时,游戏可以使用大约 2GB 的内存,而 64位 比这大得多,我们先关注 32位 的游戏,当游戏运行时,我们拥有了复制的 exe 文件,并且有大量的 free memory

在 copied exe 中,我们有两部分:

  • Data
  • Code
    重要的是 Code 可以创建新的数据 new Data,当 Squally.exe 启动后,他可能会加载用户界面,加载世界,世界又会加载玩家,怪物,这是一整棵树,涉及的数据和类型非常多。需要注意的是,所有这些对象都只是数据,除了 exe 之外!

Virtual memory

那么在这个程序申请的 2GB 内存中,除了 copied exe,还有许多 allocated objects,上面初始化的用户界面,数据,玩家,怪物都是 allocated object,当回到主菜单时他们就会被 Delete 或者 Dispose,初始化这些数据的时候位置几乎是随机的,所以我们重新打开游戏他们很有可能就会转移到其他的位置

几乎所有事情都是动态的,除了 copied exe 中的数据!

Example!

上面的内容是抽象难以理解的,接下来我们将给出一个例子,把 Squally.exe 游戏拖到 HxD 中,这里我找了一个其他的软件,但大体一致,我们会发现里面还是有很多可以读懂的东西,我们理论上可以在 CE 中读取到这些相同的信息!

在这里插入图片描述
使用 CE 附加到打开的 exe,然后点击 Memory view 进入内存视图

在这里插入图片描述
CE 有一个很酷的技巧,可以右键然后点击 Goto Address,然后输入你的软件名,比如这里是 PvZ_Toolkit_v1.20.3.exe,他就会帮你找到这个 copied exe 所加载在的地址

在这里插入图片描述
此时你也会发现,这里的数据和 HxD 中所见到的数据几乎是完全一样的!

在这里插入图片描述

Static example

现在你了解了从磁盘复制到虚拟内存的清晰实例,现在让我们做一些有趣的事情

程序员可以将某些信息标记为静态,比如玩家的血量和生命值,通常作为程序员新手都会把生命值之类的信息作为静态存储,举个例子,User Interface 需要访问玩家血量,此时如果玩家是动态创建的,往往通信难度就提高了,所以很多程序员都会用静态的方法来做

然而,怪物的生命值是几乎不能用静态属性来做的,下一节我们将会介绍指针来解决非静态的内容

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

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

相关文章

【C++ 学习 ⑲】- 多态(下)

目录 一、虚函数表和多态的原理 1.1 - 虚函数表 1.2 - 多态的原理 二、单继承和多继承关系中的虚函数表 2.1 - 单继承关系中的虚函数表 2.2 - 多继承关系中的虚函数表 三、纯虚函数和抽象类 一、虚函数表和多态的原理 1.1 - 虚函数表 问:sizeof(b) 是多少&a…

使用docker部署db2

1.使用docker部署db2 1.1 拉db2镜像 将db2镜像拉起到本地。 docker pull ibmcom/db21.2启动容器 docker run -d -p 50000:50000 --name db2 --privilegedtrue -e DB2INST1_PASSWORDdbPassword DBNAMEjumpdb -e LICENSEaccept -v /usr/local/db2:/database ibmcom/db2实例化…

选择成都优优聚的优势是什么?

美团代运营是一种服务模式,旨在帮助商家提升线上销售业绩,并有效降低经营风险。通过专业团队的运营管理,商家可以获得更加稳定和可靠的线上业务经营。美团代运营提供了一整套解决方案,包括线上推广、店铺运营、商品管理、客户服务…

武汉旅游地

原文链接:https://www.cnblogs.com/MrFlySand/p/17678215.html 发表时间:2023年9月4日21:59:14 更新时间:2023年9月4日21:59:06 东湖飞鸟世界(动物园) 地址:东湖风景区沿湖大道20号时间:9:00-17:00交通:地铁…

远距离WiFi模组方案,实现移动设备之间高效通信,无人机远程图传应用

随着科技的不断进步,无线通信技术也在日新月异地发展。其中,WiFi技术已经成为现代生活中不可或缺的一部分。 从室内到室外,WiFi的应用场景正在不断扩大,为我们的日常生活和工业生产带来了极大的便利。 WiFi技术,即无…

斩获两大年度奖项,这家厂商如何决胜汽车智能化下半场

汽车智能化决战下半场的鼓声已经敲响。 一方面,智能座舱正在向3.0时代迈进,域集中式架构、多域融合已经成为了全新的市场趋势。 另一方面,软件正在成为车企构建差异化产品的重要手段,未来将成为车企盈利的重要组成部分。在这样的…

【算法与数据结构】700、LeetCode二叉搜索树中的搜索

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质&#xff1a;左节点键值 < 中间节点键值 < 右节点键值。那么我们根据此性质&am…

Dice系数衡量图像分割中的重叠区域

学习目标 Dice系数和mIoU是均是语义分割的评价指标&#xff0c;今天这里就着重讲讲Dice系数&#xff0c;顺便提一下Dice Loss&#xff0c;以后有时间区分一下在语义分割中两个常用的损失函数&#xff0c;交叉熵和Dice Loss。 语义分割中评价指标的重要性 语义分割是计算机视…

Cannot read property ‘database‘ of undefined解决办法

PS&#xff1a;在最近项目部署的时候&#xff0c;后台遇到如下的报错&#xff0c;显示数据库未定义&#xff0c;研究了半天没有找到原因&#xff0c;但是能解决掉这个报错 TypeError: Cannot read property ‘database’ of undefined 我们查看下具体的文件目录 我们需要返回…

2023年人力资源服务行业研究报告

第一章 行业概况 1.1 定义 在2017年6月发布的《国民经济行业分类》文件中&#xff0c;人力资源服务行业被定义为提供劳动者就业和职业发展的相关服务&#xff0c;以及为雇主管理和开发人力资源的相关服务。这些服务主要包括人力资源招聘、职业指导、人力资源和社会保障事务代…

【1++的数据结构】之map与set(二)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的数据结构】 文章目录 一&#xff0c;前言二&#xff0c;红黑树的概念及其性质三&#xff0c;红黑树的插入四&#xff0c;红黑树的验证五&#xff0c;map与set的封装红黑树迭代器的实现map重载…

c语言flag的使用

flag在c语言中标识某种状态或记录某种信息&#xff0c;可以通过修改flag中来控制程序流程,判断某种状态是否存在或记录某种信息 操作:(1)初始化 (2)赋值 (3)判断 (4)修改 (5)去初始化 #include <stdlib.h>int power_state_check;int main() {int i 0;power_state_check…

统计命令汇总

适用于Unix体系 关于wc命令 Word Count 用于统计指定文件中的字节数、字数、行数&#xff0c;并将统计结果显示输出。 wc [-lcw] c 统计字节数 l 统计行数 m 统计字符数&#xff0c;此标志不能与-c标志一起使用 w 统计字数。一个字定义为由空白、跳格或换行字符分隔的字符串 统…

mysql数据库使用技巧整理

查看当前数据库已建立的client连接 > SHOW VARIABLES LIKE max_connections; -- 查看数据库允许的最大连接数&#xff0c;不是实时正在使用的连接数 > SHOW STATUS LIKE Threads_connected; -- 查看当前数据库client的连接数 > SHOW PROCESSLIST; -- 查看具体的连接

界面控件DevExtreme(v23.2)下半年发展路线图

在这篇文章中&#xff0c;我们将介绍DevExtreme在v23.2中发布的一些主要特性&#xff0c;这些特性既适用于DevExtreme JavaScript (Angular、React、Vue、jQuery)&#xff0c;也适用于基于DevExtreme的ASP. NET MVC/Core控件。 DevExtreme包含全面的高性能和响应式UI小部件集合…

论文翻译 : 风廓线对地面机载风能系统性能的影响

目录 摘要1 引言2. 风力条件2.2 风况2.3 风况聚类2.4 聚类分析2.5 聚类统计分析 3 引言 摘要 摘要&#xff1a;本研究通过确定基于现实垂直风速剖面的循环可行的功率优化飞行轨迹&#xff0c;来研究抽水模式地面生成的空中风能系统&#xff08;AWESs&#xff09;的性能。这些1…

基于Springcloud的基础框架,统一gateWay网关鉴权demo,附下载地址

基于Springcloud的基础框架&#xff0c;统一gateWay网关鉴权demo&#xff0c;附下载地址 使用方式&#xff1a; 1、搭建nacos环境&#xff0c;修改对应nacos地址 2、修改mysql地址,导入sql语句 ###框架内容 SpringcloudGatewayJWTNacosFeginmysqlMybatis plus 具体功能 基于…

基于Matlab实现多个图像融合案例(附上源码+数据集)

图像融合是将多幅图像合成为一幅图像的过程&#xff0c;旨在融合不同图像的信息以获得更多的细节和更丰富的视觉效果。在本文中&#xff0c;我们将介绍如何使用Matlab实现图像融合。 文章目录 简单案例源码数据集下载 简单案例 首先&#xff0c;我们需要了解图像融合的两种主…

Linux之修改服务端口号

本次演示以SSH服务为例&#xff0c;SSH默认监听端口是22,先保留了22端口&#xff0c;所以我们要进入ssh的配置文件添加新端口并注释或删掉原有端口。 1、使用vi编辑器修改文件 sshd_config,路径是/etc/ssh/sshd_config,找到“#Port 22”,添加新的端口号10086。 2、如果你关闭了…

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆