X64|C++逆向之类的内存结构分析

一 普通类的逆向分析

1.空白类

  • 首先写段测试代码来看一下空白类的对象大小,不要想固然的认为空白类的大小就为0哟,若是真为0的话,那么用该类建立的实例怎么在内存中存储?因此能够确定size≠0,测试代码以下:

class CEmptyClass{函数

public:
    CEmptyClass(){
        printf("CEmptyClass::CEmptyClass()\n");
    }测试

    ~CEmptyClass(){
        printf("CEmptyClass::~CEmptyClass()\n");
    }this

};spa


int _tmain(int argc, _TCHAR* argv[])
{
    CEmptyClass empty;指针

    printf("size = %d\n", sizeof(empty));调试

    return 0;
}对象

输出结果以下:内存

  • 对上述代码进行反汇编分析,反汇编代码以下:

CEmptyClass 构造函数的反汇编以下图:class

2.包含成员的类

  • 对象的内存是依次由虚函数表指针+成员变量组成(注意字节对齐的问题,在此不讲)。在此小节中不涉及虚函数表,样例代码以下:

class CTest{
public:
    CTest(){
        m_nVal = 1;
        m_chVal = '1';
        m_fVal = 1.0;
    }
    ~CTest(){
    }test

    // 得到值
    int GetVal(){
        return this->m_nVal;
    }

private:
    int m_nVal;
    char m_chVal;
    float m_fVal;
};

int _tmain(int argc, _TCHAR* argv[])
{
    CTest test;

    // 对象大小
    printf("size = %d\n", sizeof(test));

    // 调用成员函数
    int a = test.GetVal();

    return 0;
}

输出结果以下:

  • 经过VS2005来调试上述代码,跳转到反汇编代码来观察类内部的结构及C++类的逆向分析。

下是对CTest构造函数的反汇编分析以下:

  • 调用类成员函数的逆向分析

3.包含虚函数的类

二 多态类的逆向分析

相关文章
相关标签/搜索