类布局偏移指针例

来源:互联网 发布:播放视频软件 编辑:程序博客网 时间:2024/06/06 01:57

参考连接: http://topic.csdn.net/u/20080218/18/66e9642e-107c-45b4-93d5-73a23a9eac68.html

http://topic.csdn.net/u/20080223/18/2eb7abf5-8463-4308-a43f-d97a4ac46fba.html

1.

//?便提一下,那些好的特性是来利用的,不是来crack的
//private当然可以??
#include <iostream>
#include <cstdlib>
using namespace std;

class A
{
    virtual void foo(){cout << "private virtual function" << endl;}
   
public:
   
#ifdef __GNUG__
    A(){}   
#endif

    void ShowData()
    {
        cout << "data1=" << data1 << endl;
        cout << "data2=" << data2 << endl;
        cout << "data3=" << data3 << endl;
    }   
   
    int     data1;
    int     data2;
private:
    int     data3;
};   

int main()
{
    A a;

        int A::*    p0 = 0;
    int A::*    p1 = &A::data1;
    int A::*    p2 = &A::data2;

    printf("%p/n", p0);                       
    printf("%p/n", p1);
    printf("%p/n", p2);

#ifdef __GNUG__
    *(int*)((char*)&a + (int)p1) = 65535;   
    *(int*)((char*)&a + (int)p2) = 65535;   
#endif
    *(int*)((char*)&a + 0x0c) = 65535;   
    a.ShowData();
   
    ((void(*)())(**(int*(**))&a))();
   
    system("pause");
   
    return 0;
}

2.

#include <iostream>
#include <stdio.h>
using namespace std;
class MyClass
{
public:
    MyClass()
    {
    a = b = c = 0;
    }
    int a;
    int b;
    int c;
    void Display()
    {
    cout << a << endl << b << endl << c << endl;
    }
};
int main()
{
    int MyClass::*  pMCa =  &MyClass::a;
    int MyClass::* pMCb = &MyClass::b;
    int    MyClass::*  pMCc =  &MyClass::c;
    MyClass m_MC;
    m_MC.a = 100;
    m_MC.b = 101;
    m_MC.c = 102;
    cout << (*(int*)&pMCa) << endl << (*(int*)&pMCb) << endl <<(*(int*)&pMCc) << endl;
//    cout << offsetof(MyClass, a) << endl
//        << offsetof(MyClass, b) << endl
//        << offsetof(MyClass, c) << endl;

    printf("%p/n",pMCa);
    printf("%p/n",pMCb);
    printf("%p/n",pMCc);
    cout << m_MC.*pMCa << endl << m_MC.*pMCb << endl << m_MC.*pMCc << endl;
return 0;
}

原创粉丝点击