本帖最后由 类人猿 于 2017-8-28 14:14 编辑
<<<<<<<<技术探讨,欢迎大神指导!<<<<技术Q:578052137 技术群:128262077 |
关于TC数组内存官方并没有详细的分析数组指针。因为TC里面数组不是真正的数组而应该是个数据结构,说到这里可能同学们又晕了。
首先我们先看下TC数组的构成,下面以整数作为例子。
var Array = array(1,2,3,4)
这里数组的每一个元素都是整数型,TC里面每个元素整数默认是4个字节。
Array[0]=1
Array[1]=2
Array[2]=3
Array[3]=4
比如Array[0]的地址是0x28588F0,那么Array[1]的指针就是+4后的0x28588F4,其他的以此类推。
这个是程序的逻辑,但是在TC里面是否这样呢?我们直接看下面代码:
function 按钮0_点击()
var Array = array(1,2,3,4)
var Addr1=varaddress(Array[0])
Addr1=strformat("%x",Addr1)
traceprint(Addr1)
var Addr2=varaddress(Array[1])
Addr2=strformat("%x",Addr2)
traceprint(Addr2)
end
我们发现Array[0]和Array[1]他们不是相差0x4,而是相差0x1E0,为什么呢?应为在TC里面一个整数变量也是个结构来的,这个是TC工程师设定的我们也不要去追究了。
问题来了,那我们在分析程序或者游戏的时候应该怎么办呢?
PC端的程序一般都是用C语言进行编写,数组内存地址Array[0]和Array[1]内存地址肯定是相差4的。但是变量类型很多,具体情况还得具体分析的
这里就是给大家一个提醒,希望能起到抛钻引钰的作用。想用TC玩内存就要先了解TC自身内存形式。
|