参考连接: 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;
}