现在我们通过a1的位置,查找内存中含有其地址的内存,居然搜索到了5块内存,而且都靠的非常近
同样的方法搜索到bytesStart在内存里的地址
同样的结构类型指针,同步索引,后面跟8字节的长度,再后面就是数据
根据地址搜索bytesStart在内存里的指针,也只有1个(这种结果在同样环境下运行每次的表现都是已有的,不过在更换运行环境后就会有明显差异),而且也紧靠着a1的指针(可以推断他们确实是在一张“表”上)
现在看下刚刚找到的NextObjPrt里面的数据是多少(02486988),下面我们看下这个地址里是什么
可以看到就指向了最后分配的bytesStart地址的后面
每个引用对象后面都有8个全0的字节(多次测试,反复分析数据都是这样)
监测点3 (为了验证刚刚的NextObjPrt的确是那块内存)
到第3步,可以直观的看到bytesThen就直接使用了刚刚NextObjPrt后面指向的内存,
同时也看到NextObjPrt指示下的一片内存(这个时候对A0 6D 48 02 的搜索也证明内存里只有这么一块存的是这个数据)
而且可以看到这个地址确实就是bytesThen后面的内存地址
第4监测点 (重复创建10分份的typeA)
这次直接使用类型对象指针搜索新创建的10份TypeA (可能会搜索出其他数据,因为内存里有其他程序及测试前几次运行残留的数据)
可以看到这些TypeA直接分配在了bytesThen的后面(测试中尽量少使用终端打印。终端打印虽然1行代码,不过clr会创建很多对象去完成打印,不方便观察)