数据结构逆向分析-List
首先STL中的List就是一个链表,但是肯定C++用了很多封装,所以这里我们来一探究竟。
开始
首先先写一些简单的分析的源代码:
刚开始的List是有12个字节大小。然后通过内存来看一下:
还有这两个地址的内容:
我们画个图来展示就很清楚了:
目前就是这个情况,我们来添加一个List之后再看看:
(使用 MyList.push_back(1);之后):
其实说这样就可以猜到一些内容了,首先这个0121818可能是一个没啥用的东西就是和List这个东西互相指着,因为啥也没改变,然后0121e888这个字段应该是指向了链表的头指针,然后这个链表应该是一个双向循环链表。有学过链表的应该会和我猜的差不多,那么继续往下看:
MyList.push_back(2);
就成了这样子:
就很明显了,第一个0121E888这个链表头两个指针,一个指向头,一个指向尾,然后剩下的是一个循环链表。
再往下搞一个:
MyList.push_back(3);
画图后就一清二楚了。
小结