共有回帖数 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 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知