數據結構逆向分析-List
首先STL中的List就是一個鏈表,但是肯定C++用了很多封裝,所以這里我們來一探究竟。
開始
首先先寫一些簡單的分析的源代碼:
剛開始的List是有12個字節大小。然后通過內存來看一下:
還有這兩個地址的內容:
我們畫個圖來展示就很清楚了:
目前就是這個情況,我們來添加一個List之后再看看:
(使用 MyList.push_back(1);之后):
其實說這樣就可以猜到一些內容了,首先這個0121818可能是一個沒啥用的東西就是和List這個東西互相指着,因為啥也沒改變,然后0121e888這個字段應該是指向了鏈表的頭指針,然后這個鏈表應該是一個雙向循環鏈表。有學過鏈表的應該會和我猜的差不多,那么繼續往下看:
MyList.push_back(2);
就成了這樣子:
就很明顯了,第一個0121E888這個鏈表頭兩個指針,一個指向頭,一個指向尾,然后剩下的是一個循環鏈表。
再往下搞一個:
MyList.push_back(3);
畫圖后就一清二楚了。
小結