browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

程序员和黑客

Posted by on 2004 年 05 月 31 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

题目:

设有如下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;
}

结论:

程序员习惯于遵循既有的限制来增加既有的东西。

黑客习惯于利用既有的东西来打破既有的限制。

订阅本站

9 Comments

  • At 2006.01.17 20:34, 小梁 said:

    编译原理

    • At 2006.03.24 12:49, mayulei said:

      可以试试有没有办法,改变这个a的值!
      public class A{
      private int a;
      public int getA(){
      return a;
      }
      }
      可不是叫板啊。只是我C++水平实在水得很,不敢卖弄。Java多少熟悉一些,感觉可能因为封装机制的加强,安全性要好一些。
      可能是我孤陋寡闻,还没听说哪个Hack能看到Web目录里的WEB-INF下的东西,当然获得了磁盘读写权限除外。

      程序员习惯于遵循既有的限制来增加既有的东西。
      黑客习惯于利用既有的东西来打破既有的限制。

      这话我举双手赞成,我觉得自己的思维就已经形成定式了,麻木了。
      Hack永远是站在Programmer的脑袋上看待世界的,技术眼光永远比Programmer高。

      • At 2006.03.24 12:50, mayulei said:

        又看了title上面一眼,这篇可够老的了。

        • At 2006.11.05 21:23, zergling said:

          作者比较sb。原因:
          1 小技巧没有任何可炫耀的
          2 如果类有个虚函数,不同的编译器的行为可能就不同了。正常的做法不会有任何问题,这种做法就要sb了。
          建议:
          作者应该好好丛谭浩强的C语言开始,一步一步认真学习,而不是玩弄什么花哨

          • At 2006.11.06 09:00, 李马 said:

            To zergling:
            1. 你看到我是在炫耀吗?如果有,请指出。
            2. 如果类有个虚函数,我的做法也会不同。
            对建议的看法:谭版C中讲到虚函数了吗?
            请就事论事,不要谩骂,谢谢合作。

            • At 2007.07.04 11:42, mood said:

              有道理,有意思。。。
              “程序员习惯于遵循既有的限制来增加既有的东西。黑客习惯于利用既有的东西来打破既有的限制”

              作者只是举个小例子,来使上面的那句话理解起来更生动些。
              zergling ,指着这个简单的例子说事,有点无聊,有点肤浅。

              • At 2007.09.24 17:24, 对于C一巧不通 said:

                我想这种中级语言改变一个私有变量容易之至吧?

                • At 2008.04.30 15:56, zkkpkk said:

                  只要是对自己所用语言和的编译器很了解的都能做吧,MS不是程序员和黑客的问题。

                  • At 2008.11.29 00:35, yingzai621 said:

                    [quote=李马]To zergling:
                    1. 你看到我是在炫耀吗?如果有,请指出。
                    2. 如果类有个虚函数,我的做法也会不同。
                    对建议的看法:谭版C中讲到虚函数了吗?
                    请就事论事,不要谩骂,谢谢合作。[/quote]作者完全没有必要受到某些菜鸟的言论影响!

                    (Required)
                    (Required, will not be published)