第二十八课(结构和动态内存) 概述:本节课主要讲了,结构体和动态内存的知识,先通过演示程序的代码讲解了自定义数据类型、动态内存、汇编中[]的概念、然后根据我们阅读反汇编,讲解了什么是偏移、怎样使用基址+偏移得到动态内存地址、用CE怎么把一个动态地址给固定,最后同过CE把ID、HP、MP、横坐标、纵坐标、经验值的动态地址都给固定了,在固定“坐标结构体”的时候,横坐标和纵坐标通过反编译可以看到两次赋值,所以在固定动态地址的时候需要添加两次指针偏移。 用到的工具:易语言编程工具、第二十五课\ Cheat Engine 7.0单文件版.exe 自定义数据类型:在“程序”窗口右键“自定义数据类型”,选择“插入新数据类型“,就是给变量的成员来定义数据类型。比如视频教程中的变量是”人物“,人物的成员有HP、MP等,而“插入新数据类型”插入的“人物结构”就是给HP、MP来定义数据类型的。 静态地址:重新打开或者在别人的电脑上面打开时,地址是一样的,在CE上面是绿色。 动态地址:重新打开或者在别人的电脑上面打开时,地址是不一样的,在CE上面是黑色。 汇编中[]的概念:EAX到EDX它是寄存器,push是压栈,[ebx]有“[]”就代表是一个指针(内存地址),ebx没有“[]”就代表是一个数值,例如ebx是00400000一个数值,[ebx]就是在00400000里面的一个内存地址中的数据。 用CE把动态地址固定:首先用CE找到数据变化对应的动态地址,在CE的最下面选中想要修改的地址,然后“右键”选择“查找访问该地址的代码(找出是什么访问了这个地址)”,“这将附加CE调试器到当前进程上.继续?(将会使用Cheat Engine的调试器附加当前进程.继续吗?)”选择“Yes(是)”,就会弹出一个空白的小窗口,标题是“从选定地址读取下列代码(下列操作访问了
00780ACC)”。双击可以查看详细信息,然而双击后出现的信息并不是很详细,更详细的信息可以进行下面的操作,选择“从选定地址读取下列代码(下列操作访问了00780ACC)”窗口右边的“显示反汇编程序”,然后把滚动条往上拉,通过反汇编分析ebx的来源,如下:
在CE中选择“手动添加地址”,选中“指针”后面打上“✔”,”指针地址“输入00488150,”偏移量”输入4,最后点击”确定“,这时候就通过指针地址和偏移量把一个动态地址给固定了。
在CE列表中右键“固定后的动态地址”,选择“浏览此内存区域(浏览相关内存区域)”,先选中4字节数据的最前面一个数值,然后右键选择“添加此地址到列表”,弹窗直接点确定,就可以通过刚刚添加到CE列表中的数据与程序上面的数值进行对比,就能确认这个数据是否在程序上,或者确认这个数据是程序上面的哪个数值。
计算“坐标结构体“的偏移:先看懂上图的解说,然后分析图中的“坐标结构体”,从图中可以看出它的十六进制是0014E140(把图中的数值反过来看),或者按照视频教程中的方法来操作也可以(先选中“坐标结构体“4字节数据的最前面一个数值,然后右键选择“添加此地址到列表”,弹窗直接点确定,然后右键刚刚添加到CE列表中的数据,选择“显示十六进制数值“)。在CE中点击“手动添加地址”,弹出的对话框中地址填写“0014E140”点击确定,然后查看CE列表中的数据与程序的哪个数据是对应的。然后右键CE列表中刚刚添加的“0014E140”这个地址,选择“浏览此内存区域”,然后把最下面显示出来的十六进制数值换算成十进制看看与程序上的哪个数据是对应的。如果显示出来的十六进制数值与程序上有对应的,就右键选择“添加此地址到列表”,弹窗直接点确定。需要注意的是,上面所说的”指针地址“加”偏移量”是把一个动态地址给固定了,而刚才说的这个“0014E140”只是一个动态内存地址,需要把这个“0014E140”动态内存地址给固定的话,就需要先分析ebx的来源,然后看赋值找偏移,ebx被赋值一次的话,就添加一次指针偏移,ebx被赋值两次的话,就添加两次指针偏移。
[size=14.6667px]觅风易语言第二十八课(结构和动态内存)课件源码笔记下载: [size=14.6667px]
|