题目:
设有如下C++类
class A
{
int value;
public:
A(int n = 0) : value(n) {}
int GetValue()
{
return value;
}
};
请使用某种方式来在类的外部改变私有成员A::value的值。
程序员的可能做法:
class A
{
int value;
public:
A(int n = 0) : value(n) {}
int GetValue()
{
return value;
}
void SetValue(int n)
{
value = n;
}
};
void f()
{
A a;
a.SetValue(5);
}
黑客的可能做法:
void f()
{
A a;
*((int *)&a) = 5;
}
结论:
程序员习惯于遵循既有的限制来增加既有的东西。
黑客习惯于利用既有的东西来打破既有的限制。
设有如下C++类
class A
{
int value;
public:
A(int n = 0) : value(n) {}
int GetValue()
{
return value;
}
};
请使用某种方式来在类的外部改变私有成员A::value的值。
程序员的可能做法:
class A
{
int value;
public:
A(int n = 0) : value(n) {}
int GetValue()
{
return value;
}
void SetValue(int n)
{
value = n;
}
};
void f()
{
A a;
a.SetValue(5);
}
黑客的可能做法:
void f()
{
A a;
*((int *)&a) = 5;
}
结论:
程序员习惯于遵循既有的限制来增加既有的东西。
黑客习惯于利用既有的东西来打破既有的限制。
C++类私有成员值修改:程序员与黑客做法
博客围绕C++类展开,给出类A的定义,探讨在类外部改变私有成员A::value值的方式。介绍了程序员通过添加SetValue方法遵循限制修改,黑客则利用指针打破限制修改,最后得出程序员和黑客不同思维方式的结论。
1229

被折叠的 条评论
为什么被折叠?



