当前位置: 首页 > news >正文

6.第二阶段x86游戏实战2-理解程序流程

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:5.第二阶段x86游戏实战2-认识内存

上一个内存里写了关于内存的东西,最主要的是最后的写那一幅画面,脑子里一定要有那幅画面,不管在计算机中看到的内存是什么样都套那幅画面搞起来会很简单,本次写的是程序的流程,既然是要逆向,那就要知道一个程序的流程,要知道一个正向程序员是怎样写的代码,他/她写代码是个怎样的流程,这就需要有一个了解

先不写关于代码的,先写一个生活当中的流程

比如早上醒了然后起床然后洗漱(假设都洗漱)然后吃饭(假设都会吃早饭)然后生活(工作的工作上学的上学这种)然后忙了一天睡觉

简化的流程就是 醒了 -》起床-》洗漱-》吃饭-》生活-》睡觉,这就是一个流程大纲然后就会按部就班的一步一步去做

然后 醒了 -》起床-》洗漱-》吃饭-》生活-》睡觉 这是一个流程大纲,再细化一点比如起床,怎么起床?起床大众的过程是掀开被子然后坐起来然后下床然后穿衣服然后穿鞋然后就完成起床这个过程,然后可以说起床是由 掀开被子然后坐起来然后下床然后穿衣服然后穿鞋 这些动作组成的

然后来到写游戏代码中,它也和起床睡觉一个道理,比如打怪物,首先要寻路到有怪物的位置然后选择怪物然后打怪然后捡怪物的掉落物

简化的流程 寻路到有怪物的位置-》选择怪物-》打怪物-》捡怪物的掉落物 这样的一个流程

然后寻路到有怪物的位置它就由 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 这样的一个流程组成,这些流程都做完了寻路到有怪物的位置就算完成了,然后选择怪物、打怪物、捡怪物的掉落物也就是这样的一个道理,然后 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 这每一个步骤都是一段代码,然后代码它也是有内存地址的,也就是会有代码的头部(代码刚开始的位置),然后看下图红框,当代码执行到 寻路到有怪物的位置位置之后,它就会跳转到 上坐骑的代码,然后上坐骑的代码执行完再执行打开地图的代码直到执行完下坐骑的代码,然后执行完下坐骑的代码之后代码就会跳到选择怪物的哪里再执行选择怪物的代码,其它的也是这个道理,这样的一个步骤叫做call(函数调用,或者说调用函数)

然后就有一个问题,既然 寻路到有怪物的位置 这个东西是 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 这个流程组成的为什么不直接写成下图的样子?这时因为 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 这一段流程不只有寻路到有怪物的位置会用,这能还会有寻路到某个NPC某个玩家身边会用到 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 这个流程,如果按照下图中的写法会重复写 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 它们的代码,按照上图的写法只需要写寻路到有怪物的位置就可以,不需要写重复写 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑 这一段流程,这一段流程只需要写一次就行了,比如写寻路到某个NPC时直接去用 上坐骑 -》打开地图 -》寻路 -》确认到达 -》下坐骑这一段流程就可以,比如寻路直接告诉寻路到哪去就行,就不需要再写寻路到NPC的代码,这样就会节省很多很多时间,少写很多很多代码

以上是正向程序的开发流程,不理解、看不懂也没事,后面直接看逆向过程,多看看就能明白了

然后是常量和变量

常量意思是程序运行过程中不会变化的数据,或者说只要数据存在了就不会变了,或者说整个程序运行过程中只会发生一次变化

变量意思是程序运行过程中会发生变化的数据

进程和线程

进程在 3.第二阶段x86游戏实战2-认识强大的CE找血量(什么是进程) 里写了,现在对它再做一个补充,进程里面的数据有代码有常量和变量,变量一般就是比如qq里的网名、聊天数据、好友信息这种,常量的数据表面上一般看不到,然后双击一个exe文件会启动一个进程这个进程不会重复,如果双击两次exe文件也就是运行两次程序这样的是两个完全不相关的进程,不算是重复的进程,然后每个进程都会有一个进程id,如下图

image-20240910201509889

然后进程指的是程序的代码(代码也属于数据的一种)、程序的数据等这些,也仅仅是数据,这意思就是进程并不会执行(或者说运行)代码,进程只是一个内存空间,内存空间里有程序所需要的数据和代码,并不会使用数据和代码,那谁来使用?这里又有新的概念了,线程,线程会执行进程里的代码,执行了代码也就使用了数据,一个进程里会默认有一个线程,这个线程被称为主线程,一个进程里可以有多个线程(线程有很多由操作系统控制),多线程的进程,比如现在想起床和洗漱一起做,如果只用主线程去做它就只能先起床再洗漱或者先洗漱再起床,这时可以开启一个新的线程,让新的线程做洗漱,让主线程做起床,这样就能边起床边洗漱了,当然线程执行代码也不是这样简单的,现在先这样理解


img

相关文章:

6.第二阶段x86游戏实战2-理解程序流程

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么?1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示 1. 概述 1.1 …...

OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解

鸿蒙开发往期必看: 一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发! “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…...

QT使用事件事件和绘制事件实现简易时钟

这个时钟实现的底层原理主要是利用 Qt 的绘图机制和定时器。首先,设置固定大小的窗口,创建定时器并连接到槽函数,定时器每秒钟触发一次,触发窗口重绘。在paintEvent函数中,使用QPainter进行绘图,绘制圆形表…...

kubeadm方式安装k8s

一、安装环境 环境准备:(有阿里云)centos7 k8s-master 192.168.1.11 k8s-node1 192.168.1.22 k8s-node2 192.168.1.33 二、前期准备 在k8s-master主机 [rootk8s-master ~]# vim /etc/hosts…...

如何使用go生成可执行文件

在 Go 中生成可执行文件非常简单。你可以使用 go build或者go install 命令。以下是步骤: 1. 步骤 1.1. 打开终端,导航到你的 Go 项目目录 确保你在包含 main 包的目录中,通常这是项目的根目录或包含 main.go 文件的目录。 1.2. 运行 go …...

手写Promise

构造器的实现 const PENDING pending; const FULFILLED fulfilled; const REJECTED rejectedclass MyPromise{#state PENDING;#result undefined;constructor(executor){const resolve (data) > {this.#changeState(FULFILLED, data);};const reject (reason) > …...

深度学习云服务器免费使用教程

#云服务器# #深度学习# #人工智能# #计算机视觉# 本文为各位学习深度学习的入门选手而创建,降低深度学习的入门门槛。 谷歌云服务器Colab: T4GPU。限额,需要科学上网,不能使用终端。 谷歌云服务器地址:欢迎使用 C…...

使用ansible的剧本制作salt-master与salt-minion的安装与启动服务过程

虚拟机版本:Rocky Linux release 8.6 (Green Obsidian) 准备几台虚拟机 ipv4地址主机名192.168.137.13center192.168.137.14sp-1192.168.137.15sp-2192.168.137.16sp-3 一、center主机的配置 1.vim /etc/hosts 127.0.0.1 localhost localhost.localdomain loc…...

数据库sqlite3

用数据库函数完成数据的增删改查 增: 将要存储的信息录入到结构体中,再使用snprintf函数信息结合sqlite3命令语句使用sqlite3_exec函数完成插入。 int do_insert(sqlite3 *ppDb) {Worker Work;printf("输入插入的工号:");scanf("%d&qu…...

开发基础之Python 函数(Basic Python Functions for Development)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

Django_Vue3_ElementUI_Release_001_项目初始化

1. 数据库 1.1 安装 https://blog.csdn.net/rbx508780/article/details/127176754 1.2 创建数据库 1.3 DBeaver可视化数据库 https://dbeaver.io/download/ 2 安装Python(3.9.12) 2.1 下载地址 https://www.python.org/downloads/release/python-3912/ 2.2 设定国内源 pip …...

MySQL之安装与基础知识

目录 一:在centos7上安装MySQL数据库 1.卸载默认存在的环境 2.配置mysql的yum源 3. 安装MySQL 4.登录mysql 5.设置MySQL的配置文件 二:MySQL基础知识 1.什么是数据库 2.主流数据库 3.服务器,数据库,表关系及使用案例 4…...

前端基础 | HTML基础:HTML结构,HTML常见标签

文章目录 HTML1、HTML结构1.1HTML标签1.1.1标签1.1.2标签含义 1.2HTML文件基本结构1.3标签层次结构1.4 快速生成代码框架 2、HTML常见标签2.1注释标签2.2标题标签:h1–h62.3段落标签:p2.4 换行标签:br2.5格式化标签2.6 图片标签:i…...

宏任务和微任务+超全面试真题

概念 微任务和宏任务是在异步编程中经常使用的概念,用于管理任务的执行顺序和优先级。 宏任务:setTimeout, setInterval,I/O 操作和 UI 渲染等。微任务: Promise 回调、async/await等 微任务通常比宏任务具有更高的优先级。 执…...

针对SVM算法初步研究

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝心态决定高度,细节决定成败…...

Java中的`String`不可变性详解

在Java中,String类具有不可变性(immutable),这意味着一旦String对象被创建,它的值将无法更改。所有对字符串的修改操作(如拼接、替换等)实际上都会生成一个新的字符串对象,而不会修改…...

c# SMTP发送邮件

string from ""; string fromAlias "MIS-TC"; string[] to { "" }; string subject "问题提交"; string body sb.ToString(); string ipaddr "smtp.email.qq.com"; int port 25; string credit ""; strin…...

GPU基础 -- 并行化与阿姆达尔定律

并行化与阿姆达尔定律 并行化是将计算任务分割成多个部分,使这些部分能够在多个处理器或核心上同时运行,从而加速任务的完成时间。阿姆达尔定律(Amdahl’s Law)则揭示了并行化所能带来的加速效果的限制。 阿姆达尔定律公式 阿姆…...

Lua热更

Lua 热更 前提 Lua是轻量级,可以解释执行的编程语言、性能好 基本原则 1.场景空 代码控制物体加载释放 2.场景一个 3.节点不手动挂代码 4.AssetsBundle资源管理 5.Lua开发框架 6.调试模式、发布模式 XLua 热更框架 XLua是C#环境下Lua的解决方案 1.Lua虚拟…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...