本帖最后由 类人猿 于 2017-8-28 14:12 编辑
<<<<<<技术探讨,欢迎大神指导!<<<<<<<<技术Q:578052137 技术群:128262077
现在跟大家讲一下结构体内存表现形式。
结构体这个概念在TC里面是没有的,但是在其他编程语言是很普遍。我们在分析游戏数据、调用系统API和编写内存脚本的时候经常用到的。作为知识的扩展这个是必须要学习的,前提你要看明白我之前指针帖子。学会这个你会走得更加远。好了,首先我们看一下C语言结构体的一个简单定义,这个只需要理解即可。
struct st
{
int a ;
int b ;
char *c = "hello";
}
//这里面st就是个结构,struct是结构体的意思。 st这个结构里面包含第一个数据int a,第二个 int b,第三个 float c
//下面就是赋值初始化
st st1;
st1.a=5;
st1.b=6;
st1.c="hello";
既然到这里,同学们是不是感觉这个像数组呢?其实还真的跟数组有点像,但是也不一样数组只有一种数据类型,比如:
变量 aa = 数组("a","b","c","d")
aa所里所有元素都是同一种字符串类型,上面的st可以支持多种类型的数据。这个是根本的区别。
好了,说了那么多现在也应该进入到正题了。我们分析TC结构体内存如何分配的。
1.首先我新建一个按钮,并且上代码:
功能 按钮0_点击()
//这里添加你要执行的代码
变量 point = 数组("x"=数组("int"="1","value"=100),"z"=数组("float"="10","value"="55.6665"),"y"=数组("char"="1000","value"="请问这个是汉子妈"))
变量 address = 结构体申请内存(point)
address=字符串格式化("十六进制:%x",address)
消息框("申请到地址:"& address)
结束
2.这个是点击按钮,打印出申请结构体空间地址
3.用od附加进程,转到该地址,查看数据
4. 我们分析到我们写结构体三个元素,自己用不同类型进行查看
5.下面这个是用字符形式,我们看到里面的字符串,说明这个结构体申请空间是正确的。
好了,不明白的同学留言,谢谢各位支持,要不都快心灰意冷了。
|