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