TC官方合作论坛

 找回密码
 立即注册
查看: 211|回复: 3

【内存教程】怪物属性 怪物全部属性的查找。

[复制链接]
发表于 2021-1-18 22:30:59 来自手机 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【内存教程】怪物属性 怪物全部属性的查找。
  
打开VS2008,新建一个VC++项目,
之后定义一个纯虚类(怪物类)
在类中,定义成员属性(类属性)
在TC论坛,多数成员不懂C++语言,所以用伪代码来讲解,更加容易讲明白。
  
内存对齐规则:
  1. 结构体的整体大小,必须是最大对齐数_的整数倍。不足部分_用空字节填充。
(最大对齐数,含嵌套结构体的对齐数)
  2. 结构体成员,必须按最大对齐数来对齐。(2个或多个成员,可以组合到_最大对齐数) 例如:
struct S5
{
double d;
char c0;
char c1;
int i;
short c2;
};
printf("%d\n", sizeof(struct S5)); //16
.
成员1是double类型,占8字节
成员2是char类型,占1字节
成员3是char类型,占1字节
成员4是int类型,占4字节
成员5是short类型,占2字节
成员1最大对齐数为8。成员2--5字节组合,跟8字节对齐。所以这个结构占16字节。

//申明一个结构体
struct book
{
    char title[MAXTITL];//一个字符串表示的titile 题目;字符数组就是这样声明的,用分号结束;
    char author[MAXAUTL];//一个字符串表示的author作者 ;
    float value;//一个浮点型表示的value价格;
};//注意分号不能少,这也相当于一条语句;
例如 植物大战僵尸的boss结构。其实是类,纯虚类.
double 座标x; //8
double 座标y; //8

char name[4]; //4
int  id; //4

int 血量; //4
int 蓝量; //4

short 血量状态; //2
//1正常 2伤血 3残血 4死亡 5灰烬
short 行动状态; //2
//1行走 2攻击 3冰冻 4魅惑
short 怪物大小; //2
//1正常 2缩小
.
怪物有9个属性。最大对齐数为8,
8字节 * 5= 40字节
纯虚类不占内存空间,把类实例化之后,每个怪物对象占40字节。
10进制40,转换十六进制是0x28
  
=======================================================
C/C++申请和释放内存
  
new 和 delete 是 C++ 用于管理_堆内存的两个运算符,对应于C语言中的 malloc 和 free,但是 malloc 和 free 是函数,而new 和 delete 是运算符。
除此之外,new 在申请内存的同时,还会调用对象的构造函数,而 malloc 只会申请内存;同样,delete 在释放内存之前,会调用对象的析构函数,而 free 只会释放内存。
  
###C++
new运算符申请内存:
将调用相应的 operator new(size_t) 函数动态分配内存,在分配到的动态内存块上 初始化 相应类型的对象(构造函数)并返回其首地址。如果调用构造函数初始化对象时抛出异常,则自动调用 operator delete(void*, void*) 函数释放已经分配到的内存。
  
delete运算符释放内存:
调用相应类型的析构函数,处理类内部可能涉及的资源释放,调用相应的 operator delete(void *) 函数。

游客,如果您要查看本帖隐藏内容请回复


=======================================================
在矩形区域中,(x1, y1, x2, y2)
限定怪物数量 上限为39只。那么需要占用内存空间为:
40字节/只 * 39只 = 1560字节
从堆中分配:也称为动态内存分配。申请内存空间1560字节,返回 分配到内存空间的首地址。
之后把纯虚类(怪物类),实体化到申请的内存空间。实体化一次,就是一个怪物对象。
.
C++中,用new运算符,申请内存更为简便。
type *p_var = new type [size];
//分配了size个type大小的连续内存块。
  
假设返回的首地址是0x1399dd,
那么第一个怪物对象,所占的内存字节为:
(0x1399dd+0字节)——(0x1399dd+39字节)
.
怪物名称,地址是:0x1399dd+0x0
怪物序号,地址是:0x1399dd+0x4
怪物血量,地址是:0x1399dd+0x8
怪物蓝量,地址是:0x1399dd+0x0c
怪物座标x,地址是:0x1399dd+0x10
怪物座标y,地址是:0x1399dd+0x14
…………
…………
游客,如果您要查看本帖隐藏内容请回复

内存方面比较难,欢迎大佬教育。
回复

使用道具 举报

 楼主| 发表于 2021-1-18 22:33:39 来自手机 | 显示全部楼层
二楼,更新信息专用。
  
内存基址群,316996072
学习读取基址、偏移,代替找图 找色 识字 找字。
  
找call 写call 群,612661895
学习找call,写call,调用游戏call,代替对游戏窗口 按鼠标,按键盘。
  
hook学习群,438226676
学习 当前进程hook,全局hook,跨进程hook。
鼠标hook,键盘hook,窗口hook,滚动条hook,R3级hook,R0级hook。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 22:41:27 来自手机 | 显示全部楼层
做内存辅助,先把游戏各种东西 都逆一遍。(僵尸类 植物类 卡槽类 鼠标类 地皮类)
这东西不易学习。
你得学会部分C语言 C++,大概知道游戏里面,各种类是怎样编写的,才会用得 得心应手.
回复 支持 反对

使用道具 举报

发表于 2021-2-17 10:41:35 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2021-3-5 11:43 , Processed in 0.041849 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表