签到

05月05日
尚未签到

共有回帖数 0

    小小小鱼儿

    等级:
    源起pigpag,  
    灵感来自MR同学换MJ战术,  
    并引用elmnd水帖留言(所以说水帖是宝, 大家要引起注意!)
    在此一并提出, 以做典型?????????
    入正题, 看代码:
    #include cstdio

    class Sheep{

    private:
     const char* say;

    public:
     Sheep() : say("What the hell is going on?"){};
    };

    class Cheat{

    public:
     const char* say;
     Cheat() : say("bird.......bird.......bird"){};
    };

    int main(){

     Sheep sp;
     printf("%sn", reinterpret_castCheat*(&sp)- say);

     return 0;
    }

    代码不难理解, 关键就是Cheat类这个大骗子是多么的出色,  
    其成员say只是个摆设(赋不赋值随意, 这里只是为了帮助理解.),  
    目的是欺骗编译器引用Sheep私有成员,  
    于是编译器傻忽忽的认为引用的只是Cheat.say, 通过编译,  
    但是无论怎么转换sp内的数值是不会变的,  
    于是在运行时以sp为偏移量, 最终得到是Sheep.say,  
    哦了~~~~欺骗成功.

    至于能否如法炮制般的调用私有成员函数,  
    这个有待进一步研究.

    楼主 2016-07-08 10:12 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知