逆向分析c++ 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.去掉随机基址(为了容易查找)
逆向分析c++ vector向量
改为0
逆向分析c++ vector向量
4.用ida打开 找到 main函数中调用函数
逆向分析c++ vector向量

逆向分析c++ vector向量
5.选择地址用od 载入查看
逆向分析c++ vector向量
逆向分析c++ vector向量
逆向分析c++ vector向量
6.call非常多 只看关键的找到 向量的构造函数 与对象基址 找东西用ida 调试用od
逆向分析c++ vector向量
逆向分析c++ vector向量
7。运行到下断处 数据跟随
逆向分析c++ vector向量
果然 是cc
逆向分析c++ vector向量
8。运行构造函数
初始化 (stl对象都有一个特点 第一个总是一个指针指向自己)
逆向分析c++ vector向量
指向自己
逆向分析c++ vector向量
逆向分析c++ vector向量
运行push_back(1)
逆向分析c++ vector向量
逆向分析c++ vector向量
进去看看 果然
逆向分析c++ vector向量
逆向分析c++ vector向量
那其它俩个字段呢 慢慢来 再push几个 试试
push 3 个
逆向分析c++ vector向量
逆向分析c++ vector向量
再pop一个看看
逆向分析c++ vector向量
逆向分析c++ vector向量
没变 只是第三个字段减小了 而最后一个不变
再push 一个 发现第三个就了最后一个还是不变
逆向分析c++ vector向量
进入看看
逆向分析c++ vector向量
原来pop内存不变只是 索引减小
那都表示什么 呢
第三个 表示为最后一个元素地址 第四个为缓冲区的最后一个元素地址

猜你喜欢

转载自blog.51cto.com/haidragon/2118735
今日推荐