數據結構逆向分析-List


數據結構逆向分析-List

首先STL中的List就是一個鏈表,但是肯定C++用了很多封裝,所以這里我們來一探究竟。

開始

首先先寫一些簡單的分析的源代碼:

#include<iostream>
#include<list>
using namespace std;

int main()
{

list<int> MyList;
int SizeList = sizeof(MyList);
MyList.push_back(1);
MyList.push_back(2);
MyList.push_back(3);
MyList.push_back(4);
MyList.push_back(5);
MyList.push_back(6);
MyList.push_back(7);

return 0;
}

 

 

剛開始的List是有12個字節大小。然后通過內存來看一下:

 

 

還有這兩個地址的內容:

 

 

我們畫個圖來展示就很清楚了:

 

 

目前就是這個情況,我們來添加一個List之后再看看:

(使用 MyList.push_back(1);之后):

 

 

其實說這樣就可以猜到一些內容了,首先這個0121818可能是一個沒啥用的東西就是和List這個東西互相指着,因為啥也沒改變,然后0121e888這個字段應該是指向了鏈表的頭指針,然后這個鏈表應該是一個雙向循環鏈表。有學過鏈表的應該會和我猜的差不多,那么繼續往下看:

 MyList.push_back(2);

就成了這樣子:

 

 

就很明顯了,第一個0121E888這個鏈表頭兩個指針,一個指向頭,一個指向尾,然后剩下的是一個循環鏈表。

再往下搞一個:

 MyList.push_back(3);

 

 

畫圖后就一清二楚了。

 

小結

內存是C/C++的核心,一步一步慢慢分析就好了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM