逆向分析c++ vector向量
阿新 • • 發佈:2018-05-21
vector測試源碼
第三個 表示為最後一個元素地址 第四個為緩沖區的最後一個元素地址
#include<stdio.h> #include<stdlib.h> #include <iostream> #include <vector> #include <list> #include <map> using namespace std; struct MyVector { struct MyVector* pSelf; int* pDataStart; int* pDataEnd; int* pBufEnd; }; void testVector() { // 動態數組,數據存儲在堆內存中 // 當元素發生改變之後,會動態增加內存。 vector<int> vecObj; vecObj.push_back(1); vecObj.push_back(2); vecObj.push_back(3); vecObj.pop_back(); vecObj.push_back(4); // 遍歷vector for (size_t i = 0; i < vecObj.size(); i++) { printf("vecObj[%d] = %d", i, vecObj[i]); } // 遍歷vector vector<int>::iterator iter = vecObj.begin(); while (iter != vecObj.end()) {// iter.operator!=(vecObj.end()) int n = *iter; printf("vecObj i = %d", n); int main() { testVector(); getchar(); return 0; }
2.編譯
3.去掉隨機基址(為了容易查找)
改為0
4.用ida打開 找到 main函數中調用函數
5.選擇地址用od 載入查看
6.call非常多 只看關鍵的找到 向量的構造函數 與對象基址 找東西用ida 調試用od
7。運行到下斷處 數據跟隨
果然 是cc
8。運行構造函數
初始化 (stl對象都有一個特點 第一個總是一個指針指向自己)
指向自己
運行push_back(1)
進去看看 果然
那其它倆個字段呢 慢慢來 再push幾個 試試
push 3 個
再pop一個看看
沒變 只是第三個字段減小了 而最後一個不變
再push 一個 發現第三個就了最後一個還是不變
進入看看
原來pop內存不變只是 索引減小
那都表示什麽 呢
自己定義一個結構體去解析它
逆向分析c++ vector向量