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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CNSS Recruit 2024 Web方向 题解WriteUp

文章首发于【先知社区】:https://xz.aliyun.com/t/15586 babyHTTP 开题,Http传参问题 GET: ?CNSShackersPOST: webfunCookie: admintruePHPinfo 开题 根据题目描述,猜测phpinfo.php文件有东西。 phpinfo…

什么是嵌入式?行业前景如何?

目录 什么是嵌入式? 主要特点 常见应用场景 1. 工业自动化 2. 交通运输 3. 智能家居 4. 消费电子 5. 医疗设备 6. 航空航天 7. 物联网(IoT) 8. 能源管理 行业前景如何? 市场需求强劲 物联网(IoT)的爆发 汽车…

AutoDroid: LLM-powered Task Automation inAndroid论文学习

光看题目怎么和上一篇差不多?又是纯用LLM的? 当然还是有一点不一样的: 这里的最大特点是加上了UI领域知识,可以大幅增强LLM在处理UI方面的知识的能力。根据文章的说法,使用了这招他们的LLM可以吊打GPT4V,准…

优秀的安防视频监控平台应该具备怎样的视频编解码能力?

随着安防技术的飞速发展,监控平台作为保障公共安全、维护社会秩序的重要工具,其性能与效率日益成为行业关注的焦点。其中,监控平台的视频编码能力在视频监控系统中扮演着至关重要的角色,视频编码技术作为监控系统的核心组成部分&a…

记一次导入dbf文件后数据为空问题的解决方法

前言 省流:这篇文章最终采用的是更换导出文件格式的方法,看到这里觉得方法不适用的小伙伴可以不用浪费几秒钟看完这篇文章哦。 问题描述 作者使用的是Navicat数据库管理工具,然后在将源数据库的数据表导出为dbf格式文件后,再将…

自然语言处理系列六十九》搜索引擎项目实战》搜索框架技术选型

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十九搜索引擎项目实战》搜索框架技术选型搜索…

9月11日

使用绘制事件完成钟表的绘制 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpSocket> #include<QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpub…

kitti数据深度图转点云坐标计算方法与教程(代码实现)

文章目录 前言一、kitti深度图官网介绍1、官网深度图介绍2、深度图读取官网代码(python)3、深度图解读1、数据格式内容2、深度图加工3、深度图转相机坐标深度二、kitti数据内参P矩阵解读1、P2矩阵举例2、内参矩阵 (3x3)3、特殊平移向量(第4列)4、kitti的bx与by解释三、kitti深…

CTFHub技能树-信息泄露-HG泄漏

目录 漏洞产生原因 解题过程 当开发人员使用 Mercurial 进行版本控制&#xff0c;对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。 漏洞产生原因 Mercurial(hg)是一种分布式版本控制系统&#xff0c;它与Git类似也可以用于管…

猫眼电影字体破解(图片转码方法)

问题 随便拿一篇电影做样例。我们发现猫眼的页面数据在预览窗口中全是小方框。在当我们拿到源码以后&#xff0c;数据全是加密后的。所以我们需要想办法破解加密&#xff0c;拿到数据。 破解过程 1.源码获取问题与破解 分析 在我们刚刚请求url的时候是可以得到数据的&#xff…

杀毒软件 | Malware Hunter v1.189.0.816 绿色版

软件简介 Malware Hunter是由Glarysoft开发的一款专业安全防护软件。该软件的主要目的是保护用户的计算机免受恶意软件、病毒和其他网络威胁的侵害。它通过采用高效的云引擎和小红伞引擎&#xff0c;能够快速且全面地扫描电脑中的恶意软件&#xff0c;并进行强力清除&#xff…

Definition and Detection of Defects in NFT Smart Contracts论文解读、复现

背景知识\定义 NFT 是数字或物理资产所有权的区块链表示。不仅限于数字图片&#xff0c;视频和画作等艺术品也可以转化为 NFT 进行交易。近年来受到广泛关注&#xff0c;2021 年 NFT 交易额达到约 410 亿美元。 智能合约 是在区块链上运行的图灵完备程序。支持各种去中心化…

第 1 章:原生 AJAX

原生AJAX 1. AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一…

C# Windows Forms实现绘制画板

目录 C# Windows Forms上绘制画板&#xff1a; 详细解释&#xff1a; TempData临时数据&#xff0c;用来保存画笔相关的信息&#xff0c;如&#xff1a;颜色&#xff0c;大小&#xff0c;坐标等 类声明和成员变量 构造函数 文件菜单项点击事件 保存菜单项点击事件 画笔大…

等待唤醒机制和阻塞队列

1. 等待唤醒机制 由于线程的随机调度&#xff0c;可能会出现“线程饿死”的问题&#xff1a;也就是一个线程加锁执行&#xff0c;然后解锁&#xff0c;其他线程抢不到&#xff0c;一直是这个线程在重复操作 void wait() 当前线程等待&#xff0c;直到被其他线程唤醒 void no…

网络安全(sql注入)

这里写目录标题 一. information_schema.tables 和 information_schema.schemata是information_schema数据库中的两张表1. information_schema.schemata2. information_schema.tables 二. 判断注入类型1. 判断数字型还是字符型注入2. 判断注入闭合是""还是 三. 判断表…

Keras深度学习中文文本分类

一.文本分类概述 文本分类旨在对文本集按照一定的分类体系或标准进行自动分类标记&#xff0c;属于一种基于分类体系的自动分类。文本分类最早可以追溯到上世纪50年代&#xff0c;那时主要通过专家定义规则来进行文本分类&#xff1b;80年代出现了利用知识工程建立的专家系统&…

电动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

电动机制造5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。5G智能工厂与物联数字孪生平台的融合应用&#xff0c;为电动机制造业的数字化转型铺设了一条高速通道。这一创新模式不仅极大地提升了生产效率&#xff0c;还深刻改变了产品的设计、生产、管理及运…

音视频入门基础:WAV专题(9)——FFmpeg源码中计算WAV音频文件每个packet的duration和duration_time的实现

音视频入门基础&#xff1a;WAV专题系列文章&#xff1a; 音视频入门基础&#xff1a;WAV专题&#xff08;1&#xff09;——使用FFmpeg命令生成WAV音频文件 音视频入门基础&#xff1a;WAV专题&#xff08;2&#xff09;——WAV格式简介 音视频入门基础&#xff1a;WAV专题…

深入理解Java虚拟机:Jvm总结-虚拟机字节码执行引擎

第八章 虚拟机字节码执行引擎 8.1 意义 不受物理条件制约地定制指令集与执行引擎的结构体系&#xff0c;能够执行那些不被硬件直接支持的指令集格式。输入的是字节码二进制流&#xff0c;处理过程是字节码解析执行的等效过程&#xff0c;输出的是执行结果 8.2 运行时栈帧结构…